From 31f5ec27b5eece111f0839785d79ee283ac84eba Mon Sep 17 00:00:00 2001 From: Xing Zhang Date: Mon, 4 Mar 2024 21:45:52 -0800 Subject: [PATCH] update for release --- LICENSE | 2 +- MANIFEST.in | 7 +- README.md | 50 +- examples/cc/00-simple.py | 13 +- examples/gw/01-rpa.py | 21 +- examples/mp/00-simple.py | 13 +- pyscfad/version.py | 2 +- pyscfadlib/LICENSE | 21 + pyscfadlib/MANIFEST.in | 15 + pyscfadlib/README.md | 2 + pyscfadlib/pyproject.toml | 14 + pyscfadlib/pyscf.patch | 1 - pyscfadlib/pyscf.patch.2.3 | 38 - pyscfadlib/{ => pyscfadlib}/CMakeLists.txt | 49 +- pyscfadlib/{ => pyscfadlib}/__init__.py | 0 pyscfadlib/{ => pyscfadlib}/apply_patch.sh | 0 pyscfadlib/{ => pyscfadlib}/config.h.in | 0 pyscfadlib/pyscfadlib/copy_pyscf_lib.sh | 9 + pyscfadlib/pyscfadlib/gto/CMakeLists.txt | 26 + .../pyscfadlib/gto/autocode/auto_eval.cl | 15 + .../pyscfadlib/gto/autocode/auto_eval1.c | 1413 ++++ .../pyscfadlib/gto/autocode/derivator.cl | 409 ++ .../pyscfadlib/gto/autocode/gen-code.cl | 331 + pyscfadlib/pyscfadlib/gto/autocode/parser.cl | 312 + pyscfadlib/pyscfadlib/gto/autocode/utility.cl | 47 + pyscfadlib/pyscfadlib/gto/deriv1.c | 524 ++ pyscfadlib/pyscfadlib/gto/deriv2.c | 1108 +++ pyscfadlib/pyscfadlib/gto/fastexp.c | 107 + pyscfadlib/pyscfadlib/gto/fill_grids_int2c.c | 220 + pyscfadlib/pyscfadlib/gto/fill_int2c.c | 217 + pyscfadlib/pyscfadlib/gto/fill_int2e.c | 569 ++ pyscfadlib/pyscfadlib/gto/fill_nr_3c.c | 226 + pyscfadlib/pyscfadlib/gto/fill_r_3c.c | 205 + pyscfadlib/pyscfadlib/gto/fill_r_4c.c | 99 + pyscfadlib/pyscfadlib/gto/ft_ao.c | 1394 ++++ pyscfadlib/pyscfadlib/gto/ft_ao.h | 109 + pyscfadlib/pyscfadlib/gto/ft_ao_deriv.c | 295 + pyscfadlib/pyscfadlib/gto/grid_ao_drv.c | 496 ++ pyscfadlib/pyscfadlib/gto/grid_ao_drv.h | 101 + pyscfadlib/pyscfadlib/gto/gto.h | 18 + pyscfadlib/pyscfadlib/gto/nr_ecp.c | 6542 +++++++++++++++++ pyscfadlib/pyscfadlib/gto/nr_ecp.h | 46 + pyscfadlib/pyscfadlib/gto/nr_ecp_deriv.c | 1007 +++ pyscfadlib/pyscfadlib/gto/test/test_ecp.py | 730 ++ pyscfadlib/pyscfadlib/gto/test/test_gridao.py | 368 + pyscfadlib/{ => pyscfadlib}/lib.py | 0 pyscfadlib/{ => pyscfadlib}/libcint.patch | 0 pyscfadlib/{ => pyscfadlib}/libcint.patch.5.4 | 0 .../pyscfadlib/np_helper/CMakeLists.txt | 21 + pyscfadlib/pyscfadlib/np_helper/condense.c | 187 + pyscfadlib/pyscfadlib/np_helper/np_helper.c | 49 + pyscfadlib/pyscfadlib/np_helper/np_helper.h | 63 + pyscfadlib/pyscfadlib/np_helper/npdot.c | 244 + pyscfadlib/pyscfadlib/np_helper/omp_reduce.c | 166 + pyscfadlib/pyscfadlib/np_helper/pack_tril.c | 274 + pyscfadlib/pyscfadlib/np_helper/transpose.c | 155 + pyscfadlib/pyscfadlib/version.py | 1 + pyscfadlib/pyscfadlib/vhf/CMakeLists.txt | 25 + pyscfadlib/pyscfadlib/vhf/cvhf.h | 26 + pyscfadlib/pyscfadlib/vhf/fblas.h | 92 + pyscfadlib/pyscfadlib/vhf/fill_nr_s8.c | 138 + pyscfadlib/pyscfadlib/vhf/hessian_screen.c | 384 + pyscfadlib/pyscfadlib/vhf/nr_direct.c | 582 ++ pyscfadlib/pyscfadlib/vhf/nr_direct.h | 77 + pyscfadlib/pyscfadlib/vhf/nr_direct_dot.c | 3136 ++++++++ pyscfadlib/pyscfadlib/vhf/nr_incore.c | 806 ++ pyscfadlib/pyscfadlib/vhf/nr_sgx_direct.c | 563 ++ pyscfadlib/pyscfadlib/vhf/optimizer.c | 517 ++ pyscfadlib/pyscfadlib/vhf/optimizer.h | 65 + pyscfadlib/pyscfadlib/vhf/r_direct_dot.c | 646 ++ pyscfadlib/pyscfadlib/vhf/r_direct_dot.h | 99 + pyscfadlib/pyscfadlib/vhf/r_direct_o1.c | 322 + pyscfadlib/pyscfadlib/vhf/rah_direct_dot.c | 390 + pyscfadlib/pyscfadlib/vhf/rha_direct_dot.c | 386 + pyscfadlib/pyscfadlib/vhf/rkb_screen.c | 348 + .../pyscfadlib/vhf/test/test_nr_direct.py | 293 + pyscfadlib/pyscfadlib/vhf/time_rev.c | 652 ++ pyscfadlib/pyscfadlib/vhf/time_rev.h | 64 + .../{ => pyscfadlib}/vjp/CMakeLists.txt | 2 +- .../{ => pyscfadlib}/vjp/ao2mo/nr_ao2mo_vjp.c | 4 +- pyscfadlib/{ => pyscfadlib}/vjp/cc/ccsd_t.c | 2 +- pyscfadlib/{ => pyscfadlib}/vjp/cc/ccsd_t.h | 0 .../{ => pyscfadlib}/vjp/cc/ccsd_t_vjp.c | 4 +- .../{ => pyscfadlib}/vjp/cc/lno_ccsd_t.c | 2 +- .../{ => pyscfadlib}/vjp/cc/lno_ccsd_t_vjp.c | 4 +- .../{ => pyscfadlib}/vjp/gto/fill_int2c_vjp.c | 4 +- .../{ => pyscfadlib}/vjp/gto/fill_int2e_vjp.c | 56 +- .../{ => pyscfadlib}/vjp/gto/fill_nr_3c_vjp.c | 4 +- .../vjp/np_helper/pack_tril_vjp.c | 2 +- .../{ => pyscfadlib}/vjp/vhf/df_jk_vjp.c | 4 +- .../{ => pyscfadlib}/vjp/vhf/nr_incore_vjp.c | 0 pyscfadlib/setup.py | 72 + pyscfadlib/version.py | 1 - setup.py | 57 +- 94 files changed, 27967 insertions(+), 213 deletions(-) create mode 100644 pyscfadlib/LICENSE create mode 100644 pyscfadlib/MANIFEST.in create mode 100644 pyscfadlib/README.md create mode 100644 pyscfadlib/pyproject.toml delete mode 120000 pyscfadlib/pyscf.patch delete mode 100644 pyscfadlib/pyscf.patch.2.3 rename pyscfadlib/{ => pyscfadlib}/CMakeLists.txt (78%) rename pyscfadlib/{ => pyscfadlib}/__init__.py (100%) rename pyscfadlib/{ => pyscfadlib}/apply_patch.sh (100%) rename pyscfadlib/{ => pyscfadlib}/config.h.in (100%) create mode 100755 pyscfadlib/pyscfadlib/copy_pyscf_lib.sh create mode 100644 pyscfadlib/pyscfadlib/gto/CMakeLists.txt create mode 100644 pyscfadlib/pyscfadlib/gto/autocode/auto_eval.cl create mode 100644 pyscfadlib/pyscfadlib/gto/autocode/auto_eval1.c create mode 100644 pyscfadlib/pyscfadlib/gto/autocode/derivator.cl create mode 100644 pyscfadlib/pyscfadlib/gto/autocode/gen-code.cl create mode 100644 pyscfadlib/pyscfadlib/gto/autocode/parser.cl create mode 100644 pyscfadlib/pyscfadlib/gto/autocode/utility.cl create mode 100644 pyscfadlib/pyscfadlib/gto/deriv1.c create mode 100644 pyscfadlib/pyscfadlib/gto/deriv2.c create mode 100644 pyscfadlib/pyscfadlib/gto/fastexp.c create mode 100644 pyscfadlib/pyscfadlib/gto/fill_grids_int2c.c create mode 100644 pyscfadlib/pyscfadlib/gto/fill_int2c.c create mode 100644 pyscfadlib/pyscfadlib/gto/fill_int2e.c create mode 100644 pyscfadlib/pyscfadlib/gto/fill_nr_3c.c create mode 100644 pyscfadlib/pyscfadlib/gto/fill_r_3c.c create mode 100644 pyscfadlib/pyscfadlib/gto/fill_r_4c.c create mode 100644 pyscfadlib/pyscfadlib/gto/ft_ao.c create mode 100644 pyscfadlib/pyscfadlib/gto/ft_ao.h create mode 100644 pyscfadlib/pyscfadlib/gto/ft_ao_deriv.c create mode 100644 pyscfadlib/pyscfadlib/gto/grid_ao_drv.c create mode 100644 pyscfadlib/pyscfadlib/gto/grid_ao_drv.h create mode 100644 pyscfadlib/pyscfadlib/gto/gto.h create mode 100644 pyscfadlib/pyscfadlib/gto/nr_ecp.c create mode 100644 pyscfadlib/pyscfadlib/gto/nr_ecp.h create mode 100644 pyscfadlib/pyscfadlib/gto/nr_ecp_deriv.c create mode 100644 pyscfadlib/pyscfadlib/gto/test/test_ecp.py create mode 100644 pyscfadlib/pyscfadlib/gto/test/test_gridao.py rename pyscfadlib/{ => pyscfadlib}/lib.py (100%) rename pyscfadlib/{ => pyscfadlib}/libcint.patch (100%) rename pyscfadlib/{ => pyscfadlib}/libcint.patch.5.4 (100%) create mode 100644 pyscfadlib/pyscfadlib/np_helper/CMakeLists.txt create mode 100644 pyscfadlib/pyscfadlib/np_helper/condense.c create mode 100644 pyscfadlib/pyscfadlib/np_helper/np_helper.c create mode 100644 pyscfadlib/pyscfadlib/np_helper/np_helper.h create mode 100644 pyscfadlib/pyscfadlib/np_helper/npdot.c create mode 100644 pyscfadlib/pyscfadlib/np_helper/omp_reduce.c create mode 100644 pyscfadlib/pyscfadlib/np_helper/pack_tril.c create mode 100644 pyscfadlib/pyscfadlib/np_helper/transpose.c create mode 100644 pyscfadlib/pyscfadlib/version.py create mode 100644 pyscfadlib/pyscfadlib/vhf/CMakeLists.txt create mode 100644 pyscfadlib/pyscfadlib/vhf/cvhf.h create mode 100644 pyscfadlib/pyscfadlib/vhf/fblas.h create mode 100644 pyscfadlib/pyscfadlib/vhf/fill_nr_s8.c create mode 100644 pyscfadlib/pyscfadlib/vhf/hessian_screen.c create mode 100644 pyscfadlib/pyscfadlib/vhf/nr_direct.c create mode 100644 pyscfadlib/pyscfadlib/vhf/nr_direct.h create mode 100644 pyscfadlib/pyscfadlib/vhf/nr_direct_dot.c create mode 100644 pyscfadlib/pyscfadlib/vhf/nr_incore.c create mode 100644 pyscfadlib/pyscfadlib/vhf/nr_sgx_direct.c create mode 100644 pyscfadlib/pyscfadlib/vhf/optimizer.c create mode 100644 pyscfadlib/pyscfadlib/vhf/optimizer.h create mode 100644 pyscfadlib/pyscfadlib/vhf/r_direct_dot.c create mode 100644 pyscfadlib/pyscfadlib/vhf/r_direct_dot.h create mode 100644 pyscfadlib/pyscfadlib/vhf/r_direct_o1.c create mode 100644 pyscfadlib/pyscfadlib/vhf/rah_direct_dot.c create mode 100644 pyscfadlib/pyscfadlib/vhf/rha_direct_dot.c create mode 100644 pyscfadlib/pyscfadlib/vhf/rkb_screen.c create mode 100644 pyscfadlib/pyscfadlib/vhf/test/test_nr_direct.py create mode 100644 pyscfadlib/pyscfadlib/vhf/time_rev.c create mode 100644 pyscfadlib/pyscfadlib/vhf/time_rev.h rename pyscfadlib/{ => pyscfadlib}/vjp/CMakeLists.txt (93%) rename pyscfadlib/{ => pyscfadlib}/vjp/ao2mo/nr_ao2mo_vjp.c (99%) rename pyscfadlib/{ => pyscfadlib}/vjp/cc/ccsd_t.c (99%) rename pyscfadlib/{ => pyscfadlib}/vjp/cc/ccsd_t.h (100%) rename pyscfadlib/{ => pyscfadlib}/vjp/cc/ccsd_t_vjp.c (99%) rename pyscfadlib/{ => pyscfadlib}/vjp/cc/lno_ccsd_t.c (99%) rename pyscfadlib/{ => pyscfadlib}/vjp/cc/lno_ccsd_t_vjp.c (99%) rename pyscfadlib/{ => pyscfadlib}/vjp/gto/fill_int2c_vjp.c (99%) rename pyscfadlib/{ => pyscfadlib}/vjp/gto/fill_int2e_vjp.c (80%) rename pyscfadlib/{ => pyscfadlib}/vjp/gto/fill_nr_3c_vjp.c (99%) rename pyscfadlib/{ => pyscfadlib}/vjp/np_helper/pack_tril_vjp.c (97%) rename pyscfadlib/{ => pyscfadlib}/vjp/vhf/df_jk_vjp.c (97%) rename pyscfadlib/{ => pyscfadlib}/vjp/vhf/nr_incore_vjp.c (100%) create mode 100644 pyscfadlib/setup.py delete mode 100644 pyscfadlib/version.py diff --git a/LICENSE b/LICENSE index ed2b7643..e41a3cce 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021-2023 Xing Zhang +Copyright (c) 2021-2024 Xing Zhang Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/MANIFEST.in b/MANIFEST.in index 86e322e3..17bd7bc2 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,9 +1,6 @@ include MANIFEST.in include README.md setup.py LICENSE -prune pyscfad/lib/build +include pyscfad/geomopt/log.ini -include pyscfad/lib/*.so -include pyscfad/lib/*.dylib - -recursive-include pyscfad/lib *.c *.h +global-exclude *.py[cod] diff --git a/README.md b/README.md index 1ccb8414..d58c25ab 100644 --- a/README.md +++ b/README.md @@ -11,23 +11,11 @@ Installation --- * To install the latest release, use the following commands: ``` -# install cmake -pip install cmake - -# install OpenMP runtime used with clang -# On Linux: -sudo apt update -sudo apt install libomp-dev - -# On OSX: -brew install libomp - -# install pyscf -pip install 'pyscf @ git+https://github.com/fishjojo/pyscf.git@ad#egg=pyscf' -pip install 'pyscf-properties @ git+https://github.com/fishjojo/properties.git@ad' - # install pyscfad pip install pyscfad + +# install pyscfadlib, optional +pip install pyscfadlib ``` --- @@ -36,32 +24,6 @@ pip install pyscfad pip install git+https://github.com/fishjojo/pyscfad.git ``` -* The dependencies can be installed via a predefined conda environment -``` -conda env create -f environment.yml -conda activate pyscfad_env -``` - -* Alternatively, the dependencies can be installed from source -``` -pip install numpy scipy h5py -pip install jax jaxlib jaxopt - -# install pyscf -cd $HOME; git clone https://github.com/fishjojo/pyscf.git -cd pyscf; git checkout ad -cd pyscf/lib; mkdir build -cd build; cmake ..; make - -export PYTHONPATH=$HOME/pyscf:$PYTHONPATH -``` - ---- -* One can also run PySCFAD inside a docker container: -``` -docker pull fishjojo/pyscfad:latest -docker run -rm -t -i fishjojo/pyscfad:latest /bin/bash -``` Running examples ---------------- @@ -71,10 +33,4 @@ the following lines need to be added to the PySCF configure file($HOME/.pyscf\_conf.py) ``` pyscfad = True -pyscf_numpy_backend = 'jax' -pyscf_scipy_linalg_backend = 'pyscfad' -pyscf_scipy_backend = 'jax' -# The followings are optional -pyscfad_scf_implicit_diff = True -pyscfad_ccsd_implicit_diff = True ``` diff --git a/examples/cc/00-simple.py b/examples/cc/00-simple.py index 735e5a22..a0abdf23 100644 --- a/examples/cc/00-simple.py +++ b/examples/cc/00-simple.py @@ -1,5 +1,3 @@ -import jax -from pyscfad import gto, scf, cc ''' Reference nuclear gradient [[0.0, 0.0, -1.15101379e-01] @@ -8,10 +6,19 @@ Note that without implicit differentiation turned on, the gradient will be initial guess dependent. ''' +import jax +from pyscfad import gto, scf, cc +from pyscfad import config + +# implicit differentiation of SCF iterations +config.update('pyscfad_scf_implicit_diff', True) +# implicit differentiation of CC iterations +config.update('pyscfad_ccsd_implicit_diff', True) + mol = gto.Mole() mol.atom = 'H 0. 0. 0.; F 0. 0. 1.1' mol.basis = 'ccpvdz' -mol.verbose = 3 +mol.verbose = 4 mol.incore_anyway = True mol.build() diff --git a/examples/gw/01-rpa.py b/examples/gw/01-rpa.py index c0b78936..ee424957 100644 --- a/examples/gw/01-rpa.py +++ b/examples/gw/01-rpa.py @@ -1,12 +1,3 @@ -import jax -from pyscf import df as pyscf_df -from pyscfad import gto, dft, scf, df -from pyscfad.gw import rpa -from pyscfad import config - -config.update('pyscfad_scf_implicit_diff', True) -config.update('pyscfad_moleintor_opt', True) - ''' RPA e_tot, e_hf, e_corr = -76.26428191794197 -75.95645187758402 -0.30783004035795963 @@ -39,6 +30,18 @@ ''' +import jax +from pyscf import df as pyscf_df +from pyscfad import gto, dft, scf, df +from pyscfad.gw import rpa +from pyscfad import config + +config.update('pyscfad_scf_implicit_diff', True) +# Using optimized C implementation for gradients calculations. +# This requires the `pyscfadlib` package, which can be installed with +# `pip install pyscfadlib` +#config.update('pyscfad_moleintor_opt', True) + mol = gto.Mole() mol.verbose = 4 mol.atom = [ diff --git a/examples/mp/00-simple.py b/examples/mp/00-simple.py index 5fa3ec14..3f85eeaf 100644 --- a/examples/mp/00-simple.py +++ b/examples/mp/00-simple.py @@ -1,15 +1,18 @@ +""" +Analytic nuclear gradient for MP2 computed by auto-differentiation +""" import jax import pyscf from pyscfad import gto, scf, mp +from pyscfad import config -""" -Analytic nuclear gradient for MP2 computed by auto-differentiation -""" +# implicit differentiation of SCF iterations +config.update('pyscfad_scf_implicit_diff', True) mol = gto.Mole() -mol.atom = 'H 0 0 0; H 0 0 0.74' # in Angstrom +mol.atom = 'H 0 0 0; H 0 0 0.74' mol.basis = '631g' -mol.verbose=5 +mol.verbose=4 mol.build() def mp2(mol, dm0=None): diff --git a/pyscfad/version.py b/pyscfad/version.py index b3f47562..bbab0242 100644 --- a/pyscfad/version.py +++ b/pyscfad/version.py @@ -1 +1 @@ -__version__ = "0.1.2" +__version__ = "0.1.4" diff --git a/pyscfadlib/LICENSE b/pyscfadlib/LICENSE new file mode 100644 index 00000000..e41a3cce --- /dev/null +++ b/pyscfadlib/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021-2024 Xing Zhang + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/pyscfadlib/MANIFEST.in b/pyscfadlib/MANIFEST.in new file mode 100644 index 00000000..6270d5f7 --- /dev/null +++ b/pyscfadlib/MANIFEST.in @@ -0,0 +1,15 @@ +include MANIFEST.in +include README.md setup.py LICENSE + +recursive-include pyscfadlib/thirdparty *.so +include pyscfadlib/*.so pyscfadlib/config.h.in + +# macos dynamic libraries +include pyscfadlib/*.dylib +include pyscfadlib/thirdparty/lib*/*.dylib + +# source code +recursive-include pyscfadlib *.c *.h CMakeLists.txt + +global-exclude *.py[cod] +prune pyscfadlib/build diff --git a/pyscfadlib/README.md b/pyscfadlib/README.md new file mode 100644 index 00000000..4b6891f0 --- /dev/null +++ b/pyscfadlib/README.md @@ -0,0 +1,2 @@ +pyscfadlib is the support library for PySCFAD. +It contains most of the C optimized code for derivative calculations. diff --git a/pyscfadlib/pyproject.toml b/pyscfadlib/pyproject.toml new file mode 100644 index 00000000..afb9a001 --- /dev/null +++ b/pyscfadlib/pyproject.toml @@ -0,0 +1,14 @@ +[tool.cibuildwheel] +build-verbosity = 1 +container-engine = "docker" +manylinux-x86_64-image = "manylinux2014" +skip = ["pp*", "*musllinux*"] + +[tool.cibuildwheel.linux] +archs = ["x86_64"] +before-all = [ + "ulimit -n 1024", + "ln -s libquadmath.so.0 /usr/lib64/libquadmath.so", + "yum install -y openblas-devel.x86_64", +] +repair-wheel-command = "auditwheel -v repair -w {dest_dir} {wheel}" diff --git a/pyscfadlib/pyscf.patch b/pyscfadlib/pyscf.patch deleted file mode 120000 index c966a2cd..00000000 --- a/pyscfadlib/pyscf.patch +++ /dev/null @@ -1 +0,0 @@ -pyscf.patch.2.3 \ No newline at end of file diff --git a/pyscfadlib/pyscf.patch.2.3 b/pyscfadlib/pyscf.patch.2.3 deleted file mode 100644 index 30bcde86..00000000 --- a/pyscfadlib/pyscf.patch.2.3 +++ /dev/null @@ -1,38 +0,0 @@ -diff --git a/pyscf/lib/CMakeLists.txt b/pyscf/lib/CMakeLists.txt -index e44de0a..892f74f 100644 ---- a/pyscf/lib/CMakeLists.txt -+++ b/pyscf/lib/CMakeLists.txt -@@ -12,7 +12,7 @@ - # See the License for the specific language governing permissions and - # limitations under the License. - --cmake_minimum_required (VERSION 3.5) -+cmake_minimum_required (VERSION 3.18) - project (pyscf) - - if (NOT CMAKE_BUILD_TYPE) -@@ -238,3 +238,24 @@ endif() # DISABLE_DFT - if(EXISTS "${PROJECT_SOURCE_DIR}/cmake.user.inc") - include("${PROJECT_SOURCE_DIR}/cmake.user.inc") - endif() -+ -+#install library -+install(TARGETS np_helper DESTINATION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}" COMPONENT "lib") -+install(TARGETS cgto DESTINATION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}" COMPONENT "lib") -+#install(TARGETS cvhf DESTINATION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}" COMPONENT "lib") -+#install(TARGETS ao2mo DESTINATION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}" COMPONENT "lib") -+#install(TARGETS fci DESTINATION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}" COMPONENT "lib") -+#install(TARGETS mcscf DESTINATION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}" COMPONENT "lib") -+#install(TARGETS cc DESTINATION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}" COMPONENT "lib") -+#install(TARGETS ri DESTINATION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}" COMPONENT "lib") -+#install(TARGETS pbc DESTINATION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}" COMPONENT "lib") -+#install(TARGETS agf2 DESTINATION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}" COMPONENT "lib") -+#if(NOT DISABLE_DFT) -+# install(TARGETS dft DESTINATION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}" COMPONENT "lib") -+#endif() -+ -+install(DIRECTORY "${PROJECT_SOURCE_DIR}/" -+ DESTINATION ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR} COMPONENT "dev" -+ FILES_MATCHING -+ PATTERN "*.h" -+) diff --git a/pyscfadlib/CMakeLists.txt b/pyscfadlib/pyscfadlib/CMakeLists.txt similarity index 78% rename from pyscfadlib/CMakeLists.txt rename to pyscfadlib/pyscfadlib/CMakeLists.txt index 7c1ceb38..8a06f392 100644 --- a/pyscfadlib/CMakeLists.txt +++ b/pyscfadlib/pyscfadlib/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required (VERSION 3.18) +cmake_minimum_required (VERSION 3.5) project (pyscfadlib) if (NOT CMAKE_BUILD_TYPE) @@ -39,6 +39,18 @@ endif() set(CMAKE_INCLUDE_CURRENT_DIR ON) +if (NOT BLAS_LIBRARIES) +#enable_language(Fortran) +find_package(BLAS) +check_function_exists(ffsll HAVE_FFS) +endif() + +if (NOT BLAS_LIBRARIES) + message(FATAL_ERROR "A required library with BLAS API not found.") +else() + message(STATUS "BLAS libraries: ${BLAS_LIBRARIES}") +endif() + option(ENABLE_OPENMP "Compiling C extensions with openmp" ON) set(OPENMP_C_PROPERTIES "") if(ENABLE_OPENMP) @@ -72,6 +84,9 @@ else () set(CMAKE_INSTALL_RPATH "\$ORIGIN:\$ORIGIN/thirdparty/lib:\$ORIGIN/thirdparty/lib64") endif() +add_subdirectory(np_helper) +add_subdirectory(gto) +add_subdirectory(vhf) add_subdirectory(vjp) set(C_LINK_TEMPLATE " -o ") @@ -101,37 +116,9 @@ if(BUILD_LIBCINT) -DCMAKE_INSTALL_PREFIX:PATH= -DCMAKE_INSTALL_LIBDIR:PATH=lib -DCMAKE_C_COMPILER:STRING=${CMAKE_C_COMPILER} + -DBLAS_LIBRARIES:STRING=${BLAS_LIBRARIES} -DCMAKE_C_CREATE_SHARED_LIBRARY:STRING=${C_LINK_TEMPLATE} -DBUILD_MARCH_NATIVE:STRING=${BUILD_MARCH_NATIVE} ) - add_dependencies(cgto_vjp libcint) -endif() - -option(BUILD_PYSCF_LIB "Building PySCF library" ON) - -set(patch_pyscf ${PROJECT_SOURCE_DIR}/apply_patch.sh pyscf.patch) - -if(BUILD_PYSCF_LIB) - ExternalProject_Add(pyscf - GIT_REPOSITORY https://github.com/pyscf/pyscf.git - GIT_TAG v2.3.0 - PATCH_COMMAND ${patch_pyscf} - SOURCE_SUBDIR "pyscf/lib" - PREFIX ${PROJECT_BINARY_DIR}/thirdparty - INSTALL_DIR ${PROJECT_SOURCE_DIR}/thirdparty - CMAKE_ARGS - -DCMAKE_INSTALL_PREFIX:PATH= - -DCMAKE_INSTALL_LIBDIR:PATH=lib - -DCMAKE_INSTALL_INCLUDEDIR:PATH=include/pyscf - -DCMAKE_C_COMPILER:STRING=${CMAKE_C_COMPILER} - -DBLA_VENDOR:STRING=${BLA_VENDOR} - -DENABLE_LIBXC:STRING=OFF - -DENABLE_XCFUN:STRING=OFF - #-DBUILD_LIBCINT:STRING=OFF - ) - add_dependencies(cgto_vjp pyscf) - add_dependencies(np_helper_vjp pyscf) - add_dependencies(ao2mo_vjp pyscf) - add_dependencies(cvhf_vjp pyscf) - add_dependencies(cc_vjp pyscf) + add_dependencies(cgto libcint) endif() diff --git a/pyscfadlib/__init__.py b/pyscfadlib/pyscfadlib/__init__.py similarity index 100% rename from pyscfadlib/__init__.py rename to pyscfadlib/pyscfadlib/__init__.py diff --git a/pyscfadlib/apply_patch.sh b/pyscfadlib/pyscfadlib/apply_patch.sh similarity index 100% rename from pyscfadlib/apply_patch.sh rename to pyscfadlib/pyscfadlib/apply_patch.sh diff --git a/pyscfadlib/config.h.in b/pyscfadlib/pyscfadlib/config.h.in similarity index 100% rename from pyscfadlib/config.h.in rename to pyscfadlib/pyscfadlib/config.h.in diff --git a/pyscfadlib/pyscfadlib/copy_pyscf_lib.sh b/pyscfadlib/pyscfadlib/copy_pyscf_lib.sh new file mode 100755 index 00000000..6597ca9a --- /dev/null +++ b/pyscfadlib/pyscfadlib/copy_pyscf_lib.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +git clone https://github.com/pyscf/pyscf.git +cd pyscf +git checkout 'v2.3.0' + +cp -rf pyscf/lib/vhf ../vhf +cp -rf pyscf/lib/gto ../gto +cp -rf pyscf/lib/np_helper ../np_helper diff --git a/pyscfadlib/pyscfadlib/gto/CMakeLists.txt b/pyscfadlib/pyscfadlib/gto/CMakeLists.txt new file mode 100644 index 00000000..08f290f5 --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/CMakeLists.txt @@ -0,0 +1,26 @@ +# Copyright 2014-2018 The PySCF Developers. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +add_library(cgto SHARED + fill_int2c.c fill_nr_3c.c fill_r_3c.c fill_int2e.c fill_r_4c.c + ft_ao.c ft_ao_deriv.c fill_grids_int2c.c + grid_ao_drv.c deriv1.c deriv2.c nr_ecp.c nr_ecp_deriv.c + autocode/auto_eval1.c) +add_dependencies(cgto np_helper) + +set_target_properties(cgto PROPERTIES + LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}) + +target_link_libraries(cgto cintad np_helper ${BLAS_LIBRARIES} ${OPENMP_C_PROPERTIES}) + diff --git a/pyscfadlib/pyscfadlib/gto/autocode/auto_eval.cl b/pyscfadlib/pyscfadlib/gto/autocode/auto_eval.cl new file mode 100644 index 00000000..f08857cd --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/autocode/auto_eval.cl @@ -0,0 +1,15 @@ +#!/usr/bin/env clisp +;;;; Copyright (C) 2014-2018 Qiming Sun + +(load "gen-code.cl") + +(gen-eval "auto_eval1.c" + '("GTOval_ig" (#C(0 1) g)) + '("GTOval_ipig" (#C(0 1) nabla g)) + '("GTOval_sp" (sigma dot p)) + '("GTOval_ipsp" (nabla sigma dot p)) + '("GTOval_ipipsp" (nabla nabla sigma dot p)) + '("GTOval_iprc" (nabla rc)) + '("GTOval_ipr" (nabla r)) +) + diff --git a/pyscfadlib/pyscfadlib/gto/autocode/auto_eval1.c b/pyscfadlib/pyscfadlib/gto/autocode/auto_eval1.c new file mode 100644 index 00000000..5ca47c41 --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/autocode/auto_eval1.c @@ -0,0 +1,1413 @@ +/* + * Copyright (C) 2014- Qiming Sun + * Description: code generated by gen-code.cl + */ +#include +#include "gto/grid_ao_drv.h" +/* #C(0 1) G |GTO> */ +static void shell_eval_GTOval_ig(double *cgto, double *ri, double *exps, +double *coord, double *alpha, double *coeff, double *env, +int l, int np, int nc, size_t nao, size_t ngrids, size_t bgrids) +{ +const size_t degen = (l+1)*(l+2)/2; +const size_t bgrids0 = (bgrids >= SIMDD) ? (bgrids+1-SIMDD) : 0; +int lx, ly, lz; +size_t i, j, j1, k, l1, n; +double e; +double *pgto; +double *gridx = coord; +double *gridy = coord+BLKSIZE; +double *gridz = coord+BLKSIZE*2; +double fx0[SIMDD*(ANG_MAX+2)*2]; +double fy0[SIMDD*(ANG_MAX+2)*2]; +double fz0[SIMDD*(ANG_MAX+2)*2]; +double *fx1 = fx0 + SIMDD*(ANG_MAX+2); +double *fy1 = fy0 + SIMDD*(ANG_MAX+2); +double *fz1 = fz0 + SIMDD*(ANG_MAX+2); +double buf[SIMDD*nc*3]; +double s[SIMDD*3]; +double *gto0 = cgto; +double *gto1 = cgto + nao*ngrids*1; +double *gto2 = cgto + nao*ngrids*2; +double c[3]; +c[0] = 1 * (-ri[0]); +c[1] = 1 * (-ri[1]); +c[2] = 1 * (-ri[2]); + +for (j = 0; j < 3; j++) { + pgto = cgto + j*nao*ngrids; + for (n = 0; n < degen*nc; n++) { + for (i = 0; i < bgrids; i++) { + pgto[n*ngrids+i] = 0; + } } +} +for (i = 0; i < bgrids0; i+=SIMDD) { + for (k = 0; k < np; k++) { + if (_nonzero_in(exps+k*BLKSIZE+i, SIMDD)) { +for (n = 0; n < SIMDD; n++) { + fx0[n] = 1; + fy0[n] = 1; + fz0[n] = 1; +} +for (lx = 1; lx <= l+1; lx++) { +for (n = 0; n < SIMDD; n++) { + fx0[lx*SIMDD+n] = fx0[(lx-1)*SIMDD+n] * gridx[i+n]; + fy0[lx*SIMDD+n] = fy0[(lx-1)*SIMDD+n] * gridy[i+n]; + fz0[lx*SIMDD+n] = fz0[(lx-1)*SIMDD+n] * gridz[i+n]; +} } +GTO_R0I(1, 0, l+0); +for (lx = l, l1 = 0; lx >= 0; lx--) { + for (ly = l - lx; ly >= 0; ly--, l1++) { + lz = l - lx - ly; + for (n = 0; n < SIMDD; n++) { + e = exps[k*BLKSIZE+i+n]; +s[0*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[1*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[2*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + } + for (n = 0; n < SIMDD; n++) { +buf[0*SIMDD+n] = + (-1*c[1]*s[2*SIMDD+n]) + c[2]*s[1*SIMDD+n]; +buf[1*SIMDD+n] = + (-1*c[2]*s[0*SIMDD+n]) + c[0]*s[2*SIMDD+n]; +buf[2*SIMDD+n] = + (-1*c[0]*s[1*SIMDD+n]) + c[1]*s[0*SIMDD+n]; + } + for (j = 0, j1 = l1; j < nc; j++, j1+=degen) { +#pragma GCC ivdep + for (n = 0; n < SIMDD; n++) { +gto0[j1*ngrids+i+n] += buf[0*SIMDD+n] * coeff[j*np+k]; +gto1[j1*ngrids+i+n] += buf[1*SIMDD+n] * coeff[j*np+k]; +gto2[j1*ngrids+i+n] += buf[2*SIMDD+n] * coeff[j*np+k]; +} } } } } } } + +if (i < bgrids) { + for (k = 0; k < np; k++) { + if (_nonzero_in(exps+k*BLKSIZE+i, bgrids-i)) { +for (n = 0; n < SIMDD; n++) { + fx0[n] = 1; + fy0[n] = 1; + fz0[n] = 1; +} +for (lx = 1; lx <= l+1; lx++) { +for (n = 0; n < SIMDD; n++) { + fx0[lx*SIMDD+n] = fx0[(lx-1)*SIMDD+n] * gridx[i+n]; + fy0[lx*SIMDD+n] = fy0[(lx-1)*SIMDD+n] * gridy[i+n]; + fz0[lx*SIMDD+n] = fz0[(lx-1)*SIMDD+n] * gridz[i+n]; +} } +GTO_R0I(1, 0, l+0); +for (lx = l, l1 = 0; lx >= 0; lx--) { + for (ly = l - lx; ly >= 0; ly--, l1++) { + lz = l - lx - ly; + for (n = 0; n < SIMDD; n++) { + e = exps[k*BLKSIZE+i+n]; +s[0*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[1*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[2*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + } + for (n = 0; n < SIMDD; n++) { +buf[0*SIMDD+n] = + (-1*c[1]*s[2*SIMDD+n]) + c[2]*s[1*SIMDD+n]; +buf[1*SIMDD+n] = + (-1*c[2]*s[0*SIMDD+n]) + c[0]*s[2*SIMDD+n]; +buf[2*SIMDD+n] = + (-1*c[0]*s[1*SIMDD+n]) + c[1]*s[0*SIMDD+n]; + } + for (j = 0, j1 = l1; j < nc; j++, j1+=degen) { + for (n = 0; n < bgrids-i; n++) { +gto0[j1*ngrids+i+n] += buf[0*SIMDD+n] * coeff[j*np+k]; +gto1[j1*ngrids+i+n] += buf[1*SIMDD+n] * coeff[j*np+k]; +gto2[j1*ngrids+i+n] += buf[2*SIMDD+n] * coeff[j*np+k]; +} } } } } } } +} +void GTOval_ig_cart(int ngrids, int *shls_slice, int *ao_loc, +double *ao, double *coord, uint8_t *non0table, +int *atm, int natm, int *bas, int nbas, double *env) +{ +int param[] = {1, 3}; +GTOeval_cart_drv(shell_eval_GTOval_ig, GTOprim_exp, 0.5, +ngrids, param, shls_slice, ao_loc, ao, coord, non0table, +atm, natm, bas, nbas, env); +} +void GTOval_ig_sph(int ngrids, int *shls_slice, int *ao_loc, +double *ao, double *coord, uint8_t *non0table, +int *atm, int natm, int *bas, int nbas, double *env) +{ +int param[] = {1, 3}; +GTOeval_sph_drv(shell_eval_GTOval_ig, GTOprim_exp, 0.5, +ngrids, param, shls_slice, ao_loc, ao, coord, non0table, +atm, natm, bas, nbas, env); +} +void GTOval_ig_spinor(int ngrids, int *shls_slice, int *ao_loc, +double complex *ao, double *coord, uint8_t *non0table, +int *atm, int natm, int *bas, int nbas, double *env) +{ +int param[] = {1, 3}; +GTOeval_spinor_drv(shell_eval_GTOval_ig, GTOprim_exp, CINTc2s_iket_spinor_sf1, 0.5, +ngrids, param, shls_slice, ao_loc, ao, coord, non0table, atm, natm, bas, nbas, env); +} +/* #C(0 1) NABLA G |GTO> */ +static void shell_eval_GTOval_ipig(double *cgto, double *ri, double *exps, +double *coord, double *alpha, double *coeff, double *env, +int l, int np, int nc, size_t nao, size_t ngrids, size_t bgrids) +{ +const size_t degen = (l+1)*(l+2)/2; +const size_t bgrids0 = (bgrids >= SIMDD) ? (bgrids+1-SIMDD) : 0; +int lx, ly, lz; +size_t i, j, j1, k, l1, n; +double e; +double *pgto; +double *gridx = coord; +double *gridy = coord+BLKSIZE; +double *gridz = coord+BLKSIZE*2; +double fx0[SIMDD*(ANG_MAX+3)*4]; +double fy0[SIMDD*(ANG_MAX+3)*4]; +double fz0[SIMDD*(ANG_MAX+3)*4]; +double *fx1 = fx0 + SIMDD*(ANG_MAX+3); +double *fy1 = fy0 + SIMDD*(ANG_MAX+3); +double *fz1 = fz0 + SIMDD*(ANG_MAX+3); +double *fx2 = fx1 + SIMDD*(ANG_MAX+3); +double *fy2 = fy1 + SIMDD*(ANG_MAX+3); +double *fz2 = fz1 + SIMDD*(ANG_MAX+3); +double *fx3 = fx2 + SIMDD*(ANG_MAX+3); +double *fy3 = fy2 + SIMDD*(ANG_MAX+3); +double *fz3 = fz2 + SIMDD*(ANG_MAX+3); +double buf[SIMDD*nc*9]; +double s[SIMDD*9]; +double *gto0 = cgto; +double *gto1 = cgto + nao*ngrids*1; +double *gto2 = cgto + nao*ngrids*2; +double *gto3 = cgto + nao*ngrids*3; +double *gto4 = cgto + nao*ngrids*4; +double *gto5 = cgto + nao*ngrids*5; +double *gto6 = cgto + nao*ngrids*6; +double *gto7 = cgto + nao*ngrids*7; +double *gto8 = cgto + nao*ngrids*8; +double c[3]; +c[0] = 1 * (-ri[0]); +c[1] = 1 * (-ri[1]); +c[2] = 1 * (-ri[2]); + +for (j = 0; j < 9; j++) { + pgto = cgto + j*nao*ngrids; + for (n = 0; n < degen*nc; n++) { + for (i = 0; i < bgrids; i++) { + pgto[n*ngrids+i] = 0; + } } +} +for (i = 0; i < bgrids0; i+=SIMDD) { + for (k = 0; k < np; k++) { + if (_nonzero_in(exps+k*BLKSIZE+i, SIMDD)) { +for (n = 0; n < SIMDD; n++) { + fx0[n] = 1; + fy0[n] = 1; + fz0[n] = 1; +} +for (lx = 1; lx <= l+2; lx++) { +for (n = 0; n < SIMDD; n++) { + fx0[lx*SIMDD+n] = fx0[(lx-1)*SIMDD+n] * gridx[i+n]; + fy0[lx*SIMDD+n] = fy0[(lx-1)*SIMDD+n] * gridy[i+n]; + fz0[lx*SIMDD+n] = fz0[(lx-1)*SIMDD+n] * gridz[i+n]; +} } +GTO_R0I(1, 0, l+0); +GTO_D_I(2, 0, l+1); +GTO_R0I(3, 2, l+0); +for (lx = l, l1 = 0; lx >= 0; lx--) { + for (ly = l - lx; ly >= 0; ly--, l1++) { + lz = l - lx - ly; + for (n = 0; n < SIMDD; n++) { + e = exps[k*BLKSIZE+i+n]; +s[0*SIMDD+n] = e * fx3[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[1*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[2*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; +s[3*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[4*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy3[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[5*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz1[lz*SIMDD+n]; +s[6*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz2[lz*SIMDD+n]; +s[7*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz2[lz*SIMDD+n]; +s[8*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz3[lz*SIMDD+n]; + } + for (n = 0; n < SIMDD; n++) { +buf[0*SIMDD+n] = + (-1*c[1]*s[2*SIMDD+n]) + c[2]*s[1*SIMDD+n]; +buf[1*SIMDD+n] = + (-1*c[2]*s[0*SIMDD+n]) + c[0]*s[2*SIMDD+n]; +buf[2*SIMDD+n] = + (-1*c[0]*s[1*SIMDD+n]) + c[1]*s[0*SIMDD+n]; +buf[3*SIMDD+n] = + (-1*c[1]*s[5*SIMDD+n]) + c[2]*s[4*SIMDD+n]; +buf[4*SIMDD+n] = + (-1*c[2]*s[3*SIMDD+n]) + c[0]*s[5*SIMDD+n]; +buf[5*SIMDD+n] = + (-1*c[0]*s[4*SIMDD+n]) + c[1]*s[3*SIMDD+n]; +buf[6*SIMDD+n] = + (-1*c[1]*s[8*SIMDD+n]) + c[2]*s[7*SIMDD+n]; +buf[7*SIMDD+n] = + (-1*c[2]*s[6*SIMDD+n]) + c[0]*s[8*SIMDD+n]; +buf[8*SIMDD+n] = + (-1*c[0]*s[7*SIMDD+n]) + c[1]*s[6*SIMDD+n]; + } + for (j = 0, j1 = l1; j < nc; j++, j1+=degen) { +#pragma GCC ivdep + for (n = 0; n < SIMDD; n++) { +gto0[j1*ngrids+i+n] += buf[0*SIMDD+n] * coeff[j*np+k]; +gto1[j1*ngrids+i+n] += buf[1*SIMDD+n] * coeff[j*np+k]; +gto2[j1*ngrids+i+n] += buf[2*SIMDD+n] * coeff[j*np+k]; +gto3[j1*ngrids+i+n] += buf[3*SIMDD+n] * coeff[j*np+k]; +gto4[j1*ngrids+i+n] += buf[4*SIMDD+n] * coeff[j*np+k]; +gto5[j1*ngrids+i+n] += buf[5*SIMDD+n] * coeff[j*np+k]; +gto6[j1*ngrids+i+n] += buf[6*SIMDD+n] * coeff[j*np+k]; +gto7[j1*ngrids+i+n] += buf[7*SIMDD+n] * coeff[j*np+k]; +gto8[j1*ngrids+i+n] += buf[8*SIMDD+n] * coeff[j*np+k]; +} } } } } } } + +if (i < bgrids) { + for (k = 0; k < np; k++) { + if (_nonzero_in(exps+k*BLKSIZE+i, bgrids-i)) { +for (n = 0; n < SIMDD; n++) { + fx0[n] = 1; + fy0[n] = 1; + fz0[n] = 1; +} +for (lx = 1; lx <= l+2; lx++) { +for (n = 0; n < SIMDD; n++) { + fx0[lx*SIMDD+n] = fx0[(lx-1)*SIMDD+n] * gridx[i+n]; + fy0[lx*SIMDD+n] = fy0[(lx-1)*SIMDD+n] * gridy[i+n]; + fz0[lx*SIMDD+n] = fz0[(lx-1)*SIMDD+n] * gridz[i+n]; +} } +GTO_R0I(1, 0, l+0); +GTO_D_I(2, 0, l+1); +GTO_R0I(3, 2, l+0); +for (lx = l, l1 = 0; lx >= 0; lx--) { + for (ly = l - lx; ly >= 0; ly--, l1++) { + lz = l - lx - ly; + for (n = 0; n < SIMDD; n++) { + e = exps[k*BLKSIZE+i+n]; +s[0*SIMDD+n] = e * fx3[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[1*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[2*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; +s[3*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[4*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy3[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[5*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz1[lz*SIMDD+n]; +s[6*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz2[lz*SIMDD+n]; +s[7*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz2[lz*SIMDD+n]; +s[8*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz3[lz*SIMDD+n]; + } + for (n = 0; n < SIMDD; n++) { +buf[0*SIMDD+n] = + (-1*c[1]*s[2*SIMDD+n]) + c[2]*s[1*SIMDD+n]; +buf[1*SIMDD+n] = + (-1*c[2]*s[0*SIMDD+n]) + c[0]*s[2*SIMDD+n]; +buf[2*SIMDD+n] = + (-1*c[0]*s[1*SIMDD+n]) + c[1]*s[0*SIMDD+n]; +buf[3*SIMDD+n] = + (-1*c[1]*s[5*SIMDD+n]) + c[2]*s[4*SIMDD+n]; +buf[4*SIMDD+n] = + (-1*c[2]*s[3*SIMDD+n]) + c[0]*s[5*SIMDD+n]; +buf[5*SIMDD+n] = + (-1*c[0]*s[4*SIMDD+n]) + c[1]*s[3*SIMDD+n]; +buf[6*SIMDD+n] = + (-1*c[1]*s[8*SIMDD+n]) + c[2]*s[7*SIMDD+n]; +buf[7*SIMDD+n] = + (-1*c[2]*s[6*SIMDD+n]) + c[0]*s[8*SIMDD+n]; +buf[8*SIMDD+n] = + (-1*c[0]*s[7*SIMDD+n]) + c[1]*s[6*SIMDD+n]; + } + for (j = 0, j1 = l1; j < nc; j++, j1+=degen) { + for (n = 0; n < bgrids-i; n++) { +gto0[j1*ngrids+i+n] += buf[0*SIMDD+n] * coeff[j*np+k]; +gto1[j1*ngrids+i+n] += buf[1*SIMDD+n] * coeff[j*np+k]; +gto2[j1*ngrids+i+n] += buf[2*SIMDD+n] * coeff[j*np+k]; +gto3[j1*ngrids+i+n] += buf[3*SIMDD+n] * coeff[j*np+k]; +gto4[j1*ngrids+i+n] += buf[4*SIMDD+n] * coeff[j*np+k]; +gto5[j1*ngrids+i+n] += buf[5*SIMDD+n] * coeff[j*np+k]; +gto6[j1*ngrids+i+n] += buf[6*SIMDD+n] * coeff[j*np+k]; +gto7[j1*ngrids+i+n] += buf[7*SIMDD+n] * coeff[j*np+k]; +gto8[j1*ngrids+i+n] += buf[8*SIMDD+n] * coeff[j*np+k]; +} } } } } } } +} +void GTOval_ipig_cart(int ngrids, int *shls_slice, int *ao_loc, +double *ao, double *coord, uint8_t *non0table, +int *atm, int natm, int *bas, int nbas, double *env) +{ +int param[] = {1, 9}; +GTOeval_cart_drv(shell_eval_GTOval_ipig, GTOprim_exp, 0.5, +ngrids, param, shls_slice, ao_loc, ao, coord, non0table, +atm, natm, bas, nbas, env); +} +void GTOval_ipig_sph(int ngrids, int *shls_slice, int *ao_loc, +double *ao, double *coord, uint8_t *non0table, +int *atm, int natm, int *bas, int nbas, double *env) +{ +int param[] = {1, 9}; +GTOeval_sph_drv(shell_eval_GTOval_ipig, GTOprim_exp, 0.5, +ngrids, param, shls_slice, ao_loc, ao, coord, non0table, +atm, natm, bas, nbas, env); +} +void GTOval_ipig_spinor(int ngrids, int *shls_slice, int *ao_loc, +double complex *ao, double *coord, uint8_t *non0table, +int *atm, int natm, int *bas, int nbas, double *env) +{ +int param[] = {1, 9}; +GTOeval_spinor_drv(shell_eval_GTOval_ipig, GTOprim_exp, CINTc2s_iket_spinor_sf1, 0.5, +ngrids, param, shls_slice, ao_loc, ao, coord, non0table, atm, natm, bas, nbas, env); +} +/* SIGMA DOT P |GTO> */ +static void shell_eval_GTOval_sp(double *cgto, double *ri, double *exps, +double *coord, double *alpha, double *coeff, double *env, +int l, int np, int nc, size_t nao, size_t ngrids, size_t bgrids) +{ +const size_t degen = (l+1)*(l+2)/2; +const size_t bgrids0 = (bgrids >= SIMDD) ? (bgrids+1-SIMDD) : 0; +int lx, ly, lz; +size_t i, j, j1, k, l1, n; +double e; +double *pgto; +double *gridx = coord; +double *gridy = coord+BLKSIZE; +double *gridz = coord+BLKSIZE*2; +double fx0[SIMDD*(ANG_MAX+2)*2]; +double fy0[SIMDD*(ANG_MAX+2)*2]; +double fz0[SIMDD*(ANG_MAX+2)*2]; +double *fx1 = fx0 + SIMDD*(ANG_MAX+2); +double *fy1 = fy0 + SIMDD*(ANG_MAX+2); +double *fz1 = fz0 + SIMDD*(ANG_MAX+2); +double buf[SIMDD*nc*4]; +double s[SIMDD*3]; +double *gto0 = cgto; +double *gto1 = cgto + nao*ngrids*1; +double *gto2 = cgto + nao*ngrids*2; +double *gto3 = cgto + nao*ngrids*3; + +for (j = 0; j < 4; j++) { + pgto = cgto + j*nao*ngrids; + for (n = 0; n < degen*nc; n++) { + for (i = 0; i < bgrids; i++) { + pgto[n*ngrids+i] = 0; + } } +} +for (i = 0; i < bgrids0; i+=SIMDD) { + for (k = 0; k < np; k++) { + if (_nonzero_in(exps+k*BLKSIZE+i, SIMDD)) { +for (n = 0; n < SIMDD; n++) { + fx0[n] = 1; + fy0[n] = 1; + fz0[n] = 1; +} +for (lx = 1; lx <= l+1; lx++) { +for (n = 0; n < SIMDD; n++) { + fx0[lx*SIMDD+n] = fx0[(lx-1)*SIMDD+n] * gridx[i+n]; + fy0[lx*SIMDD+n] = fy0[(lx-1)*SIMDD+n] * gridy[i+n]; + fz0[lx*SIMDD+n] = fz0[(lx-1)*SIMDD+n] * gridz[i+n]; +} } +GTO_D_I(1, 0, l+0); +for (lx = l, l1 = 0; lx >= 0; lx--) { + for (ly = l - lx; ly >= 0; ly--, l1++) { + lz = l - lx - ly; + for (n = 0; n < SIMDD; n++) { + e = exps[k*BLKSIZE+i+n]; +s[0*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[1*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[2*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + } + for (n = 0; n < SIMDD; n++) { +buf[0*SIMDD+n] = + (-1*s[0*SIMDD+n]); +buf[1*SIMDD+n] = + (-1*s[1*SIMDD+n]); +buf[2*SIMDD+n] = + (-1*s[2*SIMDD+n]); +buf[3*SIMDD+n] = 0; + } + for (j = 0, j1 = l1; j < nc; j++, j1+=degen) { +#pragma GCC ivdep + for (n = 0; n < SIMDD; n++) { +gto0[j1*ngrids+i+n] += buf[0*SIMDD+n] * coeff[j*np+k]; +gto1[j1*ngrids+i+n] += buf[1*SIMDD+n] * coeff[j*np+k]; +gto2[j1*ngrids+i+n] += buf[2*SIMDD+n] * coeff[j*np+k]; +gto3[j1*ngrids+i+n] += buf[3*SIMDD+n] * coeff[j*np+k]; +} } } } } } } + +if (i < bgrids) { + for (k = 0; k < np; k++) { + if (_nonzero_in(exps+k*BLKSIZE+i, bgrids-i)) { +for (n = 0; n < SIMDD; n++) { + fx0[n] = 1; + fy0[n] = 1; + fz0[n] = 1; +} +for (lx = 1; lx <= l+1; lx++) { +for (n = 0; n < SIMDD; n++) { + fx0[lx*SIMDD+n] = fx0[(lx-1)*SIMDD+n] * gridx[i+n]; + fy0[lx*SIMDD+n] = fy0[(lx-1)*SIMDD+n] * gridy[i+n]; + fz0[lx*SIMDD+n] = fz0[(lx-1)*SIMDD+n] * gridz[i+n]; +} } +GTO_D_I(1, 0, l+0); +for (lx = l, l1 = 0; lx >= 0; lx--) { + for (ly = l - lx; ly >= 0; ly--, l1++) { + lz = l - lx - ly; + for (n = 0; n < SIMDD; n++) { + e = exps[k*BLKSIZE+i+n]; +s[0*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[1*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[2*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + } + for (n = 0; n < SIMDD; n++) { +buf[0*SIMDD+n] = + (-1*s[0*SIMDD+n]); +buf[1*SIMDD+n] = + (-1*s[1*SIMDD+n]); +buf[2*SIMDD+n] = + (-1*s[2*SIMDD+n]); +buf[3*SIMDD+n] = 0; + } + for (j = 0, j1 = l1; j < nc; j++, j1+=degen) { + for (n = 0; n < bgrids-i; n++) { +gto0[j1*ngrids+i+n] += buf[0*SIMDD+n] * coeff[j*np+k]; +gto1[j1*ngrids+i+n] += buf[1*SIMDD+n] * coeff[j*np+k]; +gto2[j1*ngrids+i+n] += buf[2*SIMDD+n] * coeff[j*np+k]; +gto3[j1*ngrids+i+n] += buf[3*SIMDD+n] * coeff[j*np+k]; +} } } } } } } +} +void GTOval_sp_cart(int ngrids, int *shls_slice, int *ao_loc, +double *ao, double *coord, uint8_t *non0table, +int *atm, int natm, int *bas, int nbas, double *env) +{ +int param[] = {4, 1}; +GTOeval_cart_drv(shell_eval_GTOval_sp, GTOprim_exp, 1, +ngrids, param, shls_slice, ao_loc, ao, coord, non0table, +atm, natm, bas, nbas, env); +} +void GTOval_sp_sph(int ngrids, int *shls_slice, int *ao_loc, +double *ao, double *coord, uint8_t *non0table, +int *atm, int natm, int *bas, int nbas, double *env) +{ +int param[] = {4, 1}; +GTOeval_sph_drv(shell_eval_GTOval_sp, GTOprim_exp, 1, +ngrids, param, shls_slice, ao_loc, ao, coord, non0table, +atm, natm, bas, nbas, env); +} +void GTOval_sp_spinor(int ngrids, int *shls_slice, int *ao_loc, +double complex *ao, double *coord, uint8_t *non0table, +int *atm, int natm, int *bas, int nbas, double *env) +{ +int param[] = {4, 1}; +GTOeval_spinor_drv(shell_eval_GTOval_sp, GTOprim_exp, CINTc2s_ket_spinor_si1, 1, +ngrids, param, shls_slice, ao_loc, ao, coord, non0table, atm, natm, bas, nbas, env); +} +/* NABLA SIGMA DOT P |GTO> */ +static void shell_eval_GTOval_ipsp(double *cgto, double *ri, double *exps, +double *coord, double *alpha, double *coeff, double *env, +int l, int np, int nc, size_t nao, size_t ngrids, size_t bgrids) +{ +const size_t degen = (l+1)*(l+2)/2; +const size_t bgrids0 = (bgrids >= SIMDD) ? (bgrids+1-SIMDD) : 0; +int lx, ly, lz; +size_t i, j, j1, k, l1, n; +double e; +double *pgto; +double *gridx = coord; +double *gridy = coord+BLKSIZE; +double *gridz = coord+BLKSIZE*2; +double fx0[SIMDD*(ANG_MAX+3)*4]; +double fy0[SIMDD*(ANG_MAX+3)*4]; +double fz0[SIMDD*(ANG_MAX+3)*4]; +double *fx1 = fx0 + SIMDD*(ANG_MAX+3); +double *fy1 = fy0 + SIMDD*(ANG_MAX+3); +double *fz1 = fz0 + SIMDD*(ANG_MAX+3); +double *fx2 = fx1 + SIMDD*(ANG_MAX+3); +double *fy2 = fy1 + SIMDD*(ANG_MAX+3); +double *fz2 = fz1 + SIMDD*(ANG_MAX+3); +double *fx3 = fx2 + SIMDD*(ANG_MAX+3); +double *fy3 = fy2 + SIMDD*(ANG_MAX+3); +double *fz3 = fz2 + SIMDD*(ANG_MAX+3); +double buf[SIMDD*nc*12]; +double s[SIMDD*9]; +double *gto0 = cgto; +double *gto1 = cgto + nao*ngrids*1; +double *gto2 = cgto + nao*ngrids*2; +double *gto3 = cgto + nao*ngrids*3; +double *gto4 = cgto + nao*ngrids*4; +double *gto5 = cgto + nao*ngrids*5; +double *gto6 = cgto + nao*ngrids*6; +double *gto7 = cgto + nao*ngrids*7; +double *gto8 = cgto + nao*ngrids*8; +double *gto9 = cgto + nao*ngrids*9; +double *gto10 = cgto + nao*ngrids*10; +double *gto11 = cgto + nao*ngrids*11; + +for (j = 0; j < 12; j++) { + pgto = cgto + j*nao*ngrids; + for (n = 0; n < degen*nc; n++) { + for (i = 0; i < bgrids; i++) { + pgto[n*ngrids+i] = 0; + } } +} +for (i = 0; i < bgrids0; i+=SIMDD) { + for (k = 0; k < np; k++) { + if (_nonzero_in(exps+k*BLKSIZE+i, SIMDD)) { +for (n = 0; n < SIMDD; n++) { + fx0[n] = 1; + fy0[n] = 1; + fz0[n] = 1; +} +for (lx = 1; lx <= l+2; lx++) { +for (n = 0; n < SIMDD; n++) { + fx0[lx*SIMDD+n] = fx0[(lx-1)*SIMDD+n] * gridx[i+n]; + fy0[lx*SIMDD+n] = fy0[(lx-1)*SIMDD+n] * gridy[i+n]; + fz0[lx*SIMDD+n] = fz0[(lx-1)*SIMDD+n] * gridz[i+n]; +} } +GTO_D_I(1, 0, l+0); +GTO_D_I(2, 0, l+1); +GTO_D_I(3, 2, l+0); +for (lx = l, l1 = 0; lx >= 0; lx--) { + for (ly = l - lx; ly >= 0; ly--, l1++) { + lz = l - lx - ly; + for (n = 0; n < SIMDD; n++) { + e = exps[k*BLKSIZE+i+n]; +s[0*SIMDD+n] = e * fx3[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[1*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[2*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; +s[3*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[4*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy3[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[5*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz1[lz*SIMDD+n]; +s[6*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz2[lz*SIMDD+n]; +s[7*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz2[lz*SIMDD+n]; +s[8*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz3[lz*SIMDD+n]; + } + for (n = 0; n < SIMDD; n++) { +buf[0*SIMDD+n] = + (-1*s[0*SIMDD+n]); +buf[1*SIMDD+n] = + (-1*s[1*SIMDD+n]); +buf[2*SIMDD+n] = + (-1*s[2*SIMDD+n]); +buf[3*SIMDD+n] = 0; +buf[4*SIMDD+n] = + (-1*s[3*SIMDD+n]); +buf[5*SIMDD+n] = + (-1*s[4*SIMDD+n]); +buf[6*SIMDD+n] = + (-1*s[5*SIMDD+n]); +buf[7*SIMDD+n] = 0; +buf[8*SIMDD+n] = + (-1*s[6*SIMDD+n]); +buf[9*SIMDD+n] = + (-1*s[7*SIMDD+n]); +buf[10*SIMDD+n] = + (-1*s[8*SIMDD+n]); +buf[11*SIMDD+n] = 0; + } + for (j = 0, j1 = l1; j < nc; j++, j1+=degen) { +#pragma GCC ivdep + for (n = 0; n < SIMDD; n++) { +gto0[j1*ngrids+i+n] += buf[0*SIMDD+n] * coeff[j*np+k]; +gto1[j1*ngrids+i+n] += buf[1*SIMDD+n] * coeff[j*np+k]; +gto2[j1*ngrids+i+n] += buf[2*SIMDD+n] * coeff[j*np+k]; +gto3[j1*ngrids+i+n] += buf[3*SIMDD+n] * coeff[j*np+k]; +gto4[j1*ngrids+i+n] += buf[4*SIMDD+n] * coeff[j*np+k]; +gto5[j1*ngrids+i+n] += buf[5*SIMDD+n] * coeff[j*np+k]; +gto6[j1*ngrids+i+n] += buf[6*SIMDD+n] * coeff[j*np+k]; +gto7[j1*ngrids+i+n] += buf[7*SIMDD+n] * coeff[j*np+k]; +gto8[j1*ngrids+i+n] += buf[8*SIMDD+n] * coeff[j*np+k]; +gto9[j1*ngrids+i+n] += buf[9*SIMDD+n] * coeff[j*np+k]; +gto10[j1*ngrids+i+n] += buf[10*SIMDD+n] * coeff[j*np+k]; +gto11[j1*ngrids+i+n] += buf[11*SIMDD+n] * coeff[j*np+k]; +} } } } } } } + +if (i < bgrids) { + for (k = 0; k < np; k++) { + if (_nonzero_in(exps+k*BLKSIZE+i, bgrids-i)) { +for (n = 0; n < SIMDD; n++) { + fx0[n] = 1; + fy0[n] = 1; + fz0[n] = 1; +} +for (lx = 1; lx <= l+2; lx++) { +for (n = 0; n < SIMDD; n++) { + fx0[lx*SIMDD+n] = fx0[(lx-1)*SIMDD+n] * gridx[i+n]; + fy0[lx*SIMDD+n] = fy0[(lx-1)*SIMDD+n] * gridy[i+n]; + fz0[lx*SIMDD+n] = fz0[(lx-1)*SIMDD+n] * gridz[i+n]; +} } +GTO_D_I(1, 0, l+0); +GTO_D_I(2, 0, l+1); +GTO_D_I(3, 2, l+0); +for (lx = l, l1 = 0; lx >= 0; lx--) { + for (ly = l - lx; ly >= 0; ly--, l1++) { + lz = l - lx - ly; + for (n = 0; n < SIMDD; n++) { + e = exps[k*BLKSIZE+i+n]; +s[0*SIMDD+n] = e * fx3[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[1*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[2*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; +s[3*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[4*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy3[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[5*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz1[lz*SIMDD+n]; +s[6*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz2[lz*SIMDD+n]; +s[7*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz2[lz*SIMDD+n]; +s[8*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz3[lz*SIMDD+n]; + } + for (n = 0; n < SIMDD; n++) { +buf[0*SIMDD+n] = + (-1*s[0*SIMDD+n]); +buf[1*SIMDD+n] = + (-1*s[1*SIMDD+n]); +buf[2*SIMDD+n] = + (-1*s[2*SIMDD+n]); +buf[3*SIMDD+n] = 0; +buf[4*SIMDD+n] = + (-1*s[3*SIMDD+n]); +buf[5*SIMDD+n] = + (-1*s[4*SIMDD+n]); +buf[6*SIMDD+n] = + (-1*s[5*SIMDD+n]); +buf[7*SIMDD+n] = 0; +buf[8*SIMDD+n] = + (-1*s[6*SIMDD+n]); +buf[9*SIMDD+n] = + (-1*s[7*SIMDD+n]); +buf[10*SIMDD+n] = + (-1*s[8*SIMDD+n]); +buf[11*SIMDD+n] = 0; + } + for (j = 0, j1 = l1; j < nc; j++, j1+=degen) { + for (n = 0; n < bgrids-i; n++) { +gto0[j1*ngrids+i+n] += buf[0*SIMDD+n] * coeff[j*np+k]; +gto1[j1*ngrids+i+n] += buf[1*SIMDD+n] * coeff[j*np+k]; +gto2[j1*ngrids+i+n] += buf[2*SIMDD+n] * coeff[j*np+k]; +gto3[j1*ngrids+i+n] += buf[3*SIMDD+n] * coeff[j*np+k]; +gto4[j1*ngrids+i+n] += buf[4*SIMDD+n] * coeff[j*np+k]; +gto5[j1*ngrids+i+n] += buf[5*SIMDD+n] * coeff[j*np+k]; +gto6[j1*ngrids+i+n] += buf[6*SIMDD+n] * coeff[j*np+k]; +gto7[j1*ngrids+i+n] += buf[7*SIMDD+n] * coeff[j*np+k]; +gto8[j1*ngrids+i+n] += buf[8*SIMDD+n] * coeff[j*np+k]; +gto9[j1*ngrids+i+n] += buf[9*SIMDD+n] * coeff[j*np+k]; +gto10[j1*ngrids+i+n] += buf[10*SIMDD+n] * coeff[j*np+k]; +gto11[j1*ngrids+i+n] += buf[11*SIMDD+n] * coeff[j*np+k]; +} } } } } } } +} +void GTOval_ipsp_cart(int ngrids, int *shls_slice, int *ao_loc, +double *ao, double *coord, uint8_t *non0table, +int *atm, int natm, int *bas, int nbas, double *env) +{ +int param[] = {4, 3}; +GTOeval_cart_drv(shell_eval_GTOval_ipsp, GTOprim_exp, 1, +ngrids, param, shls_slice, ao_loc, ao, coord, non0table, +atm, natm, bas, nbas, env); +} +void GTOval_ipsp_sph(int ngrids, int *shls_slice, int *ao_loc, +double *ao, double *coord, uint8_t *non0table, +int *atm, int natm, int *bas, int nbas, double *env) +{ +int param[] = {4, 3}; +GTOeval_sph_drv(shell_eval_GTOval_ipsp, GTOprim_exp, 1, +ngrids, param, shls_slice, ao_loc, ao, coord, non0table, +atm, natm, bas, nbas, env); +} +void GTOval_ipsp_spinor(int ngrids, int *shls_slice, int *ao_loc, +double complex *ao, double *coord, uint8_t *non0table, +int *atm, int natm, int *bas, int nbas, double *env) +{ +int param[] = {4, 3}; +GTOeval_spinor_drv(shell_eval_GTOval_ipsp, GTOprim_exp, CINTc2s_ket_spinor_si1, 1, +ngrids, param, shls_slice, ao_loc, ao, coord, non0table, atm, natm, bas, nbas, env); +} +/* NABLA NABLA SIGMA DOT P |GTO> */ +static void shell_eval_GTOval_ipipsp(double *cgto, double *ri, double *exps, +double *coord, double *alpha, double *coeff, double *env, +int l, int np, int nc, size_t nao, size_t ngrids, size_t bgrids) +{ +const size_t degen = (l+1)*(l+2)/2; +const size_t bgrids0 = (bgrids >= SIMDD) ? (bgrids+1-SIMDD) : 0; +int lx, ly, lz; +size_t i, j, j1, k, l1, n; +double e; +double *pgto; +double *gridx = coord; +double *gridy = coord+BLKSIZE; +double *gridz = coord+BLKSIZE*2; +double fx0[SIMDD*(ANG_MAX+4)*8]; +double fy0[SIMDD*(ANG_MAX+4)*8]; +double fz0[SIMDD*(ANG_MAX+4)*8]; +double *fx1 = fx0 + SIMDD*(ANG_MAX+4); +double *fy1 = fy0 + SIMDD*(ANG_MAX+4); +double *fz1 = fz0 + SIMDD*(ANG_MAX+4); +double *fx2 = fx1 + SIMDD*(ANG_MAX+4); +double *fy2 = fy1 + SIMDD*(ANG_MAX+4); +double *fz2 = fz1 + SIMDD*(ANG_MAX+4); +double *fx3 = fx2 + SIMDD*(ANG_MAX+4); +double *fy3 = fy2 + SIMDD*(ANG_MAX+4); +double *fz3 = fz2 + SIMDD*(ANG_MAX+4); +double *fx4 = fx3 + SIMDD*(ANG_MAX+4); +double *fy4 = fy3 + SIMDD*(ANG_MAX+4); +double *fz4 = fz3 + SIMDD*(ANG_MAX+4); +double *fx5 = fx4 + SIMDD*(ANG_MAX+4); +double *fy5 = fy4 + SIMDD*(ANG_MAX+4); +double *fz5 = fz4 + SIMDD*(ANG_MAX+4); +double *fx6 = fx5 + SIMDD*(ANG_MAX+4); +double *fy6 = fy5 + SIMDD*(ANG_MAX+4); +double *fz6 = fz5 + SIMDD*(ANG_MAX+4); +double *fx7 = fx6 + SIMDD*(ANG_MAX+4); +double *fy7 = fy6 + SIMDD*(ANG_MAX+4); +double *fz7 = fz6 + SIMDD*(ANG_MAX+4); +double buf[SIMDD*nc*36]; +double s[SIMDD*27]; +double *gto0 = cgto; +double *gto1 = cgto + nao*ngrids*1; +double *gto2 = cgto + nao*ngrids*2; +double *gto3 = cgto + nao*ngrids*3; +double *gto4 = cgto + nao*ngrids*4; +double *gto5 = cgto + nao*ngrids*5; +double *gto6 = cgto + nao*ngrids*6; +double *gto7 = cgto + nao*ngrids*7; +double *gto8 = cgto + nao*ngrids*8; +double *gto9 = cgto + nao*ngrids*9; +double *gto10 = cgto + nao*ngrids*10; +double *gto11 = cgto + nao*ngrids*11; +double *gto12 = cgto + nao*ngrids*12; +double *gto13 = cgto + nao*ngrids*13; +double *gto14 = cgto + nao*ngrids*14; +double *gto15 = cgto + nao*ngrids*15; +double *gto16 = cgto + nao*ngrids*16; +double *gto17 = cgto + nao*ngrids*17; +double *gto18 = cgto + nao*ngrids*18; +double *gto19 = cgto + nao*ngrids*19; +double *gto20 = cgto + nao*ngrids*20; +double *gto21 = cgto + nao*ngrids*21; +double *gto22 = cgto + nao*ngrids*22; +double *gto23 = cgto + nao*ngrids*23; +double *gto24 = cgto + nao*ngrids*24; +double *gto25 = cgto + nao*ngrids*25; +double *gto26 = cgto + nao*ngrids*26; +double *gto27 = cgto + nao*ngrids*27; +double *gto28 = cgto + nao*ngrids*28; +double *gto29 = cgto + nao*ngrids*29; +double *gto30 = cgto + nao*ngrids*30; +double *gto31 = cgto + nao*ngrids*31; +double *gto32 = cgto + nao*ngrids*32; +double *gto33 = cgto + nao*ngrids*33; +double *gto34 = cgto + nao*ngrids*34; +double *gto35 = cgto + nao*ngrids*35; + +for (j = 0; j < 36; j++) { + pgto = cgto + j*nao*ngrids; + for (n = 0; n < degen*nc; n++) { + for (i = 0; i < bgrids; i++) { + pgto[n*ngrids+i] = 0; + } } +} +for (i = 0; i < bgrids0; i+=SIMDD) { + for (k = 0; k < np; k++) { + if (_nonzero_in(exps+k*BLKSIZE+i, SIMDD)) { +for (n = 0; n < SIMDD; n++) { + fx0[n] = 1; + fy0[n] = 1; + fz0[n] = 1; +} +for (lx = 1; lx <= l+3; lx++) { +for (n = 0; n < SIMDD; n++) { + fx0[lx*SIMDD+n] = fx0[(lx-1)*SIMDD+n] * gridx[i+n]; + fy0[lx*SIMDD+n] = fy0[(lx-1)*SIMDD+n] * gridy[i+n]; + fz0[lx*SIMDD+n] = fz0[(lx-1)*SIMDD+n] * gridz[i+n]; +} } +GTO_D_I(1, 0, l+0); +GTO_D_I(2, 0, l+1); +GTO_D_I(3, 2, l+0); +GTO_D_I(4, 0, l+2); +GTO_D_I(5, 4, l+0); +GTO_D_I(6, 4, l+1); +GTO_D_I(7, 6, l+0); +for (lx = l, l1 = 0; lx >= 0; lx--) { + for (ly = l - lx; ly >= 0; ly--, l1++) { + lz = l - lx - ly; + for (n = 0; n < SIMDD; n++) { + e = exps[k*BLKSIZE+i+n]; +s[0*SIMDD+n] = e * fx7[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[1*SIMDD+n] = e * fx6[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[2*SIMDD+n] = e * fx6[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; +s[3*SIMDD+n] = e * fx5[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[4*SIMDD+n] = e * fx4[lx*SIMDD+n] * fy3[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[5*SIMDD+n] = e * fx4[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz1[lz*SIMDD+n]; +s[6*SIMDD+n] = e * fx5[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz2[lz*SIMDD+n]; +s[7*SIMDD+n] = e * fx4[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz2[lz*SIMDD+n]; +s[8*SIMDD+n] = e * fx4[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz3[lz*SIMDD+n]; +s[9*SIMDD+n] = e * fx3[lx*SIMDD+n] * fy4[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[10*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy5[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[11*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy4[ly*SIMDD+n] * fz1[lz*SIMDD+n]; +s[12*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy6[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[13*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy7[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[14*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy6[ly*SIMDD+n] * fz1[lz*SIMDD+n]; +s[15*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy4[ly*SIMDD+n] * fz2[lz*SIMDD+n]; +s[16*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy5[ly*SIMDD+n] * fz2[lz*SIMDD+n]; +s[17*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy4[ly*SIMDD+n] * fz3[lz*SIMDD+n]; +s[18*SIMDD+n] = e * fx3[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz4[lz*SIMDD+n]; +s[19*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz4[lz*SIMDD+n]; +s[20*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz5[lz*SIMDD+n]; +s[21*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz4[lz*SIMDD+n]; +s[22*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy3[ly*SIMDD+n] * fz4[lz*SIMDD+n]; +s[23*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz5[lz*SIMDD+n]; +s[24*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz6[lz*SIMDD+n]; +s[25*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz6[lz*SIMDD+n]; +s[26*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz7[lz*SIMDD+n]; + } + for (n = 0; n < SIMDD; n++) { +buf[0*SIMDD+n] = + (-1*s[0*SIMDD+n]); +buf[1*SIMDD+n] = + (-1*s[1*SIMDD+n]); +buf[2*SIMDD+n] = + (-1*s[2*SIMDD+n]); +buf[3*SIMDD+n] = 0; +buf[4*SIMDD+n] = + (-1*s[3*SIMDD+n]); +buf[5*SIMDD+n] = + (-1*s[4*SIMDD+n]); +buf[6*SIMDD+n] = + (-1*s[5*SIMDD+n]); +buf[7*SIMDD+n] = 0; +buf[8*SIMDD+n] = + (-1*s[6*SIMDD+n]); +buf[9*SIMDD+n] = + (-1*s[7*SIMDD+n]); +buf[10*SIMDD+n] = + (-1*s[8*SIMDD+n]); +buf[11*SIMDD+n] = 0; +buf[12*SIMDD+n] = + (-1*s[9*SIMDD+n]); +buf[13*SIMDD+n] = + (-1*s[10*SIMDD+n]); +buf[14*SIMDD+n] = + (-1*s[11*SIMDD+n]); +buf[15*SIMDD+n] = 0; +buf[16*SIMDD+n] = + (-1*s[12*SIMDD+n]); +buf[17*SIMDD+n] = + (-1*s[13*SIMDD+n]); +buf[18*SIMDD+n] = + (-1*s[14*SIMDD+n]); +buf[19*SIMDD+n] = 0; +buf[20*SIMDD+n] = + (-1*s[15*SIMDD+n]); +buf[21*SIMDD+n] = + (-1*s[16*SIMDD+n]); +buf[22*SIMDD+n] = + (-1*s[17*SIMDD+n]); +buf[23*SIMDD+n] = 0; +buf[24*SIMDD+n] = + (-1*s[18*SIMDD+n]); +buf[25*SIMDD+n] = + (-1*s[19*SIMDD+n]); +buf[26*SIMDD+n] = + (-1*s[20*SIMDD+n]); +buf[27*SIMDD+n] = 0; +buf[28*SIMDD+n] = + (-1*s[21*SIMDD+n]); +buf[29*SIMDD+n] = + (-1*s[22*SIMDD+n]); +buf[30*SIMDD+n] = + (-1*s[23*SIMDD+n]); +buf[31*SIMDD+n] = 0; +buf[32*SIMDD+n] = + (-1*s[24*SIMDD+n]); +buf[33*SIMDD+n] = + (-1*s[25*SIMDD+n]); +buf[34*SIMDD+n] = + (-1*s[26*SIMDD+n]); +buf[35*SIMDD+n] = 0; + } + for (j = 0, j1 = l1; j < nc; j++, j1+=degen) { +#pragma GCC ivdep + for (n = 0; n < SIMDD; n++) { +gto0[j1*ngrids+i+n] += buf[0*SIMDD+n] * coeff[j*np+k]; +gto1[j1*ngrids+i+n] += buf[1*SIMDD+n] * coeff[j*np+k]; +gto2[j1*ngrids+i+n] += buf[2*SIMDD+n] * coeff[j*np+k]; +gto3[j1*ngrids+i+n] += buf[3*SIMDD+n] * coeff[j*np+k]; +gto4[j1*ngrids+i+n] += buf[4*SIMDD+n] * coeff[j*np+k]; +gto5[j1*ngrids+i+n] += buf[5*SIMDD+n] * coeff[j*np+k]; +gto6[j1*ngrids+i+n] += buf[6*SIMDD+n] * coeff[j*np+k]; +gto7[j1*ngrids+i+n] += buf[7*SIMDD+n] * coeff[j*np+k]; +gto8[j1*ngrids+i+n] += buf[8*SIMDD+n] * coeff[j*np+k]; +gto9[j1*ngrids+i+n] += buf[9*SIMDD+n] * coeff[j*np+k]; +gto10[j1*ngrids+i+n] += buf[10*SIMDD+n] * coeff[j*np+k]; +gto11[j1*ngrids+i+n] += buf[11*SIMDD+n] * coeff[j*np+k]; +gto12[j1*ngrids+i+n] += buf[12*SIMDD+n] * coeff[j*np+k]; +gto13[j1*ngrids+i+n] += buf[13*SIMDD+n] * coeff[j*np+k]; +gto14[j1*ngrids+i+n] += buf[14*SIMDD+n] * coeff[j*np+k]; +gto15[j1*ngrids+i+n] += buf[15*SIMDD+n] * coeff[j*np+k]; +gto16[j1*ngrids+i+n] += buf[16*SIMDD+n] * coeff[j*np+k]; +gto17[j1*ngrids+i+n] += buf[17*SIMDD+n] * coeff[j*np+k]; +gto18[j1*ngrids+i+n] += buf[18*SIMDD+n] * coeff[j*np+k]; +gto19[j1*ngrids+i+n] += buf[19*SIMDD+n] * coeff[j*np+k]; +gto20[j1*ngrids+i+n] += buf[20*SIMDD+n] * coeff[j*np+k]; +gto21[j1*ngrids+i+n] += buf[21*SIMDD+n] * coeff[j*np+k]; +gto22[j1*ngrids+i+n] += buf[22*SIMDD+n] * coeff[j*np+k]; +gto23[j1*ngrids+i+n] += buf[23*SIMDD+n] * coeff[j*np+k]; +gto24[j1*ngrids+i+n] += buf[24*SIMDD+n] * coeff[j*np+k]; +gto25[j1*ngrids+i+n] += buf[25*SIMDD+n] * coeff[j*np+k]; +gto26[j1*ngrids+i+n] += buf[26*SIMDD+n] * coeff[j*np+k]; +gto27[j1*ngrids+i+n] += buf[27*SIMDD+n] * coeff[j*np+k]; +gto28[j1*ngrids+i+n] += buf[28*SIMDD+n] * coeff[j*np+k]; +gto29[j1*ngrids+i+n] += buf[29*SIMDD+n] * coeff[j*np+k]; +gto30[j1*ngrids+i+n] += buf[30*SIMDD+n] * coeff[j*np+k]; +gto31[j1*ngrids+i+n] += buf[31*SIMDD+n] * coeff[j*np+k]; +gto32[j1*ngrids+i+n] += buf[32*SIMDD+n] * coeff[j*np+k]; +gto33[j1*ngrids+i+n] += buf[33*SIMDD+n] * coeff[j*np+k]; +gto34[j1*ngrids+i+n] += buf[34*SIMDD+n] * coeff[j*np+k]; +gto35[j1*ngrids+i+n] += buf[35*SIMDD+n] * coeff[j*np+k]; +} } } } } } } + +if (i < bgrids) { + for (k = 0; k < np; k++) { + if (_nonzero_in(exps+k*BLKSIZE+i, bgrids-i)) { +for (n = 0; n < SIMDD; n++) { + fx0[n] = 1; + fy0[n] = 1; + fz0[n] = 1; +} +for (lx = 1; lx <= l+3; lx++) { +for (n = 0; n < SIMDD; n++) { + fx0[lx*SIMDD+n] = fx0[(lx-1)*SIMDD+n] * gridx[i+n]; + fy0[lx*SIMDD+n] = fy0[(lx-1)*SIMDD+n] * gridy[i+n]; + fz0[lx*SIMDD+n] = fz0[(lx-1)*SIMDD+n] * gridz[i+n]; +} } +GTO_D_I(1, 0, l+0); +GTO_D_I(2, 0, l+1); +GTO_D_I(3, 2, l+0); +GTO_D_I(4, 0, l+2); +GTO_D_I(5, 4, l+0); +GTO_D_I(6, 4, l+1); +GTO_D_I(7, 6, l+0); +for (lx = l, l1 = 0; lx >= 0; lx--) { + for (ly = l - lx; ly >= 0; ly--, l1++) { + lz = l - lx - ly; + for (n = 0; n < SIMDD; n++) { + e = exps[k*BLKSIZE+i+n]; +s[0*SIMDD+n] = e * fx7[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[1*SIMDD+n] = e * fx6[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[2*SIMDD+n] = e * fx6[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; +s[3*SIMDD+n] = e * fx5[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[4*SIMDD+n] = e * fx4[lx*SIMDD+n] * fy3[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[5*SIMDD+n] = e * fx4[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz1[lz*SIMDD+n]; +s[6*SIMDD+n] = e * fx5[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz2[lz*SIMDD+n]; +s[7*SIMDD+n] = e * fx4[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz2[lz*SIMDD+n]; +s[8*SIMDD+n] = e * fx4[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz3[lz*SIMDD+n]; +s[9*SIMDD+n] = e * fx3[lx*SIMDD+n] * fy4[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[10*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy5[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[11*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy4[ly*SIMDD+n] * fz1[lz*SIMDD+n]; +s[12*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy6[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[13*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy7[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[14*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy6[ly*SIMDD+n] * fz1[lz*SIMDD+n]; +s[15*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy4[ly*SIMDD+n] * fz2[lz*SIMDD+n]; +s[16*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy5[ly*SIMDD+n] * fz2[lz*SIMDD+n]; +s[17*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy4[ly*SIMDD+n] * fz3[lz*SIMDD+n]; +s[18*SIMDD+n] = e * fx3[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz4[lz*SIMDD+n]; +s[19*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz4[lz*SIMDD+n]; +s[20*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz5[lz*SIMDD+n]; +s[21*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz4[lz*SIMDD+n]; +s[22*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy3[ly*SIMDD+n] * fz4[lz*SIMDD+n]; +s[23*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz5[lz*SIMDD+n]; +s[24*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz6[lz*SIMDD+n]; +s[25*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz6[lz*SIMDD+n]; +s[26*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz7[lz*SIMDD+n]; + } + for (n = 0; n < SIMDD; n++) { +buf[0*SIMDD+n] = + (-1*s[0*SIMDD+n]); +buf[1*SIMDD+n] = + (-1*s[1*SIMDD+n]); +buf[2*SIMDD+n] = + (-1*s[2*SIMDD+n]); +buf[3*SIMDD+n] = 0; +buf[4*SIMDD+n] = + (-1*s[3*SIMDD+n]); +buf[5*SIMDD+n] = + (-1*s[4*SIMDD+n]); +buf[6*SIMDD+n] = + (-1*s[5*SIMDD+n]); +buf[7*SIMDD+n] = 0; +buf[8*SIMDD+n] = + (-1*s[6*SIMDD+n]); +buf[9*SIMDD+n] = + (-1*s[7*SIMDD+n]); +buf[10*SIMDD+n] = + (-1*s[8*SIMDD+n]); +buf[11*SIMDD+n] = 0; +buf[12*SIMDD+n] = + (-1*s[9*SIMDD+n]); +buf[13*SIMDD+n] = + (-1*s[10*SIMDD+n]); +buf[14*SIMDD+n] = + (-1*s[11*SIMDD+n]); +buf[15*SIMDD+n] = 0; +buf[16*SIMDD+n] = + (-1*s[12*SIMDD+n]); +buf[17*SIMDD+n] = + (-1*s[13*SIMDD+n]); +buf[18*SIMDD+n] = + (-1*s[14*SIMDD+n]); +buf[19*SIMDD+n] = 0; +buf[20*SIMDD+n] = + (-1*s[15*SIMDD+n]); +buf[21*SIMDD+n] = + (-1*s[16*SIMDD+n]); +buf[22*SIMDD+n] = + (-1*s[17*SIMDD+n]); +buf[23*SIMDD+n] = 0; +buf[24*SIMDD+n] = + (-1*s[18*SIMDD+n]); +buf[25*SIMDD+n] = + (-1*s[19*SIMDD+n]); +buf[26*SIMDD+n] = + (-1*s[20*SIMDD+n]); +buf[27*SIMDD+n] = 0; +buf[28*SIMDD+n] = + (-1*s[21*SIMDD+n]); +buf[29*SIMDD+n] = + (-1*s[22*SIMDD+n]); +buf[30*SIMDD+n] = + (-1*s[23*SIMDD+n]); +buf[31*SIMDD+n] = 0; +buf[32*SIMDD+n] = + (-1*s[24*SIMDD+n]); +buf[33*SIMDD+n] = + (-1*s[25*SIMDD+n]); +buf[34*SIMDD+n] = + (-1*s[26*SIMDD+n]); +buf[35*SIMDD+n] = 0; + } + for (j = 0, j1 = l1; j < nc; j++, j1+=degen) { + for (n = 0; n < bgrids-i; n++) { +gto0[j1*ngrids+i+n] += buf[0*SIMDD+n] * coeff[j*np+k]; +gto1[j1*ngrids+i+n] += buf[1*SIMDD+n] * coeff[j*np+k]; +gto2[j1*ngrids+i+n] += buf[2*SIMDD+n] * coeff[j*np+k]; +gto3[j1*ngrids+i+n] += buf[3*SIMDD+n] * coeff[j*np+k]; +gto4[j1*ngrids+i+n] += buf[4*SIMDD+n] * coeff[j*np+k]; +gto5[j1*ngrids+i+n] += buf[5*SIMDD+n] * coeff[j*np+k]; +gto6[j1*ngrids+i+n] += buf[6*SIMDD+n] * coeff[j*np+k]; +gto7[j1*ngrids+i+n] += buf[7*SIMDD+n] * coeff[j*np+k]; +gto8[j1*ngrids+i+n] += buf[8*SIMDD+n] * coeff[j*np+k]; +gto9[j1*ngrids+i+n] += buf[9*SIMDD+n] * coeff[j*np+k]; +gto10[j1*ngrids+i+n] += buf[10*SIMDD+n] * coeff[j*np+k]; +gto11[j1*ngrids+i+n] += buf[11*SIMDD+n] * coeff[j*np+k]; +gto12[j1*ngrids+i+n] += buf[12*SIMDD+n] * coeff[j*np+k]; +gto13[j1*ngrids+i+n] += buf[13*SIMDD+n] * coeff[j*np+k]; +gto14[j1*ngrids+i+n] += buf[14*SIMDD+n] * coeff[j*np+k]; +gto15[j1*ngrids+i+n] += buf[15*SIMDD+n] * coeff[j*np+k]; +gto16[j1*ngrids+i+n] += buf[16*SIMDD+n] * coeff[j*np+k]; +gto17[j1*ngrids+i+n] += buf[17*SIMDD+n] * coeff[j*np+k]; +gto18[j1*ngrids+i+n] += buf[18*SIMDD+n] * coeff[j*np+k]; +gto19[j1*ngrids+i+n] += buf[19*SIMDD+n] * coeff[j*np+k]; +gto20[j1*ngrids+i+n] += buf[20*SIMDD+n] * coeff[j*np+k]; +gto21[j1*ngrids+i+n] += buf[21*SIMDD+n] * coeff[j*np+k]; +gto22[j1*ngrids+i+n] += buf[22*SIMDD+n] * coeff[j*np+k]; +gto23[j1*ngrids+i+n] += buf[23*SIMDD+n] * coeff[j*np+k]; +gto24[j1*ngrids+i+n] += buf[24*SIMDD+n] * coeff[j*np+k]; +gto25[j1*ngrids+i+n] += buf[25*SIMDD+n] * coeff[j*np+k]; +gto26[j1*ngrids+i+n] += buf[26*SIMDD+n] * coeff[j*np+k]; +gto27[j1*ngrids+i+n] += buf[27*SIMDD+n] * coeff[j*np+k]; +gto28[j1*ngrids+i+n] += buf[28*SIMDD+n] * coeff[j*np+k]; +gto29[j1*ngrids+i+n] += buf[29*SIMDD+n] * coeff[j*np+k]; +gto30[j1*ngrids+i+n] += buf[30*SIMDD+n] * coeff[j*np+k]; +gto31[j1*ngrids+i+n] += buf[31*SIMDD+n] * coeff[j*np+k]; +gto32[j1*ngrids+i+n] += buf[32*SIMDD+n] * coeff[j*np+k]; +gto33[j1*ngrids+i+n] += buf[33*SIMDD+n] * coeff[j*np+k]; +gto34[j1*ngrids+i+n] += buf[34*SIMDD+n] * coeff[j*np+k]; +gto35[j1*ngrids+i+n] += buf[35*SIMDD+n] * coeff[j*np+k]; +} } } } } } } +} +void GTOval_ipipsp_cart(int ngrids, int *shls_slice, int *ao_loc, +double *ao, double *coord, uint8_t *non0table, +int *atm, int natm, int *bas, int nbas, double *env) +{ +int param[] = {4, 9}; +GTOeval_cart_drv(shell_eval_GTOval_ipipsp, GTOprim_exp, 1, +ngrids, param, shls_slice, ao_loc, ao, coord, non0table, +atm, natm, bas, nbas, env); +} +void GTOval_ipipsp_sph(int ngrids, int *shls_slice, int *ao_loc, +double *ao, double *coord, uint8_t *non0table, +int *atm, int natm, int *bas, int nbas, double *env) +{ +int param[] = {4, 9}; +GTOeval_sph_drv(shell_eval_GTOval_ipipsp, GTOprim_exp, 1, +ngrids, param, shls_slice, ao_loc, ao, coord, non0table, +atm, natm, bas, nbas, env); +} +void GTOval_ipipsp_spinor(int ngrids, int *shls_slice, int *ao_loc, +double complex *ao, double *coord, uint8_t *non0table, +int *atm, int natm, int *bas, int nbas, double *env) +{ +int param[] = {4, 9}; +GTOeval_spinor_drv(shell_eval_GTOval_ipipsp, GTOprim_exp, CINTc2s_ket_spinor_si1, 1, +ngrids, param, shls_slice, ao_loc, ao, coord, non0table, atm, natm, bas, nbas, env); +} +/* NABLA RC |GTO> */ +static void shell_eval_GTOval_iprc(double *cgto, double *ri, double *exps, +double *coord, double *alpha, double *coeff, double *env, +int l, int np, int nc, size_t nao, size_t ngrids, size_t bgrids) +{ +const size_t degen = (l+1)*(l+2)/2; +const size_t bgrids0 = (bgrids >= SIMDD) ? (bgrids+1-SIMDD) : 0; +int lx, ly, lz; +size_t i, j, j1, k, l1, n; +double e; +double *pgto; +double *gridx = coord; +double *gridy = coord+BLKSIZE; +double *gridz = coord+BLKSIZE*2; +double fx0[SIMDD*(ANG_MAX+3)*4]; +double fy0[SIMDD*(ANG_MAX+3)*4]; +double fz0[SIMDD*(ANG_MAX+3)*4]; +double *fx1 = fx0 + SIMDD*(ANG_MAX+3); +double *fy1 = fy0 + SIMDD*(ANG_MAX+3); +double *fz1 = fz0 + SIMDD*(ANG_MAX+3); +double *fx2 = fx1 + SIMDD*(ANG_MAX+3); +double *fy2 = fy1 + SIMDD*(ANG_MAX+3); +double *fz2 = fz1 + SIMDD*(ANG_MAX+3); +double *fx3 = fx2 + SIMDD*(ANG_MAX+3); +double *fy3 = fy2 + SIMDD*(ANG_MAX+3); +double *fz3 = fz2 + SIMDD*(ANG_MAX+3); +double buf[SIMDD*nc*9]; +double s[SIMDD*9]; +double *gto0 = cgto; +double *gto1 = cgto + nao*ngrids*1; +double *gto2 = cgto + nao*ngrids*2; +double *gto3 = cgto + nao*ngrids*3; +double *gto4 = cgto + nao*ngrids*4; +double *gto5 = cgto + nao*ngrids*5; +double *gto6 = cgto + nao*ngrids*6; +double *gto7 = cgto + nao*ngrids*7; +double *gto8 = cgto + nao*ngrids*8; +double dri[3]; +dri[0] = ri[0] - env[PTR_COMMON_ORIG+0]; +dri[1] = ri[1] - env[PTR_COMMON_ORIG+1]; +dri[2] = ri[2] - env[PTR_COMMON_ORIG+2]; + +for (j = 0; j < 9; j++) { + pgto = cgto + j*nao*ngrids; + for (n = 0; n < degen*nc; n++) { + for (i = 0; i < bgrids; i++) { + pgto[n*ngrids+i] = 0; + } } +} +for (i = 0; i < bgrids0; i+=SIMDD) { + for (k = 0; k < np; k++) { + if (_nonzero_in(exps+k*BLKSIZE+i, SIMDD)) { +for (n = 0; n < SIMDD; n++) { + fx0[n] = 1; + fy0[n] = 1; + fz0[n] = 1; +} +for (lx = 1; lx <= l+2; lx++) { +for (n = 0; n < SIMDD; n++) { + fx0[lx*SIMDD+n] = fx0[(lx-1)*SIMDD+n] * gridx[i+n]; + fy0[lx*SIMDD+n] = fy0[(lx-1)*SIMDD+n] * gridy[i+n]; + fz0[lx*SIMDD+n] = fz0[(lx-1)*SIMDD+n] * gridz[i+n]; +} } +GTO_RCI(1, 0, l+0); +GTO_D_I(2, 0, l+1); +GTO_RCI(3, 2, l+0); +for (lx = l, l1 = 0; lx >= 0; lx--) { + for (ly = l - lx; ly >= 0; ly--, l1++) { + lz = l - lx - ly; + for (n = 0; n < SIMDD; n++) { + e = exps[k*BLKSIZE+i+n]; +s[0*SIMDD+n] = e * fx3[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[1*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[2*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; +s[3*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[4*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy3[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[5*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz1[lz*SIMDD+n]; +s[6*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz2[lz*SIMDD+n]; +s[7*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz2[lz*SIMDD+n]; +s[8*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz3[lz*SIMDD+n]; + } + for (n = 0; n < SIMDD; n++) { +buf[0*SIMDD+n] = + s[0*SIMDD+n]; +buf[1*SIMDD+n] = + s[1*SIMDD+n]; +buf[2*SIMDD+n] = + s[2*SIMDD+n]; +buf[3*SIMDD+n] = + s[3*SIMDD+n]; +buf[4*SIMDD+n] = + s[4*SIMDD+n]; +buf[5*SIMDD+n] = + s[5*SIMDD+n]; +buf[6*SIMDD+n] = + s[6*SIMDD+n]; +buf[7*SIMDD+n] = + s[7*SIMDD+n]; +buf[8*SIMDD+n] = + s[8*SIMDD+n]; + } + for (j = 0, j1 = l1; j < nc; j++, j1+=degen) { +#pragma GCC ivdep + for (n = 0; n < SIMDD; n++) { +gto0[j1*ngrids+i+n] += buf[0*SIMDD+n] * coeff[j*np+k]; +gto1[j1*ngrids+i+n] += buf[1*SIMDD+n] * coeff[j*np+k]; +gto2[j1*ngrids+i+n] += buf[2*SIMDD+n] * coeff[j*np+k]; +gto3[j1*ngrids+i+n] += buf[3*SIMDD+n] * coeff[j*np+k]; +gto4[j1*ngrids+i+n] += buf[4*SIMDD+n] * coeff[j*np+k]; +gto5[j1*ngrids+i+n] += buf[5*SIMDD+n] * coeff[j*np+k]; +gto6[j1*ngrids+i+n] += buf[6*SIMDD+n] * coeff[j*np+k]; +gto7[j1*ngrids+i+n] += buf[7*SIMDD+n] * coeff[j*np+k]; +gto8[j1*ngrids+i+n] += buf[8*SIMDD+n] * coeff[j*np+k]; +} } } } } } } + +if (i < bgrids) { + for (k = 0; k < np; k++) { + if (_nonzero_in(exps+k*BLKSIZE+i, bgrids-i)) { +for (n = 0; n < SIMDD; n++) { + fx0[n] = 1; + fy0[n] = 1; + fz0[n] = 1; +} +for (lx = 1; lx <= l+2; lx++) { +for (n = 0; n < SIMDD; n++) { + fx0[lx*SIMDD+n] = fx0[(lx-1)*SIMDD+n] * gridx[i+n]; + fy0[lx*SIMDD+n] = fy0[(lx-1)*SIMDD+n] * gridy[i+n]; + fz0[lx*SIMDD+n] = fz0[(lx-1)*SIMDD+n] * gridz[i+n]; +} } +GTO_RCI(1, 0, l+0); +GTO_D_I(2, 0, l+1); +GTO_RCI(3, 2, l+0); +for (lx = l, l1 = 0; lx >= 0; lx--) { + for (ly = l - lx; ly >= 0; ly--, l1++) { + lz = l - lx - ly; + for (n = 0; n < SIMDD; n++) { + e = exps[k*BLKSIZE+i+n]; +s[0*SIMDD+n] = e * fx3[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[1*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[2*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; +s[3*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[4*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy3[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[5*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz1[lz*SIMDD+n]; +s[6*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz2[lz*SIMDD+n]; +s[7*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz2[lz*SIMDD+n]; +s[8*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz3[lz*SIMDD+n]; + } + for (n = 0; n < SIMDD; n++) { +buf[0*SIMDD+n] = + s[0*SIMDD+n]; +buf[1*SIMDD+n] = + s[1*SIMDD+n]; +buf[2*SIMDD+n] = + s[2*SIMDD+n]; +buf[3*SIMDD+n] = + s[3*SIMDD+n]; +buf[4*SIMDD+n] = + s[4*SIMDD+n]; +buf[5*SIMDD+n] = + s[5*SIMDD+n]; +buf[6*SIMDD+n] = + s[6*SIMDD+n]; +buf[7*SIMDD+n] = + s[7*SIMDD+n]; +buf[8*SIMDD+n] = + s[8*SIMDD+n]; + } + for (j = 0, j1 = l1; j < nc; j++, j1+=degen) { + for (n = 0; n < bgrids-i; n++) { +gto0[j1*ngrids+i+n] += buf[0*SIMDD+n] * coeff[j*np+k]; +gto1[j1*ngrids+i+n] += buf[1*SIMDD+n] * coeff[j*np+k]; +gto2[j1*ngrids+i+n] += buf[2*SIMDD+n] * coeff[j*np+k]; +gto3[j1*ngrids+i+n] += buf[3*SIMDD+n] * coeff[j*np+k]; +gto4[j1*ngrids+i+n] += buf[4*SIMDD+n] * coeff[j*np+k]; +gto5[j1*ngrids+i+n] += buf[5*SIMDD+n] * coeff[j*np+k]; +gto6[j1*ngrids+i+n] += buf[6*SIMDD+n] * coeff[j*np+k]; +gto7[j1*ngrids+i+n] += buf[7*SIMDD+n] * coeff[j*np+k]; +gto8[j1*ngrids+i+n] += buf[8*SIMDD+n] * coeff[j*np+k]; +} } } } } } } +} +void GTOval_iprc_cart(int ngrids, int *shls_slice, int *ao_loc, +double *ao, double *coord, uint8_t *non0table, +int *atm, int natm, int *bas, int nbas, double *env) +{ +int param[] = {1, 9}; +GTOeval_cart_drv(shell_eval_GTOval_iprc, GTOprim_exp, 1, +ngrids, param, shls_slice, ao_loc, ao, coord, non0table, +atm, natm, bas, nbas, env); +} +void GTOval_iprc_sph(int ngrids, int *shls_slice, int *ao_loc, +double *ao, double *coord, uint8_t *non0table, +int *atm, int natm, int *bas, int nbas, double *env) +{ +int param[] = {1, 9}; +GTOeval_sph_drv(shell_eval_GTOval_iprc, GTOprim_exp, 1, +ngrids, param, shls_slice, ao_loc, ao, coord, non0table, +atm, natm, bas, nbas, env); +} +void GTOval_iprc_spinor(int ngrids, int *shls_slice, int *ao_loc, +double complex *ao, double *coord, uint8_t *non0table, +int *atm, int natm, int *bas, int nbas, double *env) +{ +int param[] = {1, 9}; +GTOeval_spinor_drv(shell_eval_GTOval_iprc, GTOprim_exp, CINTc2s_ket_spinor_sf1, 1, +ngrids, param, shls_slice, ao_loc, ao, coord, non0table, atm, natm, bas, nbas, env); +} +/* NABLA R |GTO> */ +static void shell_eval_GTOval_ipr(double *cgto, double *ri, double *exps, +double *coord, double *alpha, double *coeff, double *env, +int l, int np, int nc, size_t nao, size_t ngrids, size_t bgrids) +{ +const size_t degen = (l+1)*(l+2)/2; +const size_t bgrids0 = (bgrids >= SIMDD) ? (bgrids+1-SIMDD) : 0; +int lx, ly, lz; +size_t i, j, j1, k, l1, n; +double e; +double *pgto; +double *gridx = coord; +double *gridy = coord+BLKSIZE; +double *gridz = coord+BLKSIZE*2; +double fx0[SIMDD*(ANG_MAX+3)*4]; +double fy0[SIMDD*(ANG_MAX+3)*4]; +double fz0[SIMDD*(ANG_MAX+3)*4]; +double *fx1 = fx0 + SIMDD*(ANG_MAX+3); +double *fy1 = fy0 + SIMDD*(ANG_MAX+3); +double *fz1 = fz0 + SIMDD*(ANG_MAX+3); +double *fx2 = fx1 + SIMDD*(ANG_MAX+3); +double *fy2 = fy1 + SIMDD*(ANG_MAX+3); +double *fz2 = fz1 + SIMDD*(ANG_MAX+3); +double *fx3 = fx2 + SIMDD*(ANG_MAX+3); +double *fy3 = fy2 + SIMDD*(ANG_MAX+3); +double *fz3 = fz2 + SIMDD*(ANG_MAX+3); +double buf[SIMDD*nc*9]; +double s[SIMDD*9]; +double *gto0 = cgto; +double *gto1 = cgto + nao*ngrids*1; +double *gto2 = cgto + nao*ngrids*2; +double *gto3 = cgto + nao*ngrids*3; +double *gto4 = cgto + nao*ngrids*4; +double *gto5 = cgto + nao*ngrids*5; +double *gto6 = cgto + nao*ngrids*6; +double *gto7 = cgto + nao*ngrids*7; +double *gto8 = cgto + nao*ngrids*8; + +for (j = 0; j < 9; j++) { + pgto = cgto + j*nao*ngrids; + for (n = 0; n < degen*nc; n++) { + for (i = 0; i < bgrids; i++) { + pgto[n*ngrids+i] = 0; + } } +} +for (i = 0; i < bgrids0; i+=SIMDD) { + for (k = 0; k < np; k++) { + if (_nonzero_in(exps+k*BLKSIZE+i, SIMDD)) { +for (n = 0; n < SIMDD; n++) { + fx0[n] = 1; + fy0[n] = 1; + fz0[n] = 1; +} +for (lx = 1; lx <= l+2; lx++) { +for (n = 0; n < SIMDD; n++) { + fx0[lx*SIMDD+n] = fx0[(lx-1)*SIMDD+n] * gridx[i+n]; + fy0[lx*SIMDD+n] = fy0[(lx-1)*SIMDD+n] * gridy[i+n]; + fz0[lx*SIMDD+n] = fz0[(lx-1)*SIMDD+n] * gridz[i+n]; +} } +GTO_R_I(1, 0, l+0); +GTO_D_I(2, 0, l+1); +GTO_R_I(3, 2, l+0); +for (lx = l, l1 = 0; lx >= 0; lx--) { + for (ly = l - lx; ly >= 0; ly--, l1++) { + lz = l - lx - ly; + for (n = 0; n < SIMDD; n++) { + e = exps[k*BLKSIZE+i+n]; +s[0*SIMDD+n] = e * fx3[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[1*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[2*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; +s[3*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[4*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy3[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[5*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz1[lz*SIMDD+n]; +s[6*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz2[lz*SIMDD+n]; +s[7*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz2[lz*SIMDD+n]; +s[8*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz3[lz*SIMDD+n]; + } + for (n = 0; n < SIMDD; n++) { +buf[0*SIMDD+n] = + s[0*SIMDD+n]; +buf[1*SIMDD+n] = + s[1*SIMDD+n]; +buf[2*SIMDD+n] = + s[2*SIMDD+n]; +buf[3*SIMDD+n] = + s[3*SIMDD+n]; +buf[4*SIMDD+n] = + s[4*SIMDD+n]; +buf[5*SIMDD+n] = + s[5*SIMDD+n]; +buf[6*SIMDD+n] = + s[6*SIMDD+n]; +buf[7*SIMDD+n] = + s[7*SIMDD+n]; +buf[8*SIMDD+n] = + s[8*SIMDD+n]; + } + for (j = 0, j1 = l1; j < nc; j++, j1+=degen) { +#pragma GCC ivdep + for (n = 0; n < SIMDD; n++) { +gto0[j1*ngrids+i+n] += buf[0*SIMDD+n] * coeff[j*np+k]; +gto1[j1*ngrids+i+n] += buf[1*SIMDD+n] * coeff[j*np+k]; +gto2[j1*ngrids+i+n] += buf[2*SIMDD+n] * coeff[j*np+k]; +gto3[j1*ngrids+i+n] += buf[3*SIMDD+n] * coeff[j*np+k]; +gto4[j1*ngrids+i+n] += buf[4*SIMDD+n] * coeff[j*np+k]; +gto5[j1*ngrids+i+n] += buf[5*SIMDD+n] * coeff[j*np+k]; +gto6[j1*ngrids+i+n] += buf[6*SIMDD+n] * coeff[j*np+k]; +gto7[j1*ngrids+i+n] += buf[7*SIMDD+n] * coeff[j*np+k]; +gto8[j1*ngrids+i+n] += buf[8*SIMDD+n] * coeff[j*np+k]; +} } } } } } } + +if (i < bgrids) { + for (k = 0; k < np; k++) { + if (_nonzero_in(exps+k*BLKSIZE+i, bgrids-i)) { +for (n = 0; n < SIMDD; n++) { + fx0[n] = 1; + fy0[n] = 1; + fz0[n] = 1; +} +for (lx = 1; lx <= l+2; lx++) { +for (n = 0; n < SIMDD; n++) { + fx0[lx*SIMDD+n] = fx0[(lx-1)*SIMDD+n] * gridx[i+n]; + fy0[lx*SIMDD+n] = fy0[(lx-1)*SIMDD+n] * gridy[i+n]; + fz0[lx*SIMDD+n] = fz0[(lx-1)*SIMDD+n] * gridz[i+n]; +} } +GTO_R_I(1, 0, l+0); +GTO_D_I(2, 0, l+1); +GTO_R_I(3, 2, l+0); +for (lx = l, l1 = 0; lx >= 0; lx--) { + for (ly = l - lx; ly >= 0; ly--, l1++) { + lz = l - lx - ly; + for (n = 0; n < SIMDD; n++) { + e = exps[k*BLKSIZE+i+n]; +s[0*SIMDD+n] = e * fx3[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[1*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[2*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; +s[3*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[4*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy3[ly*SIMDD+n] * fz0[lz*SIMDD+n]; +s[5*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz1[lz*SIMDD+n]; +s[6*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz2[lz*SIMDD+n]; +s[7*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz2[lz*SIMDD+n]; +s[8*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz3[lz*SIMDD+n]; + } + for (n = 0; n < SIMDD; n++) { +buf[0*SIMDD+n] = + s[0*SIMDD+n]; +buf[1*SIMDD+n] = + s[1*SIMDD+n]; +buf[2*SIMDD+n] = + s[2*SIMDD+n]; +buf[3*SIMDD+n] = + s[3*SIMDD+n]; +buf[4*SIMDD+n] = + s[4*SIMDD+n]; +buf[5*SIMDD+n] = + s[5*SIMDD+n]; +buf[6*SIMDD+n] = + s[6*SIMDD+n]; +buf[7*SIMDD+n] = + s[7*SIMDD+n]; +buf[8*SIMDD+n] = + s[8*SIMDD+n]; + } + for (j = 0, j1 = l1; j < nc; j++, j1+=degen) { + for (n = 0; n < bgrids-i; n++) { +gto0[j1*ngrids+i+n] += buf[0*SIMDD+n] * coeff[j*np+k]; +gto1[j1*ngrids+i+n] += buf[1*SIMDD+n] * coeff[j*np+k]; +gto2[j1*ngrids+i+n] += buf[2*SIMDD+n] * coeff[j*np+k]; +gto3[j1*ngrids+i+n] += buf[3*SIMDD+n] * coeff[j*np+k]; +gto4[j1*ngrids+i+n] += buf[4*SIMDD+n] * coeff[j*np+k]; +gto5[j1*ngrids+i+n] += buf[5*SIMDD+n] * coeff[j*np+k]; +gto6[j1*ngrids+i+n] += buf[6*SIMDD+n] * coeff[j*np+k]; +gto7[j1*ngrids+i+n] += buf[7*SIMDD+n] * coeff[j*np+k]; +gto8[j1*ngrids+i+n] += buf[8*SIMDD+n] * coeff[j*np+k]; +} } } } } } } +} +void GTOval_ipr_cart(int ngrids, int *shls_slice, int *ao_loc, +double *ao, double *coord, uint8_t *non0table, +int *atm, int natm, int *bas, int nbas, double *env) +{ +int param[] = {1, 9}; +GTOeval_cart_drv(shell_eval_GTOval_ipr, GTOprim_exp, 1, +ngrids, param, shls_slice, ao_loc, ao, coord, non0table, +atm, natm, bas, nbas, env); +} +void GTOval_ipr_sph(int ngrids, int *shls_slice, int *ao_loc, +double *ao, double *coord, uint8_t *non0table, +int *atm, int natm, int *bas, int nbas, double *env) +{ +int param[] = {1, 9}; +GTOeval_sph_drv(shell_eval_GTOval_ipr, GTOprim_exp, 1, +ngrids, param, shls_slice, ao_loc, ao, coord, non0table, +atm, natm, bas, nbas, env); +} +void GTOval_ipr_spinor(int ngrids, int *shls_slice, int *ao_loc, +double complex *ao, double *coord, uint8_t *non0table, +int *atm, int natm, int *bas, int nbas, double *env) +{ +int param[] = {1, 9}; +GTOeval_spinor_drv(shell_eval_GTOval_ipr, GTOprim_exp, CINTc2s_ket_spinor_sf1, 1, +ngrids, param, shls_slice, ao_loc, ao, coord, non0table, atm, natm, bas, nbas, env); +} diff --git a/pyscfadlib/pyscfadlib/gto/autocode/derivator.cl b/pyscfadlib/pyscfadlib/gto/autocode/derivator.cl new file mode 100644 index 00000000..8e47de2a --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/autocode/derivator.cl @@ -0,0 +1,409 @@ +;;;; +;;;; Copyright (C) 2014-2017 Qiming Sun +;;;; + +(load "utility.cl") + +(defun attach-tag (type-tag contents) + (cons type-tag contents)) +(defun type-tag (datum) + (car datum)) +(defun contents (datum) + (cdr datum)) + +;;; op := (symb script) such as (p x) +;;; op is the smallest unit in integral expression +(defun make-op (symb script) + (list symb script)) +(defun symbol-of (op) + (car op)) +(defun script-of (op) + (cadr op)) +(defun scripts-of (ops) + "the subscripts of {op}s" + (cond ((null ops) ops) + (t (cons (script-of ops) + (scripts-of (cddr ops)))))) +(defun scalar? (op) + (and (listp op) + (equal (script-of op) 'S))) + +;;; cell is a collection of {op}s +;;; cell := (phase consts ops) +;;; * phase is a number +;;; * consts is the production of constant {op}s like (Ruv x Ruv y) +;;; * an ops is the production of {op}s +;;; the production of {op}s is a list like (r x p x p y) +;;; * (2) is 2 x^0 +;;; * vacuum cell is (0) +;;; '() is cells +(defun make-cell (phase consts ops) + (cons phase (cons consts ops))) +(defun phase-of (cell) + (car cell)) +(defun consts-of (cell) + (cadr cell)) +(defun ops-of (cell) + (cddr cell)) +(defun string-of (cell) + (append (consts-of cell) (ops-of cell))) +(defun cell? (c) + (and (listp c) + (numberp (phase-of c)))) +(defun rest-op (ops) + (cddr ops)) + +;;; return a list contains only one of x/y/z +;;; _S as a scalar, does not commute with any subscripts +(defun ops-wrt-script (script str) + (cond ((null str) str) + ((or (eql (script-of str) script) + (eql (script-of str) 'S)) + (cons (symbol-of str) + (ops-wrt-script script (rest-op str)))) + (t (ops-wrt-script script (rest-op str))))) + +(defmacro cell-phase-equal? (c1 c2) + `(eql (phase-of ,c1) (phase-of ,c2))) +(defmacro cell-string-equal? (c1 c2) + (let ((gs1 (gensym)) + (gs2 (gensym))) + `(let ((,gs1 (string-of ,c1)) + (,gs2 (string-of ,c2))) + (and ,@(mapcar (lambda (v) + `(equal (ops-wrt-script ',v ,gs1) + (ops-wrt-script ',v ,gs2))) + '(x y z)))))) +(defun cell-equal? (c1 c2) + (or (and (zerop (phase-of c1)) + (zerop (phase-of c2))) + (and (cell-phase-equal? c1 c2) + (cell-string-equal? c1 c2)))) + +;;; product of two cells, return a cell +(defun cell-multiply-num (cell n) + (cond ((zerop n) '()) + (t (make-cell (* (phase-of cell) n) + (consts-of cell) + (ops-of cell))))) +(defun cell-multiply-cell (c1 c2) + (cond ((null c1) '()) + ((null c2) '()) + (t (make-cell (* (phase-of c1) (phase-of c2)) + (append (consts-of c1) (consts-of c2)) + (append (ops-of c1) (ops-of c2)))))) + +;;; cells := (cell cell ...) +;;; is the summation of several cells +;;; * vacuum cells '() == a set of vacuum cell ((0 '())) == 0 +;;;(defmacro make-cells (&rest args) +;;; `(list ,@args)) +(defun make-cells (&rest cs) + cs) +(defun cells? (s) + (and (listp s) + (cell? (car s)))) + +;;; summation of two cells, return a cells +(defun cell-add-cell (c1 c2) + (make-cells c1 c2)) + +;;; cells + cells +(defun num-add-cells (n cs) + (let ((cell-n (make-cell n '() '()))) + (cond ((null cs) (make-cells cell-n)) + ((cell? cs) (cell-add-cell cell-n cs)) + (t (cons cell-n cs))))) +(defun cell-add-cells (c cs) + (cond ((null cs) (make-cells c)) + ((cell? cs) (cell-add-cell c cs)) + (t (cons c cs)))) +(defun cells-add-cells (cs1 cs2) + (cond ((cell? cs1) (cell-add-cells cs1 cs2)) + ((cell? cs2) (append cs1 (make-cells cs2))) + (t (append cs1 cs2)))) + +;;; cells * cells +(defun cells-multiply-num (cs n) + (cond ((zerop n) '()) + ((cell? cs) (make-cells (cell-multiply-num cs n))) + (t (mapcar (lambda (c) (cell-multiply-num c n)) cs)))) +;;; return a cells +(defun cells-multiply-cell (cs c) + (cond ((null c) '()) + ((cell? cs) (make-cells (cell-multiply-cell cs c))) + (t (mapcar (lambda (c1) (cell-multiply-cell c1 c)) cs)))) + +(defun cells-multiply-cells (cs1 cs2) + (cond ((null cs1) cs1) + ((null cs2) cs2) + ((cell? cs2) (cells-multiply-cell cs1 cs2)) + (t (cells-add-cells + (cells-multiply-cell cs1 (car cs2)) + (cells-multiply-cells cs1 (cdr cs2)))))) + +#|| +(defun cells-member? (c cs) + (cond ((null cs) nil) + (t (or (cell-string-equal? c (car cs)) + (cells-member? c (cdr cs)))))) +(defun cells-member-phase-sum (c cs) + (cond ((null cs) 0) + ((cell-string-equal? c (car cs)) + (+ (phase-of (car cs)) + (cells-member-phase-sum c (cdr cs)))) + (t (cells-member-phase-sum c (cdr cs))))) +;; remove c from cs +(defun cells-member-wipe-off (c cs) + (cond ((null cs) cs) + ((cell-string-equal? c (car cs)) + (cells-member-wipe-off c (cdr cs))) + (t (cons (car cs) + (cells-member-wipe-off c (cdr cs)))))) +; return a cells +(defun squeeze-cells (cs) + (cond ((null cs) cs) + ;((cell? cs) (make-cells cs)) + ((last-one? cs) cs) + ((last-two? cs) + (cond ((cell-string-equal? (car cs) (cadr cs)) + (make-cells (make-cell (+ (phase-of (car cs)) + (phase-of (cadr cs))) + (consts-of (car cs)) + (ops-of (car cs))))) + (t cs))) + (t (cons (make-cell (+ (phase-of (car cs)) + (cells-member-phase-sum (car cs) (cdr cs))) + (consts-of (car cs)) + (ops-of (car cs))) + (squeeze-cells (cells-member-wipe-off (car cs) (cdr cs))))))) +||# + +;;; return a cells +(defun norm-ordering (cs c) + ;;(comb (A,...) B)) = (A+B,...) if (ops-of A) == (ops-of B) + ;; or (A,...,B) if (ops-of A) != (ops-of B) + (cond ((cell-string-equal? (car cs) c) + (cons (make-cell (+ (phase-of (car cs)) (phase-of c)) + (consts-of c) + (ops-of c)) + (cdr cs))) + (t (append cs (make-cells c))))) +(defun squeeze-cells (cs) + (cond ((null cs) cs) + ((last-one? cs) cs) + (t (let ((squeeze-first (reduce #'norm-ordering (cdr cs) + :initial-value (make-cells (car cs))))) + (cons (car squeeze-first) + (squeeze-cells (cdr squeeze-first))))))) + +;;; return a cells +(defun remove-vacuum-cell (cs) + (cond ((null cs) cs) + (t (remove-if (lambda (c) (zerop (phase-of c))) + cs)))) + +(defun cells-sum (cs-list) + (remove-vacuum-cell + (squeeze-cells + (cond ((cell? cs-list) (make-cells cs-list)) + (t (reduce #'cells-add-cells cs-list)))))) + +(defun cells-prod (cs-list) + (remove-vacuum-cell + (squeeze-cells + (cond ((cell? cs-list) (make-cells cs-list)) + (t (reduce #'cells-multiply-cells cs-list)))))) + +;;; tissue := (cells cells ...) +;;; + +;;; quaternion = (1, sigma_x, sigma_y, sigma_z) +(defun make-quat (comp1 x y z) + (attach-tag 'quaternion (list comp1 x y z))) +(defun sigma-1 (q) + (car (contents q))) +(defun sigma-x (q) + (cadr (contents q))) +(defun sigma-y (q) + (caddr (contents q))) +(defun sigma-z (q) + (cadddr (contents q))) +(defun quaternion? (q) + (equal (type-tag q) 'quaternion)) + +;(defmacro for-each-q-comps (vs f) +; `(list ,@(for-each-comps-apply '(sigma-1 sigma-x sigma-y sigma-z) vs f))) +(defmacro for-each-q-comps (vs f) + `(list ,@(mapcar (lambda (comp) + `(,f ,@(mapcar (lambda (v) `(,comp ,v)) vs))) + '(sigma-1 sigma-x sigma-y sigma-z)))) + +(defun q-add-num (q1 n) + (make-quat + (num-add-cells n (sigma-1 q1)) + (sigma-x q1) (sigma-y q1) (sigma-z q1))) +(defun q-add-cells (q1 cs) + (make-quat + (cells-sum `(,(sigma-1 q1) ,cs)) + (sigma-x q1) (sigma-y q1) (sigma-z q1))) +(defun q-add-q (q1 q2) + (apply #'make-quat + (for-each-q-comps + (q1 q2) + (lambda (x y) + (cells-sum (list x y)))))) +(defun sum-2q (q1 q2) + (cond ((quaternion? q1) + (cond ((quaternion? q2) (q-add-q q1 q2)) + ((numberp q2) (q-add-num q1 q2)) + (t (q-add-cells q1 q2)))) + ((numberp q1) + (cond ((quaternion? q2) (q-add-num q2 q1)) + ((numberp q2) + (make-quat (make-cell (+ q1 q2) '() '()) + '() '() '())) + (t (make-quat (num-add-cells q1 q2) + '() '() '())))) + (t (cond ((quaternion? q2) (q-add-cells q2 q1)) + ((numberp q2) + (make-quat (num-add-cells q2 q1) + '() '() '())) + (t (make-quat (cells-add-cells q1 q2) + '() '() '())))))) + +;;; q multiply q +(defun q-multiply-num (q n) + (apply #'make-quat + (for-each-q-comps + (q) + (lambda (q-comp) + (cells-multiply-num q-comp n))))) +(defun q-multiply-cells (q cs) + (apply #'make-quat + (for-each-q-comps + (q) + (lambda (q-comp) + (cells-multiply-cells q-comp cs))))) +(defun cells-multiply-q (cs q) + (apply #'make-quat + (for-each-q-comps + (q) + (lambda (q-comp) + (cells-prod (list cs q-comp)))))) +;;; Dirac formulation: +(defmacro -with-q-cross- (q1 q2 comp1 comp2 comp3) + ;; sigma_x = 1 * B_comp1 + A_comp1 * 1 + i (A_comp2 B_comp3 - A_comp3 B_comp2) + `(cells-sum (list (cells-multiply-cells (sigma-1 ,q1) (,comp1 ,q2)) + (cells-multiply-cells (,comp1 ,q1) (sigma-1 ,q2)) + (cells-multiply-num + (cells-multiply-cells (,comp2 ,q1) (,comp3 ,q2)) #C(0 1)) + (cells-multiply-num + (cells-multiply-cells (,comp3 ,q1) (,comp2 ,q2)) #C(0 -1))))) +(defun q-multiply-q (q1 q2) + "\sigma A \sigma B = A \cdot B + i \sigma \cdot A \cross B" + (make-quat + ;; 1 = 1 * 1 + A \cdot B + (cells-sum (for-each-q-comps + (q1 q2) + (lambda (x y) (cells-prod (list x y))))) + ;; sigma_x = 1 * B_x + A_x * 1 + i (A_y B_z - A_z B_y) + (-with-q-cross- q1 q2 sigma-x sigma-y sigma-z) + ;; sigma_y = 1 * B_y + A_y * 1 + i (A_z B_x - A_x B_z) + (-with-q-cross- q1 q2 sigma-y sigma-z sigma-x) + ;; sigma_z = 1 * B_z + A_z * 1 + i (A_x B_y - A_y B_x) + (-with-q-cross- q1 q2 sigma-z sigma-x sigma-y))) +;;; reduce a string of qs, return a quaternion +;;; e.g. (reduce-qs (list rkb rrb rrb rkb)) +(defun contract-2q (q1 q2) + (cond ((quaternion? q1) + (cond ((quaternion? q2) (q-multiply-q q1 q2)) + ((numberp q2) (q-multiply-num q1 q2)) + (t (q-multiply-cells q1 q2)))) + ((numberp q1) + (cond ((quaternion? q2) (q-multiply-num q2 q1)) + ((numberp q2) + (make-quat (make-cell (* q1 q2) '() '()) + '() '() '())) + (t (make-quat (cells-multiply-num q2 q1) + '() '() '())))) + (t (cond ((quaternion? q2) (cells-multiply-q q1 q2)) + ((numberp q2) + (make-quat (cells-multiply-num q1 q2) + '() '() '())) + (t (make-quat (cells-multiply-cells q1 q2) + '() '() '())))))) + +(defun reduce-qs (qs) + (cond ((null qs) qs) + (t (reduce #'contract-2q qs)))) + +;;; vector = (comp-x comp-y comp-z) +(defun make-vec (x y z) + (attach-tag 'vector (list x y z))) +(defun comp-x (vec) + (car (contents vec))) +(defun comp-y (vec) + (cadr (contents vec))) +(defun comp-z (vec) + (caddr (contents vec))) +(defun vector? (v) + (equal (type-tag v) 'vector)) + +;(defmacro for-each-vector-comps (vs f) +; `(list ,@(for-each-comps-apply '(comp-x comp-y comp-z) vs f))) +(defmacro for-each-vector-comps (vs f) + `(list ,@(mapcar (lambda (comp) + `(,f ,@(mapcar (lambda (v) `(,comp ,v)) vs))) + '(comp-x comp-y comp-z)))) + +(defmacro -with-vec-cross- (v1 v2 comp1 comp2) + `(q-add-q (contract-2q (,comp1 ,v1) (,comp2 ,v2)) + (q-multiply-num (contract-2q (,comp2 ,v1) (,comp1 ,v2)) -1))) +(defun v-cross-v (v1 v2) + "vec1 \cross vec2" + (cond ((and (vector? v1) (vector? v2)) + (make-vec (-with-vec-cross- v1 v2 comp-y comp-z) + (-with-vec-cross- v1 v2 comp-z comp-x) + (-with-vec-cross- v1 v2 comp-x comp-y))) + (t (error "v1 v2 must be vectors")))) +(defun v-dot-v (v1 v2) + "dot product" + (cond ((and (vector? v1) (vector? v2)) + (reduce #'q-add-q + (for-each-vector-comps (v1 v2) contract-2q))) + (t (error "v1 v2 must be vectors")))) + +(defun q-multiply-v (q v) + "scalar multiply vector" + (apply #'make-vec + (for-each-vector-comps + (v) + (lambda (x) (contract-2q q x))))) +(defun v-multiply-q (v q) + "vector multiply scalar" + (apply #'make-vec + (for-each-vector-comps + (v) + (lambda (x) (contract-2q x q))))) + +;;; imply reduce-qs, return tensor of quaternions +(defun reduce-vs (vs) + "reduce vectors to generate tensors" + (labels ((reduce-vs-iter (v1 v2) + (cond ((vector? v1) + (apply #'make-vec + (for-each-vector-comps + (v1) + (lambda (x) (reduce-vs-iter x v2))))) + (t (cond ((vector? v2) + (apply #'make-vec + (for-each-vector-comps + (v2) + (lambda (x) (reduce-vs-iter v1 x))))) + (t (contract-2q v1 v2))))))) + (cond ((null vs) vs) + (t (reduce #'reduce-vs-iter vs + :initial-value (make-cell 1 '() '())))))) + +;; vim: ft=lisp diff --git a/pyscfadlib/pyscfadlib/gto/autocode/gen-code.cl b/pyscfadlib/pyscfadlib/gto/autocode/gen-code.cl new file mode 100644 index 00000000..46b30d02 --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/autocode/gen-code.cl @@ -0,0 +1,331 @@ +;;;; +;;;; Copyright (C) 2014-2017 Qiming Sun +;;;; + +(load "utility.cl") +(load "parser.cl") +(load "derivator.cl") + +(defun gen-subscript (cells-streamer raw-script) + (labels ((gen-tex-iter (raw-script) + (cond ((null raw-script) raw-script) + ((vector? raw-script) + (gen-tex-iter (comp-x raw-script)) + (gen-tex-iter (comp-y raw-script)) + (gen-tex-iter (comp-z raw-script))) + ((cells? raw-script) + (funcall cells-streamer raw-script)) + (t (mapcar cells-streamer raw-script))))) + (gen-tex-iter raw-script))) + +(defun convert-from-n-sys (ls n) + (reduce (lambda (x y) (+ (* x n) y)) ls + :initial-value 0)) + +(defun xyz-to-ternary (xyzs) + (cond ((eql xyzs 'x) 0) + ((eql xyzs 'y) 1) + ((eql xyzs 'z) 2) + (t (error " unknown subscript ~a" xyzs)))) + +(defun ternary-subscript (ops) + "convert the polynomial xyz to the ternary" + (cond ((null ops) ops) + (t (convert-from-n-sys (mapcar #'xyz-to-ternary + (remove-if (lambda (x) (eql x 's)) + (scripts-of ops))) + 3)))) +(defun gen-c-block (fout fmt-gout raw-script) + (let ((ginc -1)) + (labels ((c-filter (cell) + (let ((fac (realpart (phase-of cell))) + (const@3 (ternary-subscript (consts-of cell))) + (op@3 (ternary-subscript (ops-of cell)))) + (if (equal fac 1) + (cond ((null const@3) + (if (null op@3) + (format fout " + s\[n\]" ) + (format fout " + s\[~a*SIMDD+n\]" op@3))) + ((null op@3) + (format fout " + c\[~a\]*s\[n\]" const@3)) + (t (format fout " + c\[~a\]*s\[~a*SIMDD+n\]" const@3 op@3))) + (cond ((null const@3) + (if (null op@3) + (format fout " + (~a*s\[n\])" fac) + (format fout " + (~a*s\[~a*SIMDD+n\])" + fac op@3))) + ((null op@3) + (format fout " + (~a*c\[~a\]*s\[n\])" + fac const@3)) + (t (format fout " + (~a*c\[~a\]*s\[~a*SIMDD+n\])" + fac const@3 op@3)))))) + (c-streamer (cs) + (format fout fmt-gout (incf ginc)) + (cond ((null cs) (format fout " 0")) + ((cell? cs) (c-filter cs)) + (t (mapcar #'c-filter cs))) + (format fout ";~%"))) + (gen-subscript #'c-streamer raw-script) + (1+ ginc)))) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;; effective keys are p,r,ri,... +(defun effect-keys (ops) + (remove-if-not (lambda (x) (member x *intvar*)) + ops)) +(defun g?e-of (key) + (case key + ((p ip nabla px py pz) "D_") + ((r x y z ri xi yi zi) "R_") ; the vector origin is on the center of the basis it acts on + ((r0 x0 y0 z0 g) "R0") ; R0 ~ the vector origin is (0,0,0) + ((rc xc yc zc) "RC") ; the vector origin is set in env[PTR_COMMON_ORIG] + ((nabla-rinv nabla-r12 breit-r1 breit-r2) "D_") + (otherwise (error "unknown key ~a~%" key)))) + +(defun dump-header (fout) + (format fout "/* + * Copyright (C) 2014- Qiming Sun + * Description: code generated by gen-code.cl + */ +#include +#include \"gto/grid_ao_drv.h\" +")) + +(defun dump-declare-dri-for-rc (fout i-ops symb) + (when (intersection '(rc xc yc zc) i-ops) + (format fout "double dr~a[3];~%" symb) + (format fout "dr~a[0] = r~a[0] - env[PTR_COMMON_ORIG+0];~%" symb symb) + (format fout "dr~a[1] = r~a[1] - env[PTR_COMMON_ORIG+1];~%" symb symb) + (format fout "dr~a[2] = r~a[2] - env[PTR_COMMON_ORIG+2];~%" symb symb)) + (when (intersection '(ri xi yi zi) i-ops) + (if (intersection '(rc xc yc zc) i-ops) + (error "Cannot declare dri because rc and ri coexist")) + (format fout "double dr~a[3];~%" symb) + (format fout "dr~a[0] = r~a[0] - ri[0];~%" symb symb) + (format fout "dr~a[1] = r~a[1] - ri[1];~%" symb symb) + (format fout "dr~a[2] = r~a[2] - ri[2];~%" symb symb))) + +(defun dump-declare-giao (fout expr) + (let ((n-giao (count 'g expr))) + (when (> n-giao 0) + (format fout "double c[~a];~%" (expt 3 n-giao)) + (loop + for i upto (1- (expt 3 n-giao)) do + (format fout "c[~a] = 1" i) + (loop + for j from (1- n-giao) downto 0 + and res = i then (multiple-value-bind (int res) (floor res (expt 3 j)) + (format fout " * (-ri[~a])" int) + res)) + (format fout ";~%"))))) + +(defun last-bit1 (n) + ; how many 0s follow the last bit 1 + (loop + for i upto 31 + thereis (if (oddp (ash n (- i))) i))) +(defun combo-op (fout fmt-op op-rev ig) + (let* ((right (last-bit1 ig)) + (ig0 (- ig (ash 1 right))) + (op (nth right op-rev))) + (format fout fmt-op (g?e-of op) ig ig0 right))) + +(defun power2-range (n &optional (shift 0)) + (range (+ shift (ash 1 n)) (+ shift (ash 1 (1+ n))))) +(defun dump-combo-op (fout fmt-op op-rev) + (let ((op-len (length op-rev))) + (loop + for right from 0 to (1- op-len) do + (loop + for ig in (power2-range right) do + (combo-op fout fmt-op op-rev ig))))) + +(defun dec-to-ybin (n) + (parse-integer (substitute #\0 #\2 (write-to-string n :base 3)) + :radix 2)) +(defun dec-to-zbin (n) + (parse-integer (substitute #\1 #\2 + (substitute #\0 #\1 + (write-to-string n :base 3))) + :radix 2)) +(defun dump-s-1e (fout n) + (loop + for i upto (1- (expt 3 n)) do + (let* ((ybin (dec-to-ybin i)) + (zbin (dec-to-zbin i)) + (xbin (- (ash 1 n) 1 ybin zbin))) + (format fout "s[~a*SIMDD+n] = e * fx~a[lx*SIMDD+n] * fy~a[ly*SIMDD+n] * fz~a[lz*SIMDD+n];~%" + i xbin ybin zbin)))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defun gen-code-eval-ao (fout intname expr) + (let* ((op-rev (reverse (effect-keys expr))) + (op-len (length op-rev)) + (fx-inc (1+ op-len)) + (raw-script (eval-gto expr)) + (ts1 (car raw-script)) + (sf1 (cadr raw-script)) + (strout (make-string-output-stream)) + (goutinc (gen-c-block strout "buf[~d*SIMDD+n] =" (last1 raw-script))) + (codestr (get-output-stream-string strout)) + (e1comps (if (eql sf1 'sf) 1 4)) + (tensors (/ goutinc e1comps))) + (format fout "/* ~{~a ~}|GTO> */~%" expr) + (format fout "static void shell_eval_~a(double *cgto, double *ri, double *exps, +double *coord, double *alpha, double *coeff, double *env, +int l, int np, int nc, size_t nao, size_t ngrids, size_t bgrids) +{" intname) + (format fout " +const size_t degen = (l+1)*(l+2)/2; +const size_t bgrids0 = (bgrids >= SIMDD) ? (bgrids+1-SIMDD) : 0; +int lx, ly, lz; +size_t i, j, j1, k, l1, n; +double e; +double *pgto; +double *gridx = coord; +double *gridy = coord+BLKSIZE; +double *gridz = coord+BLKSIZE*2; +double fx0[SIMDD*(ANG_MAX+~d)*~a]; +double fy0[SIMDD*(ANG_MAX+~d)*~a]; +double fz0[SIMDD*(ANG_MAX+~d)*~a];~%" + fx-inc (ash 1 op-len) + fx-inc (ash 1 op-len) + fx-inc (ash 1 op-len)) + (loop + for i in (range (1- (ash 1 op-len))) do + (format fout "double *fx~d = fx~d + SIMDD*(ANG_MAX+~d);~%" (1+ i) i fx-inc) + (format fout "double *fy~d = fy~d + SIMDD*(ANG_MAX+~d);~%" (1+ i) i fx-inc) + (format fout "double *fz~d = fz~d + SIMDD*(ANG_MAX+~d);~%" (1+ i) i fx-inc)) + (format fout "double buf[SIMDD*nc*~d];~%" goutinc) + (format fout "double s[SIMDD*~d];~%" (expt 3 op-len)) + (format fout "double *gto0 = cgto;~%") + (loop + for i in (range (1- goutinc)) do + (format fout "double *gto~d = cgto + nao*ngrids*~d;~%" (1+ i) (1+ i))) + (dump-declare-dri-for-rc fout expr "i") + (dump-declare-giao fout expr) + + (format fout " +for (j = 0; j < ~d; j++) { + pgto = cgto + j*nao*ngrids; + for (n = 0; n < degen*nc; n++) { + for (i = 0; i < bgrids; i++) { + pgto[n*ngrids+i] = 0; + } } +}" goutinc) + (format fout " +for (i = 0; i < bgrids0; i+=SIMDD) { + for (k = 0; k < np; k++) { + if (_nonzero_in(exps+k*BLKSIZE+i, SIMDD)) { +for (n = 0; n < SIMDD; n++) { + fx0[n] = 1; + fy0[n] = 1; + fz0[n] = 1; +} +for (lx = 1; lx <= l+~d; lx++) { +for (n = 0; n < SIMDD; n++) { + fx0[lx*SIMDD+n] = fx0[(lx-1)*SIMDD+n] * gridx[i+n]; + fy0[lx*SIMDD+n] = fy0[(lx-1)*SIMDD+n] * gridy[i+n]; + fz0[lx*SIMDD+n] = fz0[(lx-1)*SIMDD+n] * gridz[i+n]; +} }~%" op-len) +;;; generate g_(bin) + (dump-combo-op fout "GTO_~aI(~d, ~d, l+~a);~%" op-rev) +;;; dump result of eval-int + (format fout "for (lx = l, l1 = 0; lx >= 0; lx--) { + for (ly = l - lx; ly >= 0; ly--, l1++) { + lz = l - lx - ly; + for (n = 0; n < SIMDD; n++) { + e = exps[k*BLKSIZE+i+n];~%") + (dump-s-1e fout op-len) + (format fout " } + for (n = 0; n < SIMDD; n++) {~%") + (format fout "~a" codestr) + (format fout " } + for (j = 0, j1 = l1; j < nc; j++, j1+=degen) { +#pragma GCC ivdep + for (n = 0; n < SIMDD; n++) {~%") + (loop + for i in (range goutinc) do + (format fout "gto~d[j1*ngrids+i+n] += buf[~d*SIMDD+n] * coeff[j*np+k];~%" i i)) + (format fout "} } } } } } }~%") + (format fout " +if (i < bgrids) { + for (k = 0; k < np; k++) { + if (_nonzero_in(exps+k*BLKSIZE+i, bgrids-i)) { +for (n = 0; n < SIMDD; n++) { + fx0[n] = 1; + fy0[n] = 1; + fz0[n] = 1; +} +for (lx = 1; lx <= l+~d; lx++) { +for (n = 0; n < SIMDD; n++) { + fx0[lx*SIMDD+n] = fx0[(lx-1)*SIMDD+n] * gridx[i+n]; + fy0[lx*SIMDD+n] = fy0[(lx-1)*SIMDD+n] * gridy[i+n]; + fz0[lx*SIMDD+n] = fz0[(lx-1)*SIMDD+n] * gridz[i+n]; +} }~%" op-len) +;;; generate g_(bin) + (dump-combo-op fout "GTO_~aI(~d, ~d, l+~a);~%" op-rev) +;;; dump result of eval-int + (format fout "for (lx = l, l1 = 0; lx >= 0; lx--) { + for (ly = l - lx; ly >= 0; ly--, l1++) { + lz = l - lx - ly; + for (n = 0; n < SIMDD; n++) { + e = exps[k*BLKSIZE+i+n];~%") + (dump-s-1e fout op-len) + (format fout " } + for (n = 0; n < SIMDD; n++) {~%") + (format fout "~a" codestr) + (format fout " } + for (j = 0, j1 = l1; j < nc; j++, j1+=degen) { + for (n = 0; n < bgrids-i; n++) {~%") + (loop + for i in (range goutinc) do + (format fout "gto~d[j1*ngrids+i+n] += buf[~d*SIMDD+n] * coeff[j*np+k];~%" i i)) + (format fout "} } } } } } }~%") + (format fout "}~%") + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; _cart + (format fout "void ~a_cart(int ngrids, int *shls_slice, int *ao_loc, +double *ao, double *coord, uint8_t *non0table, +int *atm, int natm, int *bas, int nbas, double *env) +{~%" intname) + (format fout "int param[] = {~d, ~d};~%" e1comps tensors) + (format fout "GTOeval_cart_drv(shell_eval_~a, GTOprim_exp, ~a, +ngrids, param, shls_slice, ao_loc, ao, coord, non0table, +atm, natm, bas, nbas, env);~%}~%" intname (factor-of expr)) +;;; _sph + (format fout "void ~a_sph(int ngrids, int *shls_slice, int *ao_loc, +double *ao, double *coord, uint8_t *non0table, +int *atm, int natm, int *bas, int nbas, double *env) +{~%" intname) + (format fout "int param[] = {~d, ~d};~%" e1comps tensors) + (format fout "GTOeval_sph_drv(shell_eval_~a, GTOprim_exp, ~a, +ngrids, param, shls_slice, ao_loc, ao, coord, non0table, +atm, natm, bas, nbas, env);~%}~%" intname (factor-of expr)) +;;; _spinor + (format fout "void ~a_spinor(int ngrids, int *shls_slice, int *ao_loc, +double complex *ao, double *coord, uint8_t *non0table, +int *atm, int natm, int *bas, int nbas, double *env) +{~%" intname) + (format fout "int param[] = {~d, ~d};~%" e1comps tensors) + (format fout "GTOeval_spinor_drv(shell_eval_~a, GTOprim_exp, CINTc2s_~aket_spinor_~a, ~a, +ngrids, param, shls_slice, ao_loc, ao, coord, non0table, atm, natm, bas, nbas, env);~%}~%" + intname + (if (eql ts1 'ts) "" "i") + (if (eql sf1 'sf) "sf1" "si1") + (factor-of expr)))) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defun gen-eval (filename &rest items) + (with-open-file (fout (mkstr filename) + :direction :output :if-exists :supersede) + (dump-header fout) + (flet ((gen-code (item) + (let ((intname (mkstr (car item))) + (raw-infix (cadr item))) + (gen-code-eval-ao fout intname raw-infix)))) + (mapcar #'gen-code items)))) + +;; vim: ft=lisp diff --git a/pyscfadlib/pyscfadlib/gto/autocode/parser.cl b/pyscfadlib/pyscfadlib/gto/autocode/parser.cl new file mode 100644 index 00000000..a4819ebe --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/autocode/parser.cl @@ -0,0 +1,312 @@ +;;;; +;;;; Copyright (C) 2014-2017 Qiming Sun +;;;; + +;;; parse the expression such as ( op,op |h| op,op ) + +(load "utility.cl") +(load "derivator.cl") + +;;; *operator*: precedence from high to low +;;; translate these keys in function dress-vec and dress-comp .. +(defparameter *operator* '(vec comp-x comp-y comp-z cross dot)) +;;; p = -i \nabla +;;; ip = \nabla +;;; r0 = r - (0,0,0) +;;; rc = r - R(env[PTR_COMMON_ORIG]) +;;; ri = r - R_i +;;; rj = r - R_j +;;; rk = r - R_k +;;; rl = r - R_l +;;; r = ri/rj/rk/rl; associate with the basis it acts on +;;; g = -i R_m cross r0 +;;; +;;; sticker symbol *, which sticks the decorated operator to op or ket-ops +;;; (bra-ops ... p* |op| ket-ops) +;;; the p* in the bra (| will be evaluated with |op| or |ket-ops) (if they +;;; have cross or dot operators). Using the sticker symbol for p/nabla +;;; to prevent p/nabla operators comutating with the next p/nabla operators + +;;; rscalar? +(defparameter *intvar* '(p ip nabla px py pz + p* ip* nabla* px* py* pz* + r r0 rc ri g + x x0 xc xi + y y0 yc yi + z z0 zc zi)) +(defparameter *var-vec* '(p ip nabla p* ip* nabla* r r0 rc ri rj rk rl g)) + +(defun breit-int? (expr) + (or (member 'breit-r1 expr) (member 'breit-r2 expr))) +;;;;;; convert to reversed polish notation ;;;;;;;;;;; +(defun complex? (n) + (not (zerop (imagpart n)))) + +(defun unary-op? (o) + (or (eql o 'vec) + (eql o 'comp-x) + (eql o 'comp-y) + (eql o 'comp-z))) +(defun binary-op? (o) + (or (eql o 'cross) + (eql o 'dot))) + +(defun parenthesis (&rest tokens) + tokens) +(defun pre-unary (o seq) + (cond ((null seq) seq) + ((atom seq) seq) + ((eql (car seq) o) + (cons (parenthesis (car seq) + (pre-unary o (cadr seq))) + (pre-unary o (cddr seq)))) + (t (cons (pre-unary o (car seq)) + (pre-unary o (cdr seq)))))) +(defun pre-binary (o-pre o seq) + (cond ((null seq) (list o-pre)) + ((atom seq) seq) + ((eql (car seq) o) + (pre-binary (parenthesis o-pre + (car seq) + (pre-binary '() o (cadr seq))) + o (cddr seq))) + ((null o-pre) + (pre-binary (pre-binary '() o (car seq)) + o (cdr seq))) + (t (cons o-pre + (pre-binary (pre-binary '() o (car seq)) + o (cdr seq)))))) +(defun precede (seq o) + "use () to increase the priority of operator o" + (cond ((unary-op? o) (pre-unary o seq)) + ((binary-op? o) (pre-binary '() o seq)) + (t (error "unknown operator ~a~%" o)))) +(defun infix-to-rpn (tokens) + (labels ((rpn-iter (rpn-stack seq) + ;; return a rpn stack + (cond ((null seq) rpn-stack) + ((atom seq) (cons seq rpn-stack)) + ((member (car seq) *operator*) + (rpn-iter (cons (car seq) + (rpn-iter rpn-stack (cadr seq))) + (cddr seq))) + (t (rpn-iter (rpn-iter rpn-stack (car seq)) (cdr seq)))))) + (reverse (rpn-iter '() (reduce #'precede *operator* + :initial-value tokens))))) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;;; convert infix expression to set of vectors +(defun dress-other (item) + "based on the symbol of item, return a cell, a quaternion or a vector" + (case item + ((sigma) ; \vec{\sigma} + (make-vec (make-quat '(0 ()) '(1 ()) '(0 ()) '(0 ())) + (make-quat '(0 ()) '(0 ()) '(1 ()) '(0 ())) + (make-quat '(0 ()) '(0 ()) '(0 ()) '(1 ())))) + ((r ri rj rk rl r0 rc nabla) + (make-vec (make-cell 1 '() `(,item x)) + (make-cell 1 '() `(,item y)) + (make-cell 1 '() `(,item z)))) + ((p) (make-vec (make-cell #C(0 -1) '() '(nabla x)) + (make-cell #C(0 -1) '() '(nabla y)) + (make-cell #C(0 -1) '() '(nabla z)))) + ((g) ; -R_m cross r0 + (v-cross-v (make-vec (make-cell #C(0 1) '(Rm x) '()) + (make-cell #C(0 1) '(Rm y) '()) + (make-cell #C(0 1) '(Rm z) '())) + (make-vec (make-cell 1 '() '(r0 x)) + (make-cell 1 '() '(r0 y)) + (make-cell 1 '() '(r0 z))))) + ((x y z) (make-cell 1 '() (make-op 'r item))) + ((x0) (make-cell 1 '() (make-op 'r0 'x))) + ((y0) (make-cell 1 '() (make-op 'r0 'y))) + ((z0) (make-cell 1 '() (make-op 'r0 'z))) + ((xc) (make-cell 1 '() (make-op 'rc 'x))) + ((yc) (make-cell 1 '() (make-op 'rc 'y))) + ((zc) (make-cell 1 '() (make-op 'rc 'z))) + ((xi) (make-cell 1 '() (make-op 'ri 'x))) + ((yi) (make-cell 1 '() (make-op 'ri 'y))) + ((zi) (make-cell 1 '() (make-op 'ri 'z))) + ((xj) (make-cell 1 '() (make-op 'rj 'x))) + ((yj) (make-cell 1 '() (make-op 'rj 'y))) + ((zj) (make-cell 1 '() (make-op 'rj 'z))) + ((xk) (make-cell 1 '() (make-op 'rk 'x))) + ((yk) (make-cell 1 '() (make-op 'rk 'y))) + ((zk) (make-cell 1 '() (make-op 'rk 'z))) + ((xl) (make-cell 1 '() (make-op 'rl 'x))) + ((yl) (make-cell 1 '() (make-op 'rl 'y))) + ((zl) (make-cell 1 '() (make-op 'rl 'z))) + ((px) (make-cell #C(0 -1) '() '(nabla z))) + ((py) (make-cell #C(0 -1) '() '(nabla y))) + ((pz) (make-cell #C(0 -1) '() '(nabla z))) + ;((ipx nablax) (make-cell 1 '() '(nabla x))) + ;((ipy nablay) (make-cell 1 '() '(nabla y))) + ;((ipz nablaz) (make-cell 1 '() '(nabla z))) + (otherwise (if (numberp item) + (make-cell item '() '()) ; factor + (make-cell 1 (make-op item 'S) '()))))) ; constant; 'S indicates a scalar +(defun dress-comp (comp item) + (cond ((vector? item) (funcall comp item)) + ((cell? item) + (let* ((n (phase-of item)) + (const (consts-of item)) + (op (ops-of item)) + (script (funcall comp (make-vec 'x 'y 'z)))) + (cond ((scalar? op) + (make-cell n const (make-op (symbol-of op) script))) + ((scalar? const) + (make-cell n (make-op (symbol-of const) script) op)) + (t item)))) + (t item))) +(defun dress-vec (item) + (cond ((vector? item) item) + ((quaternion? item) + (make-vec item item item)) + ((cell? item) + (let* ((n (phase-of item)) + (const (consts-of item)) + (op (ops-of item))) + (cond ((scalar? op) ; extend scalar to vector + (make-vec (make-cell n const (make-op (symbol-of op) 'x)) + (make-cell n const (make-op (symbol-of op) 'y)) + (make-cell n const (make-op (symbol-of op) 'z)))) + ((scalar? const) + (make-vec (make-cell n (make-op (symbol-of const) 'x) op) + (make-cell n (make-op (symbol-of const) 'y) op) + (make-cell n (make-op (symbol-of const) 'z) op))) + (t item)))) + (t (error "unknown type ~a~%" item)))) + +(defun reduce-rpn (rpn) + "reduce the reversed polish notation to a set of vectors" + (flet ((reduce-rpn-iter (stack token) + (case token + (('()) stack) + ((vec) (cons (dress-vec (car stack)) + (cdr stack))) + ((dot) (cons (v-dot-v (cadr stack) (car stack)) + (cddr stack))) + ((cross) (cons (v-cross-v (cadr stack) (car stack)) + (cddr stack))) + ((comp-x comp-y comp-z) + ; place comp-* after dot/cross to extract one + ; component of dot/cross production + (cons (dress-comp token (car stack)) + (cdr stack))) + (otherwise (cons (dress-other token) stack))))) + (reverse (reduce #'reduce-rpn-iter rpn + :initial-value '())))) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defun q?-in-vs (vsfunc qfunc vs) + "query and apply func on each q in vs" + (cond ((vector? vs) + (apply vsfunc + (for-each-vector-comps + (vs) + (lambda (x) (q?-in-vs vsfunc qfunc x))))) + (t (funcall qfunc vs)))) ;either cellss or quaternion or nil + +(defun query-q-in-vs (func vs) + (flet ((f-and (&rest args) (every #'identity args))) + (q?-in-vs #'f-and func vs))) +(defun cells-complex? (cs) + (or (null cs) + (cond ((cell? cs) (complex? (phase-of cs))) + (t (complex? (phase-of (car cs))))))) +(defun cells-real? (cs) + (or (null cs) + (cond ((cell? cs) (zerop (imagpart (phase-of cs)))) + (t (zerop (imagpart (phase-of (car cs)))))))) +(defun ts? (q) + (cond ((null q) t) + ((or (cell? q) (cells? q)) + (cells-real? (car q))) + ((quaternion? q) + (and (cells-real? (sigma-1 q)) + (cells-complex? (sigma-x q)) + (cells-complex? (sigma-y q)) + (cells-complex? (sigma-z q)))))) +(defun tas? (q) + (cond ((null q) t) + ((or (cell? q) (cells? q)) + (cells-complex? (car q))) + ((quaternion? q) + (and (cells-complex? (sigma-1 q)) + (cells-real? (sigma-x q)) + (cells-real? (sigma-y q)) + (cells-real? (sigma-z q)))))) +(defun label-ts (vs) + (cond ((query-q-in-vs #'ts? vs) 'ts) + ((query-q-in-vs #'tas? vs) 'tas) + (t (error "neither ts nor tas~%")))) + +(defun spin-free? (vs) + (cond ((null vs) t) + ((vector? vs) + (and (spin-free? (comp-x vs)) + (spin-free? (comp-y vs)) + (spin-free? (comp-z vs)))) + ((or (cell? vs) (cells? vs)) t) + (t (and (null (sigma-x vs)) + (null (sigma-y vs)) + (null (sigma-z vs)))))) +(defun label-sf (vs) + (if (query-q-in-vs #'spin-free? vs) + 'sf + 'si)) ; spin included + +(defun map-q-in-vs (func vs) + (q?-in-vs #'make-vec func vs)) +;;;ts = [1 is_x is_y is_z], dump [s_x s_y s_z 1] +;;;tas = [i s_x s_y s_z] = [1, -is_x -is_y -is_z] * i, dump [-s_x -s_y -s_z 1] +(defun plain-ts (q) + (list (cells-multiply-num (sigma-x q) #C(0 -1)) + (cells-multiply-num (sigma-y q) #C(0 -1)) + (cells-multiply-num (sigma-z q) #C(0 -1)) + (sigma-1 q))) +(defun plain-tas (q) + (list (cells-multiply-num (sigma-x q) -1) + (cells-multiply-num (sigma-y q) -1) + (cells-multiply-num (sigma-z q) -1) + (cells-multiply-num (sigma-1 q) #C(0 -1)))) +(defun filter-ifnot-sf (plain-q) + (cadddr plain-q)) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defun factor-of (raw-infix) + "return realpart and phase" + (let ((fac (* (apply #'* (remove-if-not #'numberp raw-infix)) + (expt .5 (count 'g raw-infix))))) + (cond ((zerop (imagpart fac)) + (values fac 1)) + ((zerop (realpart fac)) + (values (imagpart fac) #C(0 1))) + (t (error "cannot handle complex factor ~a~%" fac))))) + +(defun format-vs (phase expr) + (let* ((ops (cons phase expr)) + (vs (reduce-vs (reduce-rpn (infix-to-rpn ops)))) + (ts (label-ts vs)) + (sf (label-sf vs)) + (p-vs (if (eql ts 'ts) + (map-q-in-vs #'plain-ts vs) + (map-q-in-vs #'plain-tas vs)))) + (list ts sf (if (eql sf 'sf) + (map-q-in-vs #'filter-ifnot-sf p-vs) + p-vs)))) + +(defun eval-gto (expr) + (let ((unknow (remove-if (lambda (x) + (or (numberp x) + (member x '(sigma)) + (member x *operator*) + (member x *intvar*))) + expr))) + (if (> (length unknow) 0) + (format t "//Warning: unknown operators: ~a" unknow))) + (let ((phasefac (nth-value 1 (factor-of expr)))) + (format-vs phasefac expr))) + + +;; vim: ft=lisp diff --git a/pyscfadlib/pyscfadlib/gto/autocode/utility.cl b/pyscfadlib/pyscfadlib/gto/autocode/utility.cl new file mode 100644 index 00000000..cb897dfd --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/autocode/utility.cl @@ -0,0 +1,47 @@ +;;;; +;;;; Copyright (C) 2014-2017 Qiming Sun +;;;; + +(defun last-one? (lst) + (null (cdr lst))) +(defun last-two? (lst) + (null (cddr lst))) + +(defmacro caddddr (l) + `(nth 4 ,l)) +(defmacro cadddddr (l) + `(nth 5 ,l)) + +(defun last1 (lst) + (car (last lst))) + +(defun split-if (fn lst) + (let ((acc nil)) + (do ((src lst (cdr src))) + ((or (null src) (funcall fn (car src))) + (values (nreverse acc) src)) + (push (car src) acc)))) + + +(defun mapa-b (fn a b &optional (step 1)) + (do ((i a (+ i step)) + (result nil)) + ((> i b) (nreverse result)) + (push (funcall fn i) result))) + +(defun range (n &optional m) + (cond ((null m) + (mapa-b #'1+ -1 (- n 2))) + (t (mapa-b #'1+ (1- n) (- m 2))))) + +;;; > (mkstr pi " pieces of " 'pi) +;;; "3.141592653589793 pieces of PI" +(defun mkstr (&rest args) + (with-output-to-string (s) + (dolist (a args) (princ a s)))) + + +(defun for-each-comps-apply (comps vs f) + (mapcar (lambda (comp) + `(,f ,(mapcar (lambda (v) `(,comp ,v)) vs))) + comps)) diff --git a/pyscfadlib/pyscfadlib/gto/deriv1.c b/pyscfadlib/pyscfadlib/gto/deriv1.c new file mode 100644 index 00000000..89b14227 --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/deriv1.c @@ -0,0 +1,524 @@ +/* Copyright 2014-2018,2021 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +#include +#include +#include "grid_ao_drv.h" +#include "vhf/fblas.h" + +#define MIN(X,Y) ((X)<(Y)?(X):(Y)) +#define MAX(X,Y) ((X)>(Y)?(X):(Y)) + +double CINTcommon_fac_sp(int l); + +int GTOcontract_exp0(double *ectr, double *coord, double *alpha, double *coeff, + int l, int nprim, int nctr, size_t ngrids, double fac) +{ + size_t i, j, k; + double arr, eprim; + double rr[BLKSIZE]; + double *gridx = coord; + double *gridy = coord+BLKSIZE; + double *gridz = coord+BLKSIZE*2; + +#pragma GCC ivdep + for (i = 0; i < ngrids; i++) { + rr[i] = gridx[i]*gridx[i] + gridy[i]*gridy[i] + gridz[i]*gridz[i]; + } + + for (i = 0; i < nctr*BLKSIZE; i++) { + ectr[i] = 0; + } + for (j = 0; j < nprim; j++) { + for (i = 0; i < ngrids; i++) { + arr = alpha[j] * rr[i]; + eprim = exp(-arr) * fac; + for (k = 0; k < nctr; k++) { + ectr[k*BLKSIZE+i] += eprim * coeff[k*nprim+j]; + } + } } + return 1; +} + +/* + * deriv 0: exp(-ar^2) x^n + * deriv 1: exp(-ar^2)[nx^{n-1} - 2ax^{n+1}] + * deriv 2: exp(-ar^2)[n(n-1)x^{n-2} - 2a(2n+1)x^n + 4a^2x^{n+2}] + * deriv 3: exp(-ar^2)[n(n-1)(n-2)x^{n-3} - 2a3n^2x^{n-1} + 4a^2(3n+3)x^{n+1} - 8a^3x^{n+3}] + * deriv 4: exp(-ar^2)[n(n-1)(n-2)(n-3)x^{n-4} - 2a(4n^3-6n^2+2)x^n{-2} + * + 4a^2(6n^2+6n+3)x^n - 8a(4n+6)x^{n+2} + 16a^4x^{n+4}] + */ + +// pre-contracted grid AO evaluator +// contracted factors = \sum c_{i} exp(-a_i*r_i**2) +void GTOshell_eval_grid_cart(double *gto, double *ri, double *exps, + double *coord, double *alpha, double *coeff, + double *env, int l, int np, int nc, + size_t nao, size_t ngrids, size_t blksize) +{ + int lx, ly, lz; + size_t i, k; + double buf[(LMAX+1)*3 * BLKSIZE + 8]; + double *xpows = ALIGN8_UP(buf); + double *ypows = xpows + (LMAX+1) * BLKSIZE; + double *zpows = ypows + (LMAX+1) * BLKSIZE; + double *gridx = coord; + double *gridy = coord+BLKSIZE; + double *gridz = coord+BLKSIZE*2; + + switch (l) { + case 0: + for (k = 0; k < nc; k++) { + for (i = 0; i < blksize; i++) { + gto[k*ngrids+i] = exps[k*BLKSIZE+i]; + } + } + break; + case 1: + for (k = 0; k < nc; k++) { +#pragma GCC ivdep + for (i = 0; i < blksize; i++) { + gto[ i] = gridx[i] * exps[k*BLKSIZE+i]; + gto[1*ngrids+i] = gridy[i] * exps[k*BLKSIZE+i]; + gto[2*ngrids+i] = gridz[i] * exps[k*BLKSIZE+i]; + } + gto += ngrids * 3; + } + break; + case 2: + for (k = 0; k < nc; k++) { +#pragma GCC ivdep + for (i = 0; i < blksize; i++) { + gto[ i] = exps[k*BLKSIZE+i] * gridx[i] * gridx[i]; // xx + gto[1*ngrids+i] = exps[k*BLKSIZE+i] * gridx[i] * gridy[i]; // xy + gto[2*ngrids+i] = exps[k*BLKSIZE+i] * gridx[i] * gridz[i]; // xz + gto[3*ngrids+i] = exps[k*BLKSIZE+i] * gridy[i] * gridy[i]; // yy + gto[4*ngrids+i] = exps[k*BLKSIZE+i] * gridy[i] * gridz[i]; // yz + gto[5*ngrids+i] = exps[k*BLKSIZE+i] * gridz[i] * gridz[i]; // zz + } + gto += ngrids * 6; + } + break; + case 3: + for (k = 0; k < nc; k++) { +#pragma GCC ivdep + for (i = 0; i < blksize; i++) { + gto[ i] = exps[k*BLKSIZE+i] * gridx[i] * gridx[i] * gridx[i]; // xxx + gto[1*ngrids+i] = exps[k*BLKSIZE+i] * gridx[i] * gridx[i] * gridy[i]; // xxy + gto[2*ngrids+i] = exps[k*BLKSIZE+i] * gridx[i] * gridx[i] * gridz[i]; // xxz + gto[3*ngrids+i] = exps[k*BLKSIZE+i] * gridx[i] * gridy[i] * gridy[i]; // xyy + gto[4*ngrids+i] = exps[k*BLKSIZE+i] * gridx[i] * gridy[i] * gridz[i]; // xyz + gto[5*ngrids+i] = exps[k*BLKSIZE+i] * gridx[i] * gridz[i] * gridz[i]; // xzz + gto[6*ngrids+i] = exps[k*BLKSIZE+i] * gridy[i] * gridy[i] * gridy[i]; // yyy + gto[7*ngrids+i] = exps[k*BLKSIZE+i] * gridy[i] * gridy[i] * gridz[i]; // yyz + gto[8*ngrids+i] = exps[k*BLKSIZE+i] * gridy[i] * gridz[i] * gridz[i]; // yzz + gto[9*ngrids+i] = exps[k*BLKSIZE+i] * gridz[i] * gridz[i] * gridz[i]; // zzz + } + gto += ngrids * 10; + } + break; + default: + for (k = 0; k < nc; k++) { + for (i = 0; i < blksize; i++) { + xpows[i] = 1; + ypows[i] = 1; + zpows[i] = 1; + } + for (lx = 1; lx <= l; lx++) { +#pragma GCC ivdep + for (i = 0; i < blksize; i++) { + xpows[lx*BLKSIZE+i] = xpows[(lx-1)*BLKSIZE+i] * gridx[i]; + ypows[lx*BLKSIZE+i] = ypows[(lx-1)*BLKSIZE+i] * gridy[i]; + zpows[lx*BLKSIZE+i] = zpows[(lx-1)*BLKSIZE+i] * gridz[i]; + } + } + for (lx = l; lx >= 0; lx--) { + for (ly = l - lx; ly >= 0; ly--) { + lz = l - lx - ly; +#pragma GCC ivdep + for (i = 0; i < blksize; i++) { + gto[i] = xpows[lx*BLKSIZE+i] + * ypows[ly*BLKSIZE+i] + * zpows[lz*BLKSIZE+i]*exps[k*BLKSIZE+i]; + } + gto += ngrids; + } } + } + } +} + +int GTOcontract_exp1(double *ectr, double *coord, double *alpha, double *coeff, + int l, int nprim, int nctr, size_t ngrids, double fac) +{ + size_t i, j, k; + double arr, eprim; + double rr[BLKSIZE]; + double *gridx = coord; + double *gridy = coord+BLKSIZE; + double *gridz = coord+BLKSIZE*2; + double *ectr_2a = ectr + NPRIMAX*BLKSIZE; + double coeff2a[NPRIMAX*NPRIMAX]; + +#pragma GCC ivdep + for (i = 0; i < ngrids; i++) { + rr[i] = gridx[i]*gridx[i] + gridy[i]*gridy[i] + gridz[i]*gridz[i]; + } + + for (i = 0; i < nctr * BLKSIZE; i++) { + ectr [i] = 0; + ectr_2a[i] = 0; + } + // -2 alpha_i C_ij exp(-alpha_i r_k^2) + for (i = 0; i < nctr; i++) { + for (j = 0; j < nprim; j++) { + coeff2a[i*nprim+j] = -2.*alpha[j] * coeff[i*nprim+j]; + } } + + for (j = 0; j < nprim; j++) { + for (i = 0; i < ngrids; i++) { + arr = alpha[j] * rr[i]; + eprim = exp(-arr) * fac; + for (k = 0; k < nctr; k++) { + ectr [k*BLKSIZE+i] += eprim * coeff [k*nprim+j]; + ectr_2a[k*BLKSIZE+i] += eprim * coeff2a[k*nprim+j]; + } + } } + return 1; +} + +void GTOshell_eval_grid_ip_cart(double *gto, double *ri, double *exps, + double *coord, double *alpha, double *coeff, + double *env, int l, int np, int nc, + size_t nao, size_t ngrids, size_t blksize) +{ + const size_t degen = (l+1)*(l+2)/2; + int lx, ly, lz; + size_t i, k, n; + double ax, ay, az, tmp, e2a, e, rx, ry, rz; + double ce[6]; + double rr[10]; + double *gridx = coord; + double *gridy = coord+BLKSIZE; + double *gridz = coord+BLKSIZE*2; + double *gtox = gto; + double *gtoy = gto + nao * ngrids; + double *gtoz = gto + nao * ngrids * 2; + double *exps_2a = exps + NPRIMAX*BLKSIZE; + double buf[(LMAX+2)*3 * BLKSIZE + 8]; + double *xpows_1less_in_power = ALIGN8_UP(buf); + double *ypows_1less_in_power = xpows_1less_in_power + (LMAX+2)* BLKSIZE; + double *zpows_1less_in_power = ypows_1less_in_power + (LMAX+2)* BLKSIZE; + double *xpows = xpows_1less_in_power + BLKSIZE; + double *ypows = ypows_1less_in_power + BLKSIZE; + double *zpows = zpows_1less_in_power + BLKSIZE; + + switch (l) { + case 0: + for (k = 0; k < nc; k++) { +#pragma GCC ivdep + for (i = 0; i < blksize; i++) { + gtox[i] = exps_2a[k*BLKSIZE+i] * gridx[i]; + gtoy[i] = exps_2a[k*BLKSIZE+i] * gridy[i]; + gtoz[i] = exps_2a[k*BLKSIZE+i] * gridz[i]; + } + gtox += ngrids; + gtoy += ngrids; + gtoz += ngrids; + } + break; + case 1: + for (k = 0; k < nc; k++) { +#pragma GCC ivdep + for (i = 0; i < blksize; i++) { + gtox[ i] = exps_2a[k*BLKSIZE+i] * gridx[i] * gridx[i] + exps[k*BLKSIZE+i]; + gtox[1*ngrids+i] = exps_2a[k*BLKSIZE+i] * gridx[i] * gridy[i]; + gtox[2*ngrids+i] = exps_2a[k*BLKSIZE+i] * gridx[i] * gridz[i]; + gtoy[ i] = exps_2a[k*BLKSIZE+i] * gridy[i] * gridx[i]; + gtoy[1*ngrids+i] = exps_2a[k*BLKSIZE+i] * gridy[i] * gridy[i] + exps[k*BLKSIZE+i]; + gtoy[2*ngrids+i] = exps_2a[k*BLKSIZE+i] * gridy[i] * gridz[i]; + gtoz[ i] = exps_2a[k*BLKSIZE+i] * gridz[i] * gridx[i]; + gtoz[1*ngrids+i] = exps_2a[k*BLKSIZE+i] * gridz[i] * gridy[i]; + gtoz[2*ngrids+i] = exps_2a[k*BLKSIZE+i] * gridz[i] * gridz[i] + exps[k*BLKSIZE+i]; + } + gtox += ngrids * 3; + gtoy += ngrids * 3; + gtoz += ngrids * 3; + } + break; + case 2: + for (k = 0; k < nc; k++) { + for (i = 0; i < blksize; i++) { + if (NOTZERO(exps[k*BLKSIZE+i])) { + e = exps[k*BLKSIZE+i]; + e2a = exps_2a[k*BLKSIZE+i]; + rx = gridx[i]; + ry = gridy[i]; + rz = gridz[i]; + ax = e2a * rx; + ay = e2a * ry; + az = e2a * rz; + ce[0] = rx * e; + ce[1] = ry * e; + ce[2] = rz * e; + rr[0] = rx * rx; // xx + rr[1] = rx * ry; // xy + rr[2] = rx * rz; // xz + rr[3] = ry * ry; // yy + rr[4] = ry * rz; // yz + rr[5] = rz * rz; // zz + gtox[ i] = ax * rr[0] + 2 * ce[0]; + gtox[1*ngrids+i] = ax * rr[1] + ce[1]; + gtox[2*ngrids+i] = ax * rr[2] + ce[2]; + gtox[3*ngrids+i] = ax * rr[3]; + gtox[4*ngrids+i] = ax * rr[4]; + gtox[5*ngrids+i] = ax * rr[5]; + gtoy[ i] = ay * rr[0]; + gtoy[1*ngrids+i] = ay * rr[1] + ce[0]; + gtoy[2*ngrids+i] = ay * rr[2]; + gtoy[3*ngrids+i] = ay * rr[3] + 2 * ce[1]; + gtoy[4*ngrids+i] = ay * rr[4] + ce[2]; + gtoy[5*ngrids+i] = ay * rr[5]; + gtoz[ i] = az * rr[0]; + gtoz[1*ngrids+i] = az * rr[1]; + gtoz[2*ngrids+i] = az * rr[2] + ce[0]; + gtoz[3*ngrids+i] = az * rr[3]; + gtoz[4*ngrids+i] = az * rr[4] + ce[1]; + gtoz[5*ngrids+i] = az * rr[5] + 2 * ce[2]; + } else { + gtox[ i] = 0; + gtox[1*ngrids+i] = 0; + gtox[2*ngrids+i] = 0; + gtox[3*ngrids+i] = 0; + gtox[4*ngrids+i] = 0; + gtox[5*ngrids+i] = 0; + gtoy[ i] = 0; + gtoy[1*ngrids+i] = 0; + gtoy[2*ngrids+i] = 0; + gtoy[3*ngrids+i] = 0; + gtoy[4*ngrids+i] = 0; + gtoy[5*ngrids+i] = 0; + gtoz[ i] = 0; + gtoz[1*ngrids+i] = 0; + gtoz[2*ngrids+i] = 0; + gtoz[3*ngrids+i] = 0; + gtoz[4*ngrids+i] = 0; + gtoz[5*ngrids+i] = 0; + } + } + gtox += ngrids * 6; + gtoy += ngrids * 6; + gtoz += ngrids * 6; + } + break; + case 3: + for (k = 0; k < nc; k++) { + for (i = 0; i < blksize; i++) { + if (NOTZERO(exps[k*BLKSIZE+i])) { + e = exps[k*BLKSIZE+i]; + e2a = exps_2a[k*BLKSIZE+i]; + rx = gridx[i]; + ry = gridy[i]; + rz = gridz[i]; + ax = e2a * rx; + ay = e2a * ry; + az = e2a * rz; + ce[0] = rx * rx * e; + ce[1] = rx * ry * e; + ce[2] = rx * rz * e; + ce[3] = ry * ry * e; + ce[4] = ry * rz * e; + ce[5] = rz * rz * e; + rr[0] = rx * rx * rx; // xxx + rr[1] = rx * rx * ry; // xxy + rr[2] = rx * rx * rz; // xxz + rr[3] = rx * ry * ry; // xyy + rr[4] = rx * ry * rz; // xyz + rr[5] = rx * rz * rz; // xzz + rr[6] = ry * ry * ry; // yyy + rr[7] = ry * ry * rz; // yyz + rr[8] = ry * rz * rz; // yzz + rr[9] = rz * rz * rz; // zzz + gtox[ i] = ax * rr[0] + 3 * ce[0]; + gtox[1*ngrids+i] = ax * rr[1] + 2 * ce[1]; + gtox[2*ngrids+i] = ax * rr[2] + 2 * ce[2]; + gtox[3*ngrids+i] = ax * rr[3] + ce[3]; + gtox[4*ngrids+i] = ax * rr[4] + ce[4]; + gtox[5*ngrids+i] = ax * rr[5] + ce[5]; + gtox[6*ngrids+i] = ax * rr[6]; + gtox[7*ngrids+i] = ax * rr[7]; + gtox[8*ngrids+i] = ax * rr[8]; + gtox[9*ngrids+i] = ax * rr[9]; + gtoy[ i] = ay * rr[0]; + gtoy[1*ngrids+i] = ay * rr[1] + ce[0]; + gtoy[2*ngrids+i] = ay * rr[2]; + gtoy[3*ngrids+i] = ay * rr[3] + 2 * ce[1]; + gtoy[4*ngrids+i] = ay * rr[4] + ce[2]; + gtoy[5*ngrids+i] = ay * rr[5]; + gtoy[6*ngrids+i] = ay * rr[6] + 3 * ce[3]; + gtoy[7*ngrids+i] = ay * rr[7] + 2 * ce[4]; + gtoy[8*ngrids+i] = ay * rr[8] + ce[5]; + gtoy[9*ngrids+i] = ay * rr[9]; + gtoz[ i] = az * rr[0]; + gtoz[1*ngrids+i] = az * rr[1]; + gtoz[2*ngrids+i] = az * rr[2] + ce[0]; + gtoz[3*ngrids+i] = az * rr[3]; + gtoz[4*ngrids+i] = az * rr[4] + ce[1]; + gtoz[5*ngrids+i] = az * rr[5] + 2 * ce[2]; + gtoz[6*ngrids+i] = az * rr[6]; + gtoz[7*ngrids+i] = az * rr[7] + ce[3]; + gtoz[8*ngrids+i] = az * rr[8] + 2 * ce[4]; + gtoz[9*ngrids+i] = az * rr[9] + 3 * ce[5]; + } else { + gtox[ i] = 0; + gtox[1*ngrids+i] = 0; + gtox[2*ngrids+i] = 0; + gtox[3*ngrids+i] = 0; + gtox[4*ngrids+i] = 0; + gtox[5*ngrids+i] = 0; + gtox[6*ngrids+i] = 0; + gtox[7*ngrids+i] = 0; + gtox[8*ngrids+i] = 0; + gtox[9*ngrids+i] = 0; + gtoy[ i] = 0; + gtoy[1*ngrids+i] = 0; + gtoy[2*ngrids+i] = 0; + gtoy[3*ngrids+i] = 0; + gtoy[4*ngrids+i] = 0; + gtoy[5*ngrids+i] = 0; + gtoy[6*ngrids+i] = 0; + gtoy[7*ngrids+i] = 0; + gtoy[8*ngrids+i] = 0; + gtoy[9*ngrids+i] = 0; + gtoz[ i] = 0; + gtoz[1*ngrids+i] = 0; + gtoz[2*ngrids+i] = 0; + gtoz[3*ngrids+i] = 0; + gtoz[4*ngrids+i] = 0; + gtoz[5*ngrids+i] = 0; + gtoz[6*ngrids+i] = 0; + gtoz[7*ngrids+i] = 0; + gtoz[8*ngrids+i] = 0; + gtoz[9*ngrids+i] = 0; + } + } + gtox += ngrids * 10; + gtoy += ngrids * 10; + gtoz += ngrids * 10; + } + break; + default: +#pragma GCC ivdep + for (i = 0; i < blksize; i++) { + xpows_1less_in_power[i] = 0; + ypows_1less_in_power[i] = 0; + zpows_1less_in_power[i] = 0; + xpows[i] = 1; + ypows[i] = 1; + zpows[i] = 1; + } + for (lx = 0; lx < l; lx++) { +#pragma GCC ivdep + for (i = 0; i < blksize; i++) { + xpows[(lx+1)*BLKSIZE+i] = xpows[lx*BLKSIZE+i] * gridx[i]; + ypows[(lx+1)*BLKSIZE+i] = ypows[lx*BLKSIZE+i] * gridy[i]; + zpows[(lx+1)*BLKSIZE+i] = zpows[lx*BLKSIZE+i] * gridz[i]; + } } + for (k = 0; k < nc; k++) { + for (lx = l, n = 0; lx >= 0; lx--) { + for (ly = l - lx; ly >= 0; ly--, n++) { + lz = l - lx - ly; +#pragma GCC ivdep + for (i = 0; i < blksize; i++) { + e = exps[k*BLKSIZE+i]; + e2a = exps_2a[k*BLKSIZE+i]; + tmp = xpows[lx*BLKSIZE+i] * ypows[ly*BLKSIZE+i] * zpows[lz*BLKSIZE+i]; + gtox[n*ngrids+i] = e2a * gridx[i] * tmp; + gtoy[n*ngrids+i] = e2a * gridy[i] * tmp; + gtoz[n*ngrids+i] = e2a * gridz[i] * tmp; + gtox[n*ngrids+i] += e * lx * xpows_1less_in_power[lx*BLKSIZE+i] * ypows[ly*BLKSIZE+i] * zpows[lz*BLKSIZE+i]; + gtoy[n*ngrids+i] += e * ly * xpows[lx*BLKSIZE+i] * ypows_1less_in_power[ly*BLKSIZE+i] * zpows[lz*BLKSIZE+i]; + gtoz[n*ngrids+i] += e * lz * xpows[lx*BLKSIZE+i] * ypows[ly*BLKSIZE+i] * zpows_1less_in_power[lz*BLKSIZE+i]; + } + } } + gtox += ngrids * degen; + gtoy += ngrids * degen; + gtoz += ngrids * degen; + } + } +} + +void GTOval_cart(int ngrids, int *shls_slice, int *ao_loc, + double *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int param[] = {1, 1}; + GTOeval_cart_drv(GTOshell_eval_grid_cart, GTOcontract_exp0, 1, + ngrids, param, shls_slice, ao_loc, + ao, coord, non0table, atm, natm, bas, nbas, env); +} +void GTOval_sph(int ngrids, int *shls_slice, int *ao_loc, + double *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int param[] = {1, 1}; + GTOeval_sph_drv(GTOshell_eval_grid_cart, GTOcontract_exp0, 1, + ngrids, param, shls_slice, ao_loc, + ao, coord, non0table, atm, natm, bas, nbas, env); +} +void GTOval_spinor(int ngrids, int *shls_slice, int *ao_loc, + double complex *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int param[] = {1, 1}; + GTOeval_spinor_drv(GTOshell_eval_grid_cart, GTOcontract_exp0, + CINTc2s_ket_spinor_sf1, 1, + ngrids, param, shls_slice, ao_loc, + ao, coord, non0table, atm, natm, bas, nbas, env); +} + +void GTOval_ip_cart(int ngrids, int *shls_slice, int *ao_loc, + double *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int param[] = {1, 3}; + GTOeval_cart_drv(GTOshell_eval_grid_ip_cart, GTOcontract_exp1, 1, + ngrids, param, shls_slice, ao_loc, + ao, coord, non0table, atm, natm, bas, nbas, env); +} +void GTOval_ip_sph(int ngrids, int *shls_slice, int *ao_loc, + double *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int param[] = {1, 3}; + GTOeval_sph_drv(GTOshell_eval_grid_ip_cart, GTOcontract_exp1, 1, + ngrids, param, shls_slice, ao_loc, + ao, coord, non0table, atm, natm, bas, nbas, env); +} +void GTOval_ip_spinor(int ngrids, int *shls_slice, int *ao_loc, + double complex *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int param[] = {1, 3}; + GTOeval_spinor_drv(GTOshell_eval_grid_ip_cart, GTOcontract_exp1, + CINTc2s_ket_spinor_sf1, 1, + ngrids, param, shls_slice, ao_loc, + ao, coord, non0table, atm, natm, bas, nbas, env); +} + diff --git a/pyscfadlib/pyscfadlib/gto/deriv2.c b/pyscfadlib/pyscfadlib/gto/deriv2.c new file mode 100644 index 00000000..e9fa27e6 --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/deriv2.c @@ -0,0 +1,1108 @@ +/* Copyright 2014-2018,2021 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +#include +#include +#include "gto/grid_ao_drv.h" +#include "vhf/fblas.h" + +#define MIN(X,Y) ((X)<(Y)?(X):(Y)) +#define MAX(X,Y) ((X)>(Y)?(X):(Y)) + +double CINTcommon_fac_sp(int l); + +/* + * deriv 0: exp(-ar^2) x^n + * deriv 1: exp(-ar^2)[nx^{n-1} - 2ax^{n+1}] + * deriv 2: exp(-ar^2)[n(n-1)x^{n-2} - 2a(2n+1)x^n + 4a^2x^{n+2}] + * deriv 3: exp(-ar^2)[n(n-1)(n-2)x^{n-3} - 2a3n^2x^{n-1} + 4a^2(3n+3)x^{n+1} - 8a^3x^{n+3}] + * deriv 4: exp(-ar^2)[n(n-1)(n-2)(n-3)x^{n-4} - 2a(4n^3-6n^2+2)x^n{-2} + * + 4a^2(6n^2+6n+3)x^n - 8a(4n+6)x^{n+2} + 16a^4x^{n+4}] + */ + +void GTOshell_eval_grid_cart_deriv2(double *cgto, double *ri, double *exps, + double *coord, double *alpha, double *coeff, + double *env, int l, int np, int nc, + size_t nao, size_t ngrids, size_t bgrids) +{ + const size_t degen = (l+1)*(l+2)/2; + const size_t bgrids0 = (bgrids >= SIMDD) ? (bgrids+1-SIMDD) : 0; + int lx, ly, lz; + size_t i, j, j1, k, l1, n; + double fx0[SIMDD*16]; + double fy0[SIMDD*16]; + double fz0[SIMDD*16]; + double fx1[SIMDD*16]; + double fy1[SIMDD*16]; + double fz1[SIMDD*16]; + double fx2[SIMDD*16]; + double fy2[SIMDD*16]; + double fz2[SIMDD*16]; + double buf[SIMDD*10]; + double *gridx = coord; + double *gridy = coord+BLKSIZE; + double *gridz = coord+BLKSIZE*2; + double *gto = cgto; + double *gtox = gto + nao*ngrids; + double *gtoy = gto + nao*ngrids * 2; + double *gtoz = gto + nao*ngrids * 3; + double *gtoxx = gto + nao*ngrids * 4; + double *gtoxy = gto + nao*ngrids * 5; + double *gtoxz = gto + nao*ngrids * 6; + double *gtoyy = gto + nao*ngrids * 7; + double *gtoyz = gto + nao*ngrids * 8; + double *gtozz = gto + nao*ngrids * 9; + double *pgto; + double e; + + for (j = 0; j < 10; j++) { + pgto = cgto + j*nao*ngrids; + for (n = 0; n < degen*nc; n++) { + for (i = 0; i < bgrids; i++) { + pgto[n*ngrids+i] = 0; + } } + } + + for (i = 0; i < bgrids0; i+=SIMDD) { + for (k = 0; k < np; k++) { + if (_nonzero_in(exps+k*BLKSIZE+i, SIMDD)) { + for (n = 0; n < SIMDD; n++) { + fx0[n] = 1; + fy0[n] = 1; + fz0[n] = 1; + } + for (lx = 1; lx <= l+2; lx++) { + for (n = 0; n < SIMDD; n++) { + fx0[lx*SIMDD+n] = fx0[(lx-1)*SIMDD+n] * gridx[i+n]; + fy0[lx*SIMDD+n] = fy0[(lx-1)*SIMDD+n] * gridy[i+n]; + fz0[lx*SIMDD+n] = fz0[(lx-1)*SIMDD+n] * gridz[i+n]; + } } + GTOnabla1(fx1, fy1, fz1, fx0, fy0, fz0, l+1, alpha[k]); + GTOnabla1(fx2, fy2, fz2, fx1, fy1, fz1, l , alpha[k]); + for (lx = l, l1 = 0; lx >= 0; lx--) { + for (ly = l - lx; ly >= 0; ly--, l1++) { + lz = l - lx - ly; + for (n = 0; n < SIMDD; n++) { + e = exps[k*BLKSIZE+i+n]; + buf[0*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[1*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[2*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[3*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[4*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[5*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[6*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[7*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[8*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[9*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz2[lz*SIMDD+n]; + } + for (j = 0, j1 = l1; j < nc; j++, j1+=degen) { +#pragma GCC ivdep + for (n = 0; n < SIMDD; n++) { + gto [j1*ngrids+i+n] += buf[0*SIMDD+n] * coeff[j*np+k]; + gtox [j1*ngrids+i+n] += buf[1*SIMDD+n] * coeff[j*np+k]; + gtoy [j1*ngrids+i+n] += buf[2*SIMDD+n] * coeff[j*np+k]; + gtoz [j1*ngrids+i+n] += buf[3*SIMDD+n] * coeff[j*np+k]; + gtoxx[j1*ngrids+i+n] += buf[4*SIMDD+n] * coeff[j*np+k]; + gtoxy[j1*ngrids+i+n] += buf[5*SIMDD+n] * coeff[j*np+k]; + gtoxz[j1*ngrids+i+n] += buf[6*SIMDD+n] * coeff[j*np+k]; + gtoyy[j1*ngrids+i+n] += buf[7*SIMDD+n] * coeff[j*np+k]; + gtoyz[j1*ngrids+i+n] += buf[8*SIMDD+n] * coeff[j*np+k]; + gtozz[j1*ngrids+i+n] += buf[9*SIMDD+n] * coeff[j*np+k]; + } } + } } + } + } + } + + if (i < bgrids) { + for (k = 0; k < np; k++) { + if (_nonzero_in(exps+k*BLKSIZE+i, bgrids-i)) { + for (n = 0; n < SIMDD; n++) { + fx0[n] = 1; + fy0[n] = 1; + fz0[n] = 1; + } + for (lx = 1; lx <= l+2; lx++) { + for (n = 0; n < SIMDD; n++) { + fx0[lx*SIMDD+n] = fx0[(lx-1)*SIMDD+n] * gridx[i+n]; + fy0[lx*SIMDD+n] = fy0[(lx-1)*SIMDD+n] * gridy[i+n]; + fz0[lx*SIMDD+n] = fz0[(lx-1)*SIMDD+n] * gridz[i+n]; + } } + GTOnabla1(fx1, fy1, fz1, fx0, fy0, fz0, l+1, alpha[k]); + GTOnabla1(fx2, fy2, fz2, fx1, fy1, fz1, l , alpha[k]); + for (lx = l, l1 = 0; lx >= 0; lx--) { + for (ly = l - lx; ly >= 0; ly--, l1++) { + lz = l - lx - ly; + for (n = 0; n < SIMDD; n++) { + e = exps[k*BLKSIZE+i+n]; + buf[0*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[1*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[2*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[3*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[4*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[5*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[6*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[7*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[8*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[9*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz2[lz*SIMDD+n]; + } + for (j = 0, j1 = l1; j < nc; j++, j1+=degen) { + for (n = 0; n < bgrids-i; n++) { + gto [j1*ngrids+i+n] += buf[0*SIMDD+n] * coeff[j*np+k]; + gtox [j1*ngrids+i+n] += buf[1*SIMDD+n] * coeff[j*np+k]; + gtoy [j1*ngrids+i+n] += buf[2*SIMDD+n] * coeff[j*np+k]; + gtoz [j1*ngrids+i+n] += buf[3*SIMDD+n] * coeff[j*np+k]; + gtoxx[j1*ngrids+i+n] += buf[4*SIMDD+n] * coeff[j*np+k]; + gtoxy[j1*ngrids+i+n] += buf[5*SIMDD+n] * coeff[j*np+k]; + gtoxz[j1*ngrids+i+n] += buf[6*SIMDD+n] * coeff[j*np+k]; + gtoyy[j1*ngrids+i+n] += buf[7*SIMDD+n] * coeff[j*np+k]; + gtoyz[j1*ngrids+i+n] += buf[8*SIMDD+n] * coeff[j*np+k]; + gtozz[j1*ngrids+i+n] += buf[9*SIMDD+n] * coeff[j*np+k]; + } } + } } + } + } + } +} +void GTOval_cart_deriv2(int ngrids, int *shls_slice, int *ao_loc, + double *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int param[] = {1, 10}; + GTOeval_cart_drv(GTOshell_eval_grid_cart_deriv2, GTOprim_exp, 1, + ngrids, param, shls_slice, ao_loc, + ao, coord, non0table, atm, natm, bas, nbas, env); +} +void GTOval_sph_deriv2(int ngrids, int *shls_slice, int *ao_loc, + double *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int param[] = {1, 10}; + GTOeval_sph_drv(GTOshell_eval_grid_cart_deriv2, GTOprim_exp, 1, + ngrids, param, shls_slice, ao_loc, + ao, coord, non0table, atm, natm, bas, nbas, env); +} +void GTOval_spinor_deriv2(int ngrids, int *shls_slice, int *ao_loc, + double complex *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int param[] = {1, 10}; + GTOeval_spinor_drv(GTOshell_eval_grid_cart_deriv2, GTOprim_exp, + CINTc2s_ket_spinor_sf1, 1, + ngrids, param, shls_slice, ao_loc, + ao, coord, non0table, atm, natm, bas, nbas, env); +} + + +void GTOshell_eval_grid_cart_deriv3(double *cgto, double *ri, double *exps, + double *coord, double *alpha, double *coeff, + double *env, int l, int np, int nc, + size_t nao, size_t ngrids, size_t bgrids) +{ + const size_t degen = (l+1)*(l+2)/2; + const size_t bgrids0 = (bgrids >= SIMDD) ? (bgrids+1-SIMDD) : 0; + int lx, ly, lz; + size_t i, j, j1, k, l1, n; + double fx0[SIMDD*16]; + double fy0[SIMDD*16]; + double fz0[SIMDD*16]; + double fx1[SIMDD*16]; + double fy1[SIMDD*16]; + double fz1[SIMDD*16]; + double fx2[SIMDD*16]; + double fy2[SIMDD*16]; + double fz2[SIMDD*16]; + double fx3[SIMDD*16]; + double fy3[SIMDD*16]; + double fz3[SIMDD*16]; + double buf[SIMDD*20]; + double *gridx = coord; + double *gridy = coord+BLKSIZE; + double *gridz = coord+BLKSIZE*2; + double *gto = cgto; + double *gtox = gto + nao*ngrids; + double *gtoy = gto + nao*ngrids * 2; + double *gtoz = gto + nao*ngrids * 3; + double *gtoxx = gto + nao*ngrids * 4; + double *gtoxy = gto + nao*ngrids * 5; + double *gtoxz = gto + nao*ngrids * 6; + double *gtoyy = gto + nao*ngrids * 7; + double *gtoyz = gto + nao*ngrids * 8; + double *gtozz = gto + nao*ngrids * 9; + double *gtoxxx = gto + nao*ngrids * 10; + double *gtoxxy = gto + nao*ngrids * 11; + double *gtoxxz = gto + nao*ngrids * 12; + double *gtoxyy = gto + nao*ngrids * 13; + double *gtoxyz = gto + nao*ngrids * 14; + double *gtoxzz = gto + nao*ngrids * 15; + double *gtoyyy = gto + nao*ngrids * 16; + double *gtoyyz = gto + nao*ngrids * 17; + double *gtoyzz = gto + nao*ngrids * 18; + double *gtozzz = gto + nao*ngrids * 19; + double *pgto; + double e; + + for (j = 0; j < 20; j++) { + pgto = cgto + j*nao*ngrids; + for (n = 0; n < degen*nc; n++) { + for (i = 0; i < bgrids; i++) { + pgto[n*ngrids+i] = 0; + } } + } + + for (i = 0; i < bgrids0; i+=SIMDD) { + for (k = 0; k < np; k++) { + if (_nonzero_in(exps+k*BLKSIZE+i, SIMDD)) { + for (n = 0; n < SIMDD; n++) { + fx0[n] = 1; + fy0[n] = 1; + fz0[n] = 1; + } + for (lx = 1; lx <= l+3; lx++) { + for (n = 0; n < SIMDD; n++) { + fx0[lx*SIMDD+n] = fx0[(lx-1)*SIMDD+n] * gridx[i+n]; + fy0[lx*SIMDD+n] = fy0[(lx-1)*SIMDD+n] * gridy[i+n]; + fz0[lx*SIMDD+n] = fz0[(lx-1)*SIMDD+n] * gridz[i+n]; + } } + GTOnabla1(fx1, fy1, fz1, fx0, fy0, fz0, l+2, alpha[k]); + GTOnabla1(fx2, fy2, fz2, fx1, fy1, fz1, l+1, alpha[k]); + GTOnabla1(fx3, fy3, fz3, fx2, fy2, fz2, l , alpha[k]); + for (lx = l, l1 = 0; lx >= 0; lx--) { + for (ly = l - lx; ly >= 0; ly--, l1++) { + lz = l - lx - ly; + for (n = 0; n < SIMDD; n++) { + e = exps[k*BLKSIZE+i+n]; + buf[ 0*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[ 1*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[ 2*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[ 3*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[ 4*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[ 5*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[ 6*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[ 7*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[ 8*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[ 9*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz2[lz*SIMDD+n]; + buf[10*SIMDD+n] = e * fx3[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[11*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[12*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[13*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[14*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[15*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz2[lz*SIMDD+n]; + buf[16*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy3[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[17*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[18*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz2[lz*SIMDD+n]; + buf[19*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz3[lz*SIMDD+n]; + } + for (j = 0, j1 = l1; j < nc; j++, j1+=degen) { +#pragma GCC ivdep + for (n = 0; n < SIMDD; n++) { + gto [j1*ngrids+i+n] += buf[ 0*SIMDD+n] * coeff[j*np+k]; + gtox [j1*ngrids+i+n] += buf[ 1*SIMDD+n] * coeff[j*np+k]; + gtoy [j1*ngrids+i+n] += buf[ 2*SIMDD+n] * coeff[j*np+k]; + gtoz [j1*ngrids+i+n] += buf[ 3*SIMDD+n] * coeff[j*np+k]; + gtoxx [j1*ngrids+i+n] += buf[ 4*SIMDD+n] * coeff[j*np+k]; + gtoxy [j1*ngrids+i+n] += buf[ 5*SIMDD+n] * coeff[j*np+k]; + gtoxz [j1*ngrids+i+n] += buf[ 6*SIMDD+n] * coeff[j*np+k]; + gtoyy [j1*ngrids+i+n] += buf[ 7*SIMDD+n] * coeff[j*np+k]; + gtoyz [j1*ngrids+i+n] += buf[ 8*SIMDD+n] * coeff[j*np+k]; + gtozz [j1*ngrids+i+n] += buf[ 9*SIMDD+n] * coeff[j*np+k]; + gtoxxx[j1*ngrids+i+n] += buf[10*SIMDD+n] * coeff[j*np+k]; + gtoxxy[j1*ngrids+i+n] += buf[11*SIMDD+n] * coeff[j*np+k]; + gtoxxz[j1*ngrids+i+n] += buf[12*SIMDD+n] * coeff[j*np+k]; + gtoxyy[j1*ngrids+i+n] += buf[13*SIMDD+n] * coeff[j*np+k]; + gtoxyz[j1*ngrids+i+n] += buf[14*SIMDD+n] * coeff[j*np+k]; + gtoxzz[j1*ngrids+i+n] += buf[15*SIMDD+n] * coeff[j*np+k]; + gtoyyy[j1*ngrids+i+n] += buf[16*SIMDD+n] * coeff[j*np+k]; + gtoyyz[j1*ngrids+i+n] += buf[17*SIMDD+n] * coeff[j*np+k]; + gtoyzz[j1*ngrids+i+n] += buf[18*SIMDD+n] * coeff[j*np+k]; + gtozzz[j1*ngrids+i+n] += buf[19*SIMDD+n] * coeff[j*np+k]; + } } + } } + } + } + } + if (i < bgrids) { + for (k = 0; k < np; k++) { + if (_nonzero_in(exps+k*BLKSIZE+i, bgrids-i)) { + for (n = 0; n < SIMDD; n++) { + fx0[n] = 1; + fy0[n] = 1; + fz0[n] = 1; + } + for (lx = 1; lx <= l+3; lx++) { + for (n = 0; n < SIMDD; n++) { + fx0[lx*SIMDD+n] = fx0[(lx-1)*SIMDD+n] * gridx[i+n]; + fy0[lx*SIMDD+n] = fy0[(lx-1)*SIMDD+n] * gridy[i+n]; + fz0[lx*SIMDD+n] = fz0[(lx-1)*SIMDD+n] * gridz[i+n]; + } } + GTOnabla1(fx1, fy1, fz1, fx0, fy0, fz0, l+2, alpha[k]); + GTOnabla1(fx2, fy2, fz2, fx1, fy1, fz1, l+1, alpha[k]); + GTOnabla1(fx3, fy3, fz3, fx2, fy2, fz2, l , alpha[k]); + for (lx = l, l1 = 0; lx >= 0; lx--) { + for (ly = l - lx; ly >= 0; ly--, l1++) { + lz = l - lx - ly; + for (n = 0; n < SIMDD; n++) { + e = exps[k*BLKSIZE+i+n]; + buf[ 0*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[ 1*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[ 2*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[ 3*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[ 4*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[ 5*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[ 6*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[ 7*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[ 8*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[ 9*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz2[lz*SIMDD+n]; + buf[10*SIMDD+n] = e * fx3[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[11*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[12*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[13*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[14*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[15*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz2[lz*SIMDD+n]; + buf[16*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy3[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[17*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[18*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz2[lz*SIMDD+n]; + buf[19*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz3[lz*SIMDD+n]; + } + for (j = 0, j1 = l1; j < nc; j++, j1+=degen) { + for (n = 0; n < bgrids-i; n++) { + gto [j1*ngrids+i+n] += buf[ 0*SIMDD+n] * coeff[j*np+k]; + gtox [j1*ngrids+i+n] += buf[ 1*SIMDD+n] * coeff[j*np+k]; + gtoy [j1*ngrids+i+n] += buf[ 2*SIMDD+n] * coeff[j*np+k]; + gtoz [j1*ngrids+i+n] += buf[ 3*SIMDD+n] * coeff[j*np+k]; + gtoxx [j1*ngrids+i+n] += buf[ 4*SIMDD+n] * coeff[j*np+k]; + gtoxy [j1*ngrids+i+n] += buf[ 5*SIMDD+n] * coeff[j*np+k]; + gtoxz [j1*ngrids+i+n] += buf[ 6*SIMDD+n] * coeff[j*np+k]; + gtoyy [j1*ngrids+i+n] += buf[ 7*SIMDD+n] * coeff[j*np+k]; + gtoyz [j1*ngrids+i+n] += buf[ 8*SIMDD+n] * coeff[j*np+k]; + gtozz [j1*ngrids+i+n] += buf[ 9*SIMDD+n] * coeff[j*np+k]; + gtoxxx[j1*ngrids+i+n] += buf[10*SIMDD+n] * coeff[j*np+k]; + gtoxxy[j1*ngrids+i+n] += buf[11*SIMDD+n] * coeff[j*np+k]; + gtoxxz[j1*ngrids+i+n] += buf[12*SIMDD+n] * coeff[j*np+k]; + gtoxyy[j1*ngrids+i+n] += buf[13*SIMDD+n] * coeff[j*np+k]; + gtoxyz[j1*ngrids+i+n] += buf[14*SIMDD+n] * coeff[j*np+k]; + gtoxzz[j1*ngrids+i+n] += buf[15*SIMDD+n] * coeff[j*np+k]; + gtoyyy[j1*ngrids+i+n] += buf[16*SIMDD+n] * coeff[j*np+k]; + gtoyyz[j1*ngrids+i+n] += buf[17*SIMDD+n] * coeff[j*np+k]; + gtoyzz[j1*ngrids+i+n] += buf[18*SIMDD+n] * coeff[j*np+k]; + gtozzz[j1*ngrids+i+n] += buf[19*SIMDD+n] * coeff[j*np+k]; + } } + } } + } + } + } +} +void GTOval_cart_deriv3(int ngrids, int *shls_slice, int *ao_loc, + double *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int param[] = {1, 20}; + GTOeval_cart_drv(GTOshell_eval_grid_cart_deriv3, GTOprim_exp, 1, + ngrids, param, shls_slice, ao_loc, + ao, coord, non0table, atm, natm, bas, nbas, env); +} +void GTOval_sph_deriv3(int ngrids, int *shls_slice, int *ao_loc, + double *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int param[] = {1, 20}; + GTOeval_sph_drv(GTOshell_eval_grid_cart_deriv3, GTOprim_exp, 1, + ngrids, param, shls_slice, ao_loc, + ao, coord, non0table, atm, natm, bas, nbas, env); +} +void GTOval_spinor_deriv3(int ngrids, int *shls_slice, int *ao_loc, + double complex *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int param[] = {1, 20}; + GTOeval_spinor_drv(GTOshell_eval_grid_cart_deriv3, GTOprim_exp, + CINTc2s_ket_spinor_sf1, 1, + ngrids, param, shls_slice, ao_loc, + ao, coord, non0table, atm, natm, bas, nbas, env); +} + +void GTOshell_eval_grid_cart_deriv4(double *cgto, double *ri, double *exps, + double *coord, double *alpha, double *coeff, + double *env, int l, int np, int nc, + size_t nao, size_t ngrids, size_t bgrids) +{ + const size_t degen = (l+1)*(l+2)/2; + const size_t bgrids0 = (bgrids >= SIMDD) ? (bgrids+1-SIMDD) : 0; + int lx, ly, lz; + size_t i, j, j1, k, l1, n; + double fx0[SIMDD*16]; + double fy0[SIMDD*16]; + double fz0[SIMDD*16]; + double fx1[SIMDD*16]; + double fy1[SIMDD*16]; + double fz1[SIMDD*16]; + double fx2[SIMDD*16]; + double fy2[SIMDD*16]; + double fz2[SIMDD*16]; + double fx3[SIMDD*16]; + double fy3[SIMDD*16]; + double fz3[SIMDD*16]; + double fx4[SIMDD*16]; + double fy4[SIMDD*16]; + double fz4[SIMDD*16]; + double buf[SIMDD*35]; + double *gridx = coord; + double *gridy = coord+BLKSIZE; + double *gridz = coord+BLKSIZE*2; + double *gto = cgto; + double *gtox = gto + nao*ngrids; + double *gtoy = gto + nao*ngrids * 2; + double *gtoz = gto + nao*ngrids * 3; + double *gtoxx = gto + nao*ngrids * 4; + double *gtoxy = gto + nao*ngrids * 5; + double *gtoxz = gto + nao*ngrids * 6; + double *gtoyy = gto + nao*ngrids * 7; + double *gtoyz = gto + nao*ngrids * 8; + double *gtozz = gto + nao*ngrids * 9; + double *gtoxxx = gto + nao*ngrids * 10; + double *gtoxxy = gto + nao*ngrids * 11; + double *gtoxxz = gto + nao*ngrids * 12; + double *gtoxyy = gto + nao*ngrids * 13; + double *gtoxyz = gto + nao*ngrids * 14; + double *gtoxzz = gto + nao*ngrids * 15; + double *gtoyyy = gto + nao*ngrids * 16; + double *gtoyyz = gto + nao*ngrids * 17; + double *gtoyzz = gto + nao*ngrids * 18; + double *gtozzz = gto + nao*ngrids * 19; + double *gtoxxxx = gto + nao*ngrids * 20; + double *gtoxxxy = gto + nao*ngrids * 21; + double *gtoxxxz = gto + nao*ngrids * 22; + double *gtoxxyy = gto + nao*ngrids * 23; + double *gtoxxyz = gto + nao*ngrids * 24; + double *gtoxxzz = gto + nao*ngrids * 25; + double *gtoxyyy = gto + nao*ngrids * 26; + double *gtoxyyz = gto + nao*ngrids * 27; + double *gtoxyzz = gto + nao*ngrids * 28; + double *gtoxzzz = gto + nao*ngrids * 29; + double *gtoyyyy = gto + nao*ngrids * 30; + double *gtoyyyz = gto + nao*ngrids * 31; + double *gtoyyzz = gto + nao*ngrids * 32; + double *gtoyzzz = gto + nao*ngrids * 33; + double *gtozzzz = gto + nao*ngrids * 34; + double *pgto; + double e; + + for (j = 0; j < 35; j++) { + pgto = cgto + j*nao*ngrids; + for (n = 0; n < degen*nc; n++) { + for (i = 0; i < bgrids; i++) { + pgto[n*ngrids+i] = 0; + } } + } + + for (i = 0; i < bgrids0; i+=SIMDD) { + for (k = 0; k < np; k++) { + if (_nonzero_in(exps+k*BLKSIZE+i, SIMDD)) { + for (n = 0; n < SIMDD; n++) { + fx0[n] = 1; + fy0[n] = 1; + fz0[n] = 1; + } + for (lx = 1; lx <= l+4; lx++) { + for (n = 0; n < SIMDD; n++) { + fx0[lx*SIMDD+n] = fx0[(lx-1)*SIMDD+n] * gridx[i+n]; + fy0[lx*SIMDD+n] = fy0[(lx-1)*SIMDD+n] * gridy[i+n]; + fz0[lx*SIMDD+n] = fz0[(lx-1)*SIMDD+n] * gridz[i+n]; + } } + GTOnabla1(fx1, fy1, fz1, fx0, fy0, fz0, l+3, alpha[k]); + GTOnabla1(fx2, fy2, fz2, fx1, fy1, fz1, l+2, alpha[k]); + GTOnabla1(fx3, fy3, fz3, fx2, fy2, fz2, l+1, alpha[k]); + GTOnabla1(fx4, fy4, fz4, fx3, fy3, fz3, l , alpha[k]); + for (lx = l, l1 = 0; lx >= 0; lx--) { + for (ly = l - lx; ly >= 0; ly--, l1++) { + lz = l - lx - ly; + for (n = 0; n < SIMDD; n++) { + e = exps[k*BLKSIZE+i+n]; + buf[ 0*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[ 1*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[ 2*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[ 3*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[ 4*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[ 5*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[ 6*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[ 7*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[ 8*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[ 9*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz2[lz*SIMDD+n]; + buf[10*SIMDD+n] = e * fx3[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[11*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[12*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[13*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[14*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[15*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz2[lz*SIMDD+n]; + buf[16*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy3[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[17*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[18*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz2[lz*SIMDD+n]; + buf[19*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz3[lz*SIMDD+n]; + buf[20*SIMDD+n] = e * fx4[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[21*SIMDD+n] = e * fx3[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[22*SIMDD+n] = e * fx3[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[23*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[24*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[25*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz2[lz*SIMDD+n]; + buf[26*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy3[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[27*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[28*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz2[lz*SIMDD+n]; + buf[29*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz3[lz*SIMDD+n]; + buf[30*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy4[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[31*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy3[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[32*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz2[lz*SIMDD+n]; + buf[33*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz3[lz*SIMDD+n]; + buf[34*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz4[lz*SIMDD+n]; + } + for (j = 0, j1 = l1; j < nc; j++, j1+=degen) { +#pragma GCC ivdep + for (n = 0; n < SIMDD; n++) { + gto [j1*ngrids+i+n] += buf[ 0*SIMDD+n] * coeff[j*np+k]; + gtox [j1*ngrids+i+n] += buf[ 1*SIMDD+n] * coeff[j*np+k]; + gtoy [j1*ngrids+i+n] += buf[ 2*SIMDD+n] * coeff[j*np+k]; + gtoz [j1*ngrids+i+n] += buf[ 3*SIMDD+n] * coeff[j*np+k]; + gtoxx [j1*ngrids+i+n] += buf[ 4*SIMDD+n] * coeff[j*np+k]; + gtoxy [j1*ngrids+i+n] += buf[ 5*SIMDD+n] * coeff[j*np+k]; + gtoxz [j1*ngrids+i+n] += buf[ 6*SIMDD+n] * coeff[j*np+k]; + gtoyy [j1*ngrids+i+n] += buf[ 7*SIMDD+n] * coeff[j*np+k]; + gtoyz [j1*ngrids+i+n] += buf[ 8*SIMDD+n] * coeff[j*np+k]; + gtozz [j1*ngrids+i+n] += buf[ 9*SIMDD+n] * coeff[j*np+k]; + gtoxxx [j1*ngrids+i+n] += buf[10*SIMDD+n] * coeff[j*np+k]; + gtoxxy [j1*ngrids+i+n] += buf[11*SIMDD+n] * coeff[j*np+k]; + gtoxxz [j1*ngrids+i+n] += buf[12*SIMDD+n] * coeff[j*np+k]; + gtoxyy [j1*ngrids+i+n] += buf[13*SIMDD+n] * coeff[j*np+k]; + gtoxyz [j1*ngrids+i+n] += buf[14*SIMDD+n] * coeff[j*np+k]; + gtoxzz [j1*ngrids+i+n] += buf[15*SIMDD+n] * coeff[j*np+k]; + gtoyyy [j1*ngrids+i+n] += buf[16*SIMDD+n] * coeff[j*np+k]; + gtoyyz [j1*ngrids+i+n] += buf[17*SIMDD+n] * coeff[j*np+k]; + gtoyzz [j1*ngrids+i+n] += buf[18*SIMDD+n] * coeff[j*np+k]; + gtozzz [j1*ngrids+i+n] += buf[19*SIMDD+n] * coeff[j*np+k]; + gtoxxxx[j1*ngrids+i+n] += buf[20*SIMDD+n] * coeff[j*np+k]; + gtoxxxy[j1*ngrids+i+n] += buf[21*SIMDD+n] * coeff[j*np+k]; + gtoxxxz[j1*ngrids+i+n] += buf[22*SIMDD+n] * coeff[j*np+k]; + gtoxxyy[j1*ngrids+i+n] += buf[23*SIMDD+n] * coeff[j*np+k]; + gtoxxyz[j1*ngrids+i+n] += buf[24*SIMDD+n] * coeff[j*np+k]; + gtoxxzz[j1*ngrids+i+n] += buf[25*SIMDD+n] * coeff[j*np+k]; + gtoxyyy[j1*ngrids+i+n] += buf[26*SIMDD+n] * coeff[j*np+k]; + gtoxyyz[j1*ngrids+i+n] += buf[27*SIMDD+n] * coeff[j*np+k]; + gtoxyzz[j1*ngrids+i+n] += buf[28*SIMDD+n] * coeff[j*np+k]; + gtoxzzz[j1*ngrids+i+n] += buf[29*SIMDD+n] * coeff[j*np+k]; + gtoyyyy[j1*ngrids+i+n] += buf[30*SIMDD+n] * coeff[j*np+k]; + gtoyyyz[j1*ngrids+i+n] += buf[31*SIMDD+n] * coeff[j*np+k]; + gtoyyzz[j1*ngrids+i+n] += buf[32*SIMDD+n] * coeff[j*np+k]; + gtoyzzz[j1*ngrids+i+n] += buf[33*SIMDD+n] * coeff[j*np+k]; + gtozzzz[j1*ngrids+i+n] += buf[34*SIMDD+n] * coeff[j*np+k]; + } } + } } + } + } + } + + if (i < bgrids) { + for (k = 0; k < np; k++) { + if (_nonzero_in(exps+k*BLKSIZE+i, bgrids-i)) { + for (n = 0; n < SIMDD; n++) { + fx0[n] = 1; + fy0[n] = 1; + fz0[n] = 1; + } + for (lx = 1; lx <= l+4; lx++) { + for (n = 0; n < SIMDD; n++) { + fx0[lx*SIMDD+n] = fx0[(lx-1)*SIMDD+n] * gridx[i+n]; + fy0[lx*SIMDD+n] = fy0[(lx-1)*SIMDD+n] * gridy[i+n]; + fz0[lx*SIMDD+n] = fz0[(lx-1)*SIMDD+n] * gridz[i+n]; + } } + GTOnabla1(fx1, fy1, fz1, fx0, fy0, fz0, l+3, alpha[k]); + GTOnabla1(fx2, fy2, fz2, fx1, fy1, fz1, l+2, alpha[k]); + GTOnabla1(fx3, fy3, fz3, fx2, fy2, fz2, l+1, alpha[k]); + GTOnabla1(fx4, fy4, fz4, fx3, fy3, fz3, l , alpha[k]); + for (lx = l, l1 = 0; lx >= 0; lx--) { + for (ly = l - lx; ly >= 0; ly--, l1++) { + lz = l - lx - ly; + for (n = 0; n < SIMDD; n++) { + e = exps[k*BLKSIZE+i+n]; + buf[ 0*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[ 1*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[ 2*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[ 3*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[ 4*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[ 5*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[ 6*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[ 7*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[ 8*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[ 9*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz2[lz*SIMDD+n]; + buf[10*SIMDD+n] = e * fx3[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[11*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[12*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[13*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[14*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[15*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz2[lz*SIMDD+n]; + buf[16*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy3[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[17*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[18*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz2[lz*SIMDD+n]; + buf[19*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz3[lz*SIMDD+n]; + buf[20*SIMDD+n] = e * fx4[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[21*SIMDD+n] = e * fx3[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[22*SIMDD+n] = e * fx3[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[23*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[24*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[25*SIMDD+n] = e * fx2[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz2[lz*SIMDD+n]; + buf[26*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy3[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[27*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[28*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz2[lz*SIMDD+n]; + buf[29*SIMDD+n] = e * fx1[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz3[lz*SIMDD+n]; + buf[30*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy4[ly*SIMDD+n] * fz0[lz*SIMDD+n]; + buf[31*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy3[ly*SIMDD+n] * fz1[lz*SIMDD+n]; + buf[32*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy2[ly*SIMDD+n] * fz2[lz*SIMDD+n]; + buf[33*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy1[ly*SIMDD+n] * fz3[lz*SIMDD+n]; + buf[34*SIMDD+n] = e * fx0[lx*SIMDD+n] * fy0[ly*SIMDD+n] * fz4[lz*SIMDD+n]; + } + for (j = 0, j1 = l1; j < nc; j++, j1+=degen) { + for (n = 0; n < bgrids-i; n++) { + gto [j1*ngrids+i+n] += buf[ 0*SIMDD+n] * coeff[j*np+k]; + gtox [j1*ngrids+i+n] += buf[ 1*SIMDD+n] * coeff[j*np+k]; + gtoy [j1*ngrids+i+n] += buf[ 2*SIMDD+n] * coeff[j*np+k]; + gtoz [j1*ngrids+i+n] += buf[ 3*SIMDD+n] * coeff[j*np+k]; + gtoxx [j1*ngrids+i+n] += buf[ 4*SIMDD+n] * coeff[j*np+k]; + gtoxy [j1*ngrids+i+n] += buf[ 5*SIMDD+n] * coeff[j*np+k]; + gtoxz [j1*ngrids+i+n] += buf[ 6*SIMDD+n] * coeff[j*np+k]; + gtoyy [j1*ngrids+i+n] += buf[ 7*SIMDD+n] * coeff[j*np+k]; + gtoyz [j1*ngrids+i+n] += buf[ 8*SIMDD+n] * coeff[j*np+k]; + gtozz [j1*ngrids+i+n] += buf[ 9*SIMDD+n] * coeff[j*np+k]; + gtoxxx [j1*ngrids+i+n] += buf[10*SIMDD+n] * coeff[j*np+k]; + gtoxxy [j1*ngrids+i+n] += buf[11*SIMDD+n] * coeff[j*np+k]; + gtoxxz [j1*ngrids+i+n] += buf[12*SIMDD+n] * coeff[j*np+k]; + gtoxyy [j1*ngrids+i+n] += buf[13*SIMDD+n] * coeff[j*np+k]; + gtoxyz [j1*ngrids+i+n] += buf[14*SIMDD+n] * coeff[j*np+k]; + gtoxzz [j1*ngrids+i+n] += buf[15*SIMDD+n] * coeff[j*np+k]; + gtoyyy [j1*ngrids+i+n] += buf[16*SIMDD+n] * coeff[j*np+k]; + gtoyyz [j1*ngrids+i+n] += buf[17*SIMDD+n] * coeff[j*np+k]; + gtoyzz [j1*ngrids+i+n] += buf[18*SIMDD+n] * coeff[j*np+k]; + gtozzz [j1*ngrids+i+n] += buf[19*SIMDD+n] * coeff[j*np+k]; + gtoxxxx[j1*ngrids+i+n] += buf[20*SIMDD+n] * coeff[j*np+k]; + gtoxxxy[j1*ngrids+i+n] += buf[21*SIMDD+n] * coeff[j*np+k]; + gtoxxxz[j1*ngrids+i+n] += buf[22*SIMDD+n] * coeff[j*np+k]; + gtoxxyy[j1*ngrids+i+n] += buf[23*SIMDD+n] * coeff[j*np+k]; + gtoxxyz[j1*ngrids+i+n] += buf[24*SIMDD+n] * coeff[j*np+k]; + gtoxxzz[j1*ngrids+i+n] += buf[25*SIMDD+n] * coeff[j*np+k]; + gtoxyyy[j1*ngrids+i+n] += buf[26*SIMDD+n] * coeff[j*np+k]; + gtoxyyz[j1*ngrids+i+n] += buf[27*SIMDD+n] * coeff[j*np+k]; + gtoxyzz[j1*ngrids+i+n] += buf[28*SIMDD+n] * coeff[j*np+k]; + gtoxzzz[j1*ngrids+i+n] += buf[29*SIMDD+n] * coeff[j*np+k]; + gtoyyyy[j1*ngrids+i+n] += buf[30*SIMDD+n] * coeff[j*np+k]; + gtoyyyz[j1*ngrids+i+n] += buf[31*SIMDD+n] * coeff[j*np+k]; + gtoyyzz[j1*ngrids+i+n] += buf[32*SIMDD+n] * coeff[j*np+k]; + gtoyzzz[j1*ngrids+i+n] += buf[33*SIMDD+n] * coeff[j*np+k]; + gtozzzz[j1*ngrids+i+n] += buf[34*SIMDD+n] * coeff[j*np+k]; + } } + } } + } + } + } +} +void GTOval_cart_deriv4(int ngrids, int *shls_slice, int *ao_loc, + double *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int param[] = {1, 35}; + GTOeval_cart_drv(GTOshell_eval_grid_cart_deriv4, GTOprim_exp, 1, + ngrids, param, shls_slice, ao_loc, + ao, coord, non0table, atm, natm, bas, nbas, env); +} +void GTOval_sph_deriv4(int ngrids, int *shls_slice, int *ao_loc, + double *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int param[] = {1, 35}; + GTOeval_sph_drv(GTOshell_eval_grid_cart_deriv4, GTOprim_exp, 1, + ngrids, param, shls_slice, ao_loc, + ao, coord, non0table, atm, natm, bas, nbas, env); +} +void GTOval_spinor_deriv4(int ngrids, int *shls_slice, int *ao_loc, + double complex *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int param[] = {1, 35}; + GTOeval_spinor_drv(GTOshell_eval_grid_cart_deriv4, GTOprim_exp, + CINTc2s_ket_spinor_sf1, 1, + ngrids, param, shls_slice, ao_loc, + ao, coord, non0table, atm, natm, bas, nbas, env); +} + +void GTOshell_eval_grid_cart_deriv1(double *gto, double *ri, double *exps, + double *coord, double *alpha, double *coeff, + double *env, int l, int np, int nc, + size_t nao, size_t ngrids, size_t bgrids) +{ + const size_t degen = (l+1)*(l+2)/2; + int lx, ly, lz; + size_t i, k, n; + double ax, ay, az, tmp, e2a, e, rx, ry, rz; + double ce[6]; + double rr[10]; + double *gridx = coord; + double *gridy = coord+BLKSIZE; + double *gridz = coord+BLKSIZE*2; + double *gtox = gto + nao * ngrids; + double *gtoy = gto + nao * ngrids * 2; + double *gtoz = gto + nao * ngrids * 3; + double *exps_2a = exps + NPRIMAX*BLKSIZE; + double buf[(LMAX+2)*3 * BLKSIZE + 8]; + double *xpows_1less_in_power = ALIGN8_UP(buf); + double *ypows_1less_in_power = xpows_1less_in_power + (LMAX+2)* BLKSIZE; + double *zpows_1less_in_power = ypows_1less_in_power + (LMAX+2)* BLKSIZE; + double *xpows = xpows_1less_in_power + BLKSIZE; + double *ypows = ypows_1less_in_power + BLKSIZE; + double *zpows = zpows_1less_in_power + BLKSIZE; + switch (l) { + case 0: + for (k = 0; k < nc; k++) { +#pragma GCC ivdep + for (i = 0; i < bgrids; i++) { + gto [i] = exps[k*BLKSIZE+i]; + gtox[i] = exps_2a[k*BLKSIZE+i] * gridx[i]; + gtoy[i] = exps_2a[k*BLKSIZE+i] * gridy[i]; + gtoz[i] = exps_2a[k*BLKSIZE+i] * gridz[i]; + } + gto += ngrids; + gtox += ngrids; + gtoy += ngrids; + gtoz += ngrids; + } + break; + case 1: + for (k = 0; k < nc; k++) { +#pragma GCC ivdep + for (i = 0; i < bgrids; i++) { + gto [ i] = exps[k*BLKSIZE+i] * gridx[i]; + gto [1*ngrids+i] = exps[k*BLKSIZE+i] * gridy[i]; + gto [2*ngrids+i] = exps[k*BLKSIZE+i] * gridz[i]; + gtox[ i] = exps_2a[k*BLKSIZE+i] * gridx[i] * gridx[i] + exps[k*BLKSIZE+i]; + gtox[1*ngrids+i] = exps_2a[k*BLKSIZE+i] * gridx[i] * gridy[i]; + gtox[2*ngrids+i] = exps_2a[k*BLKSIZE+i] * gridx[i] * gridz[i]; + gtoy[ i] = exps_2a[k*BLKSIZE+i] * gridy[i] * gridx[i]; + gtoy[1*ngrids+i] = exps_2a[k*BLKSIZE+i] * gridy[i] * gridy[i] + exps[k*BLKSIZE+i]; + gtoy[2*ngrids+i] = exps_2a[k*BLKSIZE+i] * gridy[i] * gridz[i]; + gtoz[ i] = exps_2a[k*BLKSIZE+i] * gridz[i] * gridx[i]; + gtoz[1*ngrids+i] = exps_2a[k*BLKSIZE+i] * gridz[i] * gridy[i]; + gtoz[2*ngrids+i] = exps_2a[k*BLKSIZE+i] * gridz[i] * gridz[i] + exps[k*BLKSIZE+i]; + } + gto += ngrids * 3; + gtox += ngrids * 3; + gtoy += ngrids * 3; + gtoz += ngrids * 3; + } + break; + case 2: + for (k = 0; k < nc; k++) { + for (i = 0; i < bgrids; i++) { + if (NOTZERO(exps[k*BLKSIZE+i])) { + e = exps[k*BLKSIZE+i]; + e2a = exps_2a[k*BLKSIZE+i]; + rx = gridx[i]; + ry = gridy[i]; + rz = gridz[i]; + ax = e2a * rx; + ay = e2a * ry; + az = e2a * rz; + ce[0] = rx * e; + ce[1] = ry * e; + ce[2] = rz * e; + rr[0] = rx * rx; // xx + rr[1] = rx * ry; // xy + rr[2] = rx * rz; // xz + rr[3] = ry * ry; // yy + rr[4] = ry * rz; // yz + rr[5] = rz * rz; // zz + gto [ i] = rr[0] * e; // xx + gto [1*ngrids+i] = rr[1] * e; // xy + gto [2*ngrids+i] = rr[2] * e; // xz + gto [3*ngrids+i] = rr[3] * e; // yy + gto [4*ngrids+i] = rr[4] * e; // yz + gto [5*ngrids+i] = rr[5] * e; // zz + gtox[ i] = ax * rr[0] + 2 * ce[0]; + gtox[1*ngrids+i] = ax * rr[1] + ce[1]; + gtox[2*ngrids+i] = ax * rr[2] + ce[2]; + gtox[3*ngrids+i] = ax * rr[3]; + gtox[4*ngrids+i] = ax * rr[4]; + gtox[5*ngrids+i] = ax * rr[5]; + gtoy[ i] = ay * rr[0]; + gtoy[1*ngrids+i] = ay * rr[1] + ce[0]; + gtoy[2*ngrids+i] = ay * rr[2]; + gtoy[3*ngrids+i] = ay * rr[3] + 2 * ce[1]; + gtoy[4*ngrids+i] = ay * rr[4] + ce[2]; + gtoy[5*ngrids+i] = ay * rr[5]; + gtoz[ i] = az * rr[0]; + gtoz[1*ngrids+i] = az * rr[1]; + gtoz[2*ngrids+i] = az * rr[2] + ce[0]; + gtoz[3*ngrids+i] = az * rr[3]; + gtoz[4*ngrids+i] = az * rr[4] + ce[1]; + gtoz[5*ngrids+i] = az * rr[5] + 2 * ce[2]; + } else { + gto [ i] = 0; + gto [1*ngrids+i] = 0; + gto [2*ngrids+i] = 0; + gto [3*ngrids+i] = 0; + gto [4*ngrids+i] = 0; + gto [5*ngrids+i] = 0; + gtox[ i] = 0; + gtox[1*ngrids+i] = 0; + gtox[2*ngrids+i] = 0; + gtox[3*ngrids+i] = 0; + gtox[4*ngrids+i] = 0; + gtox[5*ngrids+i] = 0; + gtoy[ i] = 0; + gtoy[1*ngrids+i] = 0; + gtoy[2*ngrids+i] = 0; + gtoy[3*ngrids+i] = 0; + gtoy[4*ngrids+i] = 0; + gtoy[5*ngrids+i] = 0; + gtoz[ i] = 0; + gtoz[1*ngrids+i] = 0; + gtoz[2*ngrids+i] = 0; + gtoz[3*ngrids+i] = 0; + gtoz[4*ngrids+i] = 0; + gtoz[5*ngrids+i] = 0; + } } + gto += ngrids * 6; + gtox += ngrids * 6; + gtoy += ngrids * 6; + gtoz += ngrids * 6; + } + break; + case 3: + for (k = 0; k < nc; k++) { + for (i = 0; i < bgrids; i++) { + if (NOTZERO(exps[k*BLKSIZE+i])) { + e = exps[k*BLKSIZE+i]; + e2a = exps_2a[k*BLKSIZE+i]; + rx = gridx[i]; + ry = gridy[i]; + rz = gridz[i]; + ax = e2a * rx; + ay = e2a * ry; + az = e2a * rz; + ce[0] = rx * rx * e; + ce[1] = rx * ry * e; + ce[2] = rx * rz * e; + ce[3] = ry * ry * e; + ce[4] = ry * rz * e; + ce[5] = rz * rz * e; + rr[0] = rx * rx * rx; // xxx + rr[1] = rx * rx * ry; // xxy + rr[2] = rx * rx * rz; // xxz + rr[3] = rx * ry * ry; // xyy + rr[4] = rx * ry * rz; // xyz + rr[5] = rx * rz * rz; // xzz + rr[6] = ry * ry * ry; // yyy + rr[7] = ry * ry * rz; // yyz + rr[8] = ry * rz * rz; // yzz + rr[9] = rz * rz * rz; // zzz + gto [ i] = rr[0] * e; + gto [1*ngrids+i] = rr[1] * e; + gto [2*ngrids+i] = rr[2] * e; + gto [3*ngrids+i] = rr[3] * e; + gto [4*ngrids+i] = rr[4] * e; + gto [5*ngrids+i] = rr[5] * e; + gto [6*ngrids+i] = rr[6] * e; + gto [7*ngrids+i] = rr[7] * e; + gto [8*ngrids+i] = rr[8] * e; + gto [9*ngrids+i] = rr[9] * e; + gtox[ i] = ax * rr[0] + 3 * ce[0]; + gtox[1*ngrids+i] = ax * rr[1] + 2 * ce[1]; + gtox[2*ngrids+i] = ax * rr[2] + 2 * ce[2]; + gtox[3*ngrids+i] = ax * rr[3] + ce[3]; + gtox[4*ngrids+i] = ax * rr[4] + ce[4]; + gtox[5*ngrids+i] = ax * rr[5] + ce[5]; + gtox[6*ngrids+i] = ax * rr[6]; + gtox[7*ngrids+i] = ax * rr[7]; + gtox[8*ngrids+i] = ax * rr[8]; + gtox[9*ngrids+i] = ax * rr[9]; + gtoy[ i] = ay * rr[0]; + gtoy[1*ngrids+i] = ay * rr[1] + ce[0]; + gtoy[2*ngrids+i] = ay * rr[2]; + gtoy[3*ngrids+i] = ay * rr[3] + 2 * ce[1]; + gtoy[4*ngrids+i] = ay * rr[4] + ce[2]; + gtoy[5*ngrids+i] = ay * rr[5]; + gtoy[6*ngrids+i] = ay * rr[6] + 3 * ce[3]; + gtoy[7*ngrids+i] = ay * rr[7] + 2 * ce[4]; + gtoy[8*ngrids+i] = ay * rr[8] + ce[5]; + gtoy[9*ngrids+i] = ay * rr[9]; + gtoz[ i] = az * rr[0]; + gtoz[1*ngrids+i] = az * rr[1]; + gtoz[2*ngrids+i] = az * rr[2] + ce[0]; + gtoz[3*ngrids+i] = az * rr[3]; + gtoz[4*ngrids+i] = az * rr[4] + ce[1]; + gtoz[5*ngrids+i] = az * rr[5] + 2 * ce[2]; + gtoz[6*ngrids+i] = az * rr[6]; + gtoz[7*ngrids+i] = az * rr[7] + ce[3]; + gtoz[8*ngrids+i] = az * rr[8] + 2 * ce[4]; + gtoz[9*ngrids+i] = az * rr[9] + 3 * ce[5]; + } else { + gto [ i] = 0; + gto [1*ngrids+i] = 0; + gto [2*ngrids+i] = 0; + gto [3*ngrids+i] = 0; + gto [4*ngrids+i] = 0; + gto [5*ngrids+i] = 0; + gto [6*ngrids+i] = 0; + gto [7*ngrids+i] = 0; + gto [8*ngrids+i] = 0; + gto [9*ngrids+i] = 0; + gtox[ i] = 0; + gtox[1*ngrids+i] = 0; + gtox[2*ngrids+i] = 0; + gtox[3*ngrids+i] = 0; + gtox[4*ngrids+i] = 0; + gtox[5*ngrids+i] = 0; + gtox[6*ngrids+i] = 0; + gtox[7*ngrids+i] = 0; + gtox[8*ngrids+i] = 0; + gtox[9*ngrids+i] = 0; + gtoy[ i] = 0; + gtoy[1*ngrids+i] = 0; + gtoy[2*ngrids+i] = 0; + gtoy[3*ngrids+i] = 0; + gtoy[4*ngrids+i] = 0; + gtoy[5*ngrids+i] = 0; + gtoy[6*ngrids+i] = 0; + gtoy[7*ngrids+i] = 0; + gtoy[8*ngrids+i] = 0; + gtoy[9*ngrids+i] = 0; + gtoz[ i] = 0; + gtoz[1*ngrids+i] = 0; + gtoz[2*ngrids+i] = 0; + gtoz[3*ngrids+i] = 0; + gtoz[4*ngrids+i] = 0; + gtoz[5*ngrids+i] = 0; + gtoz[6*ngrids+i] = 0; + gtoz[7*ngrids+i] = 0; + gtoz[8*ngrids+i] = 0; + gtoz[9*ngrids+i] = 0; + } } + gto += ngrids * 10; + gtox += ngrids * 10; + gtoy += ngrids * 10; + gtoz += ngrids * 10; + } + break; + default: +#pragma GCC ivdep + for (i = 0; i < bgrids; i++) { + xpows_1less_in_power[i] = 0; + ypows_1less_in_power[i] = 0; + zpows_1less_in_power[i] = 0; + xpows[i] = 1; + ypows[i] = 1; + zpows[i] = 1; + } + for (lx = 0; lx < l; lx++) { +#pragma GCC ivdep + for (i = 0; i < bgrids; i++) { + xpows[(lx+1)*BLKSIZE+i] = xpows[lx*BLKSIZE+i] * gridx[i]; + ypows[(lx+1)*BLKSIZE+i] = ypows[lx*BLKSIZE+i] * gridy[i]; + zpows[(lx+1)*BLKSIZE+i] = zpows[lx*BLKSIZE+i] * gridz[i]; + } } + for (k = 0; k < nc; k++) { + for (lx = l, n = 0; lx >= 0; lx--) { + for (ly = l - lx; ly >= 0; ly--, n++) { + lz = l - lx - ly; +#pragma GCC ivdep + for (i = 0; i < bgrids; i++) { + e = exps[k*BLKSIZE+i]; + e2a = exps_2a[k*BLKSIZE+i]; + tmp = xpows[lx*BLKSIZE+i] * ypows[ly*BLKSIZE+i] * zpows[lz*BLKSIZE+i]; + gto [n*ngrids+i] = e * tmp; + gtox[n*ngrids+i] = e2a * gridx[i] * tmp; + gtoy[n*ngrids+i] = e2a * gridy[i] * tmp; + gtoz[n*ngrids+i] = e2a * gridz[i] * tmp; + gtox[n*ngrids+i] += e * lx * xpows_1less_in_power[lx*BLKSIZE+i] * ypows[ly*BLKSIZE+i] * zpows[lz*BLKSIZE+i]; + gtoy[n*ngrids+i] += e * ly * xpows[lx*BLKSIZE+i] * ypows_1less_in_power[ly*BLKSIZE+i] * zpows[lz*BLKSIZE+i]; + gtoz[n*ngrids+i] += e * lz * xpows[lx*BLKSIZE+i] * ypows[ly*BLKSIZE+i] * zpows_1less_in_power[lz*BLKSIZE+i]; + } + } } + gto += ngrids * degen; + gtox += ngrids * degen; + gtoy += ngrids * degen; + gtoz += ngrids * degen; + } + } +} + +void GTOval_cart(int ngrids, int *shls_slice, int *ao_loc, + double *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env); +void GTOval_sph(int ngrids, int *shls_slice, int *ao_loc, + double *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env); +void GTOval_spinor(int ngrids, int *shls_slice, int *ao_loc, + double complex *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env); +void GTOval_cart_deriv0(int ngrids, int *shls_slice, int *ao_loc, + double *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + GTOval_cart(ngrids, shls_slice, ao_loc, + ao, coord, non0table, atm, natm, bas, nbas, env); +} +void GTOval_sph_deriv0(int ngrids, int *shls_slice, int *ao_loc, + double *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + GTOval_sph(ngrids, shls_slice, ao_loc, + ao, coord, non0table, atm, natm, bas, nbas, env); +} +void GTOval_spinor_deriv0(int ngrids, int *shls_slice, int *ao_loc, + double complex *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + GTOval_spinor(ngrids, shls_slice, ao_loc, + ao, coord, non0table, atm, natm, bas, nbas, env); +} + +void GTOval_cart_deriv1(int ngrids, int *shls_slice, int *ao_loc, + double *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int param[] = {1, 4}; + GTOeval_cart_drv(GTOshell_eval_grid_cart_deriv1, GTOcontract_exp1, 1, + ngrids, param, shls_slice, ao_loc, + ao, coord, non0table, atm, natm, bas, nbas, env); +} +void GTOval_sph_deriv1(int ngrids, int *shls_slice, int *ao_loc, + double *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int param[] = {1, 4}; + GTOeval_sph_drv(GTOshell_eval_grid_cart_deriv1, GTOcontract_exp1, 1, + ngrids, param, shls_slice, ao_loc, + ao, coord, non0table, atm, natm, bas, nbas, env); +} +void GTOval_spinor_deriv1(int ngrids, int *shls_slice, int *ao_loc, + double complex *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int param[] = {1, 4}; + GTOeval_spinor_drv(GTOshell_eval_grid_cart_deriv1, GTOcontract_exp1, + CINTc2s_ket_spinor_sf1, 1, + ngrids, param, shls_slice, ao_loc, + ao, coord, non0table, atm, natm, bas, nbas, env); +} + diff --git a/pyscfadlib/pyscfadlib/gto/fastexp.c b/pyscfadlib/pyscfadlib/gto/fastexp.c new file mode 100644 index 00000000..30f39bdd --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/fastexp.c @@ -0,0 +1,107 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Fast exp(x) computation (with SSE2 optimizations). + * + * Copyright (c) 2010, Naoaki Okazaki + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the names of the authors nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Modified from http://www.chokkan.org/blog/archives/352 + * http://www.chokkan.org/software/dist/fastexp.c + */ + +#include + +typedef union { + double d; + unsigned short s[4]; +} ieee754; + +static const double LOG2E = 1.4426950408889634073599; /* 1/log(2) */ +//static const double INFINITY = 1.79769313486231570815E308; +static const double C1 = 6.93145751953125E-1; +static const double C2 = 1.42860682030941723212E-6; + +double exp_cephes(double x) +{ + int n; + double a, xx, px, qx; + ieee754 u; + + /* n = round(x / log 2) */ + a = LOG2E * x + 0.5; + n = (int)a; + n -= (a < 0); + + /* x -= n * log2 */ + px = (double)n; + x -= px * C1; + x -= px * C2; + xx = x * x; + + /* px = x * P(x**2). */ + px = 1.26177193074810590878E-4; + px *= xx; + px += 3.02994407707441961300E-2; + px *= xx; + px += 9.99999999999999999910E-1; + px *= x; + + /* Evaluate Q(x**2). */ + qx = 3.00198505138664455042E-6; + qx *= xx; + qx += 2.52448340349684104192E-3; + qx *= xx; + qx += 2.27265548208155028766E-1; + qx *= xx; + qx += 2.00000000000000000009E0; + + /* e**x = 1 + 2x P(x**2)/( Q(x**2) - P(x**2) ) */ + x = px / (qx - px); + x = 1.0 + 2.0 * x; + + /* Build 2^n in double. */ + u.d = 0; + n += 1023; + u.s[3] = (unsigned short)((n << 4) & 0x7FF0); + + return x * u.d; +} + diff --git a/pyscfadlib/pyscfadlib/gto/fill_grids_int2c.c b/pyscfadlib/pyscfadlib/gto/fill_grids_int2c.c new file mode 100644 index 00000000..2c674a95 --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/fill_grids_int2c.c @@ -0,0 +1,220 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +#include "config.h" +#include "cint.h" +#include "np_helper/np_helper.h" +#include "gto/gto.h" + +#define PLAIN 0 +#define HERMITIAN 1 +#define ANTIHERMI 2 +#define SYMMETRIC 3 + +// from cint.h +#define NGRIDS 11 + +#define BLKSIZE 312 + +// for grids integrals only +int _max_cache_size(int (*intor)(), int *shls_slice, int ncenter, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int i, n; + int i0 = shls_slice[0]; + int i1 = shls_slice[1]; + for (i = 1; i < ncenter; i++) { + i0 = MIN(i0, shls_slice[i*2 ]); + i1 = MAX(i1, shls_slice[i*2+1]); + } + int shls[4]; + int cache_size = 0; + for (i = i0; i < i1; i++) { + shls[0] = i; + shls[1] = i; + shls[2] = 0; + shls[3] = BLKSIZE; + n = (*intor)(NULL, NULL, shls, atm, natm, bas, nbas, env, NULL, NULL); + cache_size = MAX(cache_size, n); + } + return cache_size; +} + +/* + * mat(ngrids,naoi,naoj,comp) in F-order + */ +void GTOgrids_int2c(int (*intor)(), double *mat, int comp, int hermi, + int *shls_slice, int *ao_loc, CINTOpt *opt, + int *atm, int natm, int *bas, int nbas, double *env) +{ + const size_t ngrids = env[NGRIDS]; + const int ish0 = shls_slice[0]; + const int ish1 = shls_slice[1]; + const int jsh0 = shls_slice[2]; + const int jsh1 = shls_slice[3]; + const int nish = ish1 - ish0; + const int njsh = jsh1 - jsh0; + const size_t naoi = ao_loc[ish1] - ao_loc[ish0]; + const size_t naoj = ao_loc[jsh1] - ao_loc[jsh0]; + const int cache_size = _max_cache_size(intor, shls_slice, 2, + atm, natm, bas, nbas, env); + const int dims[] = {naoi, naoj, ngrids}; +#pragma omp parallel +{ + size_t ij; + int ish, jsh, i0, j0, grid0, grid1; + int shls[4]; + double *cache = malloc(sizeof(double) * cache_size); +#pragma omp for schedule(dynamic, 1) + for (ij = 0; ij < nish*njsh; ij++) { + ish = ij / njsh; + jsh = ij % njsh; + if (hermi != PLAIN && ish > jsh) { + // fill up only upper triangle of F-array + continue; + } + + for (grid0 = 0; grid0 < ngrids; grid0 += BLKSIZE) { + grid1 = MIN(grid0 + BLKSIZE, ngrids); + ish += ish0; + jsh += jsh0; + shls[0] = ish; + shls[1] = jsh; + shls[2] = grid0; + shls[3] = grid1; + i0 = ao_loc[ish] - ao_loc[ish0]; + j0 = ao_loc[jsh] - ao_loc[jsh0]; + (*intor)(mat+ngrids*(j0*naoi+i0)+grid0, dims, shls, + atm, natm, bas, nbas, env, opt, cache); + } + } + free(cache); + + if (hermi != PLAIN) { // lower triangle of F-array + size_t ic, i, j, ig; + size_t nao2 = naoi * naoj; + double *mat_ij, *mat_ji; +#pragma omp for schedule(dynamic, 4) + for (ij = 0; ij < nao2*comp; ij++) { + ic = ij / nao2; + ig = ij % nao2; + i = ig / naoj; + j = ig % naoj; + if (i > j) { + continue; + } + // Note the F-order array mat are filled in the upper + // triangular part + mat_ij = mat + ngrids * (ic * nao2 + j * naoi + i); + mat_ji = mat + ngrids * (ic * nao2 + i * naoi + j); + if (hermi == HERMITIAN || hermi == SYMMETRIC) { + for (ig = 0; ig < ngrids; ig++) { + mat_ji[ig] = mat_ij[ig]; + } + } else { + for (ig = 0; ig < ngrids; ig++) { + mat_ji[ig] = -mat_ij[ig]; + } + } + } + } +} +} + +void GTOgrids_int2c_spinor(int (*intor)(), double complex *mat, int comp, int hermi, + int *shls_slice, int *ao_loc, CINTOpt *opt, + int *atm, int natm, int *bas, int nbas, double *env) +{ + const size_t ngrids = env[NGRIDS]; + const int ish0 = shls_slice[0]; + const int ish1 = shls_slice[1]; + const int jsh0 = shls_slice[2]; + const int jsh1 = shls_slice[3]; + const int nish = ish1 - ish0; + const int njsh = jsh1 - jsh0; + const size_t naoi = ao_loc[ish1] - ao_loc[ish0]; + const size_t naoj = ao_loc[jsh1] - ao_loc[jsh0]; + const int cache_size = _max_cache_size(intor, shls_slice, 2, + atm, natm, bas, nbas, env); + int dims[] = {naoi, naoj, ngrids}; +#pragma omp parallel +{ + size_t ij; + int ish, jsh, i0, j0, grid0, grid1; + int shls[4]; + double *cache = malloc(sizeof(double) * cache_size); +#pragma omp for schedule(dynamic, 1) + for (ij = 0; ij < nish*njsh; ij++) { + ish = ij / njsh; + jsh = ij % njsh; + if (hermi != PLAIN && ish > jsh) { + continue; + } + + for (grid0 = 0; grid0 < ngrids; grid0 += BLKSIZE) { + grid1 = MIN(grid0 + BLKSIZE, ngrids); + ish += ish0; + jsh += jsh0; + shls[0] = ish; + shls[1] = jsh; + shls[2] = grid0; + shls[3] = grid1; + i0 = ao_loc[ish] - ao_loc[ish0]; + j0 = ao_loc[jsh] - ao_loc[jsh0]; + (*intor)(mat+ngrids*(j0*naoi+i0)+grid0, dims, shls, + atm, natm, bas, nbas, env, opt, cache); + } + } + free(cache); + + if (hermi != PLAIN) { // lower triangle of F-array + size_t ic, i, j, ig; + size_t nao2 = naoi * naoj; + double complex *mat_ij, *mat_ji; +#pragma omp for schedule(dynamic, 4) + for (ij = 0; ij < nao2*comp; ij++) { + ic = ij / nao2; + ig = ij % nao2; + i = ig / naoj; + j = ig % naoj; + if (i > j) { + continue; + } + // Note the F-order array mat are filled in the upper + // triangular part + mat_ij = mat + ngrids * (ic * nao2 + j * naoi + i); + mat_ji = mat + ngrids * (ic * nao2 + i * naoi + j); + if (hermi == HERMITIAN) { + for (ig = 0; ig < ngrids; ig++) { + mat_ji[ig] = conj(mat_ij[ig]); + } + } else if (hermi == SYMMETRIC) { + for (ig = 0; ig < ngrids; ig++) { + mat_ji[ig] = mat_ij[ig]; + } + } else { + for (ig = 0; ig < ngrids; ig++) { + mat_ji[ig] = -conj(mat_ij[ig]); + } + } + } + } +} +} diff --git a/pyscfadlib/pyscfadlib/gto/fill_int2c.c b/pyscfadlib/pyscfadlib/gto/fill_int2c.c new file mode 100644 index 00000000..137fe8c1 --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/fill_int2c.c @@ -0,0 +1,217 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +#include +#include "config.h" +#include "cint.h" +#include "np_helper/np_helper.h" +#include "gto/gto.h" + +#define PLAIN 0 +#define HERMITIAN 1 +#define ANTIHERMI 2 +#define SYMMETRIC 3 + +/* + * mat(naoi,naoj,comp) in F-order + */ +void GTOint2c(int (*intor)(), double *mat, int comp, int hermi, + int *shls_slice, int *ao_loc, CINTOpt *opt, + int *atm, int natm, int *bas, int nbas, double *env) +{ + const int ish0 = shls_slice[0]; + const int ish1 = shls_slice[1]; + const int jsh0 = shls_slice[2]; + const int jsh1 = shls_slice[3]; + const int nish = ish1 - ish0; + const int njsh = jsh1 - jsh0; + const size_t naoi = ao_loc[ish1] - ao_loc[ish0]; + const size_t naoj = ao_loc[jsh1] - ao_loc[jsh0]; + const int cache_size = GTOmax_cache_size(intor, shls_slice, 2, + atm, natm, bas, nbas, env); +#pragma omp parallel +{ + int dims[] = {naoi, naoj}; + int ish, jsh, ij, i0, j0; + int shls[2]; + double *cache = malloc(sizeof(double) * cache_size); +#pragma omp for schedule(dynamic, 4) + for (ij = 0; ij < nish*njsh; ij++) { + ish = ij / njsh; + jsh = ij % njsh; + if (hermi != PLAIN && ish > jsh) { + // fill up only upper triangle of F-array + continue; + } + + ish += ish0; + jsh += jsh0; + shls[0] = ish; + shls[1] = jsh; + i0 = ao_loc[ish] - ao_loc[ish0]; + j0 = ao_loc[jsh] - ao_loc[jsh0]; + (*intor)(mat+j0*naoi+i0, dims, shls, + atm, natm, bas, nbas, env, opt, cache); + } + free(cache); +} + if (hermi != PLAIN) { // lower triangle of F-array + int ic; + for (ic = 0; ic < comp; ic++) { + NPdsymm_triu(naoi, mat+ic*naoi*naoi, hermi); + } + } +} + +void GTOint2c_spinor(int (*intor)(), double complex *mat, int comp, int hermi, + int *shls_slice, int *ao_loc, CINTOpt *opt, + int *atm, int natm, int *bas, int nbas, double *env) +{ + const int ish0 = shls_slice[0]; + const int ish1 = shls_slice[1]; + const int jsh0 = shls_slice[2]; + const int jsh1 = shls_slice[3]; + const int nish = ish1 - ish0; + const int njsh = jsh1 - jsh0; + const size_t naoi = ao_loc[ish1] - ao_loc[ish0]; + const size_t naoj = ao_loc[jsh1] - ao_loc[jsh0]; + const int cache_size = GTOmax_cache_size(intor, shls_slice, 2, + atm, natm, bas, nbas, env); + +#pragma omp parallel +{ + int dims[] = {naoi, naoj}; + int ish, jsh, ij, i0, j0; + int shls[2]; + double *cache = malloc(sizeof(double) * cache_size); +#pragma omp for schedule(dynamic, 4) + for (ij = 0; ij < nish*njsh; ij++) { + ish = ij / njsh; + jsh = ij % njsh; + if (hermi != PLAIN && ish > jsh) { + continue; + } + + ish += ish0; + jsh += jsh0; + shls[0] = ish; + shls[1] = jsh; + i0 = ao_loc[ish] - ao_loc[ish0]; + j0 = ao_loc[jsh] - ao_loc[jsh0]; + (*intor)(mat+j0*naoi+i0, dims, shls, + atm, natm, bas, nbas, env, opt, cache); + } + free(cache); +} + if (hermi != PLAIN) { + int ic; + for (ic = 0; ic < comp; ic++) { + NPzhermi_triu(naoi, mat+ic*naoi*naoi, hermi); + } + } +} + +// Similar to CINTOpt_log_max_pgto_coeff and CINTOpt_set_log_maxc +static void _log_max_pgto_coeff(double *log_maxc, double *coeff, int nprim, int nctr) +{ + int i, ip; + double maxc; + for (ip = 0; ip < nprim; ip++) { + maxc = 0; + for (i = 0; i < nctr; i++) { + maxc = MAX(maxc, fabs(coeff[i*nprim+ip])); + } + log_maxc[ip] = log(maxc); + } +} + +static void _set_log_max_coeff(double **log_max_coeff, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int i, iprim, ictr; + double *ci; + size_t tot_prim = 0; + for (i = 0; i < nbas; i++) { + tot_prim += bas(NPRIM_OF, i); + } + + double *plog_maxc = malloc(sizeof(double) * (tot_prim+1)); + log_max_coeff[0] = plog_maxc; + for (i = 0; i < nbas; i++) { + iprim = bas(NPRIM_OF, i); + ictr = bas(NCTR_OF, i); + ci = env + bas(PTR_COEFF, i); + log_max_coeff[i] = plog_maxc; + _log_max_pgto_coeff(plog_maxc, ci, iprim, ictr); + plog_maxc += iprim; + } +} + +void GTOoverlap_cond(double *cond, int *shls_slice, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int ish0 = shls_slice[0]; + int ish1 = shls_slice[1]; + int jsh0 = shls_slice[2]; + int jsh1 = shls_slice[3]; + int njsh = jsh1 - jsh0; + double **log_max_coeff = malloc(sizeof(double *) * (nbas + 1)); + _set_log_max_coeff(log_max_coeff, atm, natm, bas, nbas, env); +#pragma omp parallel +{ + int ish, jsh, ip, jp, li, lj, iprim, jprim; + double aij, eij, cceij, min_cceij, log_rr_ij, dx, dy, dz, rr_ij; + double *ai, *aj, *ri, *rj, *log_maxci, *log_maxcj; +#pragma omp for nowait schedule(static) + for (ish = ish0; ish < ish1; ish++) { + for (jsh = jsh0; jsh < jsh1; jsh++) { + iprim = bas(NPRIM_OF, ish); + jprim = bas(NPRIM_OF, jsh); + li = bas(ANG_OF, ish); + lj = bas(ANG_OF, jsh); + ai = env + bas(PTR_EXP, ish); + aj = env + bas(PTR_EXP, jsh); + ri = env + atm(PTR_COORD, bas(ATOM_OF, ish)); + rj = env + atm(PTR_COORD, bas(ATOM_OF, jsh)); + dx = ri[0] - rj[0]; + dy = ri[1] - rj[1]; + dz = ri[2] - rj[2]; + rr_ij = dx * dx + dy * dy + dz * dz; + +// This estimation is based on the assumption that the two gaussian charge +// distributions are separated in space. + log_rr_ij = (li+lj+1) * log(rr_ij+1) / 2; + + log_maxci = log_max_coeff[ish]; + log_maxcj = log_max_coeff[jsh]; + min_cceij = 1e9; + for (jp = 0; jp < jprim; jp++) { + for (ip = 0; ip < iprim; ip++) { + aij = ai[ip] + aj[jp]; + eij = rr_ij * ai[ip] * aj[jp] / aij; + cceij = eij - log_rr_ij - log_maxci[ip] - log_maxcj[jp]; + min_cceij = MIN(min_cceij, cceij); + } } + cond[(ish-ish0)*njsh+(jsh-jsh0)] = min_cceij; + } } +} + free(log_max_coeff[0]); + free(log_max_coeff); +} diff --git a/pyscfadlib/pyscfadlib/gto/fill_int2e.c b/pyscfadlib/pyscfadlib/gto/fill_int2e.c new file mode 100644 index 00000000..dea34f0f --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/fill_int2e.c @@ -0,0 +1,569 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +#include "config.h" +#include "cint.h" + +#define MAX(I,J) ((I) > (J) ? (I) : (J)) +#define MIN(I,J) ((I) < (J) ? (I) : (J)) + +int GTOmax_shell_dim(const int *ao_loc, const int *shls_slice, int ncenter) +{ + int i; + int i0 = shls_slice[0]; + int i1 = shls_slice[1]; + int di = 0; + for (i = 1; i < ncenter; i++) { + i0 = MIN(i0, shls_slice[i*2 ]); + i1 = MAX(i1, shls_slice[i*2+1]); + } + for (i = i0; i < i1; i++) { + di = MAX(di, ao_loc[i+1]-ao_loc[i]); + } + return di; +} +int GTOmax_cache_size(int (*intor)(), int *shls_slice, int ncenter, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int i, n; + int i0 = shls_slice[0]; + int i1 = shls_slice[1]; + for (i = 1; i < ncenter; i++) { + i0 = MIN(i0, shls_slice[i*2 ]); + i1 = MAX(i1, shls_slice[i*2+1]); + } + int shls[4]; + int cache_size = 0; + for (i = i0; i < i1; i++) { + shls[0] = i; + shls[1] = i; + shls[2] = i; + shls[3] = i; + n = (*intor)(NULL, NULL, shls, atm, natm, bas, nbas, env, NULL, NULL); + cache_size = MAX(cache_size, n); + } + return cache_size; +} + +/* + ************************************************* + * 2e AO integrals in s4, s2ij, s2kl, s1 + */ + +void GTOnr2e_fill_s1(int (*intor)(), int (*fprescreen)(), + double *eri, double *buf, int comp, int ishp, int jshp, + int *shls_slice, int *ao_loc, CINTOpt *cintopt, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int ish0 = shls_slice[0]; + int ish1 = shls_slice[1]; + int jsh0 = shls_slice[2]; + int jsh1 = shls_slice[3]; + int ksh0 = shls_slice[4]; + int ksh1 = shls_slice[5]; + int lsh0 = shls_slice[6]; + int lsh1 = shls_slice[7]; + int ni = ao_loc[ish1] - ao_loc[ish0]; + int nj = ao_loc[jsh1] - ao_loc[jsh0]; + int nk = ao_loc[ksh1] - ao_loc[ksh0]; + int nl = ao_loc[lsh1] - ao_loc[lsh0]; + size_t nij = ni * nj; + size_t nkl = nk * nl; + size_t neri = nij * nkl; + + int ish = ishp + ish0; + int jsh = jshp + jsh0; + int i0 = ao_loc[ish] - ao_loc[ish0]; + int j0 = ao_loc[jsh] - ao_loc[jsh0]; + eri += nkl * (i0 * nj + j0); + + int di = ao_loc[ish+1] - ao_loc[ish]; + int dj = ao_loc[jsh+1] - ao_loc[jsh]; + int dij = di * dj; + int k0, l0, dk, dl, dijk, dijkl; + int i, j, k, l, icomp; + int ksh, lsh; + int shls[4]; + double *eri0, *peri, *buf0, *pbuf, *cache; + + shls[0] = ish; + shls[1] = jsh; + + for (ksh = ksh0; ksh < ksh1; ksh++) { + for (lsh = lsh0; lsh < lsh1; lsh++) { + shls[2] = ksh; + shls[3] = lsh; + k0 = ao_loc[ksh] - ao_loc[ksh0]; + l0 = ao_loc[lsh] - ao_loc[lsh0]; + dk = ao_loc[ksh+1] - ao_loc[ksh]; + dl = ao_loc[lsh+1] - ao_loc[lsh]; + dijk = dij * dk; + dijkl = dijk * dl; + cache = buf + dijkl * comp; + if ((*fprescreen)(shls, atm, bas, env) && + (*intor)(buf, NULL, shls, atm, natm, bas, nbas, env, cintopt, cache)) { + eri0 = eri + k0*nl+l0; + buf0 = buf; + for (icomp = 0; icomp < comp; icomp++) { + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + peri = eri0 + nkl*(i*nj+j); + for (k = 0; k < dk; k++) { + for (pbuf = buf0 + k*dij + j*di + i, + l = 0; l < dl; l++) { + peri[k*nl+l] = pbuf[l*dijk]; + } } + } } + buf0 += dijkl; + eri0 += neri; + } + } else { + eri0 = eri + k0*nl+l0; + for (icomp = 0; icomp < comp; icomp++) { + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + peri = eri0 + nkl*(i*nj+j); + for (k = 0; k < dk; k++) { + for (l = 0; l < dl; l++) { + peri[k*nl+l] = 0; + } + } + } } + eri0 += neri; + } + } + } } +} + +void GTOnr2e_fill_s2ij(int (*intor)(), int (*fprescreen)(), + double *eri, double *buf, int comp, int ishp, int jshp, + int *shls_slice, int *ao_loc, CINTOpt *cintopt, + int *atm, int natm, int *bas, int nbas, double *env) +{ + if (ishp < jshp) { + return; + } + + int ish0 = shls_slice[0]; + int ish1 = shls_slice[1]; + int jsh0 = shls_slice[2]; + //int jsh1 = shls_slice[3]; + int ksh0 = shls_slice[4]; + int ksh1 = shls_slice[5]; + int lsh0 = shls_slice[6]; + int lsh1 = shls_slice[7]; + int ni = ao_loc[ish1] - ao_loc[ish0]; + //int nj = ao_loc[jsh1] - ao_loc[jsh0]; + int nk = ao_loc[ksh1] - ao_loc[ksh0]; + int nl = ao_loc[lsh1] - ao_loc[lsh0]; + size_t nij = ni * (ni+1) / 2; + size_t nkl = nk * nl; + size_t neri = nij * nkl; + + int ish = ishp + ish0; + int jsh = jshp + jsh0; + int i0 = ao_loc[ish] - ao_loc[ish0]; + int j0 = ao_loc[jsh] - ao_loc[jsh0]; + eri += nkl * (i0*(i0+1)/2 + j0); + + int di = ao_loc[ish+1] - ao_loc[ish]; + int dj = ao_loc[jsh+1] - ao_loc[jsh]; + int dij = di * dj; + int k0, l0, dk, dl, dijk, dijkl; + int i, j, k, l, icomp; + int ksh, lsh; + int shls[4]; + double *eri0, *peri0, *peri, *buf0, *pbuf, *cache; + + shls[0] = ish; + shls[1] = jsh; + + for (ksh = ksh0; ksh < ksh1; ksh++) { + for (lsh = lsh0; lsh < lsh1; lsh++) { + shls[2] = ksh; + shls[3] = lsh; + k0 = ao_loc[ksh] - ao_loc[ksh0]; + l0 = ao_loc[lsh] - ao_loc[lsh0]; + dk = ao_loc[ksh+1] - ao_loc[ksh]; + dl = ao_loc[lsh+1] - ao_loc[lsh]; + dijk = dij * dk; + dijkl = dijk * dl; + cache = buf + dijkl * comp; + if ((*fprescreen)(shls, atm, bas, env) && + (*intor)(buf, NULL, shls, atm, natm, bas, nbas, env, cintopt, cache)) { + eri0 = eri + k0*nl+l0; + buf0 = buf; + for (icomp = 0; icomp < comp; icomp++) { + peri0 = eri0; + if (ishp > jshp) { + for (i = 0; i < di; i++, peri0+=nkl*(i0+i)) { + for (j = 0; j < dj; j++) { + peri = peri0 + nkl*j; + for (k = 0; k < dk; k++) { + for (pbuf = buf0 + k*dij + j*di + i, + l = 0; l < dl; l++) { + peri[k*nl+l] = pbuf[l*dijk]; + } } + } } + } else { + for (i = 0; i < di; i++, peri0+=nkl*(i0+i)) { + for (j = 0; j <= i; j++) { + peri = peri0 + nkl*j; + for (k = 0; k < dk; k++) { + for (pbuf = buf0 + k*dij + j*di + i, + l = 0; l < dl; l++) { + peri[k*nl+l] = pbuf[l*dijk]; + } } + } } + } + buf0 += dijkl; + eri0 += neri; + } + } else { + eri0 = eri + k0*nl+l0; + for (icomp = 0; icomp < comp; icomp++) { + peri0 = eri0; + if (ishp > jshp) { + for (i = 0; i < di; i++, peri0+=nkl*(i0+i)) { + for (j = 0; j < dj; j++) { + peri = peri0 + nkl*j; + for (k = 0; k < dk; k++) { + for (l = 0; l < dl; l++) { + peri[k*nl+l] = 0; + } } + } } + } else { + for (i = 0; i < di; i++, peri0+=nkl*(i0+i)) { + for (j = 0; j <= i; j++) { + peri = peri0 + nkl*j; + for (k = 0; k < dk; k++) { + for (l = 0; l < dl; l++) { + peri[k*nl+l] = 0; + } } + } } + } + eri0 += neri; + } + } + } } +} + +void GTOnr2e_fill_s2kl(int (*intor)(), int (*fprescreen)(), + double *eri, double *buf, int comp, int ishp, int jshp, + int *shls_slice, int *ao_loc, CINTOpt *cintopt, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int ish0 = shls_slice[0]; + int ish1 = shls_slice[1]; + int jsh0 = shls_slice[2]; + int jsh1 = shls_slice[3]; + int ksh0 = shls_slice[4]; + int ksh1 = shls_slice[5]; + int lsh0 = shls_slice[6]; + //int lsh1 = shls_slice[7]; + int ni = ao_loc[ish1] - ao_loc[ish0]; + int nj = ao_loc[jsh1] - ao_loc[jsh0]; + int nk = ao_loc[ksh1] - ao_loc[ksh0]; + //int nl = ao_loc[lsh1] - ao_loc[lsh0]; + size_t nij = ni * nj; + size_t nkl = nk * (nk+1) / 2; + size_t neri = nij * nkl; + + int ish = ishp + ish0; + int jsh = jshp + jsh0; + int i0 = ao_loc[ish] - ao_loc[ish0]; + int j0 = ao_loc[jsh] - ao_loc[jsh0]; + eri += nkl * (i0 * nj + j0); + + int di = ao_loc[ish+1] - ao_loc[ish]; + int dj = ao_loc[jsh+1] - ao_loc[jsh]; + int dij = di * dj; + int k0, l0, dk, dl, dijk, dijkl; + int i, j, k, l, icomp; + int ksh, lsh, kshp, lshp; + int shls[4]; + double *eri0, *peri, *buf0, *pbuf, *cache; + + shls[0] = ish; + shls[1] = jsh; + + for (kshp = 0; kshp < ksh1-ksh0; kshp++) { + for (lshp = 0; lshp <= kshp; lshp++) { + ksh = kshp + ksh0; + lsh = lshp + lsh0; + shls[2] = ksh; + shls[3] = lsh; + k0 = ao_loc[ksh] - ao_loc[ksh0]; + l0 = ao_loc[lsh] - ao_loc[lsh0]; + dk = ao_loc[ksh+1] - ao_loc[ksh]; + dl = ao_loc[lsh+1] - ao_loc[lsh]; + dijk = dij * dk; + dijkl = dijk * dl; + cache = buf + dijkl * comp; + if ((*fprescreen)(shls, atm, bas, env) && + (*intor)(buf, NULL, shls, atm, natm, bas, nbas, env, cintopt, cache)) { + eri0 = eri + k0*(k0+1)/2+l0; + buf0 = buf; + for (icomp = 0; icomp < comp; icomp++) { + if (kshp > lshp) { + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + peri = eri0 + nkl*(i*nj+j); + for (k = 0; k < dk; k++, peri+=k0+k) { + for (pbuf = buf0 + k*dij + j*di + i, + l = 0; l < dl; l++) { + peri[l] = pbuf[l*dijk]; + } } + } } + } else { + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + peri = eri0 + nkl*(i*nj+j); + for (k = 0; k < dk; k++, peri+=k0+k) { + for (pbuf = buf0 + k*dij + j*di + i, + l = 0; l <= k; l++) { + peri[l] = pbuf[l*dijk]; + } } + } } + } + buf0 += dijkl; + eri0 += neri; + } + } else { + eri0 = eri + k0*(k0+1)/2+l0; + for (icomp = 0; icomp < comp; icomp++) { + if (kshp > lshp) { + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + peri = eri0 + nkl*(i*nj+j); + for (k = 0; k < dk; k++, peri+=k0+k) { + for (l = 0; l < dl; l++) { + peri[l] = 0; + } } + } } + } else { + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + peri = eri0 + nkl*(i*nj+j); + for (k = 0; k < dk; k++, peri+=k0+k) { + for (l = 0; l <= k; l++) { + peri[l] = 0; + } } + } } + } + eri0 += neri; + } + } + } } +} + +void GTOnr2e_fill_s4(int (*intor)(), int (*fprescreen)(), + double *eri, double *buf, int comp, int ishp, int jshp, + int *shls_slice, int *ao_loc, CINTOpt *cintopt, + int *atm, int natm, int *bas, int nbas, double *env) +{ + if (ishp < jshp) { + return; + } + + int ish0 = shls_slice[0]; + int ish1 = shls_slice[1]; + int jsh0 = shls_slice[2]; + //int jsh1 = shls_slice[3]; + int ksh0 = shls_slice[4]; + int ksh1 = shls_slice[5]; + int lsh0 = shls_slice[6]; + //int lsh1 = shls_slice[7]; + int ni = ao_loc[ish1] - ao_loc[ish0]; + //int nj = ao_loc[jsh1] - ao_loc[jsh0]; + int nk = ao_loc[ksh1] - ao_loc[ksh0]; + //int nl = ao_loc[lsh1] - ao_loc[lsh0]; + size_t nij = ni * (ni+1) / 2; + size_t nkl = nk * (nk+1) / 2; + size_t neri = nij * nkl; + + int ish = ishp + ish0; + int jsh = jshp + jsh0; + int i0 = ao_loc[ish] - ao_loc[ish0]; + int j0 = ao_loc[jsh] - ao_loc[jsh0]; + eri += nkl * (i0*(i0+1)/2 + j0); + + int di = ao_loc[ish+1] - ao_loc[ish]; + int dj = ao_loc[jsh+1] - ao_loc[jsh]; + int dij = di * dj; + int k0, l0, dk, dl, dijk, dijkl; + int i, j, k, l, icomp; + int ksh, lsh, kshp, lshp; + int shls[4]; + double *eri0, *peri0, *peri, *buf0, *pbuf, *cache; + + shls[0] = ish; + shls[1] = jsh; + + for (kshp = 0; kshp < ksh1-ksh0; kshp++) { + for (lshp = 0; lshp <= kshp; lshp++) { + ksh = kshp + ksh0; + lsh = lshp + lsh0; + shls[2] = ksh; + shls[3] = lsh; + k0 = ao_loc[ksh] - ao_loc[ksh0]; + l0 = ao_loc[lsh] - ao_loc[lsh0]; + dk = ao_loc[ksh+1] - ao_loc[ksh]; + dl = ao_loc[lsh+1] - ao_loc[lsh]; + dijk = dij * dk; + dijkl = dijk * dl; + cache = buf + dijkl * comp; + if ((*fprescreen)(shls, atm, bas, env) && + (*intor)(buf, NULL, shls, atm, natm, bas, nbas, env, cintopt, cache)) { + eri0 = eri + k0*(k0+1)/2+l0; + buf0 = buf; + for (icomp = 0; icomp < comp; icomp++) { + peri0 = eri0; + if (kshp > lshp && ishp > jshp) { + for (i = 0; i < di; i++, peri0+=nkl*(i0+i)) { + for (j = 0; j < dj; j++) { + peri = peri0 + nkl*j; + for (k = 0; k < dk; k++, peri+=k0+k) { + for (pbuf = buf0 + k*dij + j*di + i, + l = 0; l < dl; l++) { + peri[l] = pbuf[l*dijk]; + } } + } } + } else if (ish > jsh) { + for (i = 0; i < di; i++, peri0+=nkl*(i0+i)) { + for (j = 0; j < dj; j++) { + peri = peri0 + nkl*j; + for (k = 0; k < dk; k++, peri+=k0+k) { + for (pbuf = buf0 + k*dij + j*di + i, + l = 0; l <= k; l++) { + peri[l] = pbuf[l*dijk]; + } } + } } + } else if (ksh > lsh) { + for (i = 0; i < di; i++, peri0+=nkl*(i0+i)) { + for (j = 0; j <= i; j++) { + peri = peri0 + nkl*j; + for (k = 0; k < dk; k++, peri+=k0+k) { + for (pbuf = buf0 + k*dij + j*di + i, + l = 0; l < dl; l++) { + peri[l] = pbuf[l*dijk]; + } } + } } + } else { + for (i = 0; i < di; i++, peri0+=nkl*(i0+i)) { + for (j = 0; j <= i; j++) { + peri = peri0 + nkl*j; + for (k = 0; k < dk; k++, peri+=k0+k) { + for (pbuf = buf0 + k*dij + j*di + i, + l = 0; l <= k; l++) { + peri[l] = pbuf[l*dijk]; + } } + } } + } + buf0 += dijkl; + eri0 += neri; + } + } else { + eri0 = eri + k0*(k0+1)/2+l0; + buf0 = buf; + for (icomp = 0; icomp < comp; icomp++) { + peri0 = eri0; + if (kshp > lshp && ishp > jshp) { + for (i = 0; i < di; i++, peri0+=nkl*(i0+i)) { + for (j = 0; j < dj; j++) { + peri = peri0 + nkl*j; + for (k = 0; k < dk; k++, peri+=k0+k) { + for (l = 0; l < dl; l++) { + peri[l] = 0; + } } + } } + } else if (ish > jsh) { + for (i = 0; i < di; i++, peri0+=nkl*(i0+i)) { + for (j = 0; j < dj; j++) { + peri = peri0 + nkl*j; + for (k = 0; k < dk; k++, peri+=k0+k) { + for (l = 0; l <= k; l++) { + peri[l] = 0; + } } + } } + } else if (ksh > lsh) { + for (i = 0; i < di; i++, peri0+=nkl*(i0+i)) { + for (j = 0; j <= i; j++) { + peri = peri0 + nkl*j; + for (k = 0; k < dk; k++, peri+=k0+k) { + for (l = 0; l < dl; l++) { + peri[l] = 0; + } } + } } + } else { + for (i = 0; i < di; i++, peri0+=nkl*(i0+i)) { + for (j = 0; j <= i; j++) { + peri = peri0 + nkl*j; + for (k = 0; k < dk; k++, peri+=k0+k) { + for (l = 0; l <= k; l++) { + peri[l] = 0; + } } + } } + } + eri0 += neri; + } + } + } } +} + +static int no_prescreen() +{ + return 1; +} + +void GTOnr2e_fill_drv(int (*intor)(), void (*fill)(), int (*fprescreen)(), + double *eri, int comp, + int *shls_slice, int *ao_loc, CINTOpt *cintopt, + int *atm, int natm, int *bas, int nbas, double *env) +{ + if (fprescreen == NULL) { + fprescreen = no_prescreen; + } + + const int ish0 = shls_slice[0]; + const int ish1 = shls_slice[1]; + const int jsh0 = shls_slice[2]; + const int jsh1 = shls_slice[3]; + const int nish = ish1 - ish0; + const int njsh = jsh1 - jsh0; + const int di = GTOmax_shell_dim(ao_loc, shls_slice, 4); + const int cache_size = GTOmax_cache_size(intor, shls_slice, 4, + atm, natm, bas, nbas, env); + +#pragma omp parallel +{ + int ij, i, j; + double *buf = malloc(sizeof(double) * (di*di*di*di*comp + cache_size)); +#pragma omp for nowait schedule(dynamic) + for (ij = 0; ij < nish*njsh; ij++) { + i = ij / njsh; + j = ij % njsh; + (*fill)(intor, fprescreen, eri, buf, comp, i, j, shls_slice, + ao_loc, cintopt, atm, natm, bas, nbas, env); + } + free(buf); +} +} + diff --git a/pyscfadlib/pyscfadlib/gto/fill_nr_3c.c b/pyscfadlib/pyscfadlib/gto/fill_nr_3c.c new file mode 100644 index 00000000..71460ad1 --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/fill_nr_3c.c @@ -0,0 +1,226 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +#include "config.h" +#include "cint.h" +#include "np_helper/np_helper.h" +#include "gto/gto.h" + +#define BLKSIZE 8 + +/* + * out[naoi,naoj,naok,comp] in F-order + */ +void GTOnr3c_fill_s1(int (*intor)(), double *out, double *buf, + int comp, int jobid, + int *shls_slice, int *ao_loc, CINTOpt *cintopt, + int *atm, int natm, int *bas, int nbas, double *env) +{ + const int ish0 = shls_slice[0]; + const int ish1 = shls_slice[1]; + const int jsh0 = shls_slice[2]; + const int jsh1 = shls_slice[3]; + const int ksh0 = shls_slice[4]; + const int ksh1 = shls_slice[5]; + const int nksh = ksh1 - ksh0; + + const int ksh = jobid % nksh + ksh0; + const int jstart = jobid / nksh * BLKSIZE + jsh0; + const int jend = MIN(jstart + BLKSIZE, jsh1); + if (jstart >= jend) { + return; + } + + const size_t naoi = ao_loc[ish1] - ao_loc[ish0]; + const size_t naoj = ao_loc[jsh1] - ao_loc[jsh0]; + const size_t naok = ao_loc[ksh1] - ao_loc[ksh0]; + const int dims[] = {naoi, naoj, naok}; + + const int k0 = ao_loc[ksh] - ao_loc[ksh0]; + out += naoi * naoj * k0; + + int ish, jsh, i0, j0; + int shls[3] = {0, 0, ksh}; + + for (jsh = jstart; jsh < jend; jsh++) { + for (ish = ish0; ish < ish1; ish++) { + shls[0] = ish; + shls[1] = jsh; + i0 = ao_loc[ish] - ao_loc[ish0]; + j0 = ao_loc[jsh] - ao_loc[jsh0]; + (*intor)(out+j0*naoi+i0, dims, shls, atm, natm, bas, nbas, env, + cintopt, buf); + } } +} + + +static void dcopy_s2_igtj(double *out, double *in, int comp, + int ip, int nij, int nijk, int di, int dj, int dk) +{ + const size_t dij = di * dj; + const size_t ip1 = ip + 1; + int i, j, k, ic; + double *pout, *pin; + for (ic = 0; ic < comp; ic++) { + for (k = 0; k < dk; k++) { + pout = out + k * nij; + pin = in + k * dij; + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + pout[j] = pin[j*di+i]; + } + pout += ip1 + i; + } + } + out += nijk; + in += dij * dk; + } +} +static void dcopy_s2_ieqj(double *out, double *in, int comp, + int ip, int nij, int nijk, int di, int dj, int dk) +{ + const size_t dij = di * dj; + const size_t ip1 = ip + 1; + int i, j, k, ic; + double *pout, *pin; + for (ic = 0; ic < comp; ic++) { + for (k = 0; k < dk; k++) { + pout = out + k * nij; + pin = in + k * dij; + for (i = 0; i < di; i++) { + for (j = 0; j <= i; j++) { + pout[j] = pin[j*di+i]; + } + pout += ip1 + i; + } + } + out += nijk; + in += dij * dk; + } +} +/* + * out[comp,naok,nij] in C-order + * nij = i1*(i1+1)/2 - i0*(i0+1)/2 + * [ \ ] + * [**** ] + * [***** ] + * [*****. ] <= . may not be filled, if jsh-upper-bound < ish-upper-bound + * [ \] + */ +void GTOnr3c_fill_s2ij(int (*intor)(), double *out, double *buf, + int comp, int jobid, + int *shls_slice, int *ao_loc, CINTOpt *cintopt, + int *atm, int natm, int *bas, int nbas, double *env) +{ + const int ish0 = shls_slice[0]; + const int ish1 = shls_slice[1]; + const int jsh0 = shls_slice[2]; + const int jsh1 = shls_slice[3]; + const int ksh0 = shls_slice[4]; + const int ksh1 = shls_slice[5]; + const int nksh = ksh1 - ksh0; + + const int ksh = jobid % nksh + ksh0; + const int istart = jobid / nksh * BLKSIZE + ish0; + const int iend = MIN(istart + BLKSIZE, ish1); + if (istart >= iend) { + return; + } + + const int i0 = ao_loc[ish0]; + const int i1 = ao_loc[ish1]; + const size_t naok = ao_loc[ksh1] - ao_loc[ksh0]; + const size_t off = i0 * (i0 + 1) / 2; + const size_t nij = i1 * (i1 + 1) / 2 - off; + const size_t nijk = nij * naok; + + const int dk = ao_loc[ksh+1] - ao_loc[ksh]; + const int k0 = ao_loc[ksh] - ao_loc[ksh0]; + out += nij * k0; + + int ish, jsh, ip, jp, di, dj; + int shls[3] = {0, 0, ksh}; + di = GTOmax_shell_dim(ao_loc, shls_slice, 2); + double *cache = buf + di * di * dk * comp; + double *pout; + + for (ish = istart; ish < iend; ish++) { + for (jsh = jsh0; jsh < jsh1; jsh++) { + ip = ao_loc[ish]; + jp = ao_loc[jsh] - ao_loc[jsh0]; + if (ip < jp) { + continue; + } + shls[0] = ish; + shls[1] = jsh; + di = ao_loc[ish+1] - ao_loc[ish]; + dj = ao_loc[jsh+1] - ao_loc[jsh]; + + (*intor)(buf, NULL, shls, atm, natm, bas, nbas, env, cintopt, cache); + + pout = out + ip * (ip + 1) / 2 - off + jp; + if (ip != jp) { + dcopy_s2_igtj(pout, buf, comp, ip, nij, nijk, di, dj, dk); + } else { + dcopy_s2_ieqj(pout, buf, comp, ip, nij, nijk, di, dj, dk); + } + } } +} + +void GTOnr3c_fill_s2jk(int (*intor)(), double *out, double *buf, + int comp, int jobid, + int *shls_slice, int *ao_loc, CINTOpt *cintopt, + int *atm, int natm, int *bas, int nbas, double *env) +{ + fprintf(stderr, "GTOnr3c_fill_s2jk not implemented\n"); + exit(1); +} + +void GTOnr3c_drv(int (*intor)(), void (*fill)(), double *eri, int comp, + int *shls_slice, int *ao_loc, CINTOpt *cintopt, + int *atm, int natm, int *bas, int nbas, double *env) +{ + const int ish0 = shls_slice[0]; + const int ish1 = shls_slice[1]; + const int jsh0 = shls_slice[2]; + const int jsh1 = shls_slice[3]; + const int ksh0 = shls_slice[4]; + const int ksh1 = shls_slice[5]; + const int nish = ish1 - ish0; + const int njsh = jsh1 - jsh0; + const int nksh = ksh1 - ksh0; + const int di = GTOmax_shell_dim(ao_loc, shls_slice, 3); + const int cache_size = GTOmax_cache_size(intor, shls_slice, 3, + atm, natm, bas, nbas, env); + const int njobs = (MAX(nish,njsh) / BLKSIZE + 1) * nksh; + +#pragma omp parallel +{ + int jobid; + double *buf = malloc(sizeof(double) * (di*di*di*comp + cache_size)); +#pragma omp for nowait schedule(dynamic) + for (jobid = 0; jobid < njobs; jobid++) { + (*fill)(intor, eri, buf, comp, jobid, shls_slice, ao_loc, + cintopt, atm, natm, bas, nbas, env); + } + free(buf); +} +} + diff --git a/pyscfadlib/pyscfadlib/gto/fill_r_3c.c b/pyscfadlib/pyscfadlib/gto/fill_r_3c.c new file mode 100644 index 00000000..7f6dd52f --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/fill_r_3c.c @@ -0,0 +1,205 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +#include +#include "config.h" +#include "cint.h" +#include "gto/gto.h" + +/* + * out[naoi,naoj,naok,comp] in F-order + */ +void GTOr3c_fill_s1(int (*intor)(), double complex *out, double complex *buf, + int comp, int ish, int jsh, + int *shls_slice, int *ao_loc, CINTOpt *cintopt, + int *atm, int natm, int *bas, int nbas, double *env) +{ + const int ish0 = shls_slice[0]; + const int ish1 = shls_slice[1]; + const int jsh0 = shls_slice[2]; + const int jsh1 = shls_slice[3]; + const int ksh0 = shls_slice[4]; + const int ksh1 = shls_slice[5]; + const size_t naoi = ao_loc[ish1] - ao_loc[ish0]; + const size_t naoj = ao_loc[jsh1] - ao_loc[jsh0]; + const size_t naok = ao_loc[ksh1] - ao_loc[ksh0]; + const size_t nij = naoi * naoj; + const int dims[] = {naoi, naoj, naok}; + + ish += ish0; + jsh += jsh0; + const int ip = ao_loc[ish] - ao_loc[ish0]; + const int jp = ao_loc[jsh] - ao_loc[jsh0]; + out += jp * naoi + ip; + + int ksh, k0; + int shls[3]; + + shls[0] = ish; + shls[1] = jsh; + + for (ksh = ksh0; ksh < ksh1; ksh++) { + shls[2] = ksh; + k0 = ao_loc[ksh ] - ao_loc[ksh0]; + (*intor)(out+k0*nij, dims, shls, atm, natm, bas, nbas, env, cintopt, buf); + } +} + + +static void zcopy_s2_igtj(double complex *out, double complex *in, int comp, + int ip, int nij, int nijk, int di, int dj, int dk) +{ + const size_t dij = di * dj; + const size_t ip1 = ip + 1; + int i, j, k, ic; + double complex *pout, *pin; + for (ic = 0; ic < comp; ic++) { + for (k = 0; k < dk; k++) { + pout = out + k * nij; + pin = in + k * dij; + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + pout[j] = pin[j*di+i]; + } + pout += ip1 + i; + } + } + out += nijk; + in += dij * dk; + } +} +static void zcopy_s2_ieqj(double complex *out, double complex *in, int comp, + int ip, int nij, int nijk, int di, int dj, int dk) +{ + const size_t dij = di * dj; + const size_t ip1 = ip + 1; + int i, j, k, ic; + double complex *pout, *pin; + for (ic = 0; ic < comp; ic++) { + for (k = 0; k < dk; k++) { + pout = out + k * nij; + pin = in + k * dij; + for (i = 0; i < di; i++) { + for (j = 0; j <= i; j++) { + pout[j] = pin[j*di+i]; + } + pout += ip1 + i; + } + } + out += nijk; + in += dij * dk; + } +} +/* + * out[comp,naok,nij] in C-order + * nij = i1*(i1+1)/2 - i0*(i0+1)/2 + * [ \ ] + * [**** ] + * [***** ] + * [*****. ] <= . may not be filled, if jsh-upper-bound < ish-upper-bound + * [ \] + */ +void GTOr3c_fill_s2ij(int (*intor)(), double complex *out, double complex *buf, + int comp, int ish, int jsh, + int *shls_slice, int *ao_loc, CINTOpt *cintopt, + int *atm, int natm, int *bas, int nbas, double *env) +{ + const int ish0 = shls_slice[0]; + const int ish1 = shls_slice[1]; + const int jsh0 = shls_slice[2]; + ish += ish0; + jsh += jsh0; + const int ip = ao_loc[ish]; + const int jp = ao_loc[jsh] - ao_loc[jsh0]; + if (ip < jp) { + return; + } + + const int ksh0 = shls_slice[4]; + const int ksh1 = shls_slice[5]; + const int i0 = ao_loc[ish0]; + const int i1 = ao_loc[ish1]; + const size_t naok = ao_loc[ksh1] - ao_loc[ksh0]; + const size_t off = i0 * (i0 + 1) / 2; + const size_t nij = i1 * (i1 + 1) / 2 - off; + const size_t nijk = nij * naok; + + const int di = ao_loc[ish+1] - ao_loc[ish]; + const int dj = ao_loc[jsh+1] - ao_loc[jsh]; + out += ip * (ip + 1) / 2 - off + jp; + + int ksh, dk, k0; + int shls[3]; + dk = GTOmax_shell_dim(ao_loc, shls_slice, 3); + double *cache = (double *)(buf + di * dj * dk * comp); + + shls[0] = ish; + shls[1] = jsh; + + for (ksh = ksh0; ksh < ksh1; ksh++) { + shls[2] = ksh; + dk = ao_loc[ksh+1] - ao_loc[ksh]; + k0 = ao_loc[ksh ] - ao_loc[ksh0]; + (*intor)(buf, NULL, shls, atm, natm, bas, nbas, env, cintopt, cache); + if (ip != jp) { + zcopy_s2_igtj(out+k0*nij, buf, comp, ip, nij, nijk, di, dj, dk); + } else { + zcopy_s2_ieqj(out+k0*nij, buf, comp, ip, nij, nijk, di, dj, dk); + } + } +} + +void GTOr3c_fill_s2jk(int (*intor)(), double complex *out, double complex *buf, + int comp, int ish, int jsh, + int *shls_slice, int *ao_loc, CINTOpt *cintopt, + int *atm, int natm, int *bas, int nbas, double *env) +{ + fprintf(stderr, "GTOr3c_fill_s2jk not implemented\n"); + exit(1); +} + +void GTOr3c_drv(int (*intor)(), void (*fill)(), double complex *eri, int comp, + int *shls_slice, int *ao_loc, CINTOpt *cintopt, + int *atm, int natm, int *bas, int nbas, double *env) +{ + const int ish0 = shls_slice[0]; + const int ish1 = shls_slice[1]; + const int jsh0 = shls_slice[2]; + const int jsh1 = shls_slice[3]; + const int nish = ish1 - ish0; + const int njsh = jsh1 - jsh0; + const int di = GTOmax_shell_dim(ao_loc, shls_slice, 3); + const int cache_size = GTOmax_cache_size(intor, shls_slice, 3, + atm, natm, bas, nbas, env); +#pragma omp parallel +{ + int ish, jsh, ij; + double complex *buf = malloc(sizeof(double complex) * + (di*di*di*comp + cache_size/2)); +#pragma omp for schedule(dynamic) + for (ij = 0; ij < nish*njsh; ij++) { + ish = ij / njsh; + jsh = ij % njsh; + (*fill)(intor, eri, buf, comp, ish, jsh, shls_slice, ao_loc, + cintopt, atm, natm, bas, nbas, env); + } + free(buf); +} +} diff --git a/pyscfadlib/pyscfadlib/gto/fill_r_4c.c b/pyscfadlib/pyscfadlib/gto/fill_r_4c.c new file mode 100644 index 00000000..b9e9db4d --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/fill_r_4c.c @@ -0,0 +1,99 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +#include +#include "config.h" +#include "cint.h" +#include "gto/gto.h" + +/* + * out[naoi,naoj,naok,comp] in F-order + */ +void GTOr4c_fill_s1(int (*intor)(), double complex *out, double *buf, + int comp, int ish, int jsh, + int *shls_slice, int *ao_loc, CINTOpt *cintopt, + int *atm, int natm, int *bas, int nbas, double *env) +{ + const int ish0 = shls_slice[0]; + const int ish1 = shls_slice[1]; + const int jsh0 = shls_slice[2]; + const int jsh1 = shls_slice[3]; + const int ksh0 = shls_slice[4]; + const int ksh1 = shls_slice[5]; + const int lsh0 = shls_slice[6]; + const int lsh1 = shls_slice[7]; + const size_t naoi = ao_loc[ish1] - ao_loc[ish0]; + const size_t naoj = ao_loc[jsh1] - ao_loc[jsh0]; + const size_t naok = ao_loc[ksh1] - ao_loc[ksh0]; + const size_t naol = ao_loc[lsh1] - ao_loc[lsh0]; + const size_t nij = naoi * naoj; + const int dims[] = {naoi, naoj, naok, naol}; + + ish += ish0; + jsh += jsh0; + const int ip = ao_loc[ish] - ao_loc[ish0]; + const int jp = ao_loc[jsh] - ao_loc[jsh0]; + out += jp * naoi + ip; + + int ksh, lsh, k0, l0; + int shls[4]; + + shls[0] = ish; + shls[1] = jsh; + + for (ksh = ksh0; ksh < ksh1; ksh++) { + for (lsh = lsh0; lsh < lsh1; lsh++) { + shls[2] = ksh; + shls[3] = lsh; + k0 = ao_loc[ksh] - ao_loc[ksh0]; + l0 = ao_loc[lsh] - ao_loc[lsh0]; + (*intor)(out+(l0*naok+k0)*nij, dims, shls, + atm, natm, bas, nbas, env, cintopt, buf); + } } +} + + +void GTOr4c_drv(int (*intor)(), void (*fill)(), int (*prescreen)(), + double complex *eri, int comp, + int *shls_slice, int *ao_loc, CINTOpt *cintopt, + int *atm, int natm, int *bas, int nbas, double *env) +{ + const int ish0 = shls_slice[0]; + const int ish1 = shls_slice[1]; + const int jsh0 = shls_slice[2]; + const int jsh1 = shls_slice[3]; + const int nish = ish1 - ish0; + const int njsh = jsh1 - jsh0; + const int cache_size = GTOmax_cache_size(intor, shls_slice, 4, + atm, natm, bas, nbas, env); +#pragma omp parallel +{ + int ish, jsh, ij; + double *buf = malloc(sizeof(double) * cache_size); +#pragma omp for schedule(dynamic) + for (ij = 0; ij < nish*njsh; ij++) { + ish = ij / njsh; + jsh = ij % njsh; + (*fill)(intor, eri, buf, comp, ish, jsh, shls_slice, ao_loc, + cintopt, atm, natm, bas, nbas, env); + } + free(buf); +} +} diff --git a/pyscfadlib/pyscfadlib/gto/ft_ao.c b/pyscfadlib/pyscfadlib/gto/ft_ao.c new file mode 100644 index 00000000..06af97c5 --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/ft_ao.c @@ -0,0 +1,1394 @@ +/* Copyright 2021 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Fourier transformed AO pair + * \int e^{-i Gv \cdot r} i(r) * j(r) dr^3 + * + * eval_gz, b, gxyz, gs: + * - when eval_gz is GTO_Gv_uniform_orth + * > b (reciprocal vectors) is diagonal 3x3 matrix + * > Gv k-space grids = dot(b.T,gxyz) + * > gxyz[3,nGv] = (kx[:nGv], ky[:nGv], kz[:nGv]) + * > gs[3]: The number of G-vectors along each direction (nGv=gs[0]*gs[1]*gs[2]). + * - when eval_gz is GTO_Gv_uniform_nonorth + * > b is 3x3 matrix = 2\pi * scipy.linalg.inv(cell.lattice_vectors).T + * > Gv k-space grids = dot(b.T,gxyz) + * > gxyz[3,nGv] = (kx[:nGv], ky[:nGv], kz[:nGv]) + * > gs[3]: The number of *positive* G-vectors along each direction. + * - when eval_gz is GTO_Gv_general + * only Gv is needed + * - when eval_gz is GTO_Gv_nonuniform_orth + * > b is the basic G value for each cartesian component + * Gx = b[:gs[0]] + * Gy = b[gs[0]:gs[0]+gs[1]] + * Gz = b[gs[0]+gs[1]:] + * > gs[3]: Number of basic G values along each direction. + * > gxyz[3,nGv] are used to index the basic G value + * > Gv is not used + * + * Note this implementation is an inplace version. The output tensor needs to be + * zeroed in caller. + */ + +#include +#include +#include +#include +#include +#include +#include "config.h" +#include "cint.h" +#include "gto/gto.h" +#include "gto/ft_ao.h" +#include "np_helper/np_helper.h" + +#define SQRTPI 1.7724538509055160272981674833411451 +#define EXPCUTOFF 60 +#define MIN_EXPCUTOFF 40 +#define OF_CMPLX 2 +#define CART_MAX 136 // >= (ANG_MAX*(ANG_MAX+1)/2) +#define BLKSIZE 312 + +// functions implemented in libcint +double CINTsquare_dist(double *r1, double *r2); +double CINTcommon_fac_sp(int l); +void CINTcart_comp(int *nx, int *ny, int *nz, int lmax); + +#define IINC 0 +#define JINC 1 +#define GSHIFT 4 +#define POS_E1 5 +#define RYS_ROOTS 6 +#define TENSOR 7 +void GTO_ft_init1e_envs(FTEnvVars *envs, int *ng, int *shls, double complex fac, + double *Gv, double *b, int *gxyz, int *gs, + int nGv, int block_size, + int *atm, int natm, int *bas, int nbas, double *env) +{ + envs->natm = natm; + envs->nbas = nbas; + envs->atm = atm; + envs->bas = bas; + envs->env = env; + envs->shls = shls; + + int i_sh = shls[0]; + int j_sh = shls[1]; + envs->i_l = bas(ANG_OF, i_sh); + envs->j_l = bas(ANG_OF, j_sh); + envs->x_ctr[0] = bas(NCTR_OF, i_sh); + envs->x_ctr[1] = bas(NCTR_OF, j_sh); + envs->nfi = (envs->i_l+1)*(envs->i_l+2)/2; + envs->nfj = (envs->j_l+1)*(envs->j_l+2)/2; + envs->nf = envs->nfi * envs->nfj; + if (env[PTR_EXPCUTOFF] == 0) { + envs->expcutoff = EXPCUTOFF; + } else { + envs->expcutoff = MAX(MIN_EXPCUTOFF, env[PTR_EXPCUTOFF]); + } + + envs->gbits = ng[GSHIFT]; + envs->ncomp_e1 = ng[POS_E1]; + envs->ncomp_tensor = ng[TENSOR]; + + envs->li_ceil = envs->i_l + ng[IINC]; + envs->lj_ceil = envs->j_l + ng[JINC]; + envs->ri = env + atm(PTR_COORD, bas(ATOM_OF, i_sh)); + envs->rj = env + atm(PTR_COORD, bas(ATOM_OF, j_sh)); + + int dli, dlj; + if (envs->li_ceil >= envs->lj_ceil) { + dli = envs->li_ceil + envs->lj_ceil + 1; + dlj = envs->lj_ceil + 1; + envs->rirj[0] = envs->ri[0] - envs->rj[0]; + envs->rirj[1] = envs->ri[1] - envs->rj[1]; + envs->rirj[2] = envs->ri[2] - envs->rj[2]; + } else { + dli = envs->li_ceil + 1; + dlj = envs->li_ceil + envs->lj_ceil + 1; + envs->rirj[0] = envs->rj[0] - envs->ri[0]; + envs->rirj[1] = envs->rj[1] - envs->ri[1]; + envs->rirj[2] = envs->rj[2] - envs->ri[2]; + } + envs->g_stride_i = 1; + envs->g_stride_j = dli; + envs->g_size = dli * dlj; + + envs->common_factor = fac; + envs->Gv = Gv; + envs->b = b; + envs->gxyz = gxyz; + envs->gs = gs; + envs->ngrids = nGv; + envs->block_size = block_size; +} + +static void _g2c_index_xyz(int *idx, FTEnvVars *envs) +{ + int i_l = envs->i_l; + int j_l = envs->j_l; + int nfi = envs->nfi; + int nfj = envs->nfj; + int di = envs->g_stride_i; + int dj = envs->g_stride_j; + int i, j, n; + int ofx, ofjx; + int ofy, ofjy; + int ofz, ofjz; + int i_nx[CART_MAX], i_ny[CART_MAX], i_nz[CART_MAX]; + int j_nx[CART_MAX], j_ny[CART_MAX], j_nz[CART_MAX]; + + CINTcart_comp(i_nx, i_ny, i_nz, i_l); + CINTcart_comp(j_nx, j_ny, j_nz, j_l); + + ofx = 0; + ofy = envs->g_size; + ofz = envs->g_size * 2; + n = 0; + for (j = 0; j < nfj; j++) { + ofjx = ofx + dj * j_nx[j]; + ofjy = ofy + dj * j_ny[j]; + ofjz = ofz + dj * j_nz[j]; + for (i = 0; i < nfi; i++) { + idx[n+0] = ofjx + di * i_nx[i]; + idx[n+1] = ofjy + di * i_ny[i]; + idx[n+2] = ofjz + di * i_nz[i]; + n += 3; + } + } +} + +static void make_g1e_2d(double *g, double fac, double ai, double aj, + FTEnvVars *envs, FPtr_eval_gz eval_gz, double *cache) +{ + int nGv = envs->ngrids; + int bs = envs->block_size; + size_t g_size = envs->g_size * bs; + double aij = ai + aj; + double *ri = envs->ri; + double *rj = envs->rj; + double rij[3]; + double *gxR = g; + double *gyR = gxR + g_size; + double *gzR = gyR + g_size; + double *gxI = gzR + g_size; + double *gyI = gxI + g_size; + double *gzI = gyI + g_size; + int i, j, n; + + rij[0] = (ai * ri[0] + aj * rj[0]) / aij; + rij[1] = (ai * ri[1] + aj * rj[1]) / aij; + rij[2] = (ai * ri[2] + aj * rj[2]) / aij; + for (n = 0; n < bs; n++) { + gxR[n] = 1; + gyR[n] = 1; + gxI[n] = 0; + gyI[n] = 0; + } + (*eval_gz)(gzR, gzI, fac, aij, rij, envs, cache); + + double ia2; + double a2 = .5 / aij; + double *kx = envs->Gv; + double *ky = kx + nGv; + double *kz = ky + nGv; + double *rirj = envs->rirj; + double *rx; + int nmax = envs->li_ceil + envs->lj_ceil; + int lj, di, dj; + size_t off0, off1, off2; + if (envs->li_ceil >= envs->lj_ceil) { + lj = envs->lj_ceil; + di = envs->g_stride_i; + dj = envs->g_stride_j; + rx = envs->ri; + } else { + lj = envs->li_ceil; + di = envs->g_stride_j; + dj = envs->g_stride_i; + rx = envs->rj; + } + double rijrx[3]; + rijrx[0] = rij[0] - rx[0]; + rijrx[1] = rij[1] - rx[1]; + rijrx[2] = rij[2] - rx[2]; + + if (nmax > 0) { +#pragma GCC ivdep + for (n = 0; n < bs; n++) { + // gx[di*bs+n] = (rijrx[0] - kx[n]*a2*_Complex_I) * gx[n]; + gxR[di*bs+n] = rijrx[0] * gxR[n] + kx[n] * a2 * gxI[n]; + gxI[di*bs+n] = rijrx[0] * gxI[n] - kx[n] * a2 * gxR[n]; + gyR[di*bs+n] = rijrx[1] * gyR[n] + ky[n] * a2 * gyI[n]; + gyI[di*bs+n] = rijrx[1] * gyI[n] - ky[n] * a2 * gyR[n]; + gzR[di*bs+n] = rijrx[2] * gzR[n] + kz[n] * a2 * gzI[n]; + gzI[di*bs+n] = rijrx[2] * gzI[n] - kz[n] * a2 * gzR[n]; + } + } + + for (i = 1; i < nmax; i++) { + off0 = (i-1) * di * bs; + off1 = i * di * bs; + off2 = (i+1) * di * bs; + ia2 = i * a2; +#pragma GCC ivdep + for (n = 0; n < bs; n++) { + // gx[off2+n] = ia2 * gx[off0+n] + (rijrx[0] - kx[n]*a2*_Complex_I) * gx[off1+n]; + gxR[off2+n] = ia2 * gxR[off0+n] + rijrx[0] * gxR[off1+n] + kx[n] * a2 * gxI[off1+n]; + gxI[off2+n] = ia2 * gxI[off0+n] + rijrx[0] * gxI[off1+n] - kx[n] * a2 * gxR[off1+n]; + gyR[off2+n] = ia2 * gyR[off0+n] + rijrx[1] * gyR[off1+n] + ky[n] * a2 * gyI[off1+n]; + gyI[off2+n] = ia2 * gyI[off0+n] + rijrx[1] * gyI[off1+n] - ky[n] * a2 * gyR[off1+n]; + gzR[off2+n] = ia2 * gzR[off0+n] + rijrx[2] * gzR[off1+n] + kz[n] * a2 * gzI[off1+n]; + gzI[off2+n] = ia2 * gzI[off0+n] + rijrx[2] * gzI[off1+n] - kz[n] * a2 * gzR[off1+n]; + } + } + + for (j = 1; j <= lj; j++) { + for (i = 0; i <= nmax - j; i++) { + off0 = (i * di + (j-1) * dj) * bs; + off1 =((i+1) * di + (j-1) * dj) * bs; + off2 = (i * di + j * dj) * bs; +#pragma GCC ivdep + for (n = 0; n < bs; n++) { + gxR[off2+n] = gxR[off1+n] + rirj[0] * gxR[off0+n]; + gxI[off2+n] = gxI[off1+n] + rirj[0] * gxI[off0+n]; + gyR[off2+n] = gyR[off1+n] + rirj[1] * gyR[off0+n]; + gyI[off2+n] = gyI[off1+n] + rirj[1] * gyI[off0+n]; + gzR[off2+n] = gzR[off1+n] + rirj[2] * gzR[off0+n]; + gzI[off2+n] = gzI[off1+n] + rirj[2] * gzI[off0+n]; + } + } } +} + +static void inner_prod(double *gout, double *g, int *idx, FTEnvVars *envs, int empty) +{ + int ix, iy, iz, n, k; + int bs = envs->block_size; + double *gR = g; + double *gI = gR + envs->g_size * bs * 3; + double *goutR = gout; + double *goutI = gout + envs->nf * bs; + double xyR, xyI; + if (empty) { + for (n = 0; n < envs->nf; n++) { + ix = idx[n*3+0]; + iy = idx[n*3+1]; + iz = idx[n*3+2]; +#pragma GCC ivdep + for (k = 0; k < bs; k++) { + ZMUL(goutR[n*bs+k], goutI[n*bs+k], g, g, g); + } + } + } else { + for (n = 0; n < envs->nf; n++) { + ix = idx[n*3+0]; + iy = idx[n*3+1]; + iz = idx[n*3+2]; +#pragma GCC ivdep + for (k = 0; k < bs; k++) { + ZMAD(goutR[n*bs+k], goutI[n*bs+k], g, g, g); + } + } + } +} + +static void prim_to_ctr(double *gc, size_t nf, double *gp, + int nprim, int nctr, double *coeff, int empty) +{ + size_t n, i; + double c; + double *gpR = gp; + double *gpI = gp + nf; + double *gcR = gc; + double *gcI = gc + nf * nctr; + + if (empty) { + for (n = 0; n < nctr; n++) { + c = coeff[nprim*n]; + for (i = 0; i < nf; i++) { + gcR[n*nf+i] = gpR[i] * c; + gcI[n*nf+i] = gpI[i] * c; + } + } + } else { + for (n = 0; n < nctr; n++) { + c = coeff[nprim*n]; + if (c != 0) { + for (i = 0; i < nf; i++) { + gcR[n*nf+i] += gpR[i] * c; + gcI[n*nf+i] += gpI[i] * c; + } + } + } + } +} + +static void transpose(double *out, double *in, int nf, int comp, int ngrids) +{ + size_t n, k, ic; + double *inR = in; + double *inI = in + nf * comp * ngrids; + double *outR = out; + double *outI = out + nf * comp * ngrids; + double *pinR, *pinI; + + for (ic = 0; ic < comp; ic++) { + for (n = 0; n < nf; n++) { + pinR = inR + (n*comp+ic) * ngrids; + pinI = inI + (n*comp+ic) * ngrids; + for (k = 0; k < ngrids; k++) { + outR[n*ngrids+k] = pinR[k]; + outI[n*ngrids+k] = pinI[k]; + } + } + outR += nf * ngrids; + outI += nf * ngrids; + } +} + +int GTO_ft_aopair_loop(double *gctr, FTEnvVars *envs, FPtr_eval_gz eval_gz, + double *cache) +{ + int *shls = envs->shls; + int *bas = envs->bas; + double *env = envs->env; + int i_sh = shls[0]; + int j_sh = shls[1]; + int i_l = envs->i_l; + int j_l = envs->j_l; + int i_ctr = envs->x_ctr[0]; + int j_ctr = envs->x_ctr[1]; + int i_prim = bas(NPRIM_OF, i_sh); + int j_prim = bas(NPRIM_OF, j_sh); + int n_comp = envs->ncomp_e1 * envs->ncomp_tensor; + int nf = envs->nf; + double *ri = envs->ri; + double *rj = envs->rj; + double *ai = env + bas(PTR_EXP, i_sh); + double *aj = env + bas(PTR_EXP, j_sh); + double *ci = env + bas(PTR_COEFF, i_sh); + double *cj = env + bas(PTR_COEFF, j_sh); + double fac1i, fac1j; + double aij, dij, eij; + int ip, jp; + int empty[3] = {1, 1, 1}; + int *jempty = empty + 0; + int *iempty = empty + 1; + int *gempty = empty + 2; + int block_size = envs->block_size; + size_t leng = envs->g_size * 3 * (1<gbits) * block_size * OF_CMPLX; + size_t len0 = nf * n_comp * block_size * OF_CMPLX; + size_t leni = nf * i_ctr * n_comp * block_size * OF_CMPLX; + double *g = cache; + cache = g + leng; + double *gout, *gctri, *gctrj; + + if (n_comp == 1) { + gctrj = gctr; + } else { + gctrj = cache; + cache += nf * i_ctr * j_ctr * n_comp * block_size * OF_CMPLX; + } + if (j_ctr == 1) { + gctri = gctrj; + iempty = jempty; + } else { + gctri = cache; + cache += leni; + } + if (i_ctr == 1) { + gout = gctri; + gempty = iempty; + } else { + gout = cache; + cache += len0; + } + + int *idx = (int *)cache; + cache += (envs->nf * 3 + 1) / 2; + _g2c_index_xyz(idx, envs); + + double rrij = CINTsquare_dist(ri, rj); + double fac1 = SQRTPI * M_PI * CINTcommon_fac_sp(i_l) * CINTcommon_fac_sp(j_l); + + *jempty = 1; + for (jp = 0; jp < j_prim; jp++) { + envs->aj[0] = aj[jp]; + if (j_ctr == 1) { + fac1j = fac1 * cj[jp]; + } else { + fac1j = fac1; + *iempty = 1; + } + for (ip = 0; ip < i_prim; ip++) { + envs->ai[0] = ai[ip]; + aij = ai[ip] + aj[jp]; + eij = (ai[ip] * aj[jp] / aij) * rrij; + if (eij > envs->expcutoff) { + continue; + } + + dij = exp(-eij) / (aij * sqrt(aij)); + if (i_ctr == 1) { + fac1i = fac1j * dij * ci[ip]; + } else { + fac1i = fac1j * dij; + } + make_g1e_2d(g, fac1i, ai[ip], aj[jp], envs, eval_gz, cache); + (*envs->f_gout)(gout, g, idx, envs, *gempty); + if (i_ctr > 1) { + prim_to_ctr(gctri, nf*n_comp*block_size, + gout, i_prim, i_ctr, ci+ip, *iempty); + } + *iempty = 0; + } + if (!*iempty) { + if (j_ctr > 1) { + prim_to_ctr(gctrj, i_ctr*nf*n_comp*block_size, + gctri, j_prim, j_ctr, cj+jp, *jempty); + } + *jempty = 0; + } + } + + if (n_comp > 1 && !*jempty) { + transpose(gctr, gctrj, nf*i_ctr*j_ctr, n_comp, block_size); + } + return !*jempty; +} + +void GTO_Gv_general(double *gzR, double *gzI, double fac, double aij, + double *rij, FTEnvVars *envs, double *cache) +{ + int nGv = envs->ngrids; + int bs = envs->block_size; + double *kx = envs->Gv; + double *ky = kx + nGv; + double *kz = ky + nGv; + double *kk = cache; + double *kR = kk + bs; + double cutoff = envs->expcutoff * aij * 4; + double aij4 = -.25 / aij; + double complex fac1 = fac * envs->common_factor; + double complex exp_kr, s; + int n; +#pragma GCC ivdep + for (n = 0; n < bs; n++) { + kk[n] = kx[n] * kx[n] + ky[n] * ky[n] + kz[n] * kz[n]; + kR[n] = kx[n] * rij[0] + ky[n] * rij[1] + kz[n] * rij[2]; + } + for (n = 0; n < bs; n++) { + if (kk[n] < cutoff) { + // fac * exp(-.25*kk/aij - kR * 1j); + exp_kr = cexp(aij4 * kk[n] - kR[n] * _Complex_I); + s = fac1 * exp_kr; + gzR[n] = creal(s); + gzI[n] = cimag(s); + } else { + gzR[n] = 0; + gzI[n] = 0; + } + } +} + +/* + * Gv = dot(b.T,gxyz) + kpt + * kk = dot(Gv, Gv) + * kr = dot(rij, Gv) = dot(rij,b.T, gxyz) + dot(rij,kpt) = dot(br, gxyz) + dot(rij,kpt) + * out = fac * exp(-.25 * kk / aij) * (cos(kr) - sin(kr) * _Complex_I); + * + * b: the first 9 elements are 2\pi*inv(a^T), then 3 elements for k_{ij}, + * followed by 3*NGv floats for Gbase + */ +void GTO_Gv_orth(double *gzR, double *gzI, double fac, double aij, + double *rij, FTEnvVars *envs, double *cache) +{ + int *gs = envs->gs; + double *b = envs->b; + int nx = gs[0]; + int ny = gs[1]; + int nz = gs[2]; + double br[3]; // dot(rij, b) + br[0] = rij[0] * b[0]; + br[1] = rij[1] * b[4]; + br[2] = rij[2] * b[8]; + double *kpt = b + 9; + double kr[3]; + kr[0] = rij[0] * kpt[0]; + kr[1] = rij[1] * kpt[1]; + kr[2] = rij[2] * kpt[2]; + double *Gxbase = b + 12; + double *Gybase = Gxbase + nx; + double *Gzbase = Gybase + ny; + + int nGv = envs->ngrids; + int block_size = envs->block_size; + double *kx = envs->Gv; + double *ky = kx + nGv; + double *kz = ky + nGv; + double *kkpool = cache; + double *kkx = kkpool; + double *kky = kkx + nx; + double *kkz = kky + ny; + double complex *csx = (double complex *)(kkz + nz); + double complex *csy = csx + nx; + double complex *csz = csy + ny; + int *idx = envs->gxyz; + int *idy = idx + nGv; + int *idz = idy + nGv; + + double cutoff = EXPCUTOFF * aij * 4; + double aij4 = .25 / aij; + double complex fac1 = fac * envs->common_factor; + int n, ix, iy, iz; + double kk, Gr; + double complex s; + for (n = 0; n < nx+ny+nz; n++) { + kkpool[n] = -1; + } + + // TODO: determine ix, iy, iz range and initialize csx here. + + for (n = 0; n < block_size; n++) { + ix = idx[n]; + iy = idy[n]; + iz = idz[n]; + if (kkx[ix] < 0) { // < 0 if not initialized + Gr = Gxbase[ix] * br[0] + kr[0]; + kk = aij4 * kx[n] * kx[n]; + kkx[ix] = kk; + csx[ix] = cexp(-kk - Gr * _Complex_I); + } + if (kky[iy] < 0) { + Gr = Gybase[iy] * br[1] + kr[1]; + kk = aij4 * ky[n] * ky[n]; + kky[iy] = kk; + csy[iy] = cexp(-kk - Gr * _Complex_I); + } + if (kkz[iz] < 0) { + Gr = Gzbase[iz] * br[2] + kr[2]; + kk = aij4 * kz[n] * kz[n]; + kkz[iz] = kk; + csz[iz] = fac1 * cexp(-kk - Gr * _Complex_I); + } + if (kkx[ix] + kky[iy] + kkz[iz] < cutoff) { + s = csx[ix] * csy[iy] * csz[iz]; + gzR[n] = creal(s); + gzI[n] = cimag(s); + } else { + gzR[n] = 0; + gzI[n] = 0; + } + } +} + +void GTO_Gv_nonorth(double *gzR, double *gzI, double fac, double aij, + double *rij, FTEnvVars *envs, double *cache) +{ + int *gs = envs->gs; + double *b = envs->b; + int nx = gs[0]; + int ny = gs[1]; + int nz = gs[2]; + double br[3]; // dot(rij, b) + // FIXME: cache b * Gxbase + kpt + br[0] = rij[0] * b[0] + rij[1] * b[1] + rij[2] * b[2]; + br[1] = rij[0] * b[3] + rij[1] * b[4] + rij[2] * b[5]; + br[2] = rij[0] * b[6] + rij[1] * b[7] + rij[2] * b[8]; + double *kpt = b + 9; + double kr[3]; + kr[0] = rij[0] * kpt[0]; + kr[1] = rij[1] * kpt[1]; + kr[2] = rij[2] * kpt[2]; + double *Gxbase = b + 12; + double *Gybase = Gxbase + nx; + double *Gzbase = Gybase + ny; + + int nGv = envs->ngrids; + int block_size = envs->block_size; + double *kx = envs->Gv; + double *ky = kx + nGv; + double *kz = ky + nGv; + double complex *csx = (double complex *)cache; + double complex *csy = csx + nx; + double complex *csz = csy + ny; + int n; + int8_t *empty = (int8_t *)(csz + nz); + int8_t *xempty = empty; + int8_t *yempty = xempty + nx; + int8_t *zempty = yempty + ny; + for (n = 0; n < nx+ny+nz; n++) { + empty[n] = 1; + } + int *idx = envs->gxyz; + int *idy = idx + nGv; + int *idz = idy + nGv; + + double cutoff = EXPCUTOFF * aij * 4; + double aij4 = -.25 / aij; + double complex fac1 = fac * envs->common_factor; + int ix, iy, iz; + double Gr, kk; + double complex s; + + // TODO: determine ix, iy, iz range and initialize csx here. + + for (n = 0; n < block_size; n++) { + kk = kx[n] * kx[n] + ky[n] * ky[n] + kz[n] * kz[n]; + if (kk < cutoff) { + ix = idx[n]; + iy = idy[n]; + iz = idz[n]; + if (xempty[ix]) { + Gr = Gxbase[ix] * br[0] + kr[0]; + csx[ix] = cexp(-Gr*_Complex_I); + xempty[ix] = 0; + } + if (yempty[iy]) { + Gr = Gybase[iy] * br[1] + kr[1]; + csy[iy] = cexp(-Gr*_Complex_I); + yempty[iy] = 0; + } + if (zempty[iz]) { + Gr = Gzbase[iz] * br[2] + kr[2]; + csz[iz] = fac1 * cexp(-Gr*_Complex_I); + zempty[iz] = 0; + } + s = exp(aij4 * kk) * csx[ix]*csy[iy]*csz[iz]; + gzR[n] = creal(s); + gzI[n] = cimag(s); + } else { + gzR[n] = 0; + gzI[n] = 0; + } + } +} + + +static void daxpy_ij(double *out, double *gctr, + int bs, int mi, int mj, int ni, size_t ngrids) +{ + int i, j, k; + for (j = 0; j < mj; j++) { + for (i = 0; i < mi; i++) { + for (k = 0; k < bs; k++) { + out[i*ngrids+k] += gctr[i*bs+k]; + } + } + out += ni * ngrids; + gctr += mi * bs; + } +} + +void GTO_ft_c2s_cart(double *out, double *gctr, int *dims, + FTEnvVars *envs, double *cache) +{ + int i_ctr = envs->x_ctr[0]; + int j_ctr = envs->x_ctr[1]; + int bs = envs->block_size; + int nfi = envs->nfi; + int nfj = envs->nfj; + int mi = nfi*i_ctr; + int mj = nfj*j_ctr; + int ni = dims[1]; + size_t ng = dims[0]; + size_t nf = envs->nf; + int ic, jc; + size_t off; + + for (jc = 0; jc < mj; jc += nfj) { + for (ic = 0; ic < mi; ic += nfi) { + off = (ni * jc + ic) * ng; + daxpy_ij(out+off, gctr, bs, nfi, nfj, ni, ng); + gctr += nf * bs; + } } +} + +void GTO_ft_c2s_sph(double *out, double *gctr, int *dims, + FTEnvVars *envs, double *cache) +{ + int i_l = envs->i_l; + int j_l = envs->j_l; + int i_ctr = envs->x_ctr[0]; + int j_ctr = envs->x_ctr[1]; + int bs = envs->block_size; + int di = i_l * 2 + 1; + int dj = j_l * 2 + 1; + int nfi = envs->nfi; + int mi = di*i_ctr; + int mj = dj*j_ctr; + int ni = dims[1]; + size_t ng = dims[0]; + size_t nf = envs->nf; + int ic, jc, k; + size_t off; + int buflen = nfi*dj; + double *buf1 = cache; + double *buf2 = buf1 + buflen * bs; + double *pij, *buf; + + for (jc = 0; jc < mj; jc += dj) { + for (ic = 0; ic < mi; ic += di) { + buf = CINTc2s_ket_sph(buf1, nfi*bs, gctr, j_l); + pij = CINTc2s_ket_sph(buf2, bs, buf, i_l); + for (k = bs; k < dj*bs; k+=bs) { + CINTc2s_ket_sph(buf2+k*di, bs, buf+k*nfi, i_l); + } + + off = (ni * jc + ic) * ng; + daxpy_ij(out+off, pij, bs, di, dj, ni, ng); + gctr += nf * bs; + } } +} + +/************************************************* + * + * eval_gz is one of GTO_Gv_general, GTO_Gv_nonorth, GTO_Gv_orth + * + *************************************************/ + +static int ft_aopair_cache_size(FTEnvVars *envs) +{ + int i_ctr = envs->x_ctr[0]; + int j_ctr = envs->x_ctr[1]; + int n_comp = envs->ncomp_e1 * envs->ncomp_tensor; + int block_size = envs->block_size; + int *gs = envs->gs; + int ngs = gs[0] + gs[1] + gs[2]; + if (ngs == 0) { + ngs = envs->ngrids; + } + int leng = envs->g_size * 3 * (1<gbits) * OF_CMPLX; + int len0 = envs->nf * n_comp * OF_CMPLX; + int nc = envs->nf * i_ctr * j_ctr; + int cache_size = leng+len0+nc*OF_CMPLX*n_comp*3 + + (ngs*3 + envs->nf*3) / block_size + 3; + return cache_size; +} + +int GTO_ft_aopair_drv(double *outR, double *outI, int *dims, + FPtr_eval_gz eval_gz, double *cache, void (*f_c2s)(), + FTEnvVars *envs) +{ + if (eval_gz == NULL) { + eval_gz = GTO_Gv_general; + } + if (eval_gz != GTO_Gv_general) { + assert(envs->gxyz != NULL); + } + + int i_ctr = envs->x_ctr[0]; + int j_ctr = envs->x_ctr[1]; + int n_comp = envs->ncomp_e1 * envs->ncomp_tensor; + int block_size = envs->block_size; + size_t nc = envs->nf * i_ctr * j_ctr * block_size; + if (outR == NULL) { + return ft_aopair_cache_size(envs); + } + + double *stack = NULL; + if (cache == NULL) { + size_t cache_size = ft_aopair_cache_size(envs) * (size_t)block_size; + stack = malloc(sizeof(double)*cache_size); + if (stack == NULL) { + fprintf(stderr, "gctr = malloc(%zu) falied in GTO_ft_aopair_drv\n", + sizeof(double) * cache_size); + return 0; + } + cache = stack; + } + double *gctrR = cache; + double *gctrI = gctrR + nc * n_comp; + cache = gctrI + nc * n_comp; + + int has_value = GTO_ft_aopair_loop(gctrR, envs, eval_gz, cache); + + int counts[3]; + if (dims == NULL) { + if (f_c2s == >O_ft_c2s_sph) { + counts[0] = block_size; + counts[1] = (envs->i_l*2+1) * i_ctr; + counts[2] = (envs->j_l*2+1) * j_ctr; + } else { // f_c2s == >O_ft_c2s_cart + counts[0] = block_size; + counts[1] = envs->nfi * i_ctr; + counts[2] = envs->nfj * j_ctr; + } + dims = counts; + } + size_t nout = (size_t)dims[0] * dims[1] * dims[2]; + int n; + if (has_value) { + for (n = 0; n < n_comp; n++) { + (*f_c2s)(outR+nout*n, gctrR+nc*n, dims, envs, cache); + (*f_c2s)(outI+nout*n, gctrI+nc*n, dims, envs, cache); + } + } + if (stack != NULL) { + free(stack); + } + return has_value; +} + +int GTO_ft_ovlp_cart(double *outR, double *outI, int *shls, int *dims, + FPtr_eval_gz eval_gz, double complex fac, + double *Gv, double *b, int *gxyz, int *gs, int nGv, int block_size, + int *atm, int natm, int *bas, int nbas, double *env, double *cache) +{ + FTEnvVars envs; + int ng[] = {0, 0, 0, 0, 0, 1, 0, 1}; + GTO_ft_init1e_envs(&envs, ng, shls, fac, Gv, b, gxyz, gs, nGv, block_size, + atm, natm, bas, nbas, env); + envs.f_gout = &inner_prod; + return GTO_ft_aopair_drv(outR, outI, dims, eval_gz, cache, >O_ft_c2s_cart, &envs); +} + +int GTO_ft_ovlp_sph(double *outR, double *outI, int *shls, int *dims, + FPtr_eval_gz eval_gz, double complex fac, + double *Gv, double *b, int *gxyz, int *gs, int nGv, int block_size, + int *atm, int natm, int *bas, int nbas, double *env, double *cache) +{ + FTEnvVars envs; + int ng[] = {0, 0, 0, 0, 0, 1, 0, 1}; + GTO_ft_init1e_envs(&envs, ng, shls, fac, Gv, b, gxyz, gs, nGv, block_size, + atm, natm, bas, nbas, env); + envs.f_gout = &inner_prod; + return GTO_ft_aopair_drv(outR, outI, dims, eval_gz, cache, >O_ft_c2s_sph, &envs); +} + +// TODO: put kkpool in opt?? +void GTO_ft_ovlp_optimizer() +{ +} + + +/************************************************* + * + *************************************************/ + +void GTO_ft_dfill_s1(FPtrIntor intor, FPtr_eval_gz eval_gz, + double *out, int comp, int ish, int jsh, double *buf, + int *shls_slice, int *ao_loc, double complex fac, + double *Gv, double *b, int *gxyz, int *gs, int nGv, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int ish0 = shls_slice[0]; + int ish1 = shls_slice[1]; + int jsh0 = shls_slice[2]; + int jsh1 = shls_slice[3]; + ish += ish0; + jsh += jsh0; + int ioff = ao_loc[ish] - ao_loc[ish0]; + int joff = ao_loc[jsh] - ao_loc[jsh0]; + size_t ni = ao_loc[ish1] - ao_loc[ish0]; + size_t nj = ao_loc[jsh1] - ao_loc[jsh0]; + size_t nij = ni * nj; + int shls[2] = {ish, jsh}; + int dims[3] = {nGv, ni, nj}; + int grid0, grid1, dg; + size_t off; + double *outR = out; + double *outI = outR + comp * nij * nGv; + + for (grid0 = 0; grid0 < nGv; grid0 += BLKSIZE) { + grid1 = MIN(grid0+BLKSIZE, nGv); + dg = grid1 - grid0; + off = (joff * ni + ioff) * nGv + grid0; + (*intor)(outR+off, outI+off, shls, dims, eval_gz, + fac, Gv+grid0, b, gxyz+grid0, gs, nGv, dg, + atm, natm, bas, nbas, env, buf); + } +} + +void GTO_ft_dfill_s1hermi(FPtrIntor intor, FPtr_eval_gz eval_gz, + double *out, int comp, int ish, int jsh, double *buf, + int *shls_slice, int *ao_loc, double complex fac, + double *Gv, double *b, int *gxyz, int *gs, int nGv, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int ish0 = shls_slice[0]; + int ish1 = shls_slice[1]; + int jsh0 = shls_slice[2]; + int jsh1 = shls_slice[3]; + ish += ish0; + jsh += jsh0; + int ioff = ao_loc[ish] - ao_loc[ish0]; + int joff = ao_loc[jsh] - ao_loc[jsh0]; + if (ioff < joff) { + return; + } + + int di = ao_loc[ish+1] - ao_loc[ish]; + int dj = ao_loc[jsh+1] - ao_loc[jsh]; + size_t ni = ao_loc[ish1] - ao_loc[ish0]; + size_t nj = ao_loc[jsh1] - ao_loc[jsh0]; + size_t nij = ni * nj; + size_t NGv = nGv; + int shls[2] = {ish, jsh}; + int dims[3] = {nGv, ni, nj}; + int grid0, grid1, dg; + int i, j, n, ic; + size_t off, ij, ji; + double *outR = out; + double *outI = outR + comp * nij * nGv; + + for (grid0 = 0; grid0 < nGv; grid0 += BLKSIZE) { + grid1 = MIN(grid0+BLKSIZE, nGv); + dg = grid1 - grid0; + off = (joff * ni + ioff) * nGv + grid0; + if ((*intor)(outR+off, outI+off, shls, dims, eval_gz, + fac, Gv+grid0, b, gxyz+grid0, gs, nGv, dg, + atm, natm, bas, nbas, env, buf)) { + if (ioff == joff) { + continue; + } +for (ic = 0; ic < comp; ic++) { + off = nij * NGv * ic + grid0; + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++) { + ij = off + ((j+joff)*nj+i+ioff) * NGv; + ji = off + ((i+ioff)*nj+j+joff) * NGv; +#pragma GCC ivdep + for (n = 0; n < dg; n++) { + outR[ji+n] = outR[ij+n]; + outI[ji+n] = outI[ij+n]; + } + } } +} + } + } +} + +void GTO_ft_zfill_s1(FPtrIntor intor, FPtr_eval_gz eval_gz, + double *out, int comp, int ish, int jsh, double *buf, + int *shls_slice, int *ao_loc, double complex fac, + double *Gv, double *b, int *gxyz, int *gs, int nGv, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int ish0 = shls_slice[0]; + int ish1 = shls_slice[1]; + int jsh0 = shls_slice[2]; + int jsh1 = shls_slice[3]; + ish += ish0; + jsh += jsh0; + int di = ao_loc[ish+1] - ao_loc[ish]; + int dj = ao_loc[jsh+1] - ao_loc[jsh]; + int dij = di * dj; + int ni = ao_loc[ish1] - ao_loc[ish0]; + int nj = ao_loc[jsh1] - ao_loc[jsh0]; + int ioff = ao_loc[ish] - ao_loc[ish0]; + int joff = ao_loc[jsh] - ao_loc[jsh0]; + size_t nij = ni * nj; + size_t off = joff * ni + ioff; + size_t NGv = nGv; + int shls[2] = {ish, jsh}; + double *bufR = buf; + double *bufI = bufR + dij * BLKSIZE * comp; + double *cache = bufI + dij * BLKSIZE * comp; + int grid0, grid1, dg, dijg; + int i, j, n, ic, ij; + double *pout, *pbufR, *pbufI; + + for (grid0 = 0; grid0 < nGv; grid0 += BLKSIZE) { + grid1 = MIN(grid0+BLKSIZE, nGv); + dg = grid1 - grid0; + dijg = dij * dg; + NPdset0(bufR, dijg * comp); + NPdset0(bufI, dijg * comp); + if ((*intor)(bufR, bufI, shls, NULL, eval_gz, + fac, Gv+grid0, b, gxyz+grid0, gs, nGv, dg, + atm, natm, bas, nbas, env, cache)) { +for (ic = 0; ic < comp; ic++) { + pout = out + ((off + ic * nij) * NGv + grid0) * OF_CMPLX; + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++) { + pbufR = bufR + ic * dijg + dg * (j*di+i); + pbufI = bufI + ic * dijg + dg * (j*di+i); + ij = j * ni + i; + for (n = 0; n < dg; n++) { + pout[(ij*NGv+n)*OF_CMPLX ] += pbufR[n]; + pout[(ij*NGv+n)*OF_CMPLX+1] += pbufI[n]; + } + } } +} + } + } +} + +void GTO_ft_zfill_s1hermi(FPtrIntor intor, FPtr_eval_gz eval_gz, + double *out, int comp, int ish, int jsh, double *buf, + int *shls_slice, int *ao_loc, double complex fac, + double *Gv, double *b, int *gxyz, int *gs, int nGv, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int ish0 = shls_slice[0]; + int ish1 = shls_slice[1]; + int jsh0 = shls_slice[2]; + int jsh1 = shls_slice[3]; + ish += ish0; + jsh += jsh0; + int ioff = ao_loc[ish] - ao_loc[ish0]; + int joff = ao_loc[jsh] - ao_loc[jsh0]; + if (ioff < joff) { + return; + } + + int di = ao_loc[ish+1] - ao_loc[ish]; + int dj = ao_loc[jsh+1] - ao_loc[jsh]; + int dij = di * dj; + int ni = ao_loc[ish1] - ao_loc[ish0]; + int nj = ao_loc[jsh1] - ao_loc[jsh0]; + size_t nij = ni * nj; + size_t ij_off = joff * ni + ioff; + size_t ji_off = ioff * ni + joff; + size_t NGv = nGv; + int shls[2] = {ish, jsh}; + double *bufR = buf; + double *bufI = bufR + dij * BLKSIZE * comp; + double *cache = bufI + dij * BLKSIZE * comp; + int grid0, grid1, dg, dijg; + int i, j, n, ic, ij, ji; + double *pout_ij, *pout_ji, *pbufR, *pbufI; + + for (grid0 = 0; grid0 < nGv; grid0 += BLKSIZE) { + grid1 = MIN(grid0+BLKSIZE, nGv); + dg = grid1 - grid0; + dijg = dij * dg; + NPdset0(bufR, dijg * comp); + NPdset0(bufI, dijg * comp); + if ((*intor)(bufR, bufI, shls, NULL, eval_gz, + fac, Gv+grid0, b, gxyz+grid0, gs, nGv, dg, + atm, natm, bas, nbas, env, cache)) { + +if (ioff == joff) { + for (ic = 0; ic < comp; ic++) { + pout_ij = out + ((ij_off + ic * nij) * NGv + grid0) * OF_CMPLX; + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++) { + pbufR = bufR + ic * dijg + dg * (j*di+i); + pbufI = bufI + ic * dijg + dg * (j*di+i); + ij = j * ni + i; + for (n = 0; n < dg; n++) { + pout_ij[(ij*NGv+n)*OF_CMPLX ] += pbufR[n]; + pout_ij[(ij*NGv+n)*OF_CMPLX+1] += pbufI[n]; + } + } } + } +} else { + for (ic = 0; ic < comp; ic++) { + pout_ij = out + ((ij_off + ic * nij) * NGv + grid0) * OF_CMPLX; + pout_ji = out + ((ji_off + ic * nij) * NGv + grid0) * OF_CMPLX; + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++) { + pbufR = bufR + ic * dijg + dg * (j*di+i); + pbufI = bufI + ic * dijg + dg * (j*di+i); + ij = j * nj + i; + ji = i * nj + j; + for (n = 0; n < dg; n++) { + pout_ij[(ij*NGv+n)*OF_CMPLX ] += pbufR[n]; + pout_ij[(ij*NGv+n)*OF_CMPLX+1] += pbufI[n]; + pout_ji[(ji*NGv+n)*OF_CMPLX ] += pbufR[n]; + pout_ji[(ji*NGv+n)*OF_CMPLX+1] += pbufI[n]; + } + } } + } +} + } + } +} + +void GTO_ft_zfill_s2(FPtrIntor intor, FPtr_eval_gz eval_gz, + double *out, int comp, int ish, int jsh, double *buf, + int *shls_slice, int *ao_loc, double complex fac, + double *Gv, double *b, int *gxyz, int *gs, int nGv, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int ish0 = shls_slice[0]; + int ish1 = shls_slice[1]; + int jsh0 = shls_slice[2]; + ish += ish0; + jsh += jsh0; + int ioff = ao_loc[ish] - ao_loc[ish0]; + int joff = ao_loc[jsh] - ao_loc[jsh0]; + if (ioff < joff) { + return; + } + + int di = ao_loc[ish+1] - ao_loc[ish]; + int dj = ao_loc[jsh+1] - ao_loc[jsh]; + int dij = di * dj; + int i0 = ao_loc[ish0]; + size_t off0 = i0 * (i0 + 1) / 2; + size_t off = ioff * (ioff + 1) / 2 - off0 + joff; + size_t nij = ao_loc[ish1] * (ao_loc[ish1] + 1) / 2 - off0; + size_t NGv = nGv; + int shls[2] = {ish, jsh}; + double *bufR = buf; + double *bufI = bufR + dij * BLKSIZE * comp; + double *cache = bufI + dij * BLKSIZE * comp; + int grid0, grid1, dg, dijg; + int i, j, n, ic, ip1; + double *pout, *pbufR, *pbufI; + + for (grid0 = 0; grid0 < nGv; grid0 += BLKSIZE) { + grid1 = MIN(grid0+BLKSIZE, nGv); + dg = grid1 - grid0; + dijg = dij * dg; + NPdset0(bufR, dijg * comp); + NPdset0(bufI, dijg * comp); + if ((*intor)(bufR, bufI, shls, NULL, eval_gz, + fac, Gv+grid0, b, gxyz+grid0, gs, nGv, dg, + atm, natm, bas, nbas, env, cache)) { + +if (ioff == joff) { + ip1 = ioff + 1; + for (ic = 0; ic < comp; ic++) { + pout = out + ((off + ic * nij) * NGv + grid0) * OF_CMPLX; + for (i = 0; i < di; i++) { + for (j = 0; j <= i; j++) { + pbufR = bufR + ic * dijg + dg * (j*di+i); + pbufI = bufI + ic * dijg + dg * (j*di+i); + for (n = 0; n < dg; n++) { + pout[(j*NGv+n)*OF_CMPLX ] += pbufR[n]; + pout[(j*NGv+n)*OF_CMPLX+1] += pbufI[n]; + } + } + pout += (ip1 + i) * NGv * OF_CMPLX; + } + } +} else { + ip1 = ioff + 1; + for (ic = 0; ic < comp; ic++) { + pout = out + ((off + ic * nij) * NGv + grid0) * OF_CMPLX; + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + pbufR = bufR + ic * dijg + dg * (j*di+i); + pbufI = bufI + ic * dijg + dg * (j*di+i); + for (n = 0; n < dg; n++) { + pout[(j*NGv+n)*OF_CMPLX ] += pbufR[n]; + pout[(j*NGv+n)*OF_CMPLX+1] += pbufI[n]; + } + } + pout += (ip1 + i) * NGv * OF_CMPLX; + } + } +} + } + } +} + +static size_t max_cache_size(FPtrIntor intor, FPtr_eval_gz eval_gz, int *shls_slice, + double *Gv, double *b, int *gxyz, int *gs, int nGv, + int *atm, int natm, int *bas, int nbas, double *env) +{ + double complex fac = 0.; + int ish0 = shls_slice[0]; + int ish1 = shls_slice[1]; + int jsh0 = shls_slice[2]; + int jsh1 = shls_slice[3]; + int sh0 = MIN(ish0, jsh0); + int sh1 = MAX(ish1, jsh1); + int blksize = MIN(nGv, BLKSIZE); + int shls[2]; + int i, cache_size; + size_t max_size = 0; + for (i = sh0; i < sh1; i++) { + shls[0] = i; + shls[1] = i; + cache_size = (*intor)(NULL, NULL, shls, NULL, eval_gz, + fac, Gv, b, gxyz, gs, nGv, blksize, + atm, natm, bas, nbas, env, NULL); + max_size = MAX(max_size, cache_size); + } + return max_size * blksize; +} + +/* + * Fourier transform AO pairs and add to out (inplace) + */ +void GTO_ft_fill_drv(FPtrIntor intor, FPtr_eval_gz eval_gz, void (*fill)(), + double *out, int8_t *ovlp_mask, int comp, + int *shls_slice, int *ao_loc, double phase, + double *Gv, double *b, int *gxyz, int *gs, int nGv, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int ish0 = shls_slice[0]; + int ish1 = shls_slice[1]; + int jsh0 = shls_slice[2]; + int jsh1 = shls_slice[3]; + int nish = ish1 - ish0; + int njsh = jsh1 - jsh0; + double complex fac = cos(phase) + sin(phase)*_Complex_I; + size_t di = GTOmax_shell_dim(ao_loc, shls_slice , 2); + size_t cache_size = max_cache_size(intor, eval_gz, shls_slice, + Gv, b, gxyz, gs, nGv, + atm, natm, bas, nbas, env); + +#pragma omp parallel +{ + int i, j, ij; + double *buf = malloc(sizeof(double) * (cache_size + + di*di*comp*BLKSIZE * OF_CMPLX)); +#pragma omp for schedule(dynamic, 4) + for (ij = 0; ij < nish*njsh; ij++) { + j = ij / nish; + i = ij % nish; + if (!ovlp_mask[ij]) { + continue; + } + (*fill)(intor, eval_gz, out, + comp, i, j, buf, shls_slice, ao_loc, fac, + Gv, b, gxyz, gs, nGv, atm, natm, bas, nbas, env); + } + free(buf); +} +} + + +static const int _LEN_CART[] = { + 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, 105, 120, 136 +}; + +/* + * WHEREX_IF_L_INC1 = [xyz2addr(x,y,z) for x,y,z in loopcart(L_MAX) if x > 0] + * WHEREY_IF_L_INC1 = [xyz2addr(x,y,z) for x,y,z in loopcart(L_MAX) if y > 0] + * WHEREZ_IF_L_INC1 = [xyz2addr(x,y,z) for x,y,z in loopcart(L_MAX) if z > 0] + */ +static const int _UPIDY[] = { + 1, + 3, 4, + 6, 7, 8, + 10, 11, 12, 13, + 15, 16, 17, 18, 19, + 21, 22, 23, 24, 25, 26, + 28, 29, 30, 31, 32, 33, 34, + 36, 37, 38, 39, 40, 41, 42, 43, + 45, 46, 47, 48, 49, 50, 51, 52, 53, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 91, 92, 93, 94, 95, 96, 97, 98, 99,100,101,102,103, + 105,106,107,108,109,110,111,112,113,114,115,116,117,118, + 120,121,122,123,124,125,126,127,128,129,130,131,132,133,134, +}; +static const int _UPIDZ[] = { + 2, + 4, 5, + 7, 8, 9, + 11, 12, 13, 14, + 16, 17, 18, 19, 20, + 22, 23, 24, 25, 26, 27, + 29, 30, 31, 32, 33, 34, 35, + 37, 38, 39, 40, 41, 42, 43, 44, + 46, 47, 48, 49, 50, 51, 52, 53, 54, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 92, 93, 94, 95, 96, 97, 98, 99,100,101,102,103,104, + 106,107,108,109,110,111,112,113,114,115,116,117,118,119, + 121,122,123,124,125,126,127,128,129,130,131,132,133,134,135, +}; + +#define WHEREX_IF_L_INC1(i) i +#define WHEREY_IF_L_INC1(i) _UPIDY[i] +#define WHEREZ_IF_L_INC1(i) _UPIDZ[i] +#define STARTX_IF_L_DEC1(i) 0 +#define STARTY_IF_L_DEC1(i) ((i<2)?0:_LEN_CART[i-2]) +#define STARTZ_IF_L_DEC1(i) (_LEN_CART[i-1]-1) + + +/* + * Reversed vrr2d. They are used by numint_uniform_grid.c + */ +void GTOplain_vrr2d_ket_inc1(double *out, double *g, + double *rirj, int li, int lj) +{ + if (lj == 0) { + NPdcopy(out, g, _LEN_CART[li]); + return; + } + int row_10 = _LEN_CART[li+1]; + int row_00 = _LEN_CART[li ]; + int col_00 = _LEN_CART[lj-1]; + double *g00 = g; + double *g10 = g + row_00*col_00; + int i, j; + double *p00, *p10; + double *p01 = out; + + for (j = STARTX_IF_L_DEC1(lj); j < _LEN_CART[lj-1]; j++) { + for (i = 0; i < row_00; i++) { + p00 = g00 + (j*row_00+i); + p10 = g10 + (j*row_10+WHEREX_IF_L_INC1(i)); + p01[i] = p10[0] + rirj[0] * p00[0]; + } + p01 += row_00; + } + for (j = STARTY_IF_L_DEC1(lj); j < _LEN_CART[lj-1]; j++) { + for (i = 0; i < row_00; i++) { + p00 = g00 + (j*row_00+i); + p10 = g10 + (j*row_10+WHEREY_IF_L_INC1(i)); + p01[i] = p10[0] + rirj[1] * p00[0]; + } + p01 += row_00; + } + j = STARTZ_IF_L_DEC1(lj); + if (j < _LEN_CART[lj-1]) { + for (i = 0; i < row_00; i++) { + p00 = g00 + (j*row_00+i); + p10 = g10 + (j*row_10+WHEREZ_IF_L_INC1(i)); + p01[i] = p10[0] + rirj[2] * p00[0]; + } + } +} + +void GTOreverse_vrr2d_ket_inc1(double *g01, double *g00, + double *rirj, int li, int lj) +{ + int row_10 = _LEN_CART[li+1]; + int row_00 = _LEN_CART[li ]; + int col_00 = _LEN_CART[lj-1]; + double *g10 = g00 + row_00*col_00; + double *p00, *p10; + int i, j; + + for (j = STARTX_IF_L_DEC1(lj); j < _LEN_CART[lj-1]; j++) { + for (i = 0; i < row_00; i++) { + p00 = g00 + (j*row_00+i); + p10 = g10 + (j*row_10+WHEREX_IF_L_INC1(i)); + p10[0] += g01[i]; + p00[0] += g01[i] * rirj[0]; + } + g01 += row_00; + } + for (j = STARTY_IF_L_DEC1(lj); j < _LEN_CART[lj-1]; j++) { + for (i = 0; i < row_00; i++) { + p00 = g00 + (j*row_00+i); + p10 = g10 + (j*row_10+WHEREY_IF_L_INC1(i)); + p10[0] += g01[i]; + p00[0] += g01[i] * rirj[1]; + } + g01 += row_00; + } + j = STARTZ_IF_L_DEC1(lj); + if (j < _LEN_CART[lj-1]) { + for (i = 0; i < row_00; i++) { + p00 = g00 + (j*row_00+i); + p10 = g10 + (j*row_10+WHEREZ_IF_L_INC1(i)); + p10[0] += g01[i]; + p00[0] += g01[i] * rirj[2]; + } + } +} diff --git a/pyscfadlib/pyscfadlib/gto/ft_ao.h b/pyscfadlib/pyscfadlib/gto/ft_ao.h new file mode 100644 index 00000000..bfc4597e --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/ft_ao.h @@ -0,0 +1,109 @@ +/* Copyright 2014-2018,2021 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +#include "cint.h" + +#ifndef HAVE_DEFINED_FTENVVARS_H +#define HAVE_DEFINED_FTENVVARS_H +typedef struct { + int *atm; + int *bas; + double *env; + int *shls; + int natm; + int nbas; + + int i_l; + int j_l; + int nfi; // number of cartesion components + int nfj; + int nf; // = nfi*nfj + int ngrids; // number of grids or planewaves + int x_ctr[2]; + + int gbits; + int ncomp_e1; // = 1 if spin free, = 4 when spin included, it + int ncomp_tensor; + + int li_ceil; // power of x, == i_l if nabla is involved, otherwise == i_l + int lj_ceil; + int g_stride_i; + int g_stride_j; + int g_size; // ref to cint2e.c g = malloc(sizeof(double)*g_size) + double expcutoff; + double ai[1]; + double aj[1]; + double rirj[3]; + double *rx_in_rijrx; + double *ri; + double *rj; + void (*f_gout)(); + + double *Gv; + double *b; + int *gxyz; + int *gs; + double complex common_factor; + int block_size; +} FTEnvVars; +#endif + +typedef void (*FPtr_eval_gz)(double *gzR, double *gzI, double fac, double aij, + double *rij, FTEnvVars *envs, double *cache); + +typedef int (*FPtrIntor)(double *outR, double *outI, int *shls, int *dims, + FPtr_eval_gz eval_gz, double complex fac, + double *Gv, double *b, int *gxyz, int *gs, int nGv, int block_size, + int *atm, int natm, int *bas, int nbas, double *env, double *cache); + +void GTO_ft_init1e_envs(FTEnvVars *envs, int *ng, int *shls, double complex fac, + double *Gv, double *b, int *gxyz, int *gs, + int nGv, int block_size, + int *atm, int natm, int *bas, int nbas, double *env); + +int GTO_ft_aopair_drv(double *outR, double *outI, int *dims, + FPtr_eval_gz eval_gz, double *cache, void (*f_c2s)(), + FTEnvVars *envs); + +void GTO_ft_c2s_cart(double *out, double *gctr, int *dims, + FTEnvVars *envs, double *cache); +void GTO_ft_c2s_sph(double *out, double *gctr, int *dims, + FTEnvVars *envs, double *cache); + +int GTO_ft_ovlp_cart(double *outR, double *outI, int *shls, int *dims, + FPtr_eval_gz eval_gz, double complex fac, + double *Gv, double *b, int *gxyz, int *gs, int nGv, int block_size, + int *atm, int natm, int *bas, int nbas, double *env, double *cache); +int GTO_ft_ovlp_sph(double *outR, double *outI, int *shls, int *dims, + FPtr_eval_gz eval_gz, double complex fac, + double *Gv, double *b, int *gxyz, int *gs, int nGv, int block_size, + int *atm, int natm, int *bas, int nbas, double *env, double *cache); + +#define ZMUL(outR, outI, gx, gy, gz) \ + xyR = gx##R[ix*bs+k] * gy##R[iy*bs+k] - gx##I[ix*bs+k] * gy##I[iy*bs+k]; \ + xyI = gx##R[ix*bs+k] * gy##I[iy*bs+k] + gx##I[ix*bs+k] * gy##R[iy*bs+k]; \ + outR = xyR * gz##R[iz*bs+k] - xyI * gz##I[iz*bs+k]; \ + outI = xyR * gz##I[iz*bs+k] + xyI * gz##R[iz*bs+k]; + +#define ZMAD(outR, outI, gx, gy, gz) \ + xyR = gx##R[ix*bs+k] * gy##R[iy*bs+k] - gx##I[ix*bs+k] * gy##I[iy*bs+k]; \ + xyI = gx##R[ix*bs+k] * gy##I[iy*bs+k] + gx##I[ix*bs+k] * gy##R[iy*bs+k]; \ + outR += xyR * gz##R[iz*bs+k] - xyI * gz##I[iz*bs+k]; \ + outI += xyR * gz##I[iz*bs+k] + xyI * gz##R[iz*bs+k]; diff --git a/pyscfadlib/pyscfadlib/gto/ft_ao_deriv.c b/pyscfadlib/pyscfadlib/gto/ft_ao_deriv.c new file mode 100644 index 00000000..59433d59 --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/ft_ao_deriv.c @@ -0,0 +1,295 @@ +/* Copyright 2014-2018,2021 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +#include "cint.h" +#include "gto/ft_ao.h" + +/* + * derivative over r on g_stride_j; + int bs = envs->block_size; + size_t g_size = envs->g_size * bs; + double ai2 = -2 * envs->ai[0]; + double *gxR = g; + double *gyR = gxR + g_size; + double *gzR = gyR + g_size; + double *gxI = gzR + g_size; + double *gyI = gxI + g_size; + double *gzI = gyI + g_size; + double *fxR = f; + double *fyR = fxR + g_size; + double *fzR = fyR + g_size; + double *fxI = fzR + g_size; + double *fyI = fxI + g_size; + double *fzI = fyI + g_size; + int i, j, k, ptr; + double vi; + + for (j = 0; j <= lj; j++) { + ptr = dj * j; + //f(...,0,...) = -2*ai*g(...,1,...) +#pragma GCC ivdep + for (k = 0; k < bs; k++) { + fxR[ptr*bs+k] = ai2 * gxR[(ptr+1)*bs+k]; + fxI[ptr*bs+k] = ai2 * gxI[(ptr+1)*bs+k]; + fyR[ptr*bs+k] = ai2 * gyR[(ptr+1)*bs+k]; + fyI[ptr*bs+k] = ai2 * gyI[(ptr+1)*bs+k]; + fzR[ptr*bs+k] = ai2 * gzR[(ptr+1)*bs+k]; + fzI[ptr*bs+k] = ai2 * gzI[(ptr+1)*bs+k]; + } + //f(...,i,...) = i*g(...,i-1,...)-2*ai*g(...,i+1,...) + for (vi = 1, i = ptr+1; i <= ptr+li; i++, vi+=1) { +#pragma GCC ivdep + for (k = 0; k < bs; k++) { + fxR[i*bs+k] = vi * gxR[(i-1)*bs+k] + ai2 * gxR[(i+1)*bs+k]; + fxI[i*bs+k] = vi * gxI[(i-1)*bs+k] + ai2 * gxI[(i+1)*bs+k]; + fyR[i*bs+k] = vi * gyR[(i-1)*bs+k] + ai2 * gyR[(i+1)*bs+k]; + fyI[i*bs+k] = vi * gyI[(i-1)*bs+k] + ai2 * gyI[(i+1)*bs+k]; + fzR[i*bs+k] = vi * gzR[(i-1)*bs+k] + ai2 * gzR[(i+1)*bs+k]; + fzI[i*bs+k] = vi * gzI[(i-1)*bs+k] + ai2 * gzI[(i+1)*bs+k]; + } } + } +} + +/* + * derivative over r on |j> + */ +void GTO_ft_nabla1j(double *f, double *g, int li, int lj, FTEnvVars *envs) +{ + int dj = envs->g_stride_j; + int bs = envs->block_size; + size_t g_size = envs->g_size * bs; + double aj2 = -2 * envs->aj[0]; + double *gxR = g; + double *gyR = gxR + g_size; + double *gzR = gyR + g_size; + double *gxI = gzR + g_size; + double *gyI = gxI + g_size; + double *gzI = gyI + g_size; + double *fxR = f; + double *fyR = fxR + g_size; + double *fzR = fyR + g_size; + double *fxI = fzR + g_size; + double *fyI = fxI + g_size; + double *fzI = fyI + g_size; + int i, j, k, ptr; + + //f(...,0,...) = -2*aj*g(...,1,...) + for (i = 0; i <= li; i++) { +#pragma GCC ivdep + for (k = 0; k < bs; k++) { + fxR[i*bs+k] = aj2 * gxR[(i+dj)*bs+k]; + fxI[i*bs+k] = aj2 * gxI[(i+dj)*bs+k]; + fyR[i*bs+k] = aj2 * gyR[(i+dj)*bs+k]; + fyI[i*bs+k] = aj2 * gyI[(i+dj)*bs+k]; + fzR[i*bs+k] = aj2 * gzR[(i+dj)*bs+k]; + fzI[i*bs+k] = aj2 * gzI[(i+dj)*bs+k]; + } + } + //f(...,j,...) = j*g(...,j-1,...)-2*aj*g(...,j+1,...) + for (j = 1; j <= lj; j++) { + ptr = dj * j; + for (i = ptr; i <= ptr+li; i++) { +#pragma GCC ivdep + for (k = 0; k < bs; k++) { + fxR[i*bs+k] = j * gxR[(i-dj)*bs+k] + aj2 * gxR[(i+dj)*bs+k]; + fxI[i*bs+k] = j * gxI[(i-dj)*bs+k] + aj2 * gxI[(i+dj)*bs+k]; + fyR[i*bs+k] = j * gyR[(i-dj)*bs+k] + aj2 * gyR[(i+dj)*bs+k]; + fyI[i*bs+k] = j * gyI[(i-dj)*bs+k] + aj2 * gyI[(i+dj)*bs+k]; + fzR[i*bs+k] = j * gzR[(i-dj)*bs+k] + aj2 * gzR[(i+dj)*bs+k]; + fzI[i*bs+k] = j * gzI[(i-dj)*bs+k] + aj2 * gzI[(i+dj)*bs+k]; + } } + } +} + +#define G1E_D_I(f, g, li, lj) GTO_ft_nabla1i(f##R, g##R, li, lj, envs); +#define G1E_D_J(f, g, li, lj) GTO_ft_nabla1j(f##R, g##R, li, lj, envs); + +static void inner_prod_pdotp(double *gout, double *g, int *idx, FTEnvVars *envs, int empty) +{ + int nf = envs->nf; + int bs = envs->block_size; + size_t g_size = envs->g_size * bs; + double *g0R = g; + double *g0I = g0R + g_size * 3; + double *g1R = g0I + g_size * 3; + double *g1I = g1R + g_size * 3; + double *g2R = g1I + g_size * 3; + double *g2I = g2R + g_size * 3; + double *g3R = g2I + g_size * 3; + double *g3I = g3R + g_size * 3; + double *goutR = gout; + double *goutI = gout + nf * bs; + double xyR, xyI, sR, sI; + int ix, iy, iz, n, k; + + G1E_D_J(g1, g0, envs->i_l+1, envs->j_l); + G1E_D_I(g2, g0, envs->i_l , envs->j_l); + G1E_D_I(g3, g1, envs->i_l , envs->j_l); + if (empty) { + for (n = 0; n < nf; n++) { + ix = idx[0+n*3]; + iy = idx[1+n*3]; + iz = idx[2+n*3]; +#pragma GCC ivdep + for (k = 0; k < bs; k++) { + ZMUL(sR, sI, g3, g0, g0); + ZMAD(sR, sI, g0, g3, g0); + ZMAD(sR, sI, g0, g0, g3); + goutR[n*bs+k] = sR; + goutI[n*bs+k] = sI; + } + } + } else { + for (n = 0; n < nf; n++) { + ix = idx[0+n*3]; + iy = idx[1+n*3]; + iz = idx[2+n*3]; +#pragma GCC ivdep + for (k = 0; k < bs; k++) { + ZMUL(sR, sI, g3, g0, g0); + ZMAD(sR, sI, g0, g3, g0); + ZMAD(sR, sI, g0, g0, g3); + goutR[n*bs+k] += sR; + goutI[n*bs+k] += sI; + } + } + } +} + +int GTO_ft_pdotp_cart(double *outR, double *outI, int *shls, int *dims, + FPtr_eval_gz eval_gz, double complex fac, + double *Gv, double *b, int *gxyz, int *gs, int nGv, int block_size, + int *atm, int natm, int *bas, int nbas, double *env, double *cache) +{ + FTEnvVars envs; + int ng[] = {1, 1, 0, 0, 2, 1, 0, 1}; + GTO_ft_init1e_envs(&envs, ng, shls, fac, Gv, b, gxyz, gs, nGv, block_size, + atm, natm, bas, nbas, env); + envs.f_gout = &inner_prod_pdotp; + return GTO_ft_aopair_drv(outR, outI, dims, eval_gz, cache, >O_ft_c2s_cart, &envs); +} + +int GTO_ft_pdotp_sph(double *outR, double *outI, int *shls, int *dims, + FPtr_eval_gz eval_gz, double complex fac, + double *Gv, double *b, int *gxyz, int *gs, int nGv, int block_size, + int *atm, int natm, int *bas, int nbas, double *env, double *cache) +{ + FTEnvVars envs; + int ng[] = {1, 1, 0, 0, 2, 1, 0, 1}; + GTO_ft_init1e_envs(&envs, ng, shls, fac, Gv, b, gxyz, gs, nGv, block_size, + atm, natm, bas, nbas, env); + envs.f_gout = &inner_prod_pdotp; + return GTO_ft_aopair_drv(outR, outI, dims, eval_gz, cache, >O_ft_c2s_sph, &envs); +} + + +static void inner_prod_pxp(double *gout, double *g, int *idx, FTEnvVars *envs, int empty) +{ + int nf = envs->nf; + int ix, iy, iz, n, k; + int bs = envs->block_size; + size_t g_size = envs->g_size * bs; + double *g0R = g; + double *g0I = g0R + g_size * 3; + double *g1R = g0I + g_size * 3; + double *g1I = g1R + g_size * 3; + double *g2R = g1I + g_size * 3; + double *g2I = g2R + g_size * 3; + double *goutR = gout; + double *goutI = gout + nf * bs * 3; + double xyR, xyI; + double sR[6], sI[6]; + + G1E_D_J(g1, g0, envs->i_l+1, envs->j_l); + G1E_D_I(g2, g0, envs->i_l , envs->j_l); + if (empty) { + for (n = 0; n < nf; n++) { + ix = idx[0+n*3]; + iy = idx[1+n*3]; + iz = idx[2+n*3]; +#pragma GCC ivdep + for (k = 0; k < bs; k++) { + ZMUL(sR[0], sI[0], g2, g1, g0); + ZMUL(sR[1], sI[1], g2, g0, g1); + ZMUL(sR[2], sI[2], g1, g2, g0); + ZMUL(sR[3], sI[3], g0, g2, g1); + ZMUL(sR[4], sI[4], g1, g0, g2); + ZMUL(sR[5], sI[5], g0, g1, g2); + goutR[(n*3+0)*bs+k] = sR[3] - sR[5]; + goutR[(n*3+1)*bs+k] = sR[4] - sR[1]; + goutR[(n*3+2)*bs+k] = sR[0] - sR[2]; + goutI[(n*3+0)*bs+k] = sI[3] - sI[5]; + goutI[(n*3+1)*bs+k] = sI[4] - sI[1]; + goutI[(n*3+2)*bs+k] = sI[0] - sI[2]; + } + } + } else { + for (n = 0; n < nf; n++) { + ix = idx[0+n*3]; + iy = idx[1+n*3]; + iz = idx[2+n*3]; +#pragma GCC ivdep + for (k = 0; k < bs; k++) { + ZMUL(sR[0], sI[0], g2, g1, g0); + ZMUL(sR[1], sI[1], g2, g0, g1); + ZMUL(sR[2], sI[2], g1, g2, g0); + ZMUL(sR[3], sI[3], g0, g2, g1); + ZMUL(sR[4], sI[4], g1, g0, g2); + ZMUL(sR[5], sI[5], g0, g1, g2); + goutR[(n*3+0)*bs+k] += sR[3] - sR[5]; + goutR[(n*3+1)*bs+k] += sR[4] - sR[1]; + goutR[(n*3+2)*bs+k] += sR[0] - sR[2]; + goutI[(n*3+0)*bs+k] += sI[3] - sI[5]; + goutI[(n*3+1)*bs+k] += sI[4] - sI[1]; + goutI[(n*3+2)*bs+k] += sI[0] - sI[2]; + } + } + } +} + +int GTO_ft_pxp_cart(double *outR, double *outI, int *shls, int *dims, + void (*eval_gz)(), double complex fac, + double *Gv, double *b, int *gxyz, int *gs, int nGv, int block_size, + int *atm, int natm, int *bas, int nbas, double *env, double *cache) +{ + FTEnvVars envs; + int ng[] = {1, 1, 0, 0, 2, 1, 0, 3}; + GTO_ft_init1e_envs(&envs, ng, shls, fac, Gv, b, gxyz, gs, nGv, block_size, + atm, natm, bas, nbas, env); + envs.f_gout = &inner_prod_pxp; + return GTO_ft_aopair_drv(outR, outI, dims, eval_gz, cache, >O_ft_c2s_cart, &envs); +} + +int GTO_ft_pxp_sph(double *outR, double *outI, int *shls, int *dims, + void (*eval_gz)(), double complex fac, + double *Gv, double *b, int *gxyz, int *gs, int nGv, int block_size, + int *atm, int natm, int *bas, int nbas, double *env, double *cache) +{ + FTEnvVars envs; + int ng[] = {1, 1, 0, 0, 2, 1, 0, 3}; + GTO_ft_init1e_envs(&envs, ng, shls, fac, Gv, b, gxyz, gs, nGv, block_size, + atm, natm, bas, nbas, env); + envs.f_gout = &inner_prod_pxp; + return GTO_ft_aopair_drv(outR, outI, dims, eval_gz, cache, >O_ft_c2s_sph, &envs); +} diff --git a/pyscfadlib/pyscfadlib/gto/grid_ao_drv.c b/pyscfadlib/pyscfadlib/gto/grid_ao_drv.c new file mode 100644 index 00000000..fde945f3 --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/grid_ao_drv.c @@ -0,0 +1,496 @@ +/* Copyright 2014-2018,2021 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +#include +#include +#include "config.h" +#include "grid_ao_drv.h" + +#define MIN(X,Y) ((X)<(Y)?(X):(Y)) +#define MAX(X,Y) ((X)>(Y)?(X):(Y)) + +double CINTcommon_fac_sp(int l); + +void GTO_screen_index(uint8_t *screen_index, int nbins, double cutoff, + double *coords, int ngrids, int blksize, + int *atm, int natm, int *bas, int nbas, double *env) +{ + double scale = -nbins / log(MIN(cutoff, .1)); + nbins = MIN(127, nbins); +#pragma omp parallel +{ + const int nblk = (ngrids+blksize-1) / blksize; + int i, j; + int np, nc, l, atm_id, ng0, ng1, dg; + size_t bas_id, ib; + double min_exp, log_coeff, maxc, arr, arr_min, rr_min, r2sup, si; + double dx, dy, dz, atom_x, atom_y, atom_z; + double *p_exp, *pcoeff, *ratm; + double *coordx = coords; + double *coordy = coords + ngrids; + double *coordz = coords + ngrids * 2; + double *rr = malloc(sizeof(double) * blksize); +#pragma omp for nowait schedule(static) + for (bas_id = 0; bas_id < nbas; bas_id++) { + np = bas[NPRIM_OF+bas_id*BAS_SLOTS]; + nc = bas[NCTR_OF +bas_id*BAS_SLOTS]; + l = bas[ANG_OF+bas_id*BAS_SLOTS]; + p_exp = env + bas[PTR_EXP+bas_id*BAS_SLOTS]; + pcoeff = env + bas[PTR_COEFF+bas_id*BAS_SLOTS]; + atm_id = bas[ATOM_OF+bas_id*BAS_SLOTS]; + ratm = env + atm[atm_id*ATM_SLOTS+PTR_COORD]; + atom_x = ratm[0]; + atom_y = ratm[1]; + atom_z = ratm[2]; + + maxc = 0; + min_exp = 1e9; + for (j = 0; j < np; j++) { + min_exp = MIN(min_exp, p_exp[j]); + for (i = 0; i < nc; i++) { + maxc = MAX(maxc, fabs(pcoeff[i*np+j])); + } + } + log_coeff = log(maxc); + if (l > 0) { + r2sup = l / (2. * min_exp); + arr_min = min_exp * r2sup - .5 * log(r2sup) * l - log_coeff; + } else { + r2sup = 0.; + arr_min = -log_coeff; + } + + for (ib = 0; ib < nblk; ib++) { + ng0 = ib * blksize; + ng1 = MIN(ngrids, (ib+1)*blksize); + dg = ng1 - ng0; +#pragma GCC ivdep + for (i = 0; i < dg; i++) { + dx = coordx[ng0+i] - atom_x; + dy = coordy[ng0+i] - atom_y; + dz = coordz[ng0+i] - atom_z; + rr[i] = dx*dx + dy*dy + dz*dz; + } + rr_min = 1e9; + for (i = 0; i < dg; i++) { + rr_min = MIN(rr_min, rr[i]); + } + if (l == 0) { + arr = min_exp * rr_min - log_coeff; + } else if (rr_min < r2sup) { + arr = arr_min; + } else { + arr = min_exp * rr_min - .5 * log(rr_min) * l + - log_coeff; + } + si = nbins - arr * scale; + if (si <= 0) { + screen_index[ib*nbas+bas_id] = 0; + } else { + screen_index[ib*nbas+bas_id] = (uint8_t)(si + 1); + } + } + } + free(rr); +} +} + +void GTOnabla1(double *fx1, double *fy1, double *fz1, + double *fx0, double *fy0, double *fz0, int l, double a) +{ + int i, n; + double a2 = -2 * a; + for (n = 0; n < SIMDD; n++) { + fx1[n] = a2*fx0[SIMDD+n]; + fy1[n] = a2*fy0[SIMDD+n]; + fz1[n] = a2*fz0[SIMDD+n]; + } + for (i = 1; i <= l; i++) { + for (n = 0; n < SIMDD; n++) { + fx1[i*SIMDD+n] = i*fx0[(i-1)*SIMDD+n] + a2*fx0[(i+1)*SIMDD+n]; + fy1[i*SIMDD+n] = i*fy0[(i-1)*SIMDD+n] + a2*fy0[(i+1)*SIMDD+n]; + fz1[i*SIMDD+n] = i*fz0[(i-1)*SIMDD+n] + a2*fz0[(i+1)*SIMDD+n]; + } } +} + +/* + * r - R_O = (r-R_i) + ri, ri = (x,y,z) = R_i - R_O + */ +void GTOx1(double *fx1, double *fy1, double *fz1, + double *fx0, double *fy0, double *fz0, int l, double *ri) +{ + int i, n; + for (i = 0; i <= l; i++) { + for (n = 0; n < SIMDD; n++) { + fx1[i*SIMDD+n] = ri[0] * fx0[i*SIMDD+n] + fx0[(i+1)*SIMDD+n]; + fy1[i*SIMDD+n] = ri[1] * fy0[i*SIMDD+n] + fy0[(i+1)*SIMDD+n]; + fz1[i*SIMDD+n] = ri[2] * fz0[i*SIMDD+n] + fz0[(i+1)*SIMDD+n]; + } } +} + +int GTOprim_exp(double *eprim, double *coord, double *alpha, double *coeff, + int l, int nprim, int nctr, size_t ngrids, double fac) +{ + int i, j; + double arr; + double rr[BLKSIZE]; + double *gridx = coord; + double *gridy = coord+BLKSIZE; + double *gridz = coord+BLKSIZE*2; + + for (i = 0; i < ngrids; i++) { + rr[i] = gridx[i]*gridx[i] + gridy[i]*gridy[i] + gridz[i]*gridz[i]; + } + + for (j = 0; j < nprim; j++) { + for (i = 0; i < ngrids; i++) { + arr = alpha[j] * rr[i]; + eprim[j*BLKSIZE+i] = exp(-arr) * fac; + } + } + return 1; +} + + +// grid2atm[atm_id,xyz,grid_id] +static void _fill_grid2atm(double *grid2atm, double *coord, size_t bgrids, size_t ngrids, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int atm_id; + size_t ig; + double *r_atm; + for (atm_id = 0; atm_id < natm; atm_id++) { + r_atm = env + atm[PTR_COORD+atm_id*ATM_SLOTS]; +#pragma GCC ivdep + for (ig = 0; ig < bgrids; ig++) { + grid2atm[0*BLKSIZE+ig] = coord[0*ngrids+ig] - r_atm[0]; + grid2atm[1*BLKSIZE+ig] = coord[1*ngrids+ig] - r_atm[1]; + grid2atm[2*BLKSIZE+ig] = coord[2*ngrids+ig] - r_atm[2]; + } + grid2atm += 3*BLKSIZE; + } +} + + +static void _dset0(double *out, size_t odim, size_t bgrids, int counts) +{ + size_t i, j; + for (i = 0; i < counts; i++) { + for (j = 0; j < bgrids; j++) { + out[i*odim+j] = 0; + } + } +} + +static void _zset0(double complex *out, size_t odim, size_t bgrids, int counts) +{ + size_t i, j; + for (i = 0; i < counts; i++) { + for (j = 0; j < bgrids; j++) { + out[i*odim+j] = 0; + } + } +} + +void GTOeval_sph_iter(FPtr_eval feval, FPtr_exp fexp, double fac, + size_t nao, size_t ngrids, size_t bgrids, + int param[], int *shls_slice, int *ao_loc, double *buf, + double *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + const int ncomp = param[TENSOR]; + const int sh0 = shls_slice[0]; + const int sh1 = shls_slice[1]; + const int atmstart = bas[sh0*BAS_SLOTS+ATOM_OF]; + const int atmend = bas[(sh1-1)*BAS_SLOTS+ATOM_OF]+1; + const int atmcount = atmend - atmstart; + int i, k, l, np, nc, atm_id, bas_id, deg, dcart, ao_id; + size_t di; + double fac1; + double *p_exp, *pcoeff, *pcoord, *pcart, *ri, *pao; + double *grid2atm = ALIGN8_UP(buf); // [atm_id,xyz,grid] + double *eprim = grid2atm + atmcount*3*BLKSIZE; + double *cart_gto = eprim + NPRIMAX*BLKSIZE*2; + + _fill_grid2atm(grid2atm, coord, bgrids, ngrids, + atm+atmstart*ATM_SLOTS, atmcount, bas, nbas, env); + + for (bas_id = sh0; bas_id < sh1; bas_id++) { + np = bas[bas_id*BAS_SLOTS+NPRIM_OF]; + nc = bas[bas_id*BAS_SLOTS+NCTR_OF ]; + l = bas[bas_id*BAS_SLOTS+ANG_OF ]; + deg = l * 2 + 1; + fac1 = fac * CINTcommon_fac_sp(l); + p_exp = env + bas[bas_id*BAS_SLOTS+PTR_EXP]; + pcoeff = env + bas[bas_id*BAS_SLOTS+PTR_COEFF]; + atm_id = bas[bas_id*BAS_SLOTS+ATOM_OF]; + pcoord = grid2atm + (atm_id - atmstart) * 3*BLKSIZE; + ao_id = ao_loc[bas_id] - ao_loc[sh0]; + if (non0table[bas_id] && + (*fexp)(eprim, pcoord, p_exp, pcoeff, l, np, nc, bgrids, fac1)) { + dcart = (l+1)*(l+2)/2; + di = nc * dcart; + ri = env + atm[PTR_COORD+atm_id*ATM_SLOTS]; + if (l <= 1) { // s, p functions + (*feval)(ao+ao_id*ngrids, ri, eprim, pcoord, p_exp, pcoeff, + env, l, np, nc, nao, ngrids, bgrids); + } else { + (*feval)(cart_gto, ri, eprim, pcoord, p_exp, pcoeff, + env, l, np, nc, di, bgrids, bgrids); + pcart = cart_gto; + for (i = 0; i < ncomp; i++) { + pao = ao + (i*nao+ao_id)*ngrids; + for (k = 0; k < nc; k++) { + CINTc2s_ket_sph1(pao, pcart, + ngrids, bgrids, l); + pao += deg * ngrids; + pcart += dcart * bgrids; + } + } + } + } else { + for (i = 0; i < ncomp; i++) { + _dset0(ao+(i*nao+ao_id)*ngrids, ngrids, bgrids, nc*deg); + } + } + } +} + +void GTOeval_cart_iter(FPtr_eval feval, FPtr_exp fexp, double fac, + size_t nao, size_t ngrids, size_t bgrids, + int param[], int *shls_slice, int *ao_loc, double *buf, + double *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + const int ncomp = param[TENSOR]; + const int sh0 = shls_slice[0]; + const int sh1 = shls_slice[1]; + const int atmstart = bas[sh0*BAS_SLOTS+ATOM_OF]; + const int atmend = bas[(sh1-1)*BAS_SLOTS+ATOM_OF]+1; + const int atmcount = atmend - atmstart; + int i, l, np, nc, atm_id, bas_id, deg, ao_id; + double fac1; + double *p_exp, *pcoeff, *pcoord, *ri; + double *grid2atm = ALIGN8_UP(buf); // [atm_id,xyz,grid] + double *eprim = grid2atm + atmcount*3*BLKSIZE; + + _fill_grid2atm(grid2atm, coord, bgrids, ngrids, + atm+atmstart*ATM_SLOTS, atmcount, bas, nbas, env); + + for (bas_id = sh0; bas_id < sh1; bas_id++) { + np = bas[bas_id*BAS_SLOTS+NPRIM_OF]; + nc = bas[bas_id*BAS_SLOTS+NCTR_OF ]; + l = bas[bas_id*BAS_SLOTS+ANG_OF ]; + deg = (l+1)*(l+2)/2; + fac1 = fac * CINTcommon_fac_sp(l); + p_exp = env + bas[bas_id*BAS_SLOTS+PTR_EXP]; + pcoeff = env + bas[bas_id*BAS_SLOTS+PTR_COEFF]; + atm_id = bas[bas_id*BAS_SLOTS+ATOM_OF]; + pcoord = grid2atm + (atm_id - atmstart) * 3*BLKSIZE; + ao_id = ao_loc[bas_id] - ao_loc[sh0]; + if (non0table[bas_id] && + (*fexp)(eprim, pcoord, p_exp, pcoeff, l, np, nc, bgrids, fac1)) { + ri = env + atm[PTR_COORD+atm_id*ATM_SLOTS]; + (*feval)(ao+ao_id*ngrids, ri, eprim, pcoord, p_exp, pcoeff, + env, l, np, nc, nao, ngrids, bgrids); + } else { + for (i = 0; i < ncomp; i++) { + _dset0(ao+(i*nao+ao_id)*ngrids, ngrids, bgrids, nc*deg); + } + } + } +} + +void GTOeval_spinor_iter(FPtr_eval feval, FPtr_exp fexp, void (*c2s)(), double fac, + size_t nao, size_t ngrids, size_t bgrids, + int param[], int *shls_slice, int *ao_loc, double *buf, + double complex *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + const int ncomp_e1 = param[POS_E1]; + const int ncomp = param[TENSOR]; + const int sh0 = shls_slice[0]; + const int sh1 = shls_slice[1]; + const int atmstart = bas[sh0*BAS_SLOTS+ATOM_OF]; + const int atmend = bas[(sh1-1)*BAS_SLOTS+ATOM_OF]+1; + const int atmcount = atmend - atmstart; + int i, l, np, nc, atm_id, bas_id, deg, kappa, dcart, ao_id; + size_t off, di; + double fac1; + double *p_exp, *pcoeff, *pcoord, *pcart, *ri; + double complex *aoa = ao; + double complex *aob = ao + ncomp*nao*ngrids; + double *grid2atm = ALIGN8_UP(buf); // [atm_id,xyz,grid] + double *eprim = grid2atm + atmcount*3*BLKSIZE; + double *cart_gto = eprim + NPRIMAX*BLKSIZE*2; + + _fill_grid2atm(grid2atm, coord, bgrids, ngrids, + atm+atmstart*ATM_SLOTS, atmcount, bas, nbas, env); + + for (bas_id = sh0; bas_id < sh1; bas_id++) { + np = bas[bas_id*BAS_SLOTS+NPRIM_OF]; + nc = bas[bas_id*BAS_SLOTS+NCTR_OF ]; + l = bas[bas_id*BAS_SLOTS+ANG_OF ]; + deg = CINTlen_spinor(bas_id, bas); + fac1 = fac * CINTcommon_fac_sp(l); + p_exp = env + bas[bas_id*BAS_SLOTS+PTR_EXP]; + pcoeff = env + bas[bas_id*BAS_SLOTS+PTR_COEFF]; + atm_id = bas[bas_id*BAS_SLOTS+ATOM_OF]; + pcoord = grid2atm + (atm_id - atmstart) * 3*BLKSIZE; + ao_id = ao_loc[bas_id] - ao_loc[sh0]; + if (non0table[bas_id] && + (*fexp)(eprim, pcoord, p_exp, pcoeff, l, np, nc, bgrids, fac1)) { + kappa = bas[bas_id*BAS_SLOTS+KAPPA_OF]; + dcart = (l+1)*(l+2)/2; + di = nc * dcart; + ri = env + atm[PTR_COORD+atm_id*ATM_SLOTS]; + (*feval)(cart_gto, ri, eprim, pcoord, p_exp, pcoeff, + env, l, np, nc, di, bgrids, bgrids); + for (i = 0; i < ncomp; i++) { + pcart = cart_gto + i * di*bgrids*ncomp_e1; + off = (i*nao+ao_id)*ngrids; + (*c2s)(aoa+off, aob+off, pcart, + ngrids, bgrids, nc, kappa, l); + } + } else { + for (i = 0; i < ncomp; i++) { + off = (i*nao+ao_id)*ngrids; + _zset0(aoa+off, ngrids, bgrids, nc*deg); + _zset0(aob+off, ngrids, bgrids, nc*deg); + } + } + } +} + +int GTOshloc_by_atom(int *shloc, int *shls_slice, int *ao_loc, int *atm, int *bas) +{ + const int sh0 = shls_slice[0]; + const int sh1 = shls_slice[1]; + int ish, nshblk, lastatm; + shloc[0] = sh0; + nshblk = 1; + lastatm = bas[BAS_SLOTS*sh0+ATOM_OF]; + for (ish = sh0; ish < sh1; ish++) { + if (lastatm != bas[BAS_SLOTS*ish+ATOM_OF]) { + lastatm = bas[BAS_SLOTS*ish+ATOM_OF]; + shloc[nshblk] = ish; + nshblk++; + } + } + shloc[nshblk] = sh1; + return nshblk; +} + +/* + * non0table[ngrids/blksize,natm] is the T/F table for ao values to + * screen the ao evaluation for each shell + */ +void GTOeval_loop(void (*fiter)(), FPtr_eval feval, FPtr_exp fexp, double fac, + int ngrids, int param[], int *shls_slice, int *ao_loc, + double *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int shloc[shls_slice[1]-shls_slice[0]+1]; + const int nshblk = GTOshloc_by_atom(shloc, shls_slice, ao_loc, atm, bas); + const int nblk = (ngrids+BLKSIZE-1) / BLKSIZE; + const size_t Ngrids = ngrids; + +#pragma omp parallel +{ + const int sh0 = shls_slice[0]; + const int sh1 = shls_slice[1]; + const size_t nao = ao_loc[sh1] - ao_loc[sh0]; + int ip, ib, k, iloc, ish; + size_t aoff, bgrids; + int ncart = NCTR_CART * param[TENSOR] * param[POS_E1]; + double *buf = malloc(sizeof(double) * BLKSIZE*(NPRIMAX*2+ncart+1)); +#pragma omp for schedule(dynamic, 4) + for (k = 0; k < nblk*nshblk; k++) { + iloc = k / nblk; + ish = shloc[iloc]; + aoff = ao_loc[ish] - ao_loc[sh0]; + ib = k - iloc * nblk; + ip = ib * BLKSIZE; + bgrids = MIN(ngrids-ip, BLKSIZE); + (*fiter)(feval, fexp, fac, nao, Ngrids, bgrids, + param, shloc+iloc, ao_loc, buf, ao+aoff*Ngrids+ip, + coord+ip, non0table+ib*nbas, + atm, natm, bas, nbas, env); + } + free(buf); +} +} + +void GTOeval_sph_drv(FPtr_eval feval, FPtr_exp fexp, double fac, int ngrids, + int param[], int *shls_slice, int *ao_loc, + double *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + GTOeval_loop(GTOeval_sph_iter, feval, fexp, fac, ngrids, + param, shls_slice, ao_loc, + ao, coord, non0table, atm, natm, bas, nbas, env); +} + +void GTOeval_cart_drv(FPtr_eval feval, FPtr_exp fexp, double fac, int ngrids, + int param[], int *shls_slice, int *ao_loc, + double *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + GTOeval_loop(GTOeval_cart_iter, feval, fexp, fac, ngrids, + param, shls_slice, ao_loc, + ao, coord, non0table, atm, natm, bas, nbas, env); +} + +void GTOeval_spinor_drv(FPtr_eval feval, FPtr_exp fexp, void (*c2s)(), double fac, + int ngrids, int param[], int *shls_slice, int *ao_loc, + double complex *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int shloc[shls_slice[1]-shls_slice[0]+1]; + const int nshblk = GTOshloc_by_atom(shloc, shls_slice, ao_loc, atm, bas); + const int nblk = (ngrids+BLKSIZE-1) / BLKSIZE; + const size_t Ngrids = ngrids; + +#pragma omp parallel +{ + const int sh0 = shls_slice[0]; + const int sh1 = shls_slice[1]; + const size_t nao = ao_loc[sh1] - ao_loc[sh0]; + int ip, ib, k, iloc, ish; + size_t aoff, bgrids; + int ncart = NCTR_CART * param[TENSOR] * param[POS_E1]; + double *buf = malloc(sizeof(double) * BLKSIZE*(NPRIMAX*2+ncart+1)); +#pragma omp for schedule(dynamic, 4) + for (k = 0; k < nblk*nshblk; k++) { + iloc = k / nblk; + ish = shloc[iloc]; + aoff = ao_loc[ish] - ao_loc[sh0]; + ib = k - iloc * nblk; + ip = ib * BLKSIZE; + bgrids = MIN(ngrids-ip, BLKSIZE); + GTOeval_spinor_iter(feval, fexp, c2s, fac, + nao, Ngrids, bgrids, + param, shloc+iloc, ao_loc, buf, ao+aoff*Ngrids+ip, + coord+ip, non0table+ib*nbas, + atm, natm, bas, nbas, env); + } + free(buf); +} +} diff --git a/pyscfadlib/pyscfadlib/gto/grid_ao_drv.h b/pyscfadlib/pyscfadlib/gto/grid_ao_drv.h new file mode 100644 index 00000000..a201f09e --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/grid_ao_drv.h @@ -0,0 +1,101 @@ +/* Copyright 2014-2018,2021 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +#include +#include +#include "cint.h" + +// 2 slots of int param[] +#define POS_E1 0 +#define TENSOR 1 + +#define LMAX ANG_MAX +#define SIMDD 8 +// 128s42p21d12f8g6h4i3j +#define NCTR_CART 128 +#define NPRIMAX 40 +#define BLKSIZE 56 +#define EXPCUTOFF 50 // 1e-22 +#define NOTZERO(e) (fabs(e)>1e-18) + +#ifndef HAVE_NONZERO_EXP +#define HAVE_NONZERO_EXP +inline static int _nonzero_in(double *exps, int count) { + int n; + int val = 0; + for (n = 0; n < count; n++) { + if NOTZERO(exps[n]) { + val = 1; + break; + } + } + return val; +} +#endif + +typedef int (*FPtr_exp)(double *ectr, double *coord, double *alpha, double *coeff, + int l, int nprim, int nctr, size_t ngrids, double fac); +typedef void (*FPtr_eval)(double *gto, double *ri, double *exps, + double *coord, double *alpha, double *coeff, + double *env, int l, int np, int nc, + size_t nao, size_t ngrids, size_t blksize); + +void GTOnabla1(double *fx1, double *fy1, double *fz1, + double *fx0, double *fy0, double *fz0, int l, double a); +void GTOx1(double *fx1, double *fy1, double *fz1, + double *fx0, double *fy0, double *fz0, int l, double *ri); +int GTOprim_exp(double *eprim, double *coord, double *alpha, double *coeff, + int l, int nprim, int nctr, size_t ngrids, double fac); +int GTOcontract_exp0(double *ectr, double *coord, double *alpha, double *coeff, + int l, int nprim, int nctr, size_t ngrids, double fac); +int GTOcontract_exp1(double *ectr, double *coord, double *alpha, double *coeff, + int l, int nprim, int nctr, size_t ngrids, double fac); + +void GTOeval_sph_drv(FPtr_eval feval, FPtr_exp fexp, double fac, + int ngrids, int param[], int *shls_slice, int *ao_loc, + double *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env); + +void GTOeval_cart_drv(FPtr_eval feval, FPtr_exp fexp, double fac, + int ngrids, int param[], int *shls_slice, int *ao_loc, + double *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env); + +void GTOeval_spinor_drv(FPtr_eval feval, FPtr_exp fexp, void (*c2s)(), double fac, + int ngrids, int param[], int *shls_slice, int *ao_loc, + double complex *ao, double *coord, uint8_t *non0table, + int *atm, int natm, int *bas, int nbas, double *env); + +#define GTO_D_I(o, i, l) \ + GTOnabla1(fx##o, fy##o, fz##o, fx##i, fy##i, fz##i, l, alpha[k]) +/* r-R_0, R_0 is (0,0,0) */ +#define GTO_R0I(o, i, l) \ + GTOx1(fx##o, fy##o, fz##o, fx##i, fy##i, fz##i, l, ri) +/* r-R_C, R_C is common origin */ +#define GTO_RCI(o, i, l) \ + GTOx1(fx##o, fy##o, fz##o, fx##i, fy##i, fz##i, l, dri) +/* origin from center of each basis + * x1(fx1, fy1, fz1, fx0, fy0, fz0, l, 0, 0, 0) */ +#define GTO_R_I(o, i, l) \ + fx##o = fx##i + SIMDD; \ + fy##o = fy##i + SIMDD; \ + fz##o = fz##i + SIMDD + +#define ALIGN8_UP(buf) (void *)(((uintptr_t)buf + 7) & (-(uintptr_t)8)) diff --git a/pyscfadlib/pyscfadlib/gto/gto.h b/pyscfadlib/pyscfadlib/gto/gto.h new file mode 100644 index 00000000..084523ae --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/gto.h @@ -0,0 +1,18 @@ +/* Copyright 2021 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +int GTOmax_shell_dim(const int *ao_loc, const int *shls, int ncenter); +int GTOmax_cache_size(int (*intor)(), int *shls_slice, int ncenter, + int *atm, int natm, int *bas, int nbas, double *env); diff --git a/pyscfadlib/pyscfadlib/gto/nr_ecp.c b/pyscfadlib/pyscfadlib/gto/nr_ecp.c new file mode 100644 index 00000000..5af611c8 --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/nr_ecp.c @@ -0,0 +1,6542 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +#include +#include +#include "cint.h" +#include "np_helper/np_helper.h" +#include "vhf/fblas.h" +#include "gto/nr_ecp.h" + +double CINTcommon_fac_sp(int); + +static double _sph_ine_tab[] = { // 400x24 +9.802640211919197e-01, 6.534919212092035e-03, 2.613937811451498e-05, 7.468346329123935e-08, 1.659625812043017e-10, 3.017493035919202e-13, 4.642287455711235e-16, 6.189706898282851e-19, 7.281999097680386e-22, 7.665254523625293e-25, 7.300236357712470e-28, 6.348027199385843e-31, 5.078418750076879e-34, 3.761789744992798e-37, 2.594336600846831e-40, 1.673764894480139e-43, 1.014402615043443e-46, 5.796584581226479e-50, 3.133288094277013e-53, 1.606814005366913e-56, 7.838115320992611e-60, 3.645634279400473e-63, 1.620281595519583e-66, 6.894814102547425e-70, +9.423296940236874e-01, 1.884207224818979e-02, 2.260816141980705e-04, 1.937731683913445e-06, 1.291774150186003e-08, 7.045863444090539e-11, 3.251876940391953e-13, 1.300732413080320e-15, 4.590769115454675e-18, 1.449703482841226e-20, 4.141979079274455e-23, 1.080509516656789e-25, 2.593209009591830e-28, 5.762660193098549e-31, 1.192269748342981e-33, 2.307610747161589e-36, 4.195642826638227e-39, 7.192510565377163e-42, 1.166350154849031e-44, 1.794380813740386e-47, 2.625917780013486e-50, 3.664064504096460e-53, 4.885411023215048e-56, 6.236685174215352e-59, +9.063462346100909e-01, 3.019141928900223e-02, 6.036559400239012e-04, 8.622287807164008e-06, 9.579352242057132e-08, 8.707893125883569e-10, 6.698035852053903e-12, 4.465182134941749e-14, 2.626496412795802e-16, 1.382331888858186e-18, 6.582396524955082e-21, 2.861861761817600e-23, 1.144727746014053e-25, 4.239678246653739e-28, 1.461941754380445e-30, 4.715895044881049e-33, 1.429046731905972e-35, 4.082959134165019e-38, 1.103494821514312e-40, 2.829456206258353e-43, 6.901073554470799e-46, 1.604892532642074e-48, 3.566410987925639e-51, 7.588075536423757e-54, +8.722009233724092e-01, 4.064962396752648e-02, 1.137552639698620e-03, 2.274397829003244e-05, 3.537251969982054e-07, 4.501340147805141e-09, 4.847109923004117e-11, 4.523621584594117e-13, 3.725109389920223e-15, 2.744682624160316e-17, 1.829714169367008e-19, 1.113701098036058e-21, 6.236545062744792e-24, 3.233683163047443e-26, 1.561054390080907e-28, 7.049787985018583e-31, 2.990768393494177e-33, 1.196289251644110e-35, 4.526438390070580e-38, 1.624855402807172e-40, 5.548225060005377e-43, 1.806380559727397e-45, 5.619798551249213e-48, 1.673968300753623e-50, +8.397879831360249e-01, 5.027877721939270e-02, 1.808362812813033e-03, 4.647686347510318e-05, 9.292332256868268e-07, 1.520219076183037e-08, 2.104569083041292e-10, 2.525162087703369e-12, 2.673432884835239e-14, 2.532520256428454e-16, 2.170586052040690e-18, 1.698623809823192e-20, 1.222950443880237e-22, 8.152665619678108e-25, 5.060092852017936e-27, 2.938025380983860e-29, 1.602514346193933e-31, 8.241296164981470e-34, 4.009189198003429e-36, 1.850357521979083e-38, 8.123371541285905e-41, 3.400424173842929e-43, 1.360148833507746e-45, 5.209007356442930e-48, +8.090081339019514e-01, 5.913671199826918e-02, 2.598424834644346e-03, 8.160211998856853e-05, 1.993744098983762e-06, 3.986139377821739e-08, 6.744100728921062e-10, 9.889470956573337e-12, 1.279622166510847e-13, 1.481488080423163e-15, 1.551879635695967e-17, 1.484281679217320e-19, 1.306074233139604e-21, 1.064142859516303e-23, 8.072373323154131e-26, 5.728510053119174e-28, 3.818846680199104e-30, 2.400328205168628e-32, 1.427174308308297e-34, 8.050483194653290e-37, 4.319652884952700e-39, 2.209999687114206e-41, 1.080419567502579e-43, 5.057176802023883e-46, +7.797681769803957e-01, 6.727729617192950e-02, 3.491682688901381e-03, 1.295521545952391e-04, 3.740065183404311e-06, 8.835978508986519e-08, 1.766583448475031e-09, 3.061266611360877e-11, 4.680957668323452e-13, 6.404436109277377e-15, 7.928192361364623e-17, 8.961250982568824e-19, 9.318767845088264e-21, 8.972853685685055e-23, 8.044022614751631e-25, 6.746153851558893e-27, 5.314840467927241e-29, 3.947961127780111e-31, 2.774113001703102e-33, 1.849330487722149e-35, 1.172701198775740e-37, 7.090503732787043e-40, 4.096604557506365e-42, 2.266140260236755e-44, +7.519806065099561e-01, 7.475070512352422e-02, 4.473555274713588e-03, 1.914505449644170e-04, 6.375892210525950e-06, 1.737786486384450e-07, 4.008427116300951e-09, 8.014026540370688e-11, 1.413846115606957e-12, 2.231885264598680e-14, 3.187813611266366e-16, 4.157367122234428e-18, 4.988175533040940e-20, 5.541780336446298e-22, 5.732302392725156e-24, 5.546901453139527e-26, 5.042244809781671e-28, 4.321623796889308e-30, 3.503800774801065e-32, 2.695079679934517e-34, 1.971908861923835e-36, 1.375686386093325e-38, 9.170852340169328e-41, 5.853506792622323e-43, +7.255632465211918e-01, 8.160367547530310e-02, 5.530815856752632e-03, 2.681481701173305e-04, 1.011823668994520e-05, 3.124930305455487e-07, 8.168054648039442e-09, 1.850587087464627e-10, 3.699850401381123e-12, 6.618867740655736e-14, 1.071369838211224e-15, 1.583445821705979e-17, 2.153117630614553e-19, 2.710933129251171e-21, 3.177926797994465e-23, 3.485074323629212e-25, 3.590323325355264e-27, 3.487431373375834e-29, 3.204409977879080e-31, 2.793386250709058e-33, 2.316314775123981e-35, 1.831395301402106e-37, 1.383645271997669e-39, 1.000884640136975e-41, +7.004389118290668e-01, 8.787974125233637e-02, 6.651480889569160e-03, 3.602558632684483e-04, 1.518867146616316e-05, 5.241706487945403e-07, 1.531058000541370e-08, 3.876486093346255e-10, 8.661215889008114e-12, 1.731616684729988e-13, 3.132465358171466e-15, 5.174078457568593e-17, 7.862917483701786e-19, 1.106428817416875e-20, 1.449570476616633e-22, 1.776642094452763e-24, 2.045574577993796e-26, 2.220661949927553e-28, 2.280451657869560e-30, 2.221777914010818e-32, 2.059040163516108e-34, 1.819481118591509e-36, 1.536345836110685e-38, 1.242074078030305e-40, +6.765350911558576e-01, 9.361945371114844e-02, 7.824707504797336e-03, 4.681738921325179e-04, 2.180930258870306e-05, 8.316938031664069e-07, 2.684583910669537e-08, 7.511641496452160e-10, 1.854804793764511e-11, 4.098283595804409e-13, 8.193575672782376e-15, 1.495759413219887e-16, 2.512219435375146e-18, 3.907016870618316e-20, 5.657328347997245e-22, 7.663446202166263e-24, 9.751987792903223e-26, 1.170079170870446e-27, 1.328035649504993e-29, 1.430034493807493e-31, 1.464766837491307e-33, 1.430572088364921e-35, 1.335089272208570e-37, 1.192967128812958e-39, +6.537836509950933e-01, 9.886058597209520e-02, 9.040699003168024e-03, 5.921185463558279e-04, 3.019938470977199e-05, 1.261019425506075e-06, 4.457236071368571e-08, 1.365753162782863e-09, 3.693149250538184e-11, 8.936571491864001e-13, 1.956677811748755e-14, 3.911916489249546e-16, 7.195671239819596e-18, 1.225598043243590e-19, 1.943594694173485e-21, 2.883447429149476e-23, 4.018614857945507e-25, 5.280745363948835e-27, 6.564288540009260e-29, 7.741469848656017e-31, 8.684509313319550e-33, 9.289389581578651e-35, 9.494870612442851e-37, 9.291998410785926e-39, +6.321205588285578e-01, 1.036383235143269e-01, 1.029061774259589e-02, 7.321460883680680e-04, 4.057250544293857e-05, 1.840990395173499e-06, 7.071674912159513e-08, 2.354918012025038e-09, 6.920876084399665e-11, 1.820143329151406e-12, 4.331433624321587e-14, 9.412069363388704e-16, 1.881717162782282e-17, 3.483549477293463e-19, 6.004450438117013e-21, 9.682231855957900e-23, 1.466687423114293e-24, 2.094863403563336e-26, 2.830406199582482e-28, 3.628158722983189e-30, 4.423956555945650e-32, 5.143471077554361e-34, 5.714292488971905e-36, 6.078374796471110e-38, +6.114856244028342e-01, 1.079854415178434e-01, 1.156650485925946e-02, 8.881743024780179e-04, 5.313427158145224e-05, 2.603109453813832e-06, 1.079678926519672e-07, 3.882408488694344e-09, 1.232124104576527e-10, 3.499270583056130e-12, 8.992697975180006e-14, 2.110259375015334e-15, 4.556192707286104e-17, 9.108994199153757e-19, 1.695607709223078e-20, 2.952797770562511e-22, 4.830631594144867e-24, 7.451296962019681e-26, 1.087266909887928e-27, 1.505172046838923e-29, 1.982093931505646e-31, 2.488766216723909e-33, 2.986107810512032e-35, 3.430412972161793e-37, +5.918222578598231e-01, 1.119324699680684e-01, 1.286120630084882e-02, 1.060001857302613e-03, 6.808043685177060e-05, 3.581285464793354e-06, 1.595056229311132e-07, 6.159433578748354e-09, 2.099269290005269e-10, 6.402901146704448e-12, 1.767190222777191e-13, 4.453788373237586e-15, 1.032764424354891e-16, 2.217578604434540e-18, 4.433498767431274e-20, 8.292207189026603e-22, 1.456993986020573e-23, 2.413820288857954e-25, 3.782944683593620e-27, 5.624734620245826e-29, 7.955423938391327e-31, 1.072870693336584e-32, 1.382591240785306e-34, 1.705927272952057e-36, +5.730772435975399e-01, 1.155078473741702e-01, 1.416830469026474e-02, 1.247325678486786e-03, 8.559541702683246e-05, 4.811560355346477e-06, 2.290236255239660e-07, 9.452078231060181e-09, 3.443134821874354e-10, 1.122468721114226e-11, 3.311321685597624e-13, 8.920211537400009e-15, 2.210953981490762e-16, 5.074515259838354e-18, 1.084432851478003e-19, 2.168051312210924e-21, 4.071953725407970e-23, 7.211035260361866e-25, 1.208013913366905e-26, 1.919970914203807e-28, 2.902737870906804e-30, 4.184511847918588e-32, 5.764279955245770e-34, 7.602674982708987e-36, +5.552005288137498e-01, 1.187380638926901e-01, 1.548205657424927e-02, 1.449756512013810e-03, 1.058511437997683e-04, 6.331823835150759e-06, 3.207465472556373e-07, 1.408881344881271e-08, 5.462416008028229e-10, 1.895403419454607e-11, 5.951618689207405e-13, 1.706563797705505e-14, 4.502424476095938e-16, 1.099981002498531e-17, 2.502193147402336e-19, 5.324983368983020e-21, 1.064595304250064e-22, 2.006847732699146e-24, 3.578702429411037e-26, 6.054616656852117e-28, 9.744049075136297e-30, 1.495261691688425e-31, 2.192598984437593e-33, 3.078386627927686e-35, +5.381450257559952e-01, 1.216477945925827e-01, 1.679733464492681e-02, 1.666832843105426e-03, 1.290062138725492e-04, 8.181521886936468e-06, 4.394413635475253e-07, 2.046799248242602e-08, 8.415246383961493e-10, 3.096554994811516e-11, 1.031139804452122e-12, 3.135581455149412e-14, 8.773263316007978e-16, 2.273128003705574e-17, 5.483873143620322e-19, 1.237701348583612e-20, 2.624314178610683e-22, 5.246643814328488e-24, 9.922714464392029e-26, 1.780454578414938e-27, 3.038956080231845e-29, 4.945885648569614e-31, 7.691818247961134e-33, 1.145346308884449e-34, +5.218664267676943e-01, 1.242600235462328e-01, 1.810957455323678e-02, 1.898033321659904e-03, 1.552052942917376e-04, 1.040136405768962e-05, 5.904231639189556e-07, 2.906523208634183e-08, 1.263054060675248e-09, 4.912528704558056e-11, 1.729123018449930e-12, 5.557976524470974e-14, 1.643828411653500e-15, 4.502160776715399e-17, 1.148128257340755e-18, 2.739227677304166e-20, 6.139600917126357e-22, 1.297538585654849e-23, 2.594093083152433e-25, 4.920440786318391e-27, 8.878038765239024e-29, 1.527416388661771e-30, 2.511101393595806e-32, 3.952709345915435e-34, +5.063230312815611e-01, 1.265961593831042e-01, 1.941472596192939e-02, 2.142787832274750e-03, 1.845787492072705e-04, 1.303303372932079e-05, 7.795555886439546e-07, 4.044058525488137e-08, 1.852026050082128e-09, 7.591493257857583e-11, 2.816153937332171e-12, 9.540349655577745e-14, 2.973910687452203e-15, 8.584631692476067e-17, 2.307409287410072e-18, 5.802290566823627e-20, 1.370728800682073e-21, 3.053333168699244e-23, 6.434044708739933e-25, 1.286319681583461e-26, 2.446300822624709e-28, 4.436081525246771e-30, 7.686997322577973e-32, 1.275377605633448e-33, +4.914755839689684e-01, 1.286761428981434e-01, 2.070920751234611e-02, 2.400487335057321e-03, 2.172424569787300e-04, 1.611890480296700e-05, 1.013246207221353e-06, 5.524542018945295e-08, 2.659252536237624e-09, 1.145749259900188e-10, 4.467665737188296e-12, 1.590961351965341e-13, 5.213164602582841e-15, 1.581899958377264e-16, 4.469617682089592e-18, 1.181509833383892e-19, 2.934165638294525e-21, 6.870765092651597e-23, 1.522001187135905e-24, 3.198760453000486e-26, 6.395082698196713e-28, 1.219103902128570e-29, 2.220772400555977e-31, 3.873408478502617e-33, +4.772871233072715e-01, 1.305185472656688e-01, 2.198986540377530e-02, 2.670492592556639e-03, 2.532977899421938e-04, 1.970176758019172e-05, 1.298437172299717e-06, 7.422892914946797e-08, 3.746547599694751e-09, 1.692672950368288e-10, 6.921313997371905e-12, 2.584648684449999e-13, 8.881469191674576e-15, 2.826245009714687e-16, 8.374393733114801e-18, 2.321541571323740e-19, 6.046208575737749e-21, 1.484792261579577e-22, 3.449371634820574e-24, 7.602791567712239e-26, 1.594063416186110e-27, 3.186909150552418e-29, 6.088409099002073e-31, 1.113691772263508e-32, +4.637228398768964e-01, 1.321406713709966e-01, 2.325393530690784e-02, 2.952141888175205e-03, 2.928317322118046e-04, 2.382456605715973e-05, 1.642591513185447e-06, 9.824420003660245e-08, 5.188179242073002e-09, 2.452587974457146e-10, 1.049351821902704e-11, 4.100390017502337e-13, 1.474372985440144e-14, 4.909502390826970e-16, 1.522268192052498e-17, 4.415994213366805e-19, 1.203518559486136e-20, 3.092828584305877e-22, 7.518878116286068e-24, 1.734247610493291e-25, 3.805137481805247e-27, 7.960910042346302e-29, 1.591572684233594e-30, 3.046621178329281e-32, +4.507499437463384e-01, 1.335586267362804e-01, 2.449900735395414e-02, 3.244757832268982e-03, 3.359171136532075e-04, 2.853014835529238e-05, 2.053675452977424e-06, 1.282537928386357e-07, 7.072375765152941e-09, 3.491247454441267e-10, 1.559899553761352e-11, 6.365472633991269e-13, 2.390292252849138e-14, 8.312387052073418e-16, 2.691716615282967e-17, 8.154941094050264e-19, 2.321148096176872e-20, 6.229692578266206e-22, 1.581710652220588e-23, 3.810223780911893e-25, 8.731260975682391e-27, 1.907823433402614e-28, 3.983567564048736e-30, 7.964080601333788e-32, +4.383375403464057e-01, 1.347874184837927e-01, 2.572299396744824e-02, 3.547653343750640e-03, 3.826129406579544e-04, 3.386103158575271e-05, 2.540137144403378e-06, 1.653347722385133e-07, 9.502875446541776e-09, 4.889736760538936e-10, 2.277356386424946e-11, 9.687361056908022e-13, 3.792056742449943e-14, 1.374691800510619e-15, 4.640557369667094e-17, 1.465640098927549e-18, 4.348893467703801e-20, 1.216788374227624e-21, 3.220702605144225e-23, 8.088192241919460e-25, 1.932223155868460e-26, 4.401487775903390e-28, 9.581113394203530e-30, 1.996931626259359e-31, +4.264565142752815e-01, 1.358410207489525e-01, 2.692410030777407e-02, 3.860136887314880e-03, 4.329648065935144e-04, 3.985918207798759e-05, 3.110882223059918e-06, 2.106831566356877e-07, 1.260050782921510e-08, 6.746928154359849e-10, 3.270048285852203e-11, 1.447580113472258e-12, 5.897049591229833e-14, 2.224821504161001e-15, 7.816197862473802e-17, 2.569170712566940e-18, 7.933932123297500e-20, 2.310319735396152e-21, 6.364403800896397e-23, 1.663454678831074e-24, 4.135911248171025e-26, 9.805496642896888e-28, 2.221486949785825e-29, 4.818923253540470e-31, +4.150794205134639e-01, 1.367324469266647e-01, 2.810079713611093e-02, 4.181517039348980e-03, 4.870053668252036e-04, 4.656581158781715e-05, 3.775246574270852e-06, 2.656177524199028e-07, 1.650479474392589e-08, 9.182140739213761e-10, 4.624058873141649e-11, 2.126938676332228e-12, 9.003254684927274e-14, 3.529552528625667e-15, 1.288503654113993e-16, 4.401022087382670e-18, 1.412288936042003e-19, 4.273512912281968e-21, 1.223351797957075e-22, 3.322674129911450e-24, 8.584860085227303e-26, 2.115040342398278e-27, 4.979450970135818e-29, 1.122477717977500e-30, +4.041803825625755e-01, 1.374738151078104e-01, 2.925179590491080e-02, 4.511106449124962e-03, 5.447548650246665e-04, 5.402118983223654e-05, 4.542966702300934e-06, 3.315833504982300e-07, 2.137555914325091e-08, 1.233800102534078e-09, 6.446646311683142e-11, 3.076715758205237e-12, 1.351336270855626e-13, 5.496960806085457e-15, 2.082254816468680e-16, 7.379926304389835e-18, 2.457403413362632e-19, 7.716064301935494e-21, 2.292044564975168e-22, 6.459856109923757e-24, 1.731944184018176e-25, 4.427787674192443e-27, 1.081729561129788e-28, 2.530378661490762e-30, +3.937349970545889e-01, 1.380764090378772e-01, 3.037602590228065e-02, 4.848225255944393e-03, 6.062216991133203e-04, 6.226447347081187e-05, 5.424148079170711e-06, 4.101532697423487e-07, 2.739452992928001e-08, 1.638349744313387e-09, 8.870085739022343e-11, 4.386581861902783e-12, 1.996443869216674e-13, 8.415482041655604e-15, 3.303385666662072e-16, 1.213253874331463e-17, 4.186534708094826e-19, 1.362248304012762e-20, 4.193423845118719e-22, 1.224775333879586e-23, 3.402966056974939e-25, 9.015765464941986e-27, 2.282592128400278e-28, 5.533379151419477e-30, +3.837202444083465e-01, 1.385507349066142e-01, 3.147261328983589e-02, 5.192204017478982e-03, 6.714030166554952e-04, 7.133355146249174e-05, 6.429231835657036e-06, 5.030312391515119e-07, 3.476693118866270e-08, 2.151722026710229e-09, 1.205595721420649e-10, 6.170319097208865e-12, 2.906405862989211e-13, 1.267955697748544e-14, 5.151300344237047e-16, 1.958155520795158e-17, 6.993467571799697e-19, 2.355267664735317e-20, 7.504159449177737e-22, 2.268515416874374e-23, 6.523749338704123e-25, 1.788951731415518e-26, 4.687944562828863e-28, 1.176262540103868e-29, +3.741144051385323e-01, 1.389065742561134e-01, 3.254086188579429e-02, 5.542386199579401e-03, 7.402853308305028e-04, 8.126490656749639e-05, 7.568960139961226e-06, 6.120526170898748e-07, 4.372304459390935e-08, 2.797077666547796e-09, 1.619989673453005e-10, 8.570851587704483e-12, 4.173390525110545e-13, 1.882182313369200e-14, 7.905077490183600e-16, 3.106516522278015e-17, 1.146993357552872e-18, 3.993505946474331e-20, 1.315422088925013e-21, 4.111086619781969e-23, 1.222267847170291e-24, 3.465166176892603e-26, 9.387848228980078e-28, 2.435272760606764e-29, +3.648969814485983e-01, 1.391530332747365e-01, 3.358023555636850e-02, 5.898130273274167e-03, 8.128451492897891e-04, 9.209349263281528e-05, 8.854340590607863e-06, 7.391849519404663e-07, 5.451973417374016e-08, 3.601236897940160e-09, 2.153682524202943e-10, 1.176602426858727e-11, 5.916189460821345e-13, 2.755311616397114e-14, 1.195028282752820e-15, 4.849695775543332e-17, 1.849163373111096e-18, 6.648845966651454e-20, 2.261715707914099e-21, 7.299840237036043e-23, 2.241348831513184e-24, 6.562293223301923e-26, 1.836064830781135e-27, 4.918827655013383e-29, +3.560486237637179e-01, 1.392985887257301e-01, 3.459034208895584e-02, 6.258811460515381e-03, 8.890496092576374e-04, 1.038526271932738e-04, 1.029660992993553e-05, 8.865278939185038e-07, 6.744192318356455e-08, 4.595052287274921e-09, 2.834666772387812e-10, 1.597519341768570e-11, 8.286398489572602e-13, 3.981170696915269e-14, 1.781319597934949e-15, 7.457747675766402e-17, 2.933613713729934e-18, 1.088209475964497e-19, 3.818970748596355e-21, 1.271647517841659e-22, 4.028195071378156e-24, 1.216764560855555e-25, 3.512293163627576e-27, 9.707734460093321e-29, +3.475510618827322e-01, 1.393511307420947e-01, 3.557091843028139e-02, 6.623823166417808e-03, 9.688571131734360e-04, 1.165738988350273e-04, 1.190719736351077e-05, 1.056312472609347e-06, 8.280401340614420e-08, 5.813795068711027e-09, 3.696057154654393e-10, 2.146669201384344e-11, 1.147568959171322e-12, 5.682337258742760e-14, 2.620407036586626e-15, 1.130710493588168e-16, 4.584252912504971e-18, 1.752686777242528e-19, 6.339688364041067e-21, 2.175811052083428e-22, 7.103958723624817e-24, 2.211741123596198e-25, 6.580491189258019e-27, 1.874679442383687e-28, +3.393870404494055e-01, 1.393180027031992e-01, 3.652181718158129e-02, 6.992578132252412e-03, 1.052217960011074e-03, 1.302870887019291e-04, 1.369768774932064e-05, 1.250899759053537e-06, 1.009512378691427e-07, 7.297553419170279e-09, 4.776763008562863e-10, 2.856623222679077e-11, 1.572430409773340e-12, 8.017407872302174e-14, 3.807130409871074e-15, 1.691643126875407e-16, 7.062516165449783e-18, 2.780565572198018e-19, 1.035710552727266e-20, 3.660467059695056e-22, 1.230731509098104e-23, 3.945909476050821e-25, 1.208991198210601e-26, 3.546873190166561e-28, +3.315402584632040e-01, 1.392060383936947e-01, 3.744299425117287e-02, 7.364509340269057e-03, 1.139074968156388e-03, 1.450201054750447e-04, 1.567978489899919e-05, 1.472778934911314e-06, 1.222609386684030e-07, 9.091640993812774e-09, 6.122211455559952e-10, 3.766630601284408e-11, 2.133090418379660e-12, 1.118972385542788e-13, 5.466868403935684e-15, 2.499260795359301e-16, 1.073568167242192e-17, 4.348857402094188e-19, 1.666694895032650e-20, 6.060844614745924e-22, 2.096726193980781e-23, 6.916871561976714e-25, 2.180580142761447e-26, 6.582377169312970e-28, +3.239953125683712e-01, 1.390215966313745e-01, 3.833449757239620e-02, 7.739070698510760e-03, 1.229364086385704e-03, 1.607989331194340e-04, 1.786527521188571e-05, 1.724564794424193e-06, 1.471437623220848e-07, 1.124701396156072e-08, 7.785121373905439e-10, 4.923664292960372e-11, 2.866392609115190e-12, 1.545777050285408e-13, 7.763817491489760e-15, 3.648918414153805e-16, 1.611400938236543e-17, 6.710814030112164e-19, 2.644150195955087e-20, 9.885451321871727e-22, 3.515938742776468e-23, 1.192471544465722e-24, 3.865015925367335e-26, 1.199512674420084e-27, +3.167376438773787e-01, 1.387705935377022e-01, 3.919645680197430e-02, 8.115737531121173e-03, 1.323014990075486e-03, 1.776475906682549e-04, 2.026599184161661e-05, 2.008994707577581e-06, 1.760447658407939e-07, 1.382069471525057e-08, 9.826327809533161e-10, 6.383578190413857e-11, 3.817458423191229e-12, 2.114748509514019e-13, 1.091110606599415e-14, 5.268003421816089e-16, 2.389899424090054e-17, 1.022468881796839e-18, 4.138699897428618e-20, 1.589573764446808e-21, 5.808109866916380e-23, 2.023734156330698e-24, 6.738618768378848e-26, 2.148525817042914e-27, +3.097534881009597e-01, 1.384585326127029e-01, 4.002907392036965e-02, 8.494006897216999e-03, 1.419951660292376e-03, 1.955881033005169e-04, 2.289377957439741e-05, 2.328925075084238e-06, 2.094444274730120e-07, 1.687620038215691e-08, 1.231565615231965e-09, 8.212381081192616e-11, 5.041168040860234e-12, 2.866672914677912e-13, 1.518306058077738e-14, 7.525142973079053e-16, 3.504550509877000e-17, 1.539188048548056e-18, 6.395854085964807e-20, 2.521807114952327e-21, 9.459444202421528e-23, 3.383658463478232e-24, 1.156667452776131e-25, 3.786036534992000e-27, +3.030298287719901e-01, 1.380905327647251e-01, 4.083261466175257e-02, 8.873397759178957e-03, 1.520092943871091e-03, 2.146404839638840e-04, 2.576046057822729e-05, 2.687327307583511e-06, 2.478595568648531e-07, 2.048397422749491e-08, 1.533284508901659e-09, 1.048763243715983e-10, 6.603837669531600e-12, 3.852220055919211e-13, 2.092997903674564e-14, 1.064162512412560e-15, 5.084113498021895e-17, 2.290705863683043e-18, 9.765065812621827e-20, 3.949945537424934e-21, 1.520024556027878e-22, 5.578018618414923e-24, 1.956197851665111e-25, 6.569040887707279e-27, +2.965543533645102e-01, 1.376713544351749e-01, 4.160740070677883e-02, 9.253451019190893e-03, 1.623353092991000e-03, 2.348227247964477e-04, 2.887780116326788e-05, 3.087283362816655e-06, 2.918441001506866e-07, 2.472181802549871e-08, 1.896851703479486e-09, 1.329996470609208e-10, 8.585109404684350e-12, 5.133908157919169e-13, 2.859580815239925e-14, 1.490546397115378e-15, 7.300672611731081e-17, 3.372346577564978e-18, 1.473864785612879e-19, 6.112190671364763e-21, 2.411475839879966e-22, 9.072805001883372e-24, 3.262166540552584e-25, 1.123127812619426e-26, +2.903154121222752e-01, 1.372054239486434e-01, 4.235380257653409e-02, 9.633729441010559e-03, 1.729642283116076e-03, 2.561507976101467e-04, 3.225747967534396e-05, 3.531980875525333e-06, 3.419898362596080e-07, 2.967532346910637e-08, 2.332519444534969e-09, 1.675473635435145e-10, 1.108007013687573e-11, 6.788373857473865e-13, 3.873916387606940e-14, 2.068860201595509e-15, 1.038227619363957e-16, 4.913729365955101e-18, 2.200343409568583e-19, 9.349477157655533e-21, 3.779499035053902e-22, 1.456990240191820e-23, 5.367689978704487e-25, 1.893559217711539e-26, +2.843019794234335e-01, 1.366968562098409e-01, 4.307223317077308e-02, 1.001381747227299e-02, 1.838867108472546e-03, 2.786386627124473e-04, 3.591105562729834e-05, 4.024707915459860e-06, 3.989269614760471e-07, 3.543830069938784e-08, 2.851836012300631e-09, 2.097381944976908e-10, 1.420161615540204e-11, 8.908980947195154e-13, 5.205818044503287e-14, 2.846781245424932e-15, 1.462871461076388e-16, 7.089585688414832e-18, 3.250878167451203e-19, 1.414497102103920e-20, 5.855403801032775e-22, 2.311479501897800e-23, 8.720355055983907e-25, 3.150222372647934e-26, +2.785036175193246e-01, 1.361494758603743e-01, 4.376314189798957e-02, 1.039332098109390e-02, 1.950931054508343e-03, 3.022982853610882e-04, 3.984994015663642e-05, 4.568847409206838e-06, 4.633245600257414e-07, 4.211320205878873e-08, 3.467755935519483e-09, 2.609752507949753e-10, 1.808308018360121e-11, 1.160880340934964e-12, 6.941972081728179e-14, 3.884993980267404e-15, 2.043108240119132e-16, 1.013352486905050e-17, 4.755536574491686e-19, 2.117698076357475e-20, 8.971920587000661e-22, 3.624834592950840e-23, 1.399601821410321e-24, 5.174709993111551e-26, +2.729104424960156e-01, 1.355668370006049e-01, 4.442700934892873e-02, 1.077186691934439e-02, 2.065734947012602e-03, 3.271396591683073e-04, 4.408536788261310e-05, 5.167871261582347e-06, 5.358909591663460e-07, 4.981153920713413e-08, 4.194754146374686e-09, 3.228666937249010e-10, 2.288113756978625e-11, 1.502402014419863e-12, 9.189353083326822e-14, 5.260219945268276e-15, 2.829587527532799e-16, 1.435542793218845e-17, 6.891024012597329e-19, 3.138925431759747e-20, 1.360312278664685e-21, 5.621868543335782e-23, 2.220439544243604e-24, 8.397785416559883e-26, +2.675130923171188e-01, 1.349522415745743e-01, 4.506434246891924e-02, 1.114910292369731e-02, 2.183177377775736e-03, 3.531708357953129e-04, 4.862837022164750e-05, 5.825334212116348e-06, 6.173739679413336e-07, 5.865429178521006e-08, 5.048943810019688e-09, 3.972478234444184e-10, 2.877900824956542e-11, 1.931776060277849e-12, 1.207919707182170e-13, 7.068834548017870e-15, 3.887449003301430e-16, 2.016327829549693e-17, 9.895484936634991e-19, 4.608364409612389e-20, 2.041834460843925e-21, 8.627437381570197e-23, 3.483870692724179e-24, 1.347138307634770e-25, +2.623026968156744e-01, 1.343087565092318e-01, 4.567567018788122e-02, 1.152469686438979e-02, 2.303155106844358e-03, 3.803979603041867e-04, 5.348975020669369e-05, 6.544867461703996e-06, 7.085609994033794e-07, 6.877230586665584e-08, 6.048197539690497e-09, 4.862046120856994e-10, 3.598997088883854e-11, 2.468444224965961e-12, 1.577160103004093e-13, 9.431161142373488e-15, 5.299912608511696e-16, 2.809038533660722e-17, 1.408741076302708e-18, 6.704134563936011e-20, 3.035441929027442e-21, 1.310665586476669e-22, 5.408583946970400e-24, 2.137212209636289e-25, +2.572708495115354e-01, 1.336392296929197e-01, 4.626153947008321e-02, 1.189833635059545e-02, 2.425563441573644e-03, 4.088253115624028e-04, 5.868005884394271e-05, 7.330172103847369e-06, 8.102790767266242e-07, 8.030668050388841e-08, 7.212271687739871e-09, 5.920986920266629e-10, 4.476120531184657e-11, 3.135464239207823e-12, 2.046082283669703e-13, 1.249654308038134e-14, 7.172623186431428e-16, 3.882912500043738e-17, 1.988963371927909e-18, 9.668038920967802e-20, 4.471172360833380e-21, 1.971961601155882e-22, 8.311895059541521e-24, 3.354876527627058e-25, +2.524095811387339e-01, 1.329463048722280e-01, 4.682251174869052e-02, 1.226972820034529e-02, 2.550296592805432e-03, 4.384553471242144e-04, 6.420957302895828e-05, 8.185012394081542e-06, 9.233947242040750e-07, 9.340914074686446e-08, 8.562933384268132e-09, 7.175938037558023e-10, 5.537797891583720e-11, 3.960054840374392e-12, 2.638136116575206e-13, 1.644930528774337e-14, 9.638879873944283e-16, 5.327251247732946e-17, 2.785958164257050e-18, 1.382588291279975e-19, 6.528094158130402e-21, 2.939525901900280e-22, 1.265014876379945e-23, 5.213044317933619e-25, +2.477113347748456e-01, 1.322324355408890e-01, 4.735915971289247e-02, 1.263859788206964e-02, 2.677248008605874e-03, 4.692887520429316e-04, 7.008827503403195e-05, 9.113208890196372e-06, 1.048813744665487e-06, 1.082423955937070e-07, 1.012408997839977e-08, 8.656837015881776e-10, 6.816819227447365e-11, 4.974203173106290e-12, 3.381490048424089e-13, 2.151572844474455e-14, 1.286589798428498e-15, 7.256513760290919e-17, 3.872719589194127e-18, 1.961351785744829e-19, 9.450920302798393e-21, 4.343036175463979e-22, 1.907406315439576e-23, 8.021822192214482e-25, +2.431689424713804e-01, 1.314998978893225e-01, 4.787206441793114e-02, 1.300468893404728e-02, 2.806310686084126e-03, 5.013244910982041e-04, 7.632583356915183e-05, 1.011863149475180e-05, 1.187480885351353e-06, 1.249804794186240e-07, 1.192192052271088e-08, 1.039721509253442e-09, 8.350729853802546e-11, 6.215339228373909e-12, 4.309821191662597e-13, 2.797217103651508e-14, 1.706227021721269e-15, 9.816523611811440e-17, 5.344217694533194e-18, 2.761001291400407e-19, 1.357163687894197e-20, 6.362122902283963e-22, 2.850396813946906e-23, 1.222900982798086e-24, +2.387756032907889e-01, 1.307508028787311e-01, 4.836181269069502e-02, 1.336776236733540e-02, 2.937377461885402e-03, 5.345598639525769e-04, 8.293158641047512e-05, 1.120519243016101e-05, 1.340379394739554e-06, 1.438090755142104e-07, 1.398500892887465e-08, 1.243450511119309e-09, 1.018236105522716e-10, 7.727082086885474e-12, 5.463210639668395e-13, 3.615448735229818e-14, 2.248681480798816e-15, 1.319199414433490e-16, 7.323252392399206e-18, 3.857965313244892e-19, 1.933747897440969e-20, 9.243769794418862e-22, 4.223134528293280e-23, 1.847592193353908e-24, +2.345248626617911e-01, 1.299871074992608e-01, 4.882899480570405e-02, 1.372759605710834e-02, 3.070341282009589e-03, 5.689905627815265e-04, 8.991452458254394e-05, 1.237683917530219e-05, 1.508530473242587e-06, 1.649258204812459e-07, 1.634447841226723e-08, 1.481036358573503e-09, 1.236040088431540e-10, 9.560062821668581e-12, 6.889154217008568e-13, 4.646890294246039e-14, 2.945902074060522e-15, 1.761560643664694e-16, 9.967667952697991e-18, 5.352480570285288e-19, 2.734689359674038e-20, 1.332515377883336e-21, 6.205490674824379e-23, 2.767376135255029e-24, +2.304105929704487e-01, 1.292106252676593e-01, 4.927420240830942e-02, 1.408398412674950e-02, 3.205095451652153e-03, 6.046107319507289e-04, 9.728327807364015e-05, 1.363754739123259e-05, 1.692992621075216e-06, 1.885405882986285e-07, 1.903412683505603e-08, 1.757100664901112e-09, 1.494000627543524e-10, 1.177282898577986e-11, 8.643699431111368e-13, 5.940452305884500e-14, 3.837132445625164e-15, 2.337890842513309e-16, 1.347919852395653e-17, 7.375209866619280e-19, 3.839549600550405e-20, 1.906343565822296e-21, 9.046173898126511e-23, 4.110736777002109e-24, +2.264269753097395e-01, 1.284230360160681e-01, 4.969802666377426e-02, 1.443673632851237e-02, 3.341533865798745e-03, 6.414130293432445e-04, 1.050461030576012e-04, 1.499131386213677e-05, 1.894860886935300e-06, 2.148757530082863e-07, 2.209056255115271e-08, 2.076755955897776e-09, 1.798345760844235e-10, 1.443283566356191e-11, 1.079271994436417e-12, 7.554766417838440e-14, 4.970347863060271e-15, 3.084534072885598e-16, 1.811425980357590e-17, 1.009548237042286e-18, 5.353446199371938e-20, 2.707438077838494e-21, 1.308668803912617e-22, 6.057519303276453e-24, +2.225684823153713e-01, 1.276258950200471e-01, 5.010105661260493e-02, 1.478567742408999e-02, 3.479551221330201e-03, 6.793886889675535e-04, 1.132108705900694e-04, 1.644214947615638e-05, 2.115266021445135e-06, 2.441664290540028e-07, 2.555334035231750e-08, 2.445641937485893e-09, 2.156085675537424e-10, 1.761752809690177e-11, 1.341333942774876e-12, 9.559821380653224e-14, 6.403930161138142e-15, 4.046573571814454e-16, 2.419705242166027e-17, 1.373150153774117e-18, 7.414431481767217e-20, 3.818213447739163e-21, 1.879282173189978e-22, 8.857691272991169e-24, +2.188298620202313e-01, 1.268206415106398e-01, 5.048387771407230e-02, 1.513064656800191e-02, 3.619043211411513e-03, 7.185275845047294e-04, 1.217850567424776e-04, 1.799407226923841e-05, 2.355373539567841e-06, 2.766606884183602e-07, 2.946509711260120e-08, 2.869963035782624e-09, 2.575086953444034e-10, 2.141552091090534e-11, 1.659551718542970e-12, 1.203882393362644e-13, 8.208612603058901e-15, 5.279668137229596e-16, 3.213539938474687e-17, 1.856292822236208e-18, 1.020276735910807e-19, 5.348301336071242e-21, 2.679579047694275e-22, 1.285632960033924e-23, +2.152061226642101e-01, 1.260086066122203e-01, 5.084707056131403e-02, 1.547149669632021e-02, 3.759906702948174e-03, 7.588182934795266e-04, 1.307757341330463e-04, 1.965110055361234e-05, 2.616382696444153e-06, 3.126197538077270e-07, 3.387168672814635e-08, 3.356527159434232e-09, 3.064151338040195e-10, 2.592787895575978e-11, 2.044380845100312e-12, 1.509030827558400e-13, 1.046972969551249e-14, 6.852219071825048e-16, 4.243980360480815e-17, 2.494631800808508e-18, 1.395252432725777e-19, 7.442681601686989e-21, 3.794568062557210e-22, 1.852669668375348e-23, +2.116925184001998e-01, 1.251910207450140e-01, 5.119120975274613e-02, 1.580809392290680e-02, 3.902039897896717e-03, 8.002481617655858e-04, 1.401895648106296e-04, 2.141724615097686e-05, 2.899525381290731e-06, 3.523181672407793e-07, 3.882231395107046e-08, 3.912785628608414e-09, 3.633099091928756e-10, 3.126950475290677e-11, 2.507931274720439e-12, 1.883051944056023e-13, 1.328981037271645e-14, 8.847917134472425e-16, 5.574628269358832e-17, 3.333397352042022e-18, 1.896601595546448e-19, 1.029199232388613e-20, 5.338048849424690e-22, 2.651376730018451e-23, +2.082845358408618e-01, 1.243690205285241e-01, 5.151686290574738e-02, 1.614031694502115e-02, 4.045342479214558e-03, 8.428033681593683e-04, 1.500327944443684e-04, 2.329650774895254e-05, 3.206064934163240e-06, 3.960439335008293e-07, 4.436966671964435e-08, 4.546874209849617e-09, 4.292857000892338e-10, 3.757063748371274e-11, 3.064182416862182e-12, 2.339609757281609e-13, 1.679155653739564e-14, 1.136872478557552e-15, 7.284361743163611e-17, 4.429686553124577e-18, 2.563167711913482e-19, 1.414553680303238e-20, 7.461482794185162e-22, 3.769118377471619e-23, +2.049778813942989e-01, 1.235436552196272e-01, 5.182458979971968e-02, 1.646805645987577e-02, 4.189715742227769e-03, 8.864689887807654e-04, 1.603112477697429e-04, 2.529286439784840e-05, 3.537294890517355e-06, 4.440986380157334e-07, 5.057004659217497e-08, 5.267655191074505e-09, 5.055551067561081e-10, 4.497846838743746e-11, 3.729219788830520e-12, 2.894709179808033e-13, 2.112125271278987e-14, 1.453835533668701e-15, 9.470573824254437e-17, 5.855238224840072e-18, 3.444610653696568e-19, 1.932761320538854e-20, 1.036533207794243e-21, 5.323537450385715e-23, +2.017684693400837e-01, 1.227158927167930e-01, 5.211494163667758e-02, 1.679121459346454e-02, 4.335062712184973e-03, 9.312290610804855e-04, 1.710303252397130e-04, 2.741026916330252e-05, 3.894537658600025e-06, 4.967975388307893e-07, 5.748349689880746e-08, 6.084760426335258e-09, 5.934603924208944e-10, 5.365887734242697e-11, 4.521494760110542e-12, 3.567033411238451e-13, 2.645265651736945e-14, 1.850631744498733e-15, 1.225300712492619e-16, 7.699778554549216e-18, 4.604112381157535e-19, 2.625791928665555e-20, 1.431348145758103e-21, 7.472149839756594e-23, +1.986524106001829e-01, 1.218866251597439e-01, 5.238846040849018e-02, 1.710970434276354e-02, 4.481288248752242e-03, 9.770666472554675e-04, 1.821950008281857e-04, 2.965264294890196e-05, 4.279143134773891e-06, 5.544696324394864e-07, 6.517392823379289e-08, 7.008635275626011e-09, 6.944836980335828e-10, 6.379829529018103e-11, 5.462108899627622e-12, 4.378320545006036e-13, 3.299142382013542e-14, 2.345260074816242e-15, 1.577827727080216e-16, 1.007503873752100e-17, 6.121684026939446e-19, 3.547693334030653e-20, 1.965149240672341e-21, 1.042470082043822e-22, +1.956260021622161e-01, 1.210566741518722e-01, 5.264567836079223e-02, 1.742344903220241e-02, 4.628299138187186e-03, 1.023963896893475e-03, 1.938098209319776e-04, 3.202386850146301e-05, 4.692487261920499e-06, 6.174576933336826e-07, 7.370924092050948e-08, 8.050583360966392e-09, 8.102577306562983e-10, 7.560569702644718e-11, 6.575124469655019e-12, 5.353782784174228e-13, 4.098012676521090e-14, 2.959308633186727e-15, 2.022518984646506e-16, 1.311956106386274e-17, 8.098191376243186e-19, 4.767734630484053e-20, 2.682960022687382e-21, 1.445899973869000e-22, +1.926857171151833e-01, 1.202267956308697e-01, 5.288711754440458e-02, 1.773238178512438e-02, 4.776004173912075e-03, 1.071902108686904e-03, 2.058789043167466e-04, 3.452778461027369e-05, 5.135970536085675e-06, 6.861182872285344e-07, 8.316144409259124e-08, 9.222812056280018e-09, 9.425769242034612e-10, 8.931472872709893e-11, 7.887902640797860e-12, 6.522571832470058e-13, 5.070392736484444e-14, 3.718577417599990e-15, 2.581096842244262e-16, 1.700442678457372e-17, 1.066023527381566e-18, 6.374282230851803e-20, 3.643155572932476e-21, 1.994111527190195e-22, +1.898281952603302e-01, 1.193976844112997e-01, 5.311328944586480e-02, 1.803644501079430e-02, 4.924314226185366e-03, 1.120861791073585e-03, 2.184059430519927e-04, 3.716818051026190e-05, 5.611016466523848e-06, 7.608217580078889e-07, 9.360677104679201e-08, 1.053847862520468e-08, 1.093409069804365e-09, 1.051859743996657e-10, 9.431471029184358e-12, 7.918294201441390e-13, 6.249697404377995e-14, 4.653792875154941e-15, 3.279852535421540e-16, 2.194005795658254e-17, 1.396604570123841e-18, 8.479559968272427e-20, 4.921063880656446e-21, 2.735101294646874e-22, +1.870502342621731e-01, 1.185699784212206e-01, 5.332469468936789e-02, 1.833558990737117e-02, 5.073142301549013e-03, 1.170822721679013e-03, 2.313942043801630e-04, 3.994879049776506e-05, 6.119069994269698e-06, 8.419521885226344e-07, 1.051257905365954e-07, 1.201173691793367e-08, 1.264907411605061e-09, 1.235093652545218e-10, 1.124092217946351e-11, 9.579580348069089e-13, 7.674959336794779e-14, 5.801425354924987e-15, 4.150492241979683e-16, 2.818426645700747e-17, 1.821257347106951e-18, 1.122547158852660e-19, 6.613443698515993e-21, 3.731495569879228e-22, +1.843487813069236e-01, 1.177442626534751e-01, 5.352182280306236e-02, 1.862977598113738e-02, 5.222403592706187e-03, 1.221764005450088e-03, 2.448465334650863e-04, 4.287328876633859e-05, 6.661595874316418e-06, 9.299073354574434e-07, 1.178035136899641e-07, 1.365778453550012e-08, 1.459423202370472e-09, 1.446067357735239e-10, 1.335584463523381e-11, 1.155071172864388e-12, 9.391635419824336e-14, 7.204621552524809e-15, 5.231118506995316e-16, 3.605174664233856e-17, 2.364399199085875e-18, 1.479069525159949e-19, 8.844029386696875e-21, 5.064627377135960e-22, +1.817209252376088e-01, 1.169210728508552e-01, 5.370515204324169e-02, 1.891897058216598e-02, 5.372015519459983e-03, 1.273664131385013e-03, 2.587653569654053e-04, 4.594528446885604e-05, 7.240077026412376e-06, 1.025098538560272e-06, 1.317294962499032e-07, 1.549291036758309e-08, 1.679518711797021e-09, 1.688345300190213e-10, 1.582078825192015e-11, 1.388231002348238e-12, 1.145250866663636e-13, 8.914265125609914e-15, 6.567365217114034e-16, 4.592523388658358e-17, 3.056185369520458e-18, 1.939929558029759e-19, 1.177036969273409e-20, 6.839644989488950e-22, +1.791638891371204e-01, 1.161008989430521e-01, 5.387514927051740e-02, 1.920314845651000e-02, 5.521897761319558e-03, 1.326501027777624e-03, 2.731526873793189e-04, 4.916831701102441e-05, 7.856012859402920e-06, 1.127950604603681e-06, 1.469979358525796e-07, 1.753454240793620e-08, 1.927980679006659e-09, 1.965866614734391e-10, 1.868576541570374e-11, 1.663209295234552e-12, 1.391869436637782e-13, 1.099017980121349e-14, 8.213706269176335e-16, 5.826857964786663e-17, 3.933718188568888e-18, 2.533113991887845e-19, 1.559222989344525e-20, 9.191886833757944e-22, +1.766750233322303e-01, 1.152841882520853e-01, 5.403226987256507e-02, 1.948229131491310e-02, 5.671972282355222e-03, 1.380252115907068e-03, 2.880101281077927e-04, 5.254585158036358e-05, 8.510917573943887e-06, 1.238901666517456e-06, 1.637077640744977e-07, 1.980129574991908e-08, 2.207834199271177e-09, 2.282975294299227e-10, 2.200678983574641e-11, 1.986570126147439e-12, 1.686075979554213e-13, 1.350249049889164e-14, 1.023496018822777e-15, 7.364202497577559e-17, 5.042481923752294e-18, 3.293445240578483e-19, 2.056187606169633e-20, 1.229480520140960e-21, +1.742517987932966e-01, 1.144713484817746e-01, 5.417695772849809e-02, 1.975638741796667e-02, 5.822163348859373e-03, 1.434894362115493e-03, 3.033388791843982e-04, 5.608127491368288e-05, 9.206318448299210e-06, 1.358403018198035e-06, 1.819627329975815e-07, 2.231302066334520e-08, 2.522357033616579e-09, 2.644451946687952e-10, 2.584645457550551e-11, 2.365760161921046e-12, 2.035996735641042e-13, 1.653315925830400e-14, 1.270801521922462e-15, 9.271998867774468e-17, 6.438039953215487e-18, 4.264089288513385e-19, 2.699661733871705e-20, 1.636977717678559e-21, +1.718918009059697e-01, 1.136627505057649e-01, 5.430964521035081e-02, 2.002543117757382e-02, 5.972397540345018e-03, 1.490404328227219e-03, 3.191397436210821e-04, 5.977789130512631e-05, 9.943754111808075e-06, 1.486918925561727e-06, 2.018714960588318e-07, 2.509085065294397e-08, 2.875094328586462e-09, 3.055547168537799e-10, 3.027455098230337e-11, 2.809207030746160e-12, 2.450965157064939e-13, 2.017771408605497e-14, 1.572380185140870e-15, 1.163117239128209e-16, 8.188035968450324e-18, 5.498360830060387e-19, 3.529404801595501e-20, 2.169820689495317e-21, +1.695927235926808e-01, 1.128587309676319e-01, 5.443075321754627e-02, 2.028942277452592e-02, 6.122603754389304e-03, 1.546758220272946e-03, 3.354131343204574e-04, 6.363891885595759e-05, 1.072477281046975e-05, 1.624926414465832e-06, 2.235476829694729e-07, 2.815725039816774e-08, 3.269873732106299e-09, 3.522016557672229e-10, 3.536873016241568e-11, 3.326426274006827e-12, 2.941674092824639e-13, 2.454719022406848e-14, 1.938954234029676e-15, 1.453852379807214e-16, 1.037454653030997e-17, 7.061877280993231e-19, 4.595050708857649e-20, 2.863640008866593e-21, +1.673523637630827e-01, 1.120595947056815e-01, 5.454069124058453e-02, 2.054836779194909e-02, 6.272713205804780e-03, 1.603931935491698e-03, 3.521590815065665e-04, 6.766748596640713e-05, 1.155093066894670e-05, 1.772915036174226e-06, 2.471099685070066e-07, 3.153606347384377e-08, 3.710820890091603e-09, 4.050157381759440e-10, 4.121520863170900e-11, 3.928137397567509e-12, 3.520343617114321e-13, 2.977030478990504e-14, 2.383130957513902e-15, 1.810949147324173e-16, 1.309683853260181e-17, 9.035121026608506e-19, 5.958335997878807e-20, 3.763378148950387e-21, +1.651686160739045e-01, 1.112656170142066e-01, 5.463985745052047e-02, 2.080227686433832e-02, 6.422659420597207e-03, 1.661901107591669e-03, 3.693772406275470e-04, 7.186662806911570e-05, 1.242378995313125e-05, 1.931386611092069e-06, 2.726821350023424e-07, 3.525255975127690e-08, 4.202375307187213e-09, 4.646846917800972e-10, 4.790951974925718e-11, 4.626389552130761e-12, 4.200905717559886e-13, 3.599588724744037e-14, 2.919693060487681e-15, 2.248133275581633e-16, 1.647459202133408e-17, 1.151647798329722e-18, 7.695780670558985e-20, 4.925512981528106e-21, +1.630394679798950e-01, 1.104770457521655e-01, 5.472863881110535e-02, 2.105116534186255e-02, 6.572378225145246e-03, 1.720641150258896e-03, 3.870669006851634e-04, 7.623928460297264e-05, 1.334491733725826e-05, 2.100854951537863e-06, 3.003931283630270e-07, 3.933348237983412e-08, 4.749306553816339e-09, 5.319582473476689e-10, 5.555731251337836e-11, 5.434697384279114e-12, 4.999207118579017e-13, 4.339558973311540e-14, 3.565927328803965e-15, 2.781677835249653e-16, 2.065165642695740e-17, 1.462583033052327e-18, 9.901903439201416e-20, 6.420762581530840e-21, +1.609629950586620e-01, 1.096941033095116e-01, 5.480741121074754e-02, 2.129505296959617e-02, 6.721807731014247e-03, 1.780127298909644e-03, 4.052269929477654e-04, 8.078829622546670e-05, 1.431588217937822e-05, 2.281845564360301e-06, 3.303771074925048e-07, 4.380709424978378e-08, 5.356730800560682e-09, 6.076523097782591e-10, 6.427519926616862e-11, 6.368187610875154e-12, 5.933231574170524e-13, 5.216690288717773e-14, 4.341995787626243e-15, 3.430821961548295e-16, 2.580041664612842e-17, 1.850879222163324e-18, 1.269306612823136e-19, 8.337364839416777e-21, +1.589373565932767e-01, 1.089169884407117e-01, 5.487653961170507e-02, 2.153396358130867e-02, 6.870888315794009e-03, 1.840334650688896e-03, 4.238561000048821e-04, 8.551640226103980e-05, 1.533825480883202e-05, 2.474895334242216e-06, 3.627734869842188e-07, 4.870322383820459e-08, 6.030127659790311e-09, 6.926532984728133e-10, 7.419165381389061e-11, 7.443756879555851e-12, 7.023343023519599e-13, 6.253650451932612e-14, 5.271353888133747e-15, 4.218249457755871e-16, 3.212685461530848e-17, 2.334168951495491e-18, 1.621205661663952e-19, 1.078504146753500e-20, +1.569607913975067e-01, 1.081458779743465e-01, 5.493637821416099e-02, 2.176792480742669e-02, 7.019562600328638e-03, 1.901238202722991e-03, 4.429524651233245e-04, 9.042623838235619e-05, 1.641360482919161e-05, 2.680552188564582e-06, 3.977269729881253e-07, 5.405331034111178e-08, 6.775357313417457e-09, 7.879226570122615e-10, 8.544796142655676e-11, 8.680241487058746e-12, 8.292551061727205e-13, 7.476397017202495e-14, 6.381220631565204e-15, 5.170634525555989e-16, 3.987640210974750e-17, 2.933739819860418e-18, 2.063353632072692e-19, 1.389977447453197e-20, +1.550316138694702e-01, 1.073809284070919e-01, 5.498727063304911e-02, 2.199696779676722e-02, 7.167775422685585e-03, 1.962812888639803e-03, 4.625140018663808e-04, 9.552033452087340e-05, 1.754349943995185e-05, 2.899374744730055e-06, 4.353875921658027e-07, 5.989044799655926e-08, 7.598677904665000e-09, 8.945015317688931e-10, 9.819922213079778e-11, 1.009859953500006e-11, 9.766800236543830e-13, 8.914587643028703e-14, 7.703105933871686e-15, 6.319262584695150e-16, 4.934069153904919e-17, 3.675217133795399e-18, 2.617049697317254e-19, 1.784954437687675e-20, +1.531482102603752e-01, 1.066222773898165e-01, 5.502955008569738e-02, 2.222112695163034e-02, 7.315473809190481e-03, 2.025033613374415e-03, 4.825383039393877e-04, 1.008011130026233e-04, 1.872950178007776e-05, 3.131931940868083e-06, 4.759107136686909e-07, 6.624942950535031e-08, 8.506763170820374e-09, 1.013515618690992e-09, 1.126154086557200e-10, 1.172210610943232e-11, 1.147528474001606e-12, 1.060203296614624e-13, 9.273400949095195e-15, 7.700734907500714e-16, 6.086532355752768e-17, 4.589360118588596e-18, 3.308189258375810e-19, 2.284120365266216e-20, +1.513090351458261e-01, 1.058700451130145e-01, 5.506353958854016e-02, 2.244043967583244e-02, 7.462606942834981e-03, 2.087875286282491e-03, 5.030226552266760e-04, 1.062708869046764e-04, 1.997316929632864e-05, 3.378802650862142e-06, 5.194570640920617e-07, 7.316678845811305e-08, 9.506720293091732e-09, 1.146180177115074e-09, 1.288824803320337e-10, 1.357656207599037e-11, 1.345079012124060e-12, 1.257719547497773e-13, 1.113403750520870e-14, 9.357766610736825e-16, 7.485878342881418e-17, 5.712988170233588e-18, 4.168163621340898e-19, 2.912868658690642e-20, +1.495126080879398e-01, 1.051243355983058e-01, 5.508955216131777e-02, 2.265494613525525e-02, 7.609126129345693e-03, 2.151312852587214e-03, 5.239640399866040e-04, 1.119318586273776e-04, 2.127605213909967e-05, 3.640575284654747e-06, 5.661927353750535e-07, 8.068084067985922e-08, 1.060610793889712e-08, 1.293805209072361e-09, 1.472035541804243e-10, 1.569051708664170e-11, 1.573006370276698e-12, 1.488373803150500e-13, 1.333322326270099e-14, 1.134008842014989e-15, 9.180265234631822e-17, 7.090055727849656e-18, 5.234917781938731e-19, 3.702278811184694e-20, +1.477575104772330e-01, 1.043852379022838e-01, 5.510789103733620e-02, 2.286468903048471e-02, 7.754984761184410e-03, 2.215321323188935e-03, 5.453591531730786e-04, 1.177861186770946e-04, 2.263969158833917e-05, 3.917847374796955e-06, 6.162891856343984e-07, 8.883172440572211e-08, 1.181295447120052e-08, 1.457800802167935e-09, 1.678001343560670e-10, 1.809550739694611e-11, 1.835421543839323e-12, 1.757112588698804e-13, 1.592625968375593e-14, 1.370546355392365e-15, 1.122632753824863e-16, 8.772896610726532e-18, 6.554190921783206e-19, 4.690277995007207e-20, +1.460423825439123e-01, 1.036528272385694e-01, 5.511884987850058e-02, 2.306971338111248e-02, 7.900138279732313e-03, 2.279875802869548e-03, 5.672044108536511e-04, 1.238356446539146e-04, 2.406561851192031e-05, 4.211225150217110e-06, 6.699232329363626e-07, 9.766143920435864e-08, 1.313577629886283e-08, 1.639682633723904e-09, 1.909134010425302e-10, 2.082630909426127e-11, 2.136915100395883e-12, 2.069528623711737e-13, 1.897645039849101e-14, 1.652083206212382e-15, 1.369050644901706e-16, 1.082366115478018e-17, 8.180967546302786e-19, 5.923017280283006e-20, +1.443659205288250e-01, 1.029271660235378e-01, 5.512271299396565e-02, 2.327006632127528e-02, 8.044544135894267e-03, 2.344951516926025e-03, 5.894959606959210e-04, 1.300823004384599e-04, 2.555535185866709e-05, 4.521323098187999e-06, 7.272770420277886e-07, 1.072138835684739e-07, 1.458359634140138e-08, 1.841077633492788e-09, 2.168055598102552e-10, 2.392120733747015e-11, 2.482603896505327e-12, 2.431932956563200e-13, 2.255610807434373e-14, 1.986359601199296e-15, 1.665056330799795e-16, 1.331597221688059e-17, 1.018117089844914e-18, 7.456497901321475e-20, +1.427268740049208e-01, 1.022083048508161e-01, 5.511975556136410e-02, 2.346579690601028e-02, 8.188161749343522e-03, 2.410523836269787e-03, 6.122296924956216e-04, 1.365278355717644e-04, 2.711039718805995e-05, 4.848763515473122e-06, 7.885381040630072e-07, 1.175348910950804e-07, 1.616596258105007e-08, 2.063729801865607e-09, 2.457612523725274e-10, 2.742228220752262e-11, 2.878181391612639e-12, 2.851433723177419e-13, 2.674766843522072e-14, 2.382306002551293e-15, 2.019729782205940e-16, 1.633682911004938e-17, 1.263363439987228e-18, 9.358488164216416e-20, +1.411240433406245e-01, 1.014962833993121e-01, 5.511024384968205e-02, 2.365695592800974e-02, 8.330952466611937e-03, 2.476568301030247e-03, 6.354012487213348e-04, 1.431738848219555e-04, 2.873224523847226e-05, 5.194176049631120e-06, 8.538992093786652e-07, 1.286722651814110e-07, 1.789296667458254e-08, 2.309506180121823e-09, 2.780890295855831e-10, 3.137571176535129e-11, 3.329971753410781e-12, 3.336021996575621e-13, 3.164492063827365e-14, 2.850204285775370e-15, 2.443649475280433e-16, 1.998879180650827e-17, 1.563239143903218e-18, 1.171077738402447e-19, +1.395562772970367e-01, 1.007911312792101e-01, 5.509443544294999e-02, 2.384359574436376e-02, 8.472879518216377e-03, 2.543060642702471e-03, 6.590060350523606e-04, 1.500219679313286e-04, 3.042237053562081e-05, 5.558197231453179e-06, 9.235584133832661e-07, 1.406758121658615e-07, 1.977526259700536e-08, 2.580402968896671e-09, 3.141228874494485e-10, 3.583209290951913e-11, 3.844987953612337e-12, 3.894665214724492e-13, 3.735436379788890e-14, 3.401867695384972e-15, 2.949112503989894e-16, 2.439248131833316e-17, 1.928932888283866e-18, 1.461181974465692e-19, +1.380224707513661e-01, 1.000928688200797e-01, 5.507257946400726e-02, 2.402577011288738e-02, 8.613907974998494e-03, 2.609976804880075e-03, 6.830392308877672e-04, 1.570734895372648e-04, 3.218223004274733e-05, 5.941469999501066e-06, 9.977189956422860e-07, 1.535973728469174e-07, 2.182408528894371e-08, 2.878551790676287e-09, 3.542238667725098e-10, 4.084678062026842e-11, 4.430994057503868e-12, 4.537408695425423e-13, 4.399670004834926e-14, 4.050841424055329e-15, 3.550382974769147e-16, 2.968943605712515e-17, 2.373725527638150e-18, 1.817982826177472e-19, +1.365215625394519e-01, 9.940150780496021e-02, 5.504491679768124e-02, 2.420353403763610e-02, 8.754004703841717e-03, 2.677292962615475e-03, 7.074957998061353e-04, 1.643297392603486e-04, 3.401326185388696e-05, 6.344643217704178e-06, 1.076589412253243e-06, 1.674908523167179e-07, 2.405126927933182e-08, 3.206226091773820e-09, 3.987817170659304e-10, 4.648024616945390e-11, 5.096571914817954e-12, 5.275485768329867e-13, 5.170847515824731e-14, 4.812625779666554e-15, 4.263971781938428e-16, 3.604536820547452e-17, 2.913344085808744e-18, 2.255638717604414e-19, +1.350525334106582e-01, 9.871705215402882e-02, 5.501168031279696e-02, 2.437694362322211e-02, 8.893138322917294e-03, 2.744985540450303e-03, 7.323704999569361e-04, 1.717918919529598e-04, 3.591688393142303e-05, 6.768371186962053e-06, 1.160383241617890e-06, 1.824122480497016e-07, 2.646926725487995e-08, 3.565847678891097e-09, 4.482166251340895e-10, 5.279845486715294e-11, 5.851192463348640e-12, 6.121437075569326e-13, 6.064387835062761e-14, 5.704924050656394e-15, 5.108951139791197e-16, 4.365386872560748e-17, 3.566369330167751e-18, 2.791066019456286e-19, +1.336144040888272e-01, 9.803949856121902e-02, 5.497309508250176e-02, 2.454605593755356e-02, 9.031279156599358e-03, 2.813031229159386e-03, 7.576578943658639e-04, 1.794610081015710e-04, 3.789449288897494e-05, 7.213313151684881e-06, 1.249319123730876e-06, 1.984196761906523e-07, 2.909116854772088e-08, 3.959993385031350e-09, 5.029810087244999e-10, 5.987326390554728e-11, 6.705291860337856e-12, 7.089239613897369e-13, 7.097671364245414e-14, 6.747917333372424e-15, 6.107307543459468e-16, 5.274061460669575e-17, 4.354704055059755e-18, 3.444428212174060e-19, +1.322062334333486e-01, 9.736883708692963e-02, 5.492937860245202e-02, 2.471092888262801e-02, 9.168399190177930e-03, 2.881407001251973e-03, 7.833523611377963e-04, 1.873380343759537e-04, 3.994746282051951e-05, 7.680132802188750e-06, 1.343620693115701e-06, 2.155733959904160e-07, 3.193071751263983e-08, 4.391401859200216e-09, 5.635613754954379e-10, 6.778284084897165e-11, 7.670352659956033e-12, 8.194446112602215e-13, 8.290255569472042e-14, 7.964568745762543e-15, 7.284337146306570e-16, 6.356813733477883e-17, 5.304110028675692e-18, 4.239703267348593e-19, +1.308271166947568e-01, 9.670505170975720e-02, 5.488074100646578e-02, 2.487162107302187e-02, 9.304472024488522e-03, 2.950090125274044e-03, 8.094481035423225e-04, 1.954238043184951e-04, 4.207714417650384e-05, 8.169497773844485e-06, 1.443516505549581e-06, 2.339358323415532e-07, 3.500233176535981e-08, 4.862980474015098e-09, 6.304802474520491e-10, 7.661210330582599e-11, 8.758990258172757e-12, 9.454335362707468e-13, 9.664110385963187e-14, 9.380959619861901e-15, 8.669087877432848e-16, 7.644121738162290e-17, 6.444822452765226e-18, 5.205340375299165e-19, +1.294761838595980e-01, 9.604812083998791e-02, 5.482738527929657e-02, 2.502819172172810e-02, 9.439472830566873e-03, 3.019058178955588e-03, 8.359391599680432e-04, 2.037190391668415e-04, 4.428486268757119e-05, 8.682079143859520e-06, 1.549239958728982e-06, 2.535715963702347e-07, 3.832112025349037e-08, 5.377812345038096e-09, 7.042981508922770e-10, 8.645318030336949e-11, 9.985044828947013e-12, 1.088807413407960e-12, 1.124387488230190e-13, 1.102666044119773e-14, 1.029485297964165e-15, 9.171297577525697e-17, 7.812251763115590e-18, 6.375018529249059e-19, +1.281525980796180e-01, 9.539801779740308e-02, 5.476950746623100e-02, 2.518070053300432e-02, 9.573378304428374e-03, 3.088289061246533e-03, 8.628194137330224e-04, 2.122243488031243e-04, 4.657191833639025e-05, 9.218550926551460e-06, 1.661029207036958e-06, 2.745475040447625e-07, 4.190290113194748e-08, 5.939163455355666e-09, 7.856156717928644e-10, 9.740589587026389e-11, 1.136367897794635e-11, 1.251689133794771e-12, 1.305713669676290e-13, 1.293513948649666e-14, 1.219972102662260e-15, 1.097917405600809e-16, 9.447783666496933e-18, 7.788521005008553e-19, +1.268555541806114e-01, 9.475471125578176e-02, 5.470729687925472e-02, 2.532920760190519e-02, 9.706166622062740e-03, 3.157761003284721e-03, 8.900826027399140e-04, 2.209402328230751e-04, 4.893958437795266e-05, 9.779589567949451e-06, 1.779127070582193e-06, 2.969325927651768e-07, 4.576421941491665e-08, 6.550489878649850e-09, 8.750755764531960e-10, 1.095782753141433e-10, 1.291148134191576e-11, 1.436426511295615e-12, 1.513473583252680e-13, 1.514421230198152e-14, 1.442718787887443e-15, 1.311487732035538e-16, 1.139968947302281e-17, 9.492741461866736e-19, +1.255842772465503e-01, 9.411816565632655e-02, 5.464093629957048e-02, 2.547377332018273e-02, 9.837817394726452e-03, 3.227452578339005e-03, 9.177223289653836e-04, 2.298670817184043e-04, 5.138910640858330e-05, 1.036587344053602e-05, 1.903780938687686e-06, 3.207981359025003e-07, 4.992236437675441e-08, 7.215445093741475e-09, 9.733649971011873e-10, 1.230870746624711e-10, 1.464657636334663e-11, 1.645612353315621e-12, 1.751109447419193e-13, 1.769653536310466e-14, 1.702683646170032e-15, 1.563269477852398e-16, 1.372416004809464e-17, 1.154283924873196e-18, +1.243380212748608e-01, 9.348834159208924e-02, 5.457060217628678e-02, 2.561445828824996e-02, 9.968311624607729e-03, 3.297342710769967e-03, 9.457320677744865e-04, 2.390051781659056e-04, 5.392170148379368e-05, 1.097808233891751e-05, 2.035242668014388e-06, 3.462176552602570e-07, 5.439538667460883e-08, 7.937887383336384e-09, 1.081217682051028e-09, 1.380583337145413e-10, 1.658874047123174e-11, 1.882105965624088e-12, 2.022457456488766e-13, 2.064014746278555e-14, 2.005509069613683e-15, 1.859504841385383e-16, 1.648647808205435e-17, 1.400356354347746e-18, +1.231160678989604e-01, 9.286519616533510e-02, 5.449646482112658e-02, 2.575132323291315e-02, 1.009763166093150e-02, 3.367410684050201e-03, 9.741051770516493e-04, 2.483546984168397e-04, 5.653855728499979e-05, 1.161689697718534e-05, 2.173768475511741e-06, 3.732669314349478e-07, 5.920211516597738e-08, 8.721887309471263e-09, 1.199416309887676e-09, 1.546279531307197e-10, 1.875952489942157e-11, 2.149056164977742e-12, 2.331786496134585e-13, 2.402906258907949e-14, 2.357605038556871e-15, 2.207358450322651e-16, 1.976234486539309e-17, 1.695076819780033e-18, +1.219177251743936e-01, 9.224868331965672e-02, 5.441868859903508e-02, 2.588442893058950e-02, 1.022576115656519e-02, 3.437636147885430e-03, 1.002834906140860e-03, 2.579157137802621e-04, 5.924083133502276e-05, 1.228299848870427e-05, 2.319618826393191e-06, 4.020240120562139e-07, 6.436217339491737e-08, 9.571735257937252e-09, 1.328794867037888e-09, 1.729422959619434e-10, 2.118238537441184e-11, 2.449925875213996e-12, 2.683840006338174e-13, 2.792391827466692e-14, 2.766241435766172e-15, 2.615039170052016e-16, 2.363937937015477e-17, 2.047314162039355e-18, +1.207423264251166e-01, 9.163875414852680e-02, 5.433743211458994e-02, 2.601383613573698e-02, 1.035268502517959e-02, 3.507999124476987e-03, 1.031914404588558e-03, 2.676881921940767e-04, 6.202965026219221e-05, 1.297706792903621e-05, 2.473058317339980e-06, 4.325692178913861e-07, 6.989599572116743e-08, 1.049194904375657e-08, 1.470241087972411e-09, 1.931588139981313e-10, 2.388281890427782e-11, 2.788518384322531e-12, 3.083881189424036e-13, 3.239268362955123e-14, 3.239649968370208e-15, 3.091936046288577e-16, 2.821880918159009e-17, 2.467417872443522e-18, +1.195892291466784e-01, 9.103535718186752e-02, 5.425284839414182e-02, 2.613960551423375e-02, 1.047838939901352e-02, 3.578480013965384e-03, 1.061336730683569e-03, 2.776719998777261e-04, 6.490610911278168e-05, 1.369978578268087e-05, 2.634355555141388e-06, 4.649851468030775e-07, 7.582484306703713e-08, 1.148728156960176e-08, 1.624698957169279e-09, 2.154466992885770e-10, 2.688850789992763e-11, 3.169005341779859e-12, 3.537741768905319e-13, 3.751143150481489e-14, 3.787136534603534e-15, 3.648769787993429e-16, 3.361737470598624e-17, 2.967442490878436e-18, +1.184578139632368e-01, 9.043843865210993e-02, 5.416508506363257e-02, 2.626179758145523e-02, 1.060286158728501e-02, 3.649059599093826e-03, 1.091094859789258e-03, 2.878669030605655e-04, 6.787127071141763e-05, 1.445183147428588e-05, 2.803783030983595e-06, 4.993566755523418e-07, 8.217081825756083e-08, 1.256272852887715e-08, 1.793171271853922e-09, 2.399875611606185e-10, 3.022947185885699e-11, 3.595956577139638e-12, 4.051874513007427e-13, 4.336517947909532e-14, 4.419204929956599e-15, 4.297761311757424e-16, 3.996947010898570e-17, 3.561402525420737e-18, +1.173474836355207e-01, 8.984794274111772e-02, 5.407428452205746e-02, 2.638047264480611e-02, 1.072609003528685e-02, 3.719719049129664e-03, 1.121181692463777e-03, 2.982725697801101e-04, 7.092616506902224e-05, 1.523388288495087e-05, 2.981616990602874e-06, 5.357709594437394e-07, 8.895688093010009e-08, 1.372353614502975e-08, 1.976722264418545e-09, 2.669761290349659e-10, 3.393822684015390e-11, 4.074371822506171e-12, 4.633409744928546e-13, 5.004880461048477e-14, 5.147692847571348e-15, 5.052818991173129e-16, 4.742954662194323e-17, 4.265561561574634e-18, +1.162576621170154e-01, 8.926381180926009e-02, 5.398058411055487e-02, 2.649569075047536e-02, 1.084806428419963e-02, 3.790439923080778e-03, 1.151590062365078e-03, 3.088885717444935e-04, 7.407178883777493e-05, 1.604661587422048e-05, 3.168137300521657e-06, 5.743174298123831e-07, 9.620686199030421e-08, 1.497520893852113e-08, 2.176480283311047e-09, 2.966209813070890e-10, 3.804995295761406e-11, 4.609714423073937e-12, 5.290216070122378e-13, 5.766803715467948e-14, 5.985921190726236e-15, 5.929746384525723e-16, 5.617480620051040e-17, 5.098759610021732e-18, +1.151877936558066e-01, 8.868598660783249e-02, 5.388411627712053e-02, 2.660751163419133e-02, 1.096877493165064e-02, 3.861204172242992e-03, 1.182312743937984e-03, 3.197143862536378e-04, 7.730910481250720e-05, 1.689070380833303e-05, 3.363627310588440e-06, 6.150877893566993e-07, 1.039454775921055e-07, 1.632351751277337e-08, 2.393640531073054e-09, 3.291453005340596e-10, 4.260267011548482e-11, 5.207947121386859e-12, 6.030965559133740e-13, 6.634053871523686e-14, 6.948857781061010e-15, 6.946472351673900e-16, 6.640821603848010e-17, 6.082783155499179e-18, +1.141373419396591e-01, 8.811440647594390e-02, 5.378500873695780e-02, 2.671599467576376e-02, 1.108821359304311e-02, 3.931994142113540e-03, 1.213342459881241e-03, 3.307493981737822e-04, 8.063904147787762e-05, 1.776681709526162e-05, 3.568373713044090e-06, 6.581760053241968e-07, 1.121983426202265e-07, 1.777450635030094e-08, 2.629467858097434e-09, 3.647876551352681e-10, 4.763742220855074e-11, 5.875570002351460e-12, 6.865203632765153e-13, 7.619707056354244e-14, 8.053296614835920e-15, 8.123305616536796e-16, 7.836187713997864e-17, 7.242782818282207e-18, +1.131057892820495e-01, 8.754900952291669e-02, 5.368338462848608e-02, 2.682119885720846e-02, 1.120637286367630e-02, 4.002792573704689e-03, 1.244671888393129e-03, 3.419929019601937e-04, 8.406249260061578e-05, 1.867562272705607e-05, 3.782666398338486e-06, 7.036783005610074e-07, 1.209919836545104e-07, 1.933450161015640e-08, 2.885299610568547e-09, 4.038028077835747e-10, 5.319847000501301e-11, 6.619660687323712e-12, 7.803423904587248e-13, 8.738275814433822e-14, 9.318053891034583e-15, 9.483215985423291e-16, 9.230078304359727e-17, 8.607744026066598e-18, +1.120926358469965e-01, 8.698973279717474e-02, 5.357936266504040e-02, 2.692318272425947e-02, 1.132324628167351e-02, 4.073582604290505e-03, 1.276293670194684e-03, 3.534441037230420e-04, 8.758031686606622e-05, 1.961778382996438e-05, 4.006798307921984e-06, 7.516931424393378e-07, 1.303538513962511e-07, 2.101011891775084e-08, 3.162548530943296e-09, 4.464625506307475e-10, 5.933349292688851e-11, 7.447916866774136e-12, 8.857148244008938e-13, 1.000584580671662e-13, 1.076418210952989e-14, 1.105214459380178e-15, 1.085270078824299e-16, 1.021101662023580e-17, +1.110973989106571e-01, 8.643651244253032e-02, 5.347305728230351e-02, 2.702200435108194e-02, 1.143882829173159e-02, 4.144347767618759e-03, 1.308200415330174e-03, 3.651021233315883e-04, 9.119333755821293e-05, 2.059395922278389e-05, 4.241065284236497e-06, 8.023212296802212e-07, 1.403123325375890e-07, 2.280827113806011e-08, 3.462705709228326e-09, 4.930565674775595e-10, 6.609379993846965e-11, 8.368701262115363e-12, 1.003901233127932e-12, 1.144022341745853e-13, 1.241520361485999e-14, 1.285934572527504e-15, 1.273843662638437e-16, 1.209090988906689e-17, +1.101196121577691e-01, 8.588928384272233e-02, 5.336457878152082e-02, 2.711772130800772e-02, 1.155311420970277e-02, 4.215071993618967e-03, 1.340384709744920e-03, 3.769659965520141e-04, 9.490234228231784e-05, 2.160480298386368e-05, 4.485765918130611e-06, 8.556654770921268e-07, 1.508967610559579e-07, 2.473617612319563e-08, 3.787343583208556e-09, 5.438933229647592e-10, 7.353454974874452e-11, 9.391089108246191e-12, 1.136285698388396e-12, 1.306109495742375e-13, 1.429736504142176e-14, 1.493776292675397e-15, 1.492635909719554e-16, 1.429136013398945e-17, +1.091588250111299e-01, 8.534798175499896e-02, 5.325403346855420e-02, 2.721039063212317e-02, 1.166610018801660e-02, 4.285739607636393e-03, 1.372839121640986e-03, 3.890346772143788e-04, 9.870808272926486e-05, 2.265096402715097e-05, 4.741201393922428e-06, 9.118309982490058e-07, 1.621374289165025e-07, 2.680136442530169e-08, 4.138118985684733e-09, 5.993009788262967e-10, 8.171498052857595e-11, 1.052491824922088e-11, 1.284382554180545e-12, 1.489019818234629e-13, 1.643991419909213e-14, 1.732444233336832e-15, 1.746080782441462e-16, 1.686267853626817e-17, +1.082146019924001e-01, 8.481254043348736e-02, 5.314152378883687e-02, 2.730006880054705e-02, 1.177778318194738e-02, 4.356335329220968e-03, 1.405556207611744e-03, 4.013070394043727e-04, 1.026112744806632e-04, 2.373308568764667e-05, 5.007675332332722e-06, 9.709250861342889e-07, 1.740655961663474e-07, 2.901168696574251e-08, 4.516776236683323e-09, 6.596283372108351e-10, 9.069864933789046e-11, 1.178084194018881e-11, 1.449846760702500e-12, 1.695150687618628e-13, 1.887540102443722e-14, 2.006098631575670e-15, 2.039202543606360e-16, 1.986238780324160e-17, +1.072865221126177e-01, 8.428289374304372e-02, 5.302714845829771e-02, 2.738681170624362e-02, 1.188816091673003e-02, 4.426844270498913e-03, 1.438528518556629e-03, 4.137818796757009e-04, 1.066125968537280e-04, 2.485180531660733e-05, 5.285493631509270e-06, 1.033057191780141e-06, 1.867135004055678e-07, 3.137532265155873e-08, 4.925150278510668e-09, 7.252458110417028e-10, 1.005536814521304e-10, 1.317038444936251e-11, 1.634484944042908e-12, 1.927142927986446e-13, 2.164000431176257e-14, 2.319405077128251e-15, 2.377686215233470e-16, 2.335615683841950e-17, +1.063741782908982e-01, 8.375897526422982e-02, 5.291100259032602e-02, 2.747067463622340e-02, 1.199723185552519e-02, 4.497251934153883e-03, 1.471748605377806e-03, 4.264579192791012e-04, 1.107126927849293e-04, 2.600775388680366e-05, 5.574964306361314e-06, 1.098338900933951e-06, 2.001143656207040e-07, 3.390078593020601e-08, 5.365169851435418e-09, 7.965464213491537e-10, 1.113530297707881e-10, 1.470599955425841e-11, 1.840267132693538e-12, 2.187902117773660e-13, 2.477388603028737e-14, 2.677588959965421e-15, 2.767955454973615e-16, 2.741884350132016e-17, +1.054771767998783e-01, 8.324071839002097e-02, 5.279317781885227e-02, 2.755171225199113e-02, 1.210499516823246e-02, 4.567544211043430e-03, 1.505209024460776e-03, 4.393338064041719e-04, 1.149121687513700e-04, 2.720155560811893e-05, 5.876397326420727e-06, 1.166883908786589e-06, 2.143024103676556e-07, 3.659693427363687e-08, 5.838860707698643e-09, 8.739468214721787e-10, 1.231747444839711e-10, 1.640113202681015e-11, 2.069339222714637e-12, 2.480621448604476e-13, 2.832157512867473e-14, 3.086495013261083e-15, 3.217258522556111e-16, 3.213565640401483e-17, +1.045951367365417e-01, 8.272805641480951e-02, 5.267376241762353e-02, 2.762997857210708e-02, 1.221145070114872e-02, 4.637707377475605e-03, 1.538902342941252e-03, 4.524081184303565e-04, 1.192115947288355e-04, 2.843382755374485e-05, 6.190104452443771e-06, 1.238807992799408e-06, 2.293128552918055e-07, 3.947297558285191e-08, 6.348348861470309e-09, 9.578883479902003e-10, 1.361022531656592e-10, 1.827028220217646e-11, 2.324036204115989e-12, 2.808806221991320e-13, 3.233238282599894e-14, 3.552652352697643e-15, 3.733763059155292e-16, 3.760344763512949e-17, +1.037276895171424e-01, 8.222092261623058e-02, 5.255284141575403e-02, 2.770552695673468e-02, 1.231659894746715e-02, 4.707728092169458e-03, 1.572821143760915e-03, 4.656793641835879e-04, 1.236115041854329e-04, 2.970517929720627e-05, 6.516399071964220e-06, 1.314228983669206e-06, 2.451819299742280e-07, 4.253847550412311e-08, 6.895863872293499e-09, 1.048838098207854e-09, 1.502246514546004e-10, 2.032907372614967e-11, 2.606896181729272e-12, 3.176300074809836e-13, 3.686085148894753e-14, 4.083345438068735e-15, 4.326660455957411e-16, 4.393214931181413e-17, +1.028744783950055e-01, 8.171925033030206e-02, 5.243049670963385e-02, 2.777841009405322e-02, 1.242044101861067e-02, 4.777593392922325e-03, 1.606958030514883e-03, 4.791459861952700e-04, 1.281123941097272e-04, 3.101621256042150e-05, 6.855596034005318e-06, 1.393266734472594e-06, 2.619468790938644e-07, 4.580336464818830e-08, 7.483742159484760e-09, 1.147290033978840e-09, 1.656370044756885e-10, 2.259432457601674e-11, 2.920675224539171e-12, 3.587313027761313e-13, 4.196723929861020e-14, 4.686691409254878e-15, 5.006280644620816e-16, 5.124636793930753e-17, +1.020351580000580e-01, 8.122297302033844e-02, 5.230680717127934e-02, 2.784867998842071e-02, 1.252297861639259e-02, 4.847290693005737e-03, 1.641305632093999e-03, 4.928063629604328e-04, 1.327147250722654e-04, 3.236752087298121e-05, 7.208011483154531e-06, 1.476043088033219e-06, 2.796459678965618e-07, 4.927794570382195e-08, 8.114430344889711e-09, 1.253766111617529e-09, 1.824406591461578e-10, 2.508412144952676e-11, 3.268363078109481e-12, 4.046451454347528e-13, 4.771804301655001e-14, 5.371724275864760e-15, 5.784218201857783e-16, 5.968715170965052e-17, +1.012093938990012e-01, 8.073202434006753e-02, 5.218184875321113e-02, 2.791638795017771e-02, 1.262421400599575e-02, 4.916807777310960e-03, 1.675856607125186e-03, 5.066588111920489e-04, 1.374189213193689e-04, 3.375968924280369e-05, 7.573962693200839e-06, 1.562681842557194e-06, 2.983184869628893e-07, 5.297290043730790e-08, 8.790488621327901e-09, 1.368817437609669e-09, 2.007435675020411e-10, 2.781789761627666e-11, 3.653199775384526e-12, 4.558750071213074e-13, 5.418656126893893e-14, 6.148486468170496e-15, 6.673470723131394e-16, 6.941394709938614e-17, +1.003968621750960e-01, 8.024633819135066e-02, 5.205569458994495e-02, 2.798158458698825e-02, 1.272414998976066e-02, 4.986132798264149e-03, 1.710603648213344e-03, 5.207015880686700e-04, 1.422253708980722e-04, 3.519329383830303e-05, 7.953767900530540e-06, 1.653308715583873e-06, 3.180047562676678e-07, 5.689929656947644e-08, 9.514594144000221e-09, 1.493025449796421e-09, 2.206606211710906e-10, 3.081651432533847e-11, 4.078693181763980e-12, 5.129706054052729e-13, 6.145350087931256e-14, 7.028128286434180e-15, 7.688590486559805e-16, 8.060676243435522e-17, +9.959724902658827e-02, 7.976584877688027e-02, 5.192841509618175e-02, 2.804431979661956e-02, 1.282278988177199e-02, 5.055254271530322e-03, 1.745539485988411e-03, 5.349328934726814e-04, 1.471344258110764e-04, 3.666890168218364e-05, 8.347746137472945e-06, 1.748051306300778e-06, 3.387461285251557e-07, 6.106859452211341e-08, 1.028954444207558e-08, 1.627003123668822e-09, 2.423139971087474e-10, 3.410234586231429e-11, 4.548637510938625e-12, 5.765315386630650e-13, 6.960762889489191e-14, 8.023015816337981e-15, 8.845850497657506e-16, 9.346855748165081e-17, +9.881025038285256e-02, 7.929049064820420e-02, 5.180007806178290e-02, 2.810464276106697e-02, 1.292013748323172e-02, 5.124161071524382e-03, 1.780656892961327e-03, 5.493508722166236e-04, 1.521464022005844e-04, 3.818707035695243e-05, 8.756217065782770e-06, 1.847039056272944e-06, 3.605849918148403e-07, 6.549265402570843e-08, 1.111826084762129e-08, 1.771396203372983e-09, 2.658335147037972e-10, 3.769936834821805e-11, 5.067132848533944e-12, 6.472111553809190e-13, 7.874647306836179e-14, 9.146847910002976e-15, 1.016342607862166e-15, 1.082278796082170e-16, +9.803557153738396e-02, 7.882019874940359e-02, 5.167074874361711e-02, 2.816260194193581e-02, 1.301619705860717e-02, 5.192842426746662e-03, 1.815948687192807e-03, 5.639536162551915e-04, 1.572615805598912e-04, 3.974834772222070e-05, 9.179500810441406e-06, 1.950403208638429e-06, 3.835647714837804e-07, 7.018374058068185e-08, 1.200379193899411e-08, 1.926884456989824e-09, 2.913570043500818e-10, 4.163325237164632e-11, 5.638605721136532e-12, 7.257206692832463e-13, 8.897707367641312e-14, 1.041478286502288e-14, 1.166159324259410e-15, 1.251417686163139e-16, +9.727292679681152e-02, 7.835490845672709e-02, 5.154048995436377e-02, 2.821824507699580e-02, 1.311097331254068e-02, 5.261287914959592e-03, 1.851407735778908e-03, 5.787391668806391e-04, 1.624802059715950e-04, 4.135327164384598e-05, 9.617917793954212e-06, 2.058276765822928e-06, 4.077299313224313e-07, 7.515453176440972e-08, 1.294931699576535e-08, 2.094182955616897e-09, 3.190306875700471e-10, 4.593145954461002e-11, 6.267830748772579e-12, 8.128335320447525e-13, 1.004167896781518e-13, 1.184357546805510e-14, 1.336294517379524e-15, 1.444989540320274e-16, +9.652203914515441e-02, 7.789455561446834e-02, 5.140936214835806e-02, 2.827161917782927e-02, 1.320447136750770e-02, 5.329487458221292e-03, 1.887026958157459e-03, 5.937055168994826e-04, 1.678024883713117e-04, 4.300236973494619e-05, 1.007178857131592e-05, 2.170794445827609e-06, 4.331259740118572e-07, 8.041812337656099e-08, 1.395814946221485e-08, 2.274043375744194e-09, 3.490095687650399e-10, 5.062334307115951e-11, 6.959953419367560e-12, 9.093900756769175e-13, 1.131941623405734e-13, 1.345172510481082e-14, 1.529262821873541e-15, 1.666233703881662e-16, +9.578263992257842e-02, 7.743907656734916e-02, 5.127742350456166e-02, 2.832277052849697e-02, 1.329669674220937e-02, 5.397431317791147e-03, 1.922799329239522e-03, 6.088506127885058e-04, 1.732286028357688e-04, 4.469615910879892e-05, 1.054143366581103e-05, 2.288092637145328e-06, 4.597994408411959e-07, 8.598803541546158e-08, 1.503374041639460e-08, 2.467255324380478e-09, 3.814578386561139e-10, 5.574025241654021e-11, 7.720514024139179e-12, 1.016302437009615e-12, 1.274498395845826e-13, 1.525963567477069e-14, 1.747859888195692e-15, 1.918780179112654e-16, +9.505446851795438e-02, 7.698840818965891e-02, 5.114473000674206e-02, 2.837174468515122e-02, 1.338765533068529e-02, 5.465110088921628e-03, 1.958717882370100e-03, 6.241723568282236e-04, 1.787586898941769e-04, 4.643514614362133e-05, 1.102717340581086e-05, 2.410309352361236e-06, 4.877979106951858e-07, 9.187821787841344e-08, 1.617968204173252e-08, 2.674647686352031e-09, 4.165492894676945e-10, 6.131564216307201e-11, 8.555472793260899e-12, 1.134559777016221e-12, 1.433375644334063e-13, 1.728978808662751e-14, 1.995190341204236e-15, 2.206691979981083e-16, +9.433727207455363e-02, 7.654248791137964e-02, 5.101133552094250e-02, 2.841858647652822e-02, 1.347735338213166e-02, 5.532514695549932e-03, 1.994775712122358e-03, 6.396686092120724e-04, 1.843928558617751e-04, 4.821982625920918e-05, 1.152932776272319e-05, 2.537584180494639e-06, 5.171699983124910e-07, 9.810305637911664e-08, 1.739971109812282e-08, 2.897089993161563e-09, 4.544677418948141e-10, 6.738518513724787e-11, 9.471236271479002e-12, 1.265233808054822e-12, 1.610252310755892e-13, 1.956692614932106e-14, 2.274698166003197e-15, 2.534511549542866e-16, +9.363080520825191e-02, 7.610125374151366e-02, 5.087729187032287e-02, 2.846334000525633e-02, 1.356579748141006e-02, 5.599636384902300e-03, 2.030965976929657e-03, 6.553371901297279e-04, 1.901311731944663e-04, 5.005068370539680e-05, 1.204821619024540e-05, 2.670058238139586e-06, 5.479653518164733e-07, 1.046773775755713e-07, 1.869771238942770e-08, 3.135493812761613e-09, 4.954074838827477e-10, 7.398688989069914e-11, 1.047468497367077e-11, 1.409484642418555e-12, 1.806960121869403e-13, 2.211825671358120e-14, 2.590199699301462e-15, 2.907311576700012e-16, +9.293482973764515e-02, 7.566464428881489e-02, 5.074264890745096e-02, 2.850604864991997e-02, 1.365299453023164e-02, 5.666466722023168e-03, 2.067281901559736e-03, 6.711758818230607e-04, 1.959736808634691e-04, 5.192819136228470e-05, 1.258415746506593e-05, 2.807874119462260e-06, 5.802346495209521e-07, 1.116164544020736e-07, 2.007772222430005e-08, 3.390814159564047e-09, 5.395737212358250e-10, 8.116122261567833e-11, 1.157320236059420e-11, 1.568566975904055e-12, 2.025495612897148e-13, 2.497366496013148e-14, 2.945919415057906e-15, 3.330750572307769e-16, +9.224911442551280e-02, 7.523259878011221e-02, 5.060745458412230e-02, 2.854675506782223e-02, 1.373895172900133e-02, 5.732997584240676e-03, 2.103716779435382e-03, 6.871824306133729e-04, 2.019203847489258e-04, 5.385281055216658e-05, 1.313746952915364e-05, 2.951175845113694e-06, 6.140295960143499e-07, 1.189360110991636e-07, 2.154393186722485e-08, 3.664050923975288e-09, 5.871830400599200e-10, 8.895123357356137e-11, 1.277470517529832e-11, 1.743836620417860e-12, 2.268032940627927e-13, 2.816594577311748e-14, 3.346528704111551e-15, 3.811133589071830e-16, +9.157343473109215e-02, 7.480505707640023e-02, 5.047175501878433e-02, 2.858550119839258e-02, 1.382367655930664e-02, 5.799221155579441e-03, 2.140263974805935e-03, 7.033545488986418e-04, 2.079712580514236e-04, 5.582499086307346e-05, 1.370846933376877e-05, 3.100108810116645e-06, 6.494029175264932e-07, 1.266522280356309e-07, 2.310069097667020e-08, 3.956250320715854e-09, 6.384638810307232e-10, 9.740268811258213e-11, 1.408767518083769e-11, 1.936757399945776e-12, 2.536937526535655e-13, 3.173105218090755e-14, 3.797187858872315e-15, 4.355478495423137e-16, +9.090757257265547e-02, 7.438195968686179e-02, 5.033559456163991e-02, 2.862232826718910e-02, 1.390717676703562e-02, 5.865129921130825e-03, 2.176916924773963e-03, 7.196899171196377e-04, 2.141262417204054e-04, 5.784516998383944e-05, 1.429747268532359e-05, 3.254819730785757e-06, 6.864083565831388e-07, 1.347817463169431e-07, 2.475251102723615e-08, 4.268506355152533e-09, 6.936570254673271e-10, 1.065642023485700e-10, 1.552119234006311e-11, 2.148908424509092e-12, 2.834780571804550e-13, 3.570836189115405e-14, 4.303591485977814e-15, 4.971588240628567e-16, +9.025131609990869e-02, 7.396324778097428e-02, 5.019901585750386e-02, 2.865727679044730e-02, 1.398946034610833e-02, 5.930716661390439e-03, 2.213669141181466e-03, 7.361861856938581e-04, 2.203852448984561e-04, 5.991377355058082e-05, 1.490479409321508e-05, 3.415456590740248e-06, 7.251006659541204e-07, 1.433416721747228e-07, 2.650406871269168e-08, 4.601962306842127e-09, 7.530160931779643e-10, 1.164873835798832e-10, 1.708496947834169e-11, 2.381991757023430e-12, 3.164354487543704e-13, 4.014096299289093e-14, 4.872017582112220e-15, 5.668129576833615e-16, +8.960445947575328e-02, 7.354886319884295e-02, 5.006205990648286e-02, 2.869038658013066e-02, 1.407053552280639e-02, 5.995974446571959e-03, 2.250514212359875e-03, 7.528409769163339e-04, 2.267481453804826e-04, 6.203121500446885e-05, 1.553074661974640e-05, 3.582168586068393e-06, 7.655356019017667e-07, 1.523495811321605e-07, 2.836020932679596e-08, 4.957812229457516e-09, 8.168080520319696e-10, 1.272269755050077e-10, 1.878938847009322e-11, 2.637840488260475e-12, 3.528689284877506e-13, 4.507595994546043e-14, 5.509380520940699e-15, 6.454718733579984e-16, +8.896680266697786e-02, 7.313874845989443e-02, 4.992476612255025e-02, 2.872169674944044e-02, 1.415041074068492e-02, 6.060896630905864e-03, 2.287445804748173e-03, 7.696518868264576e-04, 2.332147900868091e-04, 6.419789546066492e-05, 1.617564173224787e-05, 3.755106069703085e-06, 8.077699167370219e-07, 1.618235219405313e-07, 3.032595011881105e-08, 5.337302466239320e-09, 8.853137391991378e-10, 1.388410083084364e-10, 2.064553799001422e-11, 2.918427235389030e-12, 3.931069971010149e-13, 5.056480102219375e-14, 6.223288212343722e-15, 7.342014571639364e-16, +8.833815124346769e-02, 7.273284677005402e-02, 4.978717239008213e-02, 2.875124571874467e-02, 1.422909464605162e-02, 6.125476846931134e-03, 2.324457664383341e-03, 7.866164870400660e-04, 2.397849955492429e-04, 6.641420358827621e-05, 1.683978915750290e-05, 3.934420495067529e-06, 8.518613506913889e-07, 1.717820202822412e-07, 3.240648362062672e-08, 5.741733180090119e-09, 9.588283939847188e-10, 1.513909536774420e-10, 2.266525286979543e-11, 3.225873079839293e-12, 4.375054998780313e-13, 5.666362842599061e-14, 7.022103708844586e-15, 8.341819775795760e-16, +8.771831618554012e-02, 7.233110202752301e-02, 4.964931511842275e-02, 2.877907122188902e-02, 1.430659607399763e-02, 6.189708999787495e-03, 2.361543618267375e-03, 8.037323265461126e-04, 2.464585484091828e-04, 6.868051550118127e-05, 1.752349673857848e-05, 4.120264359050001e-06, 8.978686231135631e-07, 1.822440822361263e-07, 3.460718094243863e-08, 6.172459897403254e-09, 1.037662202175329e-09, 1.649418848092439e-10, 2.486115510102385e-11, 3.562456960492517e-12, 4.864495818645163e-13, 6.343365234424037e-14, 7.915011548316989e-15, 9.467190680535732e-16, +8.710711369903623e-02, 7.193345882726405e-02, 4.951122929454283e-02, 2.880521031285392e-02, 1.438292403496486e-02, 6.253587261515280e-03, 2.398697575615016e-03, 8.209969334673345e-04, 2.532352059268588e-04, 7.099719465956443e-05, 1.822707029415417e-05, 4.312791144366235e-06, 9.458514230002605e-07, 1.932291975009876e-07, 3.693359503394228e-08, 6.630895064693805e-09, 1.122140851798014e-09, 1.795626414648082e-10, 2.724669652479237e-11, 3.930625538446235e-12, 5.403557583458121e-13, 7.094155026186215e-14, 8.912089136740115e-15, 1.073255635850778e-15, +8.650436503781372e-02, 7.153986246429463e-02, 4.937294853385461e-02, 2.882969937272487e-02, 1.445808770183487e-02, 6.317106065369519e-03, 2.435913528986304e-03, 8.384078167844056e-04, 2.601146965008212e-04, 7.336459178199023e-05, 1.895081348043803e-05, 4.512155261367611e-06, 9.958703988714055e-07, 2.047573423736406e-07, 3.939146390803239e-08, 7.118509617076674e-09, 1.212606100181732e-09, 1.953260001221459e-10, 2.983620324832191e-11, 4.333003549842922e-12, 5.996741057831531e-13, 7.925989290359910e-14, 1.002438348994188e-14, 1.215384763913170e-15, +8.590989633330798e-02, 7.115025893588313e-02, 4.923450512924451e-02, 2.885257411694455e-02, 1.453209639752427e-02, 6.380260100154423e-03, 2.473185555308003e-03, 8.559624680231413e-04, 2.670967201968144e-04, 7.578304476784109e-05, 1.969502765575244e-05, 4.718511989352887e-06, 1.047987148000466e-06, 2.168489824780320e-07, 4.198671382402859e-08, 7.636834557614739e-09, 1.309416352197485e-09, 2.123088492784782e-10, 3.264492182862999e-11, 4.772404663476446e-12, 6.648905785300986e-13, 8.846759823004524e-14, 1.126399366893922e-14, 1.374863676391478e-15, +8.532353843084148e-02, 7.076459494273507e-02, 4.909593009838325e-02, 2.887386960281764e-02, 1.460495958307206e-02, 6.443044304584093e-03, 2.510507816787925e-03, 8.736583629043982e-04, 2.741809492851974e-04, 7.825287862993440e-05, 2.046001174786731e-05, 4.932017417440698e-06, 1.102264205011312e-06, 2.295250752422682e-07, 4.472546242748164e-08, 8.187462546539856e-09, 1.412947249540423e-09, 2.305923699470273e-10, 3.568906726295573e-11, 5.251842860105466e-12, 7.365294567930774e-13, 9.865041496618333e-14, 1.264415925965009e-14, 1.553628842590462e-15, +8.474512673238008e-02, 7.038281788925040e-02, 4.895725322937138e-02, 2.889362023724076e-02, 1.467668684620438e-02, 6.505453861674750e-03, 2.547874561726030e-03, 8.914929629563759e-04, 2.813670287860916e-04, 8.077440543712841e-05, 2.124606212415273e-05, 5.152828385059360e-06, 1.158765029853529e-06, 2.428070721206764e-07, 4.761402184365330e-08, 8.772049499329649e-09, 1.523592270904280e-09, 2.502622213904608e-10, 3.898587282527422e-11, 5.774544350605421e-12, 8.151559314417813e-13, 1.099014371964290e-13, 1.417935526441722e-14, 1.753812298331547e-15, +8.417450104544752e-02, 7.000487588292834e-02, 4.881850312477660e-02, 2.891185978463156e-02, 1.474728789036233e-02, 6.567484193173479e-03, 2.585280125226249e-03, 9.094637170890942e-04, 2.886545770214650e-04, 8.334792426671947e-05, 2.205347246461811e-05, 5.381102422109983e-06, 1.217553995168677e-06, 2.567169205583122e-07, 5.065890172180333e-08, 9.392316192605499e-09, 1.641763342885735e-09, 2.714087321291917e-10, 4.255364178780358e-11, 6.343960050280533e-12, 9.013788314162349e-13, 1.223216516162821e-13, 1.588539378995019e-14, 1.977759268174587e-15, +8.361150543792507e-02, 6.963071773299051e-02, 4.867970724411712e-02, 2.892862137503302e-02, 1.481677252417881e-02, 6.629130954028107e-03, 2.622718929812723e-03, 9.275680631308848e-04, 2.960431861733788e-04, 8.597372116642990e-05, 2.288253363789904e-05, 5.616997688858032e-06, 1.278696373060453e-06, 2.712770656956028e-07, 5.386681222746345e-08, 1.005004987679996e-08, 1.767891461443520e-09, 2.941270962588008e-10, 4.641180106592335e-11, 6.963778626833549e-12, 9.958534996175758e-13, 1.360205190876284e-13, 1.777953293395981e-14, 2.228047176559527e-15, +8.305598809847667e-02, 6.926029294828803e-02, 4.854089194484477e-02, 2.894393751237044e-02, 1.488515065139077e-02, 6.690390026902507e-03, 2.660185485954291e-03, 9.458034293267960e-04, 3.035324228476546e-04, 8.865206912577801e-05, 2.373353358024880e-05, 5.860672915607767e-06, 1.342258321282236e-06, 2.865104518111078e-07, 5.724466697992477e-08, 1.074710589452664e-08, 1.902427323724464e-09, 3.185175751068132e-10, 5.058095682438653e-11, 7.637940139653554e-12, 1.099284823308669e-12, 1.511165922024837e-13, 1.988059329092763e-14, 2.507506140732277e-15, +8.250780120235121e-02, 6.889355173455455e-02, 4.840208252187864e-02, 2.895784008283953e-02, 1.495243226117289e-02, 6.751257516741171e-03, 2.697674392500799e-03, 9.641672357988601e-04, 3.111218286422339e-04, 9.138322805661938e-05, 2.460675717758578e-05, 6.112287342213174e-06, 1.408306868855915e-06, 3.024405235006519e-07, 6.079958593221763e-08, 1.148540930357091e-08, 2.045841970056204e-09, 3.446857042549420e-10, 5.508295208211549e-11, 8.370650288230199e-12, 1.212430425188464e-12, 1.677381706184742e-13, 2.220908251612202e-14, 2.819241043310619e-15, +8.196680078232728e-02, 6.853044499106169e-02, 4.826330324573958e-02, 2.897036036340630e-02, 1.501862741887988e-02, 6.811729745386784e-03, 2.735180337034859e-03, 9.826568959682318e-04, 3.188109207195344e-04, 9.416744478264390e-05, 2.550248615064344e-05, 6.372000657477973e-06, 1.476909901136330e-06, 3.190912265913713e-07, 6.453889819091647e-08, 1.226695650340765e-08, 2.198627435893929e-09, 3.727425059486960e-10, 5.994092635222876e-11, 9.166395287636151e-12, 1.336104021440251e-12, 1.860239959885599e-13, 2.478732840613976e-14, 3.166655287528912e-15, +8.143284660457649e-02, 6.817092430673032e-02, 4.812457739933368e-02, 2.898152903039991e-02, 1.508374625718396e-02, 6.871803246254041e-03, 2.772698096142521e-03, 1.001269817939256e-03, 3.265991923821236e-04, 9.700495303761020e-05, 2.642099894326464e-05, 6.639972938496584e-06, 1.548136144336063e-06, 3.364870087894894e-07, 6.847014477316021e-08, 1.309381686413987e-08, 2.361297413496344e-09, 4.028047069119606e-10, 6.517937735324686e-11, 1.002995738913739e-11, 1.471178953188484e-12, 2.061239883673826e-13, 2.763962097391472e-14, 3.553476343577641e-15, +8.090580204923133e-02, 6.781494195574747e-02, 4.798592731343156e-02, 2.899137616818150e-02, 1.514779896759491e-02, 6.931474759062689e-03, 2.810222535606298e-03, 1.020003405845558e-03, 3.344861136510592e-04, 9.989597347209389e-05, 2.736257061387726e-05, 6.916364589986651e-06, 1.622055149525641e-06, 3.546528200609161e-07, 7.260108129833773e-08, 1.396813435674213e-08, 2.534387923094040e-09, 4.349949615797805e-10, 7.082422482667426e-11, 1.096643106409310e-11, 1.618591897931368e-12, 2.282000260370971e-13, 3.079236401629072e-14, 3.983783200028840e-15, +8.038553399545546e-02, 6.746245089273502e-02, 4.784737440088871e-02, 2.899993127787272e-02, 1.521079579235029e-02, 6.990741224632737e-03, 2.847748610523909e-03, 1.038855061158328e-03, 3.424711318462677e-04, 1.028407136685285e-04, 2.832747273018395e-05, 7.201336283662997e-06, 1.698737276124637e-06, 3.736141127440334e-07, 7.693968061195227e-08, 1.489212918348408e-08, 2.718457993301675e-09, 4.694420807581520e-10, 7.690287649535350e-11, 1.198123986939321e-11, 1.779346767646824e-12, 2.524267707565908e-13, 3.427423669289969e-14, 4.462035840113916e-15, +7.987191271082310e-02, 6.711340474751191e-02, 4.770893918965124e-02, 2.900722328612913e-02, 1.527274701666340e-02, 7.049599779744059e-03, 2.885271365355943e-03, 1.057822183956955e-03, 3.505536721683508e-04, 1.058393681643090e-04, 2.931597326709345e-05, 7.495048897701528e-06, 1.778253674899330e-06, 3.933968413943018e-07, 8.149413533924132e-08, 1.586809940740110e-08, 2.914090350513770e-09, 5.062812657150984e-10, 8.344429619612695e-11, 1.308015401275044e-11, 1.954518800397336e-12, 2.789925404995215e-13, 3.811636565621280e-14, 4.993106868598780e-15, +7.936481174482268e-02, 6.676775781949117e-02, 4.757064135458880e-02, 2.901328055394450e-02, 1.533366296131711e-02, 7.108047752062906e-03, 2.922785933905691e-03, 1.076902174162270e-03, 3.587331382812401e-04, 1.088921184827332e-04, 3.032833650791770e-05, 7.797663456340807e-06, 1.860676270483014e-06, 4.140274623605901e-07, 8.627286036619915e-08, 1.689842257967340e-08, 3.121892117012574e-09, 5.456543477027641e-10, 9.047907421943917e-11, 1.426930863621650e-11, 2.145258852384630e-12, 3.081002318085924e-13, 4.235250829423693e-14, 5.582315421185734e-15, +7.886410782631049e-02, 6.642546507174778e-02, 4.743249974819640e-02, 2.901813088547301e-02, 1.539355397559212e-02, 7.166082655137193e-03, 2.960287539234215e-03, 1.096092432732650e-03, 3.670089128951394e-04, 1.119991331715499e-04, 3.136482294885398e-05, 8.109341069667609e-06, 1.946077743435222e-06, 4.355329330933875e-07, 9.128449524571643e-08, 1.798555736376961e-08, 3.342495517505382e-09, 5.877100329056299e-10, 9.803949988755083e-11, 1.555522283632685e-11, 2.352797897527614e-12, 3.399682939558383e-13, 4.701924766940470e-14, 6.235463494763875e-15, +7.836968076474624e-02, 6.608648212479200e-02, 4.729453243020457e-02, 2.902180153685738e-02, 1.545243043051778e-02, 7.223702183462390e-03, 2.997771493513656e-03, 1.115390362823277e-03, 3.753803583492131e-04, 1.151605678488844e-04, 3.242568920676721e-05, 8.430242873631802e-06, 2.034531511856342e-06, 4.579407111853183e-07, 9.653790652662438e-08, 1.913204515520753e-08, 3.576558593797769e-09, 6.326041528052808e-10, 1.061596364020267e-10, 1.694481943929548e-11, 2.578451741756477e-12, 3.748317571613756e-13, 5.215619975974394e-14, 6.958874843432474e-15, +7.788141335505212e-02, 6.575076525008000e-02, 4.715675669613623e-02, 2.902431922505177e-02, 1.551030271243490e-02, 7.280904207619661e-03, 3.035233197821775e-03, 1.134793370908898e-03, 3.838468171935070e-04, 1.183765652563100e-04, 3.351118793028392e-05, 8.760529970334574e-06, 2.126111712574376e-06, 4.812787531446298e-07, 1.020421900035035e-07, 2.034051169578177e-08, 3.824765927298674e-09, 6.804999199474581e-10, 1.148753979901009e-10, 1.844544554968041e-11, 2.823625959332049e-12, 4.129433171860029e-13, 5.780623363140584e-14, 7.759436592036678e-15, +7.739919128594314e-02, 6.541827136329174e-02, 4.701918910484786e-02, 2.902571013662929e-02, 1.556718121685946e-02, 7.337686769487623e-03, 3.072668141880537e-03, 1.154298867870439e-03, 3.924076127696088e-04, 1.216472553188371e-04, 3.462156771420560e-05, 9.100363368633046e-06, 2.220893181920752e-06, 5.055755129025807e-07, 1.078066728851970e-07, 2.161366868110819e-08, 4.087829369043091e-09, 7.315681890923935e-10, 1.242246293784191e-10, 2.006489389092182e-11, 3.089821058612361e-12, 4.545744786761786e-13, 6.401570519507235e-14, 8.644643725984110e-15, +7.692290305158411e-02, 6.508895801740301e-02, 4.688184550509042e-02, 2.902599993656424e-02, 1.562307634263661e-02, 7.394048077528912e-03, 3.110071903741529e-03, 1.173904270045849e-03, 4.010620497895711e-04, 1.249727552115854e-04, 3.575707301724466e-05, 9.449903925102655e-06, 2.318951436112160e-06, 5.308599400558814e-07, 1.138409158800366e-07, 2.295431536033345e-08, 4.366488776907803e-09, 7.859877237246008e-10, 1.342471876214906e-10, 2.181142495611558e-11, 3.378637884797098e-12, 5.000167597031163e-13, 7.083470522263225e-14, 9.622646623354714e-15, +7.645243986643553e-02, 6.476278339557746e-02, 4.674474106112476e-02, 2.902521377698054e-02, 1.567799848637493e-02, 7.449986502152651e-03, 3.147440149420926e-03, 1.193607000245609e-03, 4.098094149126485e-04, 1.283531694329134e-04, 3.691794408308338e-05, 9.809312285397957e-06, 2.420362651255696e-06, 5.571614778455995e-07, 1.201547151958809e-07, 2.436534012686166e-08, 4.661512759686401e-09, 8.439454678935754e-10, 1.449850263109958e-10, 2.369378998732977e-11, 3.691783267286088e-12, 5.495829600010856e-13, 7.831732232482064e-14, 1.070230180277835e-14, +7.598769558315616e-02, 6.443970630390224e-02, 4.660789027742566e-02, 2.902337630585839e-02, 1.573195803715078e-02, 7.505500571153663e-03, 3.184768632486596e-03, 1.213404488733335e-03, 4.186489773194185e-04, 1.317885898837735e-04, 3.810441686475307e-05, 1.017874882605092e-05, 2.525203642994524e-06, 5.845100608741607e-07, 1.267581044531337e-07, 2.584972209895112e-08, 4.973699427680071e-09, 9.056368233519765e-10, 1.564822821908338e-10, 2.572125480169507e-11, 4.031075919388770e-12, 6.036084954732542e-13, 8.652192161522304e-14, 1.189322606823322e-14, +7.552856661343754e-02, 6.411968616398876e-02, 4.647130702250610e-02, 2.902051167569114e-02, 1.578496537147315e-02, 7.560588965229161e-03, 3.222053193599917e-03, 1.233294174171922e-03, 4.275799892828726e-04, 1.352790959530643e-04, 3.931672295232556e-05, 1.055837359674450e-05, 2.633551845811444e-06, 6.129361125623025e-07, 1.336613565090002e-07, 2.741053268903903e-08, 5.303877149451791e-09, 9.712659319530542e-10, 1.687853642015054e-10, 2.790362448240413e-11, 4.398452598218188e-12, 6.624528015966174e-13, 9.551143981115605e-14, 1.320585423981618e-14, +7.507495185165002e-02, 6.380268300545967e-02, 4.633500455189338e-02, 2.901664355208624e-02, 1.583703084849944e-02, 7.615250513573470e-03, 3.259289760014727e-03, 1.253273504535714e-03, 4.366016867360910e-04, 1.388247546087545e-04, 4.055508950390816e-05, 1.094834626309810e-05, 2.745485292007808e-06, 6.424705423480680e-07, 1.408749851913157e-07, 2.905093716065716e-08, 5.652905314382928e-09, 1.041045963264271e-09, 1.819430449760933e-10, 3.025126895264177e-11, 4.795974532695441e-12, 7.265008084205979e-13, 1.053536975474357e-13, 1.465150066765331e-14, +7.462675260118568e-02, 6.348865745833888e-02, 4.619899553028767e-02, 2.901179512230330e-02, 1.588816480549316e-02, 7.669484189551280e-03, 3.296474345035838e-03, 1.273339937989204e-03, 4.457132898361268e-04, 1.424256204945539e-04, 4.181973917992898e-05, 1.134882605000043e-05, 2.861082590375238e-06, 6.731447426301336e-07, 1.484097469403717e-07, 3.077419617180802e-08, 6.021675100662848e-09, 1.115199407349219e-09, 1.960065548087172e-10, 3.277514945033245e-11, 5.225834127677692e-12, 7.961644899166893e-13, 1.161217297049102e-13, 1.624242473445602e-14, +7.418387250339044e-02, 6.317757074536473e-02, 4.606329205293137e-02, 2.900598910372423e-02, 1.593837755351451e-02, 7.723289106449664e-03, 3.333603047439381e-03, 1.293490943732756e-03, 4.549140035237497e-04, 1.460817360319044e-04, 4.311089008069562e-05, 1.175997168552328e-05, 2.980422904577607e-06, 7.049905854579729e-07, 1.562766423572395e-07, 3.258366730367811e-08, 6.411110248334179e-09, 1.193958372665079e-09, 2.110296781149230e-10, 3.548684592143698e-11, 5.690361952305413e-12, 8.718844904989942e-13, 1.278941345818564e-13, 1.799190056078363e-14, +7.374621746897907e-02, 6.286938467423947e-02, 4.592790566621820e-02, 2.899924775224958e-02, 1.598767937333514e-02, 7.776664513309116e-03, 3.370672050857234e-03, 1.313724002815890e-03, 4.642030180787159e-04, 1.497931315270741e-04, 4.442875568721024e-05, 1.218194134544944e-05, 3.103585931260796e-06, 7.380404189715728e-07, 1.644869176571872e-07, 3.448280657357448e-08, 6.822167837008848e-09, 1.277564889018125e-09, 2.270688524020064e-10, 3.839858534935829e-11, 6.192034020741885e-12, 9.541318315976153e-13, 1.407554427629060e-13, 1.991429113584998e-14, +7.331369561183487e-02, 6.256406162983155e-02, 4.579284738756880e-02, 2.899159287061688e-02, 1.603608051156908e-02, 7.829609790833643e-03, 3.407677623127708e-03, 1.334036608918657e-03, 4.735795096702512e-04, 1.535598252831331e-04, 4.577354480521748e-05, 1.261489259844578e-05, 3.230651877907673e-06, 7.723270635935970e-07, 1.730520660268637e-07, 3.647516993098018e-08, 7.255839067862820e-09, 1.366271215514909e-09, 2.441832697657770e-10, 4.152327103782014e-11, 6.733479373550124e-12, 1.043409701228478e-12, 1.547965065670513e-13, 2.202512710570575e-14, +7.288621718509930e-02, 6.226156456634402e-02, 4.565812772459898e-02, 2.898304581663628e-02, 1.608359117701095e-02, 7.882124447379938e-03, 3.444616115614535e-03, 1.354426269101662e-03, 4.830426409024451e-04, 1.573818237165936e-04, 4.714546151246276e-05, 1.305898235191168e-05, 3.361701440455651e-06, 8.078838079770900e-07, 1.819838288840131e-07, 3.856441473563510e-08, 7.713150049510441e-09, 1.460340153442016e-09, 2.624349809287205e-10, 4.487451286436960e-11, 7.317487968018654e-12, 1.140255329564218e-12, 1.701149109834673e-13, 2.434119045984036e-14, +7.246369451945861e-02, 6.196185699946040e-02, 4.552375669360625e-02, 2.897362751133992e-02, 1.613022153717445e-02, 7.934208115025428e-03, 3.481483962496226e-03, 1.374890504525292e-03, 4.925915613542850e-04, 1.612591214785025e-04, 4.854470510913325e-05, 1.351436679853170e-05, 3.496815780694236e-06, 8.447444047120029e-07, 1.912941970385706e-07, 4.075430121656128e-08, 8.195162587353188e-09, 1.560045364002557e-09, 2.818890018329687e-10, 4.846665852142059e-11, 7.947018885808786e-12, 1.245241953571260e-12, 1.868154070313692e-13, 2.688060336667768e-14, +7.204604196354375e-02, 6.166490299848167e-02, 4.538974383739894e-02, 2.896335844704150e-02, 1.617598171502280e-02, 7.985860545715090e-03, 3.518277680027698e-03, 1.395426851138709e-03, 5.022254081140595e-04, 1.651917015797730e-04, 4.997147007145333e-05, 1.398120136355979e-05, 3.636076503459787e-06, 8.829430657939865e-07, 2.009954117540748e-07, 4.304869391096449e-08, 8.702974975991325e-09, 1.665671690832821e-09, 3.026134227998636e-10, 5.231482576150200e-11, 8.625208866350938e-12, 1.358980873837929e-12, 2.050103685078606e-13, 2.966292241808410e-14, +7.163317582635749e-02, 6.137066717846239e-02, 4.525609824249111e-02, 2.895225869530258e-02, 1.622088178588393e-02, 8.037081607486618e-03, 3.554993865776076e-03, 1.416032860339196e-03, 5.119433063078914e-04, 1.691795355205490e-04, 5.142594600840282e-05, 1.445964065286139e-05, 3.779565633644647e-06, 9.225144578590683e-07, 2.110999657084216e-07, 4.545156308195805e-08, 9.237722794281402e-09, 1.777515487217873e-09, 3.246795202662790e-10, 5.643493566309873e-11, 9.355381174466409e-12, 1.482123606777392e-12, 2.248202731157153e-13, 3.270923855286627e-14, +7.122501432165160e-02, 6.107911469235813e-02, 4.512282855568654e-02, 2.894034791480361e-02, 1.626493177454335e-02, 8.087871280773668e-03, 3.591629197832472e-03, 1.436706099602424e-03, 5.217443696221640e-04, 1.732225834233940e-04, 5.290831762152491e-05, 1.494983840173826e-05, 3.927365593037711e-06, 9.634936971880065e-07, 2.216206038530700e-07, 4.796698611407023e-08, 9.800579702617361e-09, 1.895884947920240e-09, 3.481618711061928e-10, 6.084374693318259e-11, 1.014105481073418e-11, 1.615364135447333e-12, 2.463742089912519e-13, 3.604228293930704e-14, +7.082147751417743e-02, 6.079021122319121e-02, 4.498994300007353e-02, 2.892764535911647e-02, 1.630814165250761e-02, 8.138229654786670e-03, 3.628180434001468e-03, 1.457444153084248e-03, 5.316277008196371e-04, 1.773207941701077e-04, 5.441876466778897e-05, 1.545194742455982e-05, 4.079559177013339e-06, 1.005916344484248e-06, 2.325703241698988e-07, 5.059914888551312e-08, 1.039275824200823e-08, 2.021100445531293e-09, 3.731384695443159e-10, 6.555889126221466e-11, 1.098595407315854e-11, 1.759441262285404e-12, 2.698104076808680e-13, 3.968653910706696e-14, +7.042248726773703e-02, 6.050392297624368e-02, 4.485744939045095e-02, 2.891416988437681e-02, 1.635052133543154e-02, 8.188156923970635e-03, 3.664644410969994e-03, 1.478244622194587e-03, 5.415923922490364e-04, 1.814741055419643e-04, 5.595746192546970e-05, 1.596611956522299e-05, 4.236229531085330e-06, 1.049818399429570e-06, 2.439623783249959e-07, 5.335234711620562e-08, 1.101551063452068e-08, 2.153494871250348e-09, 3.996908466668455e-10, 7.059890974706834e-11, 1.189401847872353e-11, 1.915141067115557e-12, 2.952768046433924e-13, 4.366836162926616e-14, +7.002796719496594e-02, 6.022021667128533e-02, 4.472535514820737e-02, 2.889993995685439e-02, 1.639208068070309e-02, 8.237653384539568e-03, 3.701018043457246e-03, 1.499105126144024e-03, 5.516375263479519e-04, 1.856824443631851e-04, 5.752457916300570e-05, 1.649250564846235e-05, 4.397460127342664e-06, 1.095236295021655e-06, 2.558102722187579e-07, 5.623098769056521e-08, 1.167012958465125e-08, 2.293413979992185e-09, 4.279041925326979e-10, 7.598329039697115e-11, 1.286941305344363e-11, 2.083299473835452e-12, 3.229316283841796e-13, 4.801610166625223e-14, +6.963784260878120e-02, 5.993905953484260e-02, 4.459366731567153e-02, 2.888497366041952e-02, 1.643282948517894e-02, 8.286719431086590e-03, 3.737298323347112e-03, 1.520023302463684e-03, 5.617621761388578e-04, 1.899457266474468e-04, 5.912028111079497e-05, 1.703125543202973e-05, 4.563334740783292e-06, 1.142206891697929e-06, 2.681277664317486e-07, 5.923958995409737e-08, 1.235794908118896e-08, 2.441216739719134e-09, 4.578674808867668e-10, 8.173250673718753e-11, 1.391653899953658e-11, 2.264804929248804e-12, 3.529440193557211e-13, 5.276023969344861e-14, +6.925204047543074e-02, 5.966041929251516e-02, 4.446239256995353e-02, 2.886928870390470e-02, 1.647277748306531e-02, 8.335355553269244e-03, 3.773482318804697e-03, 1.540996807499013e-03, 5.719654057181046e-04, 1.942638577472429e-04, 6.074472743588612e-05, 1.758251755976249e-05, 4.733937425562362e-06, 1.190767471250172e-06, 2.809288765658683e-07, 6.238278698283474e-08, 1.308034519912615e-08, 2.597275684889751e-09, 4.896735964750023e-10, 8.786805752477944e-11, 1.504004474835440e-11, 2.460601197559191e-12, 3.854946797885707e-13, 5.793352574676913e-14, +6.887048936908335e-02, 5.938426416134595e-02, 4.433153723629576e-02, 2.885290242835987e-02, 1.651193434393777e-02, 8.383562332569237e-03, 3.809567173378316e-03, 1.562023316878037e-03, 5.822462707377434e-04, 1.986367325059099e-04, 6.239807271952174e-05, 1.814643951555775e-05, 4.909352491170749e-06, 1.240955730534501e-06, 2.942278734804546e-07, 6.566532682469636e-08, 1.383873690117263e-08, 2.761977273911685e-09, 5.234194649592642e-10, 9.441250759036607e-11, 1.624483740771081e-11, 2.671690274092899e-12, 4.207765556454227e-13, 6.357112753036123e-14, +6.849311942790161e-02, 5.911056284224889e-02, 4.420110730094999e-02, 2.883583181420094e-02, 1.655030967089430e-02, 8.431340439125761e-03, 3.845550105088358e-03, 1.583100525954712e-03, 5.926038188800454e-04, 2.030642354121401e-04, 6.408046643748863e-05, 1.872316757826868e-05, 5.089664478559874e-06, 1.292809774981442e-06, 3.080392834230328e-07, 6.909207371185907e-08, 1.463458683842576e-08, 2.935722250482366e-09, 5.592061854281030e-10, 1.013895298193795e-10, 1.753609461223981e-11, 2.899135421868191e-12, 4.589955519203229e-13, 6.971078674291237e-14, +6.811986231154099e-02, 5.883928451249980e-02, 4.407110842359827e-02, 2.881809348825028e-02, 1.658791299883642e-02, 8.478690628641598e-03, 3.881428405504322e-03, 1.604226150227944e-03, 6.030370903245988e-04, 2.075462407568028e-04, 6.579205294322863e-05, 1.931284677753837e-05, 5.274958136228216e-06, 1.346368111910927e-06, 3.223778880545070e-07, 7.266800924325601e-08, 1.546940214974738e-08, 3.118926008696918e-09, 5.971391654977603e-10, 1.088239482858633e-10, 1.891927678540757e-11, 3.144064334676535e-12, 5.003712825341372e-13, 7.639298399040622e-14, +6.775065116002271e-02, 5.857039881829402e-02, 4.394154594933408e-02, 2.879970373066931e-02, 1.662475379287267e-02, 8.525613739361162e-03, 3.917199438811318e-03, 1.625397925736890e-03, 6.135451182078826e-04, 2.120826127919021e-04, 6.753297145366294e-05, 1.991562085058473e-05, 5.465318396285024e-06, 1.401669643657136e-06, 3.372587243686722e-07, 7.639823353633718e-08, 1.634473525939675e-08, 3.312018961798821e-09, 6.373282589958372e-10, 1.167417825513981e-10, 2.040013982178182e-11, 3.407672430387986e-12, 5.451378561065618e-13, 8.366111266504702e-14, +6.738542055392871e-02, 5.830387586737479e-02, 4.381242492021922e-02, 2.878067848178231e-02, 1.666084144683968e-02, 8.572110689119608e-03, 3.952860640867216e-03, 1.646613609433107e-03, 6.241269290752186e-04, 2.166732058915013e-04, 6.930335603768157e-05, 2.053163219994961e-05, 5.660830350506209e-06, 1.458753660508203e-06, 3.526970845060082e-07, 8.028796634725380e-08, 1.726218467246794e-08, 3.515446914444942e-09, 6.798879062181991e-10, 1.251702931412531e-10, 2.198474819813592e-11, 3.691226278237814e-12, 5.935446989140791e-13, 9.156166218207708e-14, +6.702410647586948e-02, 5.803968622173518e-02, 4.368375008643172e-02, 2.876103334879166e-02, 1.669618528193550e-02, 8.618182472461966e-03, 3.988409518251630e-03, 1.667870979530170e-03, 6.347815433250156e-04, 2.213178647144498e-04, 7.110333560724791e-05, 2.116102185222370e-05, 5.861579226397329e-06, 1.517659833465892e-06, 3.687085154617942e-07, 8.434254815864838e-08, 1.822339576767895e-08, 3.729671438352747e-09, 7.249372767478276e-10, 1.341380282093636e-10, 2.367948852193166e-11, 3.996067163894707e-12, 6.458574163723500e-13, 1.001444109783868e-13, +6.666664627317863e-02, 5.777780089039754e-02, 4.355552591701962e-02, 2.874078361238446e-02, 1.673079454546077e-02, 8.663830157831547e-03, 4.023843647307833e-03, 1.689167835831297e-03, 6.455079756452400e-04, 2.260164243687517e-04, 7.293303391106919e-05, 2.180392941775792e-05, 6.067650363278241e-06, 1.578428206830437e-06, 3.853088186886666e-07, 8.856744123425953e-08, 1.923006158706038e-08, 3.955170251193848e-09, 7.726004148224242e-10, 1.436748714032194e-10, 2.549108352568303e-11, 4.323614796152183e-12, 7.023586944105050e-13, 1.094626296891519e-13, +6.631297862178834e-02, 5.751819132227164e-02, 4.342775661027442e-02, 2.871994423323024e-02, 1.676467840966277e-02, 8.709054884826390e-03, 4.059160673178653e-03, 1.710502000035603e-03, 6.563052354420426e-04, 2.307687105774166e-04, 7.479256953078036e-05, 2.246049305137046e-05, 6.279129188403611e-06, 1.641099190615773e-06, 4.025140495938118e-07, 9.296823063957352e-08, 2.028392362209037e-08, 4.192437598594409e-09, 8.230063872356820e-10, 1.538120909392054e-10, 2.742660651565395e-11, 4.675371159124250e-12, 7.633492421336758e-13, 1.195732949312246e-13, +6.596304349124257e-02, 5.726082939909481e-02, 4.330044610373806e-02, 2.869852985837051e-02, 1.679784597067821e-02, 8.753857861523023e-03, 4.094358308837400e-03, 1.731871316023529e-03, 6.671723272604923e-04, 2.355745398456437e-04, 7.668205587959116e-05, 2.313084941405865e-05, 6.496101193133467e-06, 1.705713552800521e-06, 4.203405169310813e-07, 9.755062522778213e-08, 2.138677259582464e-08, 4.441984639099594e-09, 8.762894337552711e-10, 1.645823898984009e-10, 2.949349628328754e-11, 5.052924513864004e-12, 8.291487771988555e-13, 1.305373141346491e-13, +6.561678211080789e-02, 5.700568742845619e-02, 4.317359808385662e-02, 2.867655482750041e-02, 1.683030624757016e-02, 8.798240361866367e-03, 4.129434334114756e-03, 1.753273650122028e-03, 6.781082511973791e-04, 2.404337196291871e-04, 7.860160120334285e-05, 2.381513363572248e-05, 6.718651909167373e-06, 1.772312411420074e-06, 4.388047820883673e-07, 1.023204585903295e-07, 2.254044924056996e-08, 4.704339831955674e-09, 9.325891200386477e-10, 1.760199577522624e-10, 3.169957248769863e-11, 5.457953553359017e-12, 9.000970553577137e-13, 1.424197618764537e-13, +6.527413693664004e-02, 5.675273813690573e-02, 4.304721599529310e-02, 2.865403317914260e-02, 1.686206818145522e-02, 8.842203723124713e-03, 4.164386594722602e-03, 1.774706891350058e-03, 6.891120033060385e-04, 2.453460485037584e-04, 8.055130858392215e-05, 2.451347927890647e-05, 6.946866884855736e-06, 1.840937226505243e-06, 4.579236582706737e-07, 1.072836899713603e-07, 2.374684507065172e-08, 4.980049327560386e-09, 9.920504930259299e-10, 1.881605231270422e-10, 3.405305151748975e-11, 5.892231714890817e-12, 9.765549456483516e-13, 1.552901281837902e-13, +6.493505161997030e-02, 5.650195466315047e-02, 4.292130304991167e-02, 2.863097865671431e-02, 1.689314063471685e-02, 8.885749343408897e-03, 4.199213001275565e-03, 1.796168951644955e-03, 7.001825759931849e-04, 2.503113163353255e-04, 8.253127594497870e-05, 2.522601830356547e-05, 7.180831661601304e-06, 1.911629791872921e-06, 4.777142095793749e-07, 1.124464051454037e-07, 2.500790314982745e-08, 5.269677360428862e-09, 1.054824238787168e-09, 2.010414078151960e-10, 3.656256284007140e-11, 6.357631653776849e-12, 1.058905552746119e-12, 1.692225792865428e-13, +6.459947097627419e-02, 5.625331055133896e-02, 4.279586223544515e-02, 2.860740471448808e-02, 1.692353239030087e-02, 8.928878679254510e-03, 4.233911528311260e-03, 1.817657766070221e-03, 7.113189584077313e-04, 2.553293044511720e-04, 8.454159605989258e-05, 2.595288103285883e-05, 7.420631750363763e-06, 1.984432226774318e-06, 4.981937499882381e-07, 1.178148172576617e-07, 2.632561885290062e-08, 5.573806644519508e-09, 1.121066842799470e-09, 2.147015820414200e-10, 3.923716584657842e-11, 6.856129882542052e-12, 1.147555388011450e-12, 1.842962313126899e-13, +6.426734095538703e-02, 5.600677974443471e-02, 4.267089632385693e-02, 2.858332452344697e-02, 1.695325215108972e-02, 8.971593243266069e-03, 4.268480213309918e-03, 1.839171293005281e-03, 7.225201368215867e-04, 2.603997858115823e-04, 8.658235656193780e-05, 2.669419611997647e-05, 7.666352608279837e-06, 2.059386967406299e-06, 5.193798422168439e-07, 1.233952676262889e-07, 2.770204062109105e-08, 5.893038770761321e-09, 1.190940752627520e-09, 2.291817209903371e-10, 4.208636720038008e-11, 7.389811579593748e-12, 1.242935590800238e-12, 2.005954374329844e-13, +6.393860861253350e-02, 5.576233657767962e-02, 4.254640787940833e-02, 2.855875097703490e-02, 1.698230853935151e-02, 9.013894601822160e-03, 4.302917155714197e-03, 1.860707514317736e-03, 7.337850950024272e-04, 2.655225251820249e-04, 8.865363995658652e-05, 2.745009051599962e-05, 7.918079615411124e-06, 2.136536758291423e-06, 5.412902965021146e-07, 1.291942265060869e-07, 2.913927071072182e-08, 6.227994606621354e-09, 1.264614542979181e-09, 2.445242626022066e-10, 4.512013869707671e-11, 7.960875571497602e-12, 1.345503201629501e-12, 2.182100889748979e-13, +6.361322208023887e-02, 5.551995577214802e-02, 4.242239926644193e-02, 2.853369669680327e-02, 1.701071009626091e-02, 9.055784372840398e-03, 4.337220515949919e-03, 1.882264435518647e-03, 7.451128145784530e-04, 2.706972793057084e-04, 9.075552363590072e-05, 2.822068943879807e-05, 8.175898051631558e-06, 2.215924643532290e-06, 5.639431692687294e-07, 1.352182938130581e-07, 3.063946593478504e-08, 6.579314697548487e-09, 1.342263083105998e-09, 2.607734666423884e-10, 4.834893564376574e-11, 8.571639492974171e-12, 1.455742488817966e-12, 2.372359310392526e-13, +6.329113054109038e-02, 5.527961242839192e-02, 4.229887265689086e-02, 2.850817403795464e-02, 1.703846528148801e-02, 9.097264223601204e-03, 4.371388514448362e-03, 1.903840085901366e-03, 7.565022753951354e-04, 2.759237970763907e-04, 9.288807989495545e-05, 2.900611634296466e-05, 8.439893073665953e-06, 2.297593957945810e-06, 5.873567616992568e-07, 1.414741998092968e-07, 3.220483839695278e-08, 6.947659670127034e-09, 1.424067706516529e-09, 2.779754750496201e-10, 5.178371576523995e-11, 9.224545128754402e-12, 1.574166330247649e-12, 2.577748931665227e-13, +6.297228420131896e-02, 5.504128202017744e-02, 4.217583003752395e-02, 2.848219509478449e-02, 1.706558247285248e-02, 9.138335868629287e-03, 4.405419430670840e-03, 1.925432518664431e-03, 7.679524558639812e-04, 2.812018197113215e-04, 9.505137595023991e-05, 2.980649289078760e-05, 8.710149692290953e-06, 2.381588318083077e-06, 6.115496182049219e-07, 1.479688057477196e-07, 3.383765621760385e-08, 7.333710636771527e-09, 1.510216382968648e-09, 2.961783735675000e-10, 5.543595864465468e-11, 9.922163941449405e-12, 1.701317651918613e-12, 2.799354356134301e-13, +6.265663426517402e-02, 5.480494038831292e-02, 4.205327321693610e-02, 2.845577170602214e-02, 1.709206996603949e-02, 9.179001067631733e-03, 4.439311602136103e-03, 1.947039811019032e-03, 7.794623333033348e-04, 2.865310809242087e-04, 9.724547395998073e-05, 3.062193892425942e-05, 8.986752749709181e-06, 2.467951613140427e-06, 6.365405247979582e-07, 1.547091044761681e-07, 3.554024425144015e-08, 7.738169601791599e-09, 1.600903892705060e-09, 3.154322546628714e-10, 5.931768570606533e-11, 1.066720278960335e-11, 1.837770924994617e-12, 3.038329118141584e-13, +6.234413291006188e-02, 5.457056373456878e-02, 4.193120383229301e-02, 2.842891546007192e-02, 1.711793597437487e-02, 9.219261623491647e-03, 4.473063423451163e-03, 1.968660064281531e-03, 7.910308842712444e-04, 2.919113070980945e-04, 9.947043104633255e-05, 3.145257243812123e-05, 9.269786897107117e-06, 2.556727995767374e-06, 6.623485073665779e-07, 1.617022210004468e-07, 3.731498479627209e-08, 8.161759868653943e-09, 1.696332002894515e-09, 3.357892817341111e-10, 6.344148074609485e-11, 1.146250984010975e-11, 1.984133723062527e-12, 3.295899476142726e-13, +6.203473326242272e-02, 5.433812861568868e-02, 4.180962335583884e-02, 2.840163770015589e-02, 1.714318862865631e-02, 9.259119380316332e-03, 4.506673345346169e-03, 1.990291403951541e-03, 8.026570848904477e-04, 2.973422174580411e-04, 1.017262993193833e-04, 3.229850955394038e-05, 9.559336572407053e-06, 2.647961872777055e-06, 6.889928298536433e-07, 1.689554130058823e-07, 3.916431829255711e-08, 8.605226448266314e-09, 1.796709646239373e-09, 3.573037546116231e-10, 6.782051102184126e-11, 1.231108067917990e-11, 2.141048341352961e-12, 3.573368378792432e-13, +6.172838937432052e-02, 5.410761193749184e-02, 4.168853310117537e-02, 2.837394952935888e-02, 1.716783597703806e-02, 9.298576221538820e-03, 4.540139873713729e-03, 2.011931979776045e-03, 8.143399111654960e-04, 3.028235242435206e-04, 1.040131259029166e-04, 3.315986449521821e-05, 9.855485978222897e-06, 2.741697895764816e-06, 7.164929923401757e-07, 1.764760713370274e-07, 4.109074401328054e-08, 9.069336468106683e-09, 1.902253101708433e-09, 3.800321763521101e-10, 7.246854890197618e-11, 1.321606462605788e-11, 2.309193479693620e-12, 3.872119610933113e-13, +6.142505620072142e-02, 5.387899094906709e-02, 4.156793422932075e-02, 2.834586181557770e-02, 1.719188598496646e-02, 9.337634068071778e-03, 4.573461568653251e-03, 2.033579965799995e-03, 8.260783392920822e-04, 3.083549328804129e-04, 1.063309529618797e-04, 3.403674956352441e-05, 1.015831906002938e-05, 2.837980951640558e-06, 7.448687290348965e-07, 1.842717204351530e-07, 4.309682074377301e-08, 9.554879582019031e-09, 2.013186177352141e-09, 4.040333213274758e-10, 7.739999408782202e-11, 1.418077125367931e-11, 2.489285990990270e-12, 4.193622125783034e-13, +6.112468957743721e-02, 5.365224323705702e-02, 4.144782775455566e-02, 2.831738519637507e-02, 1.721534653516379e-02, 9.376294876512708e-03, 4.606637043520771e-03, 2.055233560403899e-03, 8.378713459586085e-04, 3.139361421525126e-04, 1.086798177315005e-04, 3.492927511565320e-05, 1.046791948455382e-05, 2.936856153080412e-06, 7.741400061710389e-07, 1.923500187332057e-07, 4.518516745106574e-08, 1.006266838049557e-08, 2.129740395155579e-09, 4.293683046084739e-10, 8.262989641102103e-11, 1.520867712047110e-11, 2.682082697053128e-12, 4.539434569758873e-13, +6.082724619971101e-02, 5.342734672003219e-02, 4.132821455006422e-02, 2.828853008374010e-02, 1.723822542765781e-02, 9.414560637399415e-03, 4.639664963984638e-03, 2.076890986328821e-03, 8.497179086400733e-04, 3.195668443724637e-04, 1.110597525480036e-04, 3.583754954179759e-05, 1.078437061839960e-05, 3.038368828903413e-06, 8.043270198117513e-07, 2.007187590079403e-07, 4.735846394239019e-08, 1.059353880126426e-08, 2.252155177882997e-09, 4.561006526424933e-10, 8.817397921423301e-11, 1.630343271748678e-11, 2.888382273608729e-12, 4.911210006506652e-13, +6.053268360142414e-02, 5.320427964295556e-02, 4.120909535337731e-02, 2.825930666875621e-02, 1.726053037985509e-02, 9.452433373514578e-03, 4.672544047087494e-03, 2.098550490689220e-03, 8.616170058843088e-04, 3.252467255520226e-04, 1.134707848808668e-04, 3.676167924473422e-05, 1.110775550690949e-05, 3.142564514378599e-06, 8.354501935653964e-07, 2.093858686889504e-07, 4.961945151243467e-08, 1.114835053999825e-08, 2.380678037865800e-09, 4.842963752240817e-10, 9.404866332110430e-11, 1.746886963506510e-11, 3.109027206358596e-12, 5.310700846853378e-13, +6.024096013490281e-02, 5.298302057173541e-02, 4.109047077162496e-02, 2.822972492617820e-02, 1.728226902665537e-02, 9.489915138238632e-03, 4.705273060315021e-03, 2.120210344974143e-03, 8.735676175906643e-04, 3.309754655715778e-04, 1.159129373665703e-04, 3.770176862001439e-05, 1.143815685327735e-05, 3.249488941468177e-06, 8.675301762121910e-07, 2.183594101243761e-07, 5.197093357897934e-08, 1.172798746096420e-08, 2.515564767684515e-09, 5.140240387561146e-10, 1.002710916015672e-10, 1.870900795319254e-11, 3.344905819967271e-12, 5.739763991531074e-13, +5.995203495130507e-02, 5.276354838786700e-02, 4.097234128660470e-02, 2.819979461891934e-02, 1.730344892060523e-02, 9.527008013949666e-03, 4.737850820671610e-03, 2.141868845037083e-03, 8.855687252811750e-04, 3.367527383488347e-04, 1.183862278437820e-04, 3.865792003715320e-05, 1.177565699791586e-05, 3.359188029012108e-06, 9.005878392435674e-07, 2.276475808030601e-07, 5.441577630653358e-08, 1.233335800742365e-08, 2.657079632693303e-09, 5.453548407986823e-10, 1.068591541383126e-10, 2.002806385973565e-11, 3.596954381881797e-12, 6.200366193662250e-13, +5.966586798156785e-02, 5.254584228316154e-02, 4.085470725967231e-02, 2.816952530245015e-02, 1.732407753208865e-02, 9.563714110469503e-03, 4.770276193763519e-03, 2.163524311075021e-03, 8.976193123643167e-04, 3.425782120065980e-04, 1.208906693899296e-04, 3.963023382181006e-05, 1.212033789808816e-05, 3.471707872859719e-06, 9.346442743157917e-07, 2.372587135329915e-07, 5.695690921761325e-08, 1.296539561160277e-08, 2.805495565334372e-09, 5.783626859020842e-10, 1.138315140000883e-10, 2.143045750069764e-11, 3.866159282904652e-12, 6.694589648134782e-13, +5.938241991789675e-02, 5.232988175456211e-02, 4.073756893646131e-02, 2.813892632911003e-02, 1.734416224955273e-02, 9.600035563554850e-03, 4.802548092889618e-03, 2.185175087597007e-03, 9.097183643913887e-04, 3.484515490395699e-04, 1.234262703591048e-04, 4.061880823895228e-05, 1.247228110780997e-05, 3.587094735953533e-06, 9.697207906193080e-07, 2.472012765758666e-07, 5.959732579129555e-08, 1.362505910404309e-08, 2.961094361187700e-09, 6.131242627194632e-10, 1.212076336272400e-10, 2.292082106663180e-11, 4.153559296459995e-12, 7.224637815130540e-13, +5.910165219577958e-02, 5.211564659904557e-02, 4.062092645143717e-02, 2.810800685233329e-02, 1.736371037976660e-02, 9.635974533432661e-03, 4.834665478140207e-03, 2.206819543382694e-03, 9.218648693056425e-04, 3.543724064801023e-04, 1.259930344212523e-04, 4.162373947699390e-05, 1.283156775803002e-05, 3.705395038370907e-06, 1.005838912165423e-06, 2.574838737376594e-07, 6.234008404870404e-08, 1.431333312214718e-08, 3.124166876700336e-09, 6.497191223939281e-10, 1.290078018347104e-10, 2.450400711932660e-11, 4.460247918511457e-12, 7.792841485209701e-13, +5.882352697650724e-02, 5.190311690860958e-02, 4.050477983229208e-02, 2.807677583079071e-02, 1.738272914811151e-02, 9.671533203378522e-03, 4.866627355504005e-03, 2.228456071431223e-03, 9.340578176841986e-04, 3.603404360628253e-04, 1.285909606025887e-04, 4.264512163290009e-05, 1.319827853709432e-05, 3.826655347328548e-06, 1.043020374991876e-06, 2.681152444150897e-07, 6.518830712507726e-08, 1.503122851773103e-08, 3.295013228537662e-09, 6.882297582141461e-10, 1.372531614374637e-10, 2.618509716284983e-11, 4.787375790105758e-12, 8.401665093487599e-13, +5.854800713018492e-02, 5.169227306534380e-02, 4.038912900418591e-02, 2.804524203244806e-02, 1.740122569890061e-02, 9.706713778337336e-03, 4.898432775983675e-03, 2.250083088900825e-03, 9.462962029728623e-04, 3.663552843881000e-04, 1.312200433272063e-04, 4.368304669824864e-05, 1.357249367150146e-05, 3.950922367155355e-06, 1.081287124288978e-06, 2.791042635979351e-07, 6.814518382808970e-08, 1.577978276339638e-08, 3.473942994497958e-09, 7.287416865316974e-10, 1.459657375030865e-10, 2.796941046301500e-11, 5.136153204533227e-12, 9.053713290577143e-13, +5.827505621921784e-02, 5.148309573658430e-02, 4.027397379383871e-02, 2.801341403854310e-02, 1.741920709572662e-02, 9.741518483585095e-03, 4.930080834720079e-03, 2.271699037039526e-03, 9.585790217139118e-04, 3.724165930842226e-04, 1.338802724598053e-04, 4.473760454623755e-05, 1.395429290695404e-05, 4.078242929238602e-06, 1.120661311447946e-06, 2.904599418271291e-07, 7.121396918209469e-08, 1.656006035753415e-08, 3.661275415929760e-09, 7.713435289326147e-10, 1.551684662360549e-10, 2.986251311929824e-11, 5.507852701110379e-12, 9.751737778102283e-13, +5.800463848225620e-02, 5.127556587015033e-02, 4.015931393348000e-02, 2.798130024748210e-02, 1.743668032183556e-02, 9.775949563431049e-03, 4.961570670125415e-03, 2.293302381107330e-03, 9.709052737669508e-04, 3.785239989683314e-04, 1.365716333495145e-04, 4.580888291963012e-05, 1.434375548971253e-05, 4.208663981948745e-06, 1.161165291033159e-06, 3.021914251086482e-07, 7.439798495797429e-08, 1.737315322777220e-08, 3.857339601590585e-09, 8.161270956548372e-10, 1.648852244979333e-10, 3.187022739320537e-11, 5.903811747604788e-12, 1.049864441672252e-12, +5.773671881858443e-02, 5.106966468966218e-02, 4.004514906465990e-02, 2.794890887865764e-02, 1.745365228052553e-02, 9.810009279959057e-03, 4.992901463025563e-03, 2.314891610290196e-03, 9.832739625229134e-04, 3.846771342059550e-04, 1.392941068747436e-04, 4.689696741962520e-05, 1.474096014825640e-05, 4.342232580547817e-06, 1.202821617680059e-06, 3.143079947831859e-07, 7.770062018828449e-08, 1.822018113267913e-08, 4.062474732883828e-09, 8.631874702424481e-10, 1.751408599674921e-10, 3.399864129704658e-11, 6.325435513334666e-12, 1.129750061473828e-12, +5.747126277294067e-02, 5.086537368993974e-02, 3.993147874192697e-02, 2.791624797618858e-02, 1.747012979556833e-02, 9.843699911807550e-03, 5.024072435811667e-03, 2.336465237606204e-03, 9.956840951113139e-04, 3.908756264691531e-04, 1.420476694890257e-04, 4.800194149564270e-05, 1.514598507525758e-05, 4.478995877086414e-06, 1.245653042920427e-06, 3.268190673516571e-07, 8.112533166739546e-08, 1.910229206153648e-08, 4.277030270409568e-09, 9.126230954268243e-10, 1.859612219444910e-10, 3.625411844703891e-11, 6.774199734988282e-12, 1.215154300547801e-12, +5.720823652075249e-02, 5.066267463247954e-02, 3.981830243637735e-02, 2.788332541258403e-02, 1.748611961165329e-02, 9.877023752986824e-03, 5.055082851601225e-03, 2.358021799804221e-03, 1.008134682600843e-03, 3.971190990931993e-04, 1.448322932678003e-04, 4.912388643601305e-05, 1.555890790987127e-05, 4.619001110294314e-06, 1.289682511936881e-06, 3.397341942566052e-07, 8.467564443633656e-08, 2.002066263199330e-08, 4.501366161763863e-09, 9.645358602240735e-10, 1.973731928006067e-10, 3.864330818461406e-11, 7.251653677219474e-12, 1.306418542179672e-12, +5.694760685377569e-02, 5.046154954101074e-02, 3.970561953907953e-02, 2.785014889233219e-02, 1.750162839485112e-02, 9.909983111733075e-03, 5.085932013408769e-03, 2.379559857255403e-03, 1.020624740193387e-03, 4.034071712317602e-04, 1.476479459560922e-04, 5.026288135955800e-05, 1.597980572034790e-05, 4.762295595469416e-06, 1.334933160248327e-06, 3.530630616195873e-07, 8.835515225206150e-08, 2.097649848541537e-08, 4.735853050519561e-09, 1.019031188237261e-09, 2.094047200806994e-10, 4.117315596975800e-11, 7.759423190084968e-12, 1.403902717614091e-12, +5.668934116612372e-02, 5.026198069712758e-02, 3.959342936437963e-02, 2.781672595541578e-02, 1.751666273309725e-02, 9.942580309398165e-03, 5.116619263326305e-03, 2.401077993837851e-03, 1.033153287411590e-03, 4.097394580105237e-04, 1.504945910170381e-04, 5.141900320805183e-05, 1.640875498697096e-05, 4.908926714369952e-06, 1.381428310328248e-06, 3.668154899346693e-07, 9.216751804086172e-08, 2.197103467974430e-08, 4.980872486320824e-09, 1.076218127151276e-09, 2.220848492573607e-10, 4.385091405016516e-11, 8.299213865399033e-12, 1.507986165476205e-12, +5.643340744067494e-02, 5.006395063599833e-02, 3.948173115309085e-02, 2.778306398075519e-02, 1.753122913669284e-02, 9.974817679374193e-03, 5.147143981713587e-03, 2.422574816814750e-03, 1.045719348280037e-03, 4.161155706792377e-04, 1.533721876812206e-04, 5.259232673954979e-05, 1.684583158532385e-05, 5.058941905114536e-06, 1.429191468157652e-06, 3.810014337181554e-07, 9.611647433566325e-08, 2.300553607968055e-08, 5.236817136022193e-09, 1.136209439407282e-09, 2.354437571413789e-10, 4.668415240993014e-11, 8.872814294088098e-12, 1.619068523478176e-12, +5.617977423584612e-02, 4.986744214214872e-02, 3.937052407557126e-02, 2.774917018958059e-02, 1.754533403882249e-02, 1.000669756605223e-02, 5.177505586398382e-03, 2.444048956706272e-03, 1.058321951500171e-03, 4.225351167621234e-04, 1.562806909967621e-04, 5.378292452257228e-05, 1.729111076988995e-05, 5.212388652094843e-06, 1.478246319714584e-06, 3.956309811147386e-07, 1.002058236969548e-07, 2.408129774400736e-08, 5.504090995802217e-09, 1.199121694043084e-09, 2.495127859505007e-10, 4.968077000145114e-11, 9.482099426635624e-12, 1.737570653293502e-12, +5.592841067272071e-02, 4.967243824531953e-02, 3.925980723469402e-02, 2.771505164873452e-02, 1.755898379608758e-02, 1.003822232381413e-02, 5.207703531886741e-03, 2.465499067155554e-03, 1.070960130619030e-03, 4.289977002066166e-04, 1.592200518801355e-04, 5.499086693113020e-05, 1.774466715798844e-05, 5.369314475905275e-06, 1.528616727402024e-06, 4.107143534602332e-07, 1.044394391170981e-07, 2.519964530987103e-08, 5.783109604180138e-09, 1.265075359684766e-09, 2.643244780385437e-10, 5.284900626415105e-11, 1.012903403871198e-11, 1.863935599493388e-12, +5.567928642252076e-02, 4.947892221639674e-02, 3.914957966871339e-02, 2.768071527390599e-02, 1.757218468905393e-02, 1.006939431605683e-02, 5.237737308583432e-03, 2.486923824789053e-03, 1.083632924191917e-03, 4.355029215304149e-04, 1.621902171676529e-04, 5.621622214058082e-05, 1.820657471404933e-05, 5.529766923294290e-06, 1.580326726416156e-06, 4.262619048011329e-07, 1.088212644077913e-07, 2.636193537383738e-08, 6.074300255863869e-09, 1.334194898674445e-09, 2.799126112866598e-10, 5.619745293356919e-11, 1.081567630409017e-11, 1.998629583451410e-12, +5.543237169441222e-02, 4.928687756341349e-02, 3.903984035403080e-02, 2.764616783279775e-02, 1.758494292281302e-02, 1.010021591424817e-02, 5.267606442022564e-03, 2.508321929071524e-03, 1.096339375939098e-03, 4.420503779667918e-04, 1.651911296675853e-04, 5.745905612429839e-05, 1.867690673423015e-05, 5.693793557141597e-06, 1.633400521056860e-06, 4.422841213712053e-07, 1.133553145704546e-07, 2.756955586954206e-08, 6.378102216355704e-09, 1.406608862317985e-09, 2.963122351582101e-10, 5.973506614430158e-11, 1.154418147694964e-11, 2.142143033133735e-12, +5.518763722363244e-02, 4.909628802762226e-02, 3.893058820786347e-02, 2.761141594822740e-02, 1.759726462755531e-02, 1.013068949701352e-02, 5.297310492108442e-03, 2.529692102155929e-03, 1.109078534896639e-03, 4.486396636081510e-04, 1.682227282128785e-04, 5.871943265114801e-05, 1.915573583137687e-05, 5.861441946465704e-06, 1.687862480982384e-06, 4.587916210254027e-07, 1.180456761493281e-07, 2.882392644175709e-08, 6.694966937242196e-09, 1.482449987235979e-09, 3.135597074184460e-10, 6.347117883020716e-11, 1.231680568567470e-11, 2.294991649703679e-12, +5.494505425993117e-02, 4.890713757963684e-02, 3.882182209082013e-02, 2.757646610116425e-02, 1.760915585915531e-02, 1.016081744925239e-02, 5.326849052366708e-03, 2.551033088728522e-03, 1.121849455561451e-03, 4.552703695477894e-04, 1.712849477144181e-04, 5.999741328374763e-05, 1.964313392033059e-05, 6.032759656465787e-06, 1.743737137410117e-06, 4.757951526313458e-07, 1.228965075670706e-07, 3.012649881669421e-08, 7.025358272092811e-09, 1.561855292800358e-09, 3.316927315198483e-10, 6.741551342521674e-11, 1.313590984025256e-11, 2.457717511879916e-12, +5.470459455631450e-02, 4.871941041564233e-02, 3.871354080938592e-02, 2.754132463370255e-02, 1.762062259976691e-02, 1.019060216128438e-02, 5.356221749205835e-03, 2.572343655849382e-03, 1.134651198030700e-03, 4.619420840198534e-04, 1.743777192148122e-04, 6.129305737750581e-05, 2.013917220358310e-05, 6.207794238602343e-06, 1.801049179265459e-06, 4.933055954187183e-07, 1.279120394426719e-07, 3.147875716837103e-08, 7.369752692892310e-09, 1.644966179638482e-09, 3.507503946537085e-10, 7.157819486801710e-11, 1.400396365537842e-11, 2.630890218998595e-12, +5.446623035808300e-02, 4.853309095367270e-02, 3.860574311832067e-02, 2.750599775197296e-02, 1.763167075842844e-02, 1.022004602802351e-02, 5.385428241188940e-03, 2.593622592788624e-03, 1.147482828135632e-03, 4.686543925374532e-04, 1.775009699426461e-04, 6.260642208041943e-05, 2.064392115728152e-05, 6.386593220720292e-06, 1.859823449280653e-06, 5.113339582868566e-07, 1.330965748914854e-07, 3.288221848086342e-08, 7.728639506929800e-09, 1.731928529185582e-09, 3.707732064681716e-10, 7.596976391379145e-11, 1.492354979137060e-11, 2.815108073739515e-12, +5.422993439215503e-02, 4.834816382995399e-02, 3.849842772297257e-02, 2.747049152899272e-02, 1.764230617167658e-02, 1.024915144818044e-02, 5.414468218315977e-03, 2.614868710858557e-03, 1.160343417569953e-03, 4.754068780289255e-04, 1.806546233671772e-04, 6.393756233361935e-05, 2.115745051758451e-05, 6.569204097218827e-06, 1.920084940045646e-06, 5.298913790709148e-07, 1.384544898072118e-07, 3.433843290627389e-08, 8.102521074067925e-09, 1.822892804265958e-09, 3.918031384526978e-10, 8.060119075613000e-11, 1.589736811499842e-11, 3.010999305486920e-12, +5.399567985666652e-02, 4.816461389531333e-02, 3.839159328151102e-02, 2.743481190745639e-02, 1.765253460416817e-02, 1.027792082349166e-02, 5.443341401316296e-03, 2.636080843242002e-03, 1.173232044012836e-03, 4.821991209722165e-04, 1.838385992534288e-04, 6.528653087264779e-05, 2.167982926737054e-05, 6.755674319271562e-06, 1.981858790012853e-06, 5.489891237669466e-07, 1.439902331256663e-07, 3.584898411824351e-08, 8.491913024313946e-09, 1.918014150682393e-09, 4.138836639885281e-10, 8.548388896212768e-11, 1.692824008231957e-11, 3.219223335304749e-12, +5.376344041083923e-02, 4.798242621165114e-02, 3.828523840708081e-02, 2.739896470246793e-02, 1.766236174930923e-02, 1.030635655797512e-02, 5.472047540951564e-03, 2.657257844817022e-03, 1.186147791246691e-03, 4.890306995273724e-04, 1.870528137176494e-04, 6.665337822945452e-05, 2.221112562329950e-05, 6.946051285101012e-06, 2.045170279457854e-06, 5.686385857163037e-07, 1.497083270701760e-07, 3.741548966084055e-08, 8.897344475614716e-09, 2.017452499792752e-09, 4.370597990644638e-10, 9.062972972361047e-11, 1.801911324561956e-11, 3.440472083515835e-12, +5.353319016510886e-02, 4.780158604847692e-02, 3.817936166988073e-02, 2.736295560421530e-02, 1.767179322989068e-02, 1.033446105721142e-02, 5.500586417329057e-03, 2.678398591978254e-03, 1.199089749269761e-03, 4.959011896671256e-04, 1.902971792831024e-04, 6.803815273509679e-05, 2.275140702322802e-05, 7.140382330310844e-06, 2.110044826397954e-06, 5.888512847497441e-07, 1.556133673784600e-07, 3.903960129265826e-08, 9.319358251796318e-09, 2.121372672051849e-09, 4.613781436569024e-10, 9.605105642733029e-11, 1.917306588653813e-11, 3.675471320883193e-12, +5.330490367150585e-02, 4.762207887950630e-02, 3.807396159916906e-02, 2.732679018058891e-02, 1.768083459872960e-02, 1.036223672765005e-02, 5.528957839225281e-03, 2.699501982455101e-03, 1.212057014403690e-03, 5.028101653055543e-04, 1.935716049361500e-04, 6.944090052312874e-05, 2.330074011397935e-05, 7.338714718279705e-06, 2.176507982470606e-06, 6.096388662916894e-07, 1.617100235108651e-07, 4.072300532595925e-08, 9.758511100569287e-09, 2.229944481496183e-09, 4.868869237727898e-10, 1.017606995468880e-10, 2.039331177746072e-11, 3.924982064400578e-12, +5.307855591428117e-02, 4.744389037931954e-02, 3.796903668519852e-02, 2.729047387974494e-02, 1.768949133931587e-02, 1.038968597593998e-02, 5.557161643419913e-03, 2.720566935126939e-03, 1.225048689396121e-03, 5.097571984248092e-04, 1.968759961825989e-04, 7.086166553366515e-05, 2.385919073946746e-05, 7.541095630619850e-06, 2.244585428773622e-06, 6.310131004250453e-07, 1.680030388398213e-07, 4.246742296070303e-08, 1.021537391151908e-08, 2.343342841148238e-09, 5.136360341537634e-10, 1.077719918590351e-10, 2.168320507324197e-11, 4.189802018707220e-12, +5.285412230076975e-02, 4.726700642007915e-02, 3.786458538108289e-02, 2.725401203261461e-02, 1.769776886646318e-02, 1.041681120828389e-02, 5.585197694040054e-03, 2.741592389835617e-03, 1.238063883518461e-03, 5.167418591999044e-04, 2.002102551042765e-04, 7.230048951810642e-05, 2.442682392917617e-05, 7.747572157704294e-06, 2.314302971669206e-06, 6.529858809170816e-07, 1.744972308204174e-07, 4.427461061329967e-08, 1.069053193400214e-08, 2.461747869316679e-09, 5.416770816395005e-10, 1.140987839869197e-10, 2.304624533531999e-11, 4.470767064150121e-12, +5.263157865248445e-02, 4.709141306830672e-02, 3.776060610459807e-02, 2.721740985536038e-02, 1.770567252696412e-02, 1.044361482981542e-02, 5.613065881914677e-03, 2.762577307195334e-03, 1.251101712658884e-03, 5.237637161215413e-04, 2.035742804158009e-04, 7.375741204450795e-05, 2.500370388699216e-05, 7.958191289265395e-06, 2.385686538553674e-06, 6.755692242068093e-07, 1.811974911419801e-07, 4.614636023993093e-08, 1.118458499486620e-08, 2.585344996767796e-09, 5.710634291878812e-10, 1.207554602727290e-10, 2.448608269026547e-11, 4.768752792524152e-12, +5.241090119643434e-02, 4.691709658171721e-02, 3.765709723991949e-02, 2.718067245178037e-02, 1.771320760024835e-02, 1.047009924399890e-02, 5.640766123939341e-03, 2.783520668400214e-03, 1.264161299410704e-03, 5.308223361169894e-04, 2.069679675215200e-04, 7.523247050358077e-05, 2.558989398039230e-05, 8.172999905068414e-06, 2.458762173594896e-06, 6.987752683543699e-07, 1.881087858605696e-07, 4.808449965428599e-08, 1.169814771591454e-08, 2.714325074743192e-09, 6.018502405492915e-10, 1.277569549820852e-10, 2.600652312479817e-11, 5.084676091527718e-12, +5.219206655666035e-02, 4.674404340611002e-02, 3.755405713929813e-02, 2.714380481566215e-02, 1.772037929904395e-02, 1.049626685205091e-02, 5.668298362451048e-03, 2.804421475029652e-03, 1.277241773156184e-03, 5.379172846689930e-04, 2.103912085725852e-04, 7.672570011530931e-05, 2.618545672998446e-05, 8.392044765663028e-06, 2.533556033439396e-06, 7.226162719529507e-07, 1.952361555123112e-07, 5.009089283956134e-08, 1.223184973103278e-08, 2.848884483798002e-09, 6.340945255920545e-10, 1.351187688424440e-10, 2.761153391928892e-11, 5.419496778978368e-12, +5.197505174598153e-02, 4.657224017231565e-02, 3.745148412467725e-02, 2.710681183308629e-02, 1.772719277004066e-02, 1.052212005238296e-02, 5.695662564613155e-03, 2.825278748851666e-03, 1.290342270145903e-03, 5.450481259327086e-04, 2.138438925241291e-04, 7.823713393616903e-05, 2.679045379940049e-05, 8.615372503215608e-06, 2.610094382890978e-06, 7.471046130037181e-07, 2.025847152074778e-07, 5.216744025457352e-08, 1.278633590289649e-08, 2.989225243433154e-09, 6.678551862755939e-10, 1.428569859176282e-10, 2.930524922174615e-11, 5.774219287838463e-12, +5.175983415794697e-02, 4.640167369319730e-02, 3.734937648925214e-02, 2.706969828468170e-02, 1.773365309455526e-02, 1.054766124006498e-02, 5.722858721810452e-03, 2.846091531624416e-03, 1.303461933573781e-03, 5.522144228506813e-04, 2.173259051925241e-04, 7.976680286693275e-05, 2.740494598554151e-05, 8.843029612425669e-06, 2.688403590562928e-06, 7.722527877543521e-07, 2.101596547052763e-07, 5.431607913384287e-08, 1.336226653917895e-08, 3.135555122494943e-09, 7.031930632676782e-10, 1.509882908205322e-10, 3.109197576427378e-11, 6.149894403107698e-12, +5.154639155898624e-02, 4.623233096070589e-02, 3.724773249897410e-02, 2.703246884783263e-02, 1.773976528919798e-02, 1.057289280630872e-02, 5.749886849054074e-03, 2.866858884896041e-03, 1.316599913647824e-03, 5.594157372658330e-04, 2.208371293126868e-04, 8.131473566104707e-05, 2.802899320917312e-05, 9.075062441528700e-06, 2.768510124505588e-06, 7.980734095016873e-07, 2.179662384692665e-07, 5.653878378150213e-08, 1.396031760817630e-08, 3.288087750314200e-09, 7.401709832016705e-10, 1.595299862659016e-10, 3.297619872396227e-11, 6.547621051643552e-12, +5.133470208075373e-02, 4.606419914298818e-02, 3.714655039400171e-02, 2.699512809883945e-02, 1.774553430654009e-02, 1.059781713797079e-02, 5.776746984396482e-03, 2.887579889803002e-03, 1.329755367656747e-03, 5.666516300324971e-04, 2.243774445954076e-04, 8.288095893356922e-05, 2.866265450587033e-05, 9.311517183388693e-06, 2.850440547811326e-06, 8.245792073590747e-07, 2.260098057033869e-07, 5.883756585889349e-08, 1.458118095376961e-08, 3.447042728557165e-09, 7.788538065694573e-10, 1.685000109649941e-10, 3.496258773016065e-11, 6.968548145976690e-12, +5.112474421266013e-02, 4.589726558154641e-02, 3.704582839009986e-02, 2.695768051503319e-02, 1.775096503578164e-02, 1.062243661707464e-02, 5.803439188356178e-03, 2.908253646867034e-03, 1.342927460032504e-03, 5.739216611254623e-04, 2.279467277846725e-04, 8.446549717064383e-05, 2.930598801730970e-05, 9.552439866682433e-06, 2.934221514198682e-06, 8.517830249889944e-07, 2.342957703685357e-07, 6.121447466571400e-08, 1.522556450964101e-08, 3.612645743759230e-09, 8.193084762453024e-10, 1.779169578637899e-10, 3.705600302005000e-11, 7.413876483191706e-12, +5.091649679458695e-02, 4.573151778844901e-02, 3.694556467998950e-02, 2.692013047684538e-02, 1.775606230341950e-02, 1.064675362035093e-02, 5.829963543352247e-03, 2.928879275790932e-03, 1.356115362408869e-03, 5.812253897470626e-04, 2.315448527149598e-04, 8.606837273951081e-05, 2.995905098290805e-05, 9.797876347178667e-06, 3.019879763577697e-06, 8.796978193015585e-07, 2.428296211797008e-07, 6.367159741458022e-08, 1.589419251266334e-08, 3.785128680512617e-09, 8.616040666356440e-10, 1.878000927263210e-10, 3.926150174442169e-11, 7.884860699948615e-12, +5.070993900977822e-02, 4.556694344359116e-02, 3.684575743464905e-02, 2.688248226983403e-02, 1.776083087391496e-02, 1.067077051879602e-02, 5.856320153148607e-03, 2.949455915253231e-03, 1.369318253676143e-03, 5.885623744322940e-04, 2.351716903684774e-04, 8.768960589902557e-05, 3.062189973180508e-05, 1.004787229911408e-05, 3.107442117598167e-06, 9.083366591194692e-07, 2.516169215836071e-07, 6.621105949887742e-08, 1.658780571538081e-08, 3.964729735278044e-09, 9.058118334493937e-10, 1.981693730645409e-10, 4.158434442553348e-11, 8.382811284722764e-12, +5.050505037790413e-02, 4.540353039200457e-02, 3.674640480456939e-02, 2.684474008666650e-02, 1.776527545036076e-02, 1.069448967724763e-02, 5.882509142307826e-03, 2.969982722701997e-03, 1.382535320032072e-03, 5.959321731519741e-04, 2.388271089323241e-04, 8.932921481068012e-05, 3.129458967518851e-05, 1.030247320666876e-05, 3.196935475182791e-06, 9.377127238100771e-07, 2.606633097168919e-07, 6.883502475377084e-08, 1.730716159750014e-08, 4.151693530790480e-09, 9.520052640830922e-10, 2.090454674160589e-10, 4.403000156889702e-11, 8.909096648345075e-12, +5.030181074829257e-02, 4.524126664121525e-02, 3.664750492096400e-02, 2.680690802906032e-02, 1.776940067514687e-02, 1.071791345397764e-02, 5.908530655654515e-03, 2.990458874147786e-03, 1.395765755029082e-03, 6.033343434139431e-04, 2.425109738555484e-04, 9.098721555010854e-05, 3.197717529895915e-05, 1.056172435554324e-05, 3.288386808046946e-06, 9.678393018851397e-07, 2.699744983447997e-07, 7.154569571025100e-08, 1.805303457631017e-08, 4.346271231027994e-09, 1.000260128614816e-09, 2.204497749709057e-10, 4.660416043081739e-11, 9.465145253925589e-12, +5.010020029332312e-02, 4.508014035864855e-02, 3.654905589693578e-02, 2.676899010968272e-02, 1.777321113062525e-02, 1.074104420030123e-02, 5.934384857748132e-03, 3.010883563955969e-03, 1.409008759617917e-03, 6.107684423623219e-04, 2.462231479060814e-04, 9.266362211906444e-05, 3.266971015673448e-05, 1.082567082463941e-05, 3.381823156207006e-06, 9.987297895689455e-07, 2.795562747804223e-07, 7.434531384209811e-08, 1.882621621594985e-08, 4.548720656712876e-09, 1.050654531400523e-09, 2.324044455484015e-10, 4.931273194348278e-11, 1.005244780724673e-11, +4.990019950197933e-02, 4.492013986908066e-02, 3.645105582860189e-02, 2.673099025400986e-02, 1.777671133977264e-02, 1.076388426020209e-02, 5.960071932365161e-03, 3.031256004638500e-03, 1.422263542187767e-03, 6.182340268748224e-04, 2.499634912275244e-04, 9.435844645785481e-05, 3.337224686318702e-05, 1.109435747784723e-05, 3.477271623478908e-06, 1.030397689335420e-06, 2.894145007844956e-07, 7.723615980564308e-08, 1.962751543544288e-08, 4.759306401313118e-09, 1.103268963266064e-09, 2.449323999250303e-10, 5.216185779936677e-11, 1.067255950871246e-11, +4.970178917355474e-02, 4.476125365213571e-02, 3.635350279617828e-02, 2.669291230214650e-02, 1.777990576685169e-02, 1.078643596997301e-02, 5.985592081990547e-03, 3.051575426645266e-03, 1.435529318602975e-03, 6.257306536581311e-04, 2.537318613957682e-04, 9.607169845821731e-05, 3.408483708771664e-05, 1.136782895593937e-05, 3.574759372968833e-06, 1.062856608414895e-06, 2.995551124457981e-07, 8.022055367221731e-08, 2.045775871541974e-08, 4.978299947512471e-09, 1.158186354287886e-09, 2.580573505141284e-10, 5.515791769668081e-11, 1.132710236794201e-11, +4.950495041150847e-02, 4.460347033982739e-02, 3.625639486502504e-02, 2.665476001060706e-02, 1.778279881806965e-02, 1.080870165787172e-02, 6.010945527318278e-03, 3.071841078155124e-03, 1.448805312236410e-03, 6.332578793413663e-04, 2.575281134754226e-04, 9.780338597662601e-05, 3.480753154845243e-05, 1.164612966857544e-05, 3.674313622557688e-06, 1.096120257271182e-06, 3.099841200421774e-07, 8.330085515317671e-08, 2.131779030344619e-08, 5.205979784116429e-09, 1.215492127155021e-09, 2.718038223980276e-10, 5.830753674757582e-11, 1.201776758209583e-11, +4.930966461746618e-02, 4.444677871414468e-02, 3.615973008665411e-02, 2.661653705405882e-02, 1.778539484223481e-02, 1.083068364379124e-02, 6.036132506761086e-03, 3.092052224866762e-03, 1.462090753999602e-03, 6.408152605676265e-04, 2.613521000760417e-04, 9.955351484801348e-05, 3.554038000658311e-05, 1.192930378641804e-05, 3.775961640381221e-06, 1.130202448049656e-06, 3.207076078822749e-07, 8.647946381739914e-08, 2.220847241787952e-08, 5.442631523361448e-09, 1.275274251104716e-09, 2.861971747131874e-10, 6.161759305076516e-11, 1.274631797902238e-11, +4.911591348536256e-02, 4.429116770468041e-02, 3.606350649970037e-02, 2.657824702702797e-02, 1.778769813141002e-02, 1.085238423894444e-02, 6.061153275969073e-03, 3.112208149789433e-03, 1.475384882369710e-03, 6.484023540836322e-04, 2.652036714081173e-04, 1.013220888998929e-04, 3.628343126101144e-05, 1.221739523336176e-05, 3.879730740307363e-06, 1.165117092996970e-06, 3.317317341279844e-07, 8.975881930114639e-08, 2.313068545017253e-08, 5.688548018593939e-09, 1.337623296423647e-09, 3.012636223886814e-10, 6.509522543019818e-11, 1.351459052631235e-11, +4.892367899572123e-02, 4.413662638630213e-02, 3.596772213085759e-02, 2.653989344556944e-02, 1.778971292156344e-02, 1.087380574556250e-02, 6.086008107357231e-03, 3.132308153033729e-03, 1.488686943413403e-03, 6.560187168274806e-04, 2.690826753388306e-04, 1.031091099668697e-04, 3.703673314333126e-05, 1.251044767887734e-05, 3.985648277412653e-06, 1.200878202853177e-06, 3.430627305977342e-07, 9.314140151019842e-08, 2.408532816554778e-08, 5.944029482285703e-09, 1.402632489506450e-09, 3.170302582383011e-10, 6.874784134138555e-11, 1.432449890734718e-11, +4.873294341006831e-02, 4.398314397686461e-02, 3.587237499578041e-02, 2.650147974890143e-02, 1.779144339321610e-02, 1.089495045660661e-02, 6.110697289641747e-03, 3.152351551602443e-03, 1.501996190807767e-03, 6.636639060145234e-04, 2.729889574475385e-04, 1.049145779055264e-04, 3.780033251312236e-05, 1.280850453047198e-05, 4.093741643459231e-06, 1.237499885216840e-06, 3.547069025506517e-07, 9.662973081415857e-08, 2.507331790196271e-08, 6.209383604351499e-09, 1.470397768462857e-09, 3.335250754063577e-10, 7.258312494693261e-11, 1.517803616542504e-11, +4.854368926547647e-02, 4.383070983496273e-02, 3.577746309995333e-02, 2.646300930100481e-02, 1.779289367208600e-02, 1.091582065549278e-02, 6.135221127384963e-03, 3.172337679181653e-03, 1.515311885858284e-03, 6.713374792213792e-04, 2.769223610809810e-04, 1.067384906096703e-04, 3.857427525356180e-05, 1.311160892626783e-05, 4.204038262374272e-06, 1.274996342883948e-06, 3.666706284517085e-07, 1.002263682328432e-07, 2.609559076728963e-08, 6.484925670734826e-09, 1.541017839264559e-09, 3.507769901671642e-10, 7.660904536280459e-11, 1.607727741704685e-11, +4.835589936923524e-02, 4.367931345772460e-02, 3.568298443952789e-02, 2.642448539218887e-02, 1.779406782972884e-02, 1.093641861582915e-02, 6.159579940548899e-03, 3.192265885932076e-03, 1.528633297513974e-03, 6.790389944680943e-04, 2.808827274081908e-04, 1.085808440259272e-04, 3.935860626734697e-05, 1.341980372769947e-05, 4.316565585733281e-06, 1.313381872161249e-06, 3.789603597179296e-07, 1.039339156146654e-07, 2.715310183463276e-08, 6.770978682227037e-09, 1.614594232422463e-09, 3.688158650780031e-10, 8.083386507680218e-11, 1.702438263544048e-11, +4.816955679364489e-02, 4.352894447864365e-02, 3.558893700212938e-02, 2.638591124062373e-02, 1.779496988417502e-02, 1.095674660116565e-02, 6.183774064057273e-03, 3.212135538280808e-03, 1.541959702379804e-03, 6.867680102984689e-04, 2.848698954750911e-04, 1.104416321696720e-04, 4.015336947292757e-05, 1.373313151233200e-05, 4.431351088248959e-06, 1.352670861154746e-06, 3.915826204457684e-07, 1.077550158069270e-07, 2.824682533570618e-08, 7.067873473484921e-09, 1.691231360184793e-09, 3.876725324852518e-10, 8.526614854068629e-11, 1.802159950539794e-11, +4.798464487092990e-02, 4.337959266544927e-02, 3.549531876763355e-02, 2.634728999384005e-02, 1.779560380056248e-02, 1.097680686475537e-02, 6.207803847365841e-03, 3.231946018713532e-03, 1.555290384726397e-03, 6.945240858585638e-04, 2.888837022587659e-04, 1.123208471412813e-04, 4.095860780104335e-05, 1.405163456680099e-05, 4.548422263267276e-06, 1.392877788034098e-06, 4.045440071197671e-07, 1.116923528179448e-07, 2.937775485219830e-08, 7.375948832211816e-09, 1.771036574246196e-09, 4.073788183832126e-10, 8.991477093735310e-11, 1.907126635049774e-11, +4.780114718826921e-02, 4.323124791801487e-02, 3.540212770891502e-02, 2.630862473019698e-02, 1.779597349176600e-02, 1.099660164932758e-02, 6.231669654041005e-03, 3.251696725567244e-03, 1.568624636497155e-03, 7.023067809733960e-04, 2.929239827213876e-04, 1.142184791426940e-04, 4.177436319156342e-05, 1.437535487987507e-05, 4.667806618272121e-06, 1.434017219273586e-06, 4.178511883026006e-07, 1.157486519709261e-07, 3.054690350504668e-08, 7.695551618466452e-09, 1.854120223957599e-09, 4.279675666250045e-10, 9.478892712440543e-11, 2.017581513377660e-11, +4.761904758294018e-02, 4.308390026630361e-02, 3.530936179256772e-02, 2.626991846031896e-02, 1.779608281902175e-02, 1.101613318687175e-02, 6.255371861346576e-03, 3.271387072823608e-03, 1.581961757312850e-03, 7.101156562218495e-04, 2.969905698637891e-04, 1.161345164942711e-04, 4.260067659062395e-05, 1.470433413564255e-05, 4.789531670400255e-06, 1.476103807870416e-06, 4.315109043066458e-07, 1.199266800495285e-07, 3.175530414155066e-08, 8.027036884064213e-09, 1.940595715026441e-09, 4.494726634847800e-10, 9.989814075543555e-11, 2.133777453291327e-11, +4.743833013757313e-02, 4.293753986834974e-02, 3.521701897959884e-02, 2.623117412850210e-02, 1.779593559254810e-02, 1.103540369843257e-02, 6.278910859838581e-03, 3.291016489903003e-03, 1.595301054473777e-03, 7.179502730098132e-04, 3.010832947786666e-04, 1.180689456519385e-04, 4.343758794806073e-05, 1.503861370682289e-05, 4.913624941967946e-06, 1.519152291541055e-06, 4.455299668471969e-07, 1.242292454350298e-07, 3.300400952024782e-08, 8.370767992034648e-09, 2.030579568696436e-09, 4.719290625703331e-10, 1.052522735802756e-10, 2.255977309097792e-11, +4.725897917551310e-02, 4.279215700827585e-02, 3.512509722609648e-02, 2.619239461409037e-02, 1.779553557216146e-02, 1.105441539391520e-02, 6.302287052967961e-03, 3.310584421459296e-03, 1.608641842959508e-03, 7.258101936415591e-04, 3.052019867033996e-04, 1.200217512246031e-04, 4.428513621513215e-05, 1.537823464820384e-05, 5.040113956010804e-06, 1.563177490896344e-06, 4.599152586774707e-07, 1.286591982350455e-07, 3.429409249348245e-08, 8.727116736099376e-09, 2.124191481395890e-09, 4.953728100850563e-10, 1.108615349254341e-10, 2.384454244379610e-11, +4.708097925628696e-02, 4.264774209434517e-02, 3.503359448387307e-02, 2.615358273282303e-02, 1.779488646788802e-02, 1.107317047190098e-02, 6.325500856691145e-03, 3.330090327175465e-03, 1.621983445426364e-03, 7.336949813893826e-04, 3.093464730724775e-04, 1.219929159918282e-04, 4.514335934252944e-05, 1.572323769020520e-05, 5.169026231838230e-06, 1.608194307596100e-06, 4.746737332055436e-07, 1.332194304037319e-07, 3.562664618759487e-08, 9.096463460133921e-09, 2.221554384843180e-09, 5.198410704380258e-10, 1.167364913558817e-10, 2.519492062496801e-11, +4.690431517117231e-02, 4.250428565704796e-02, 3.494250870108374e-02, 2.611474123815314e-02, 1.779399194057043e-02, 1.109167111947267e-02, 6.348552699088311e-03, 3.349533681560090e-03, 1.635325192202630e-03, 7.416042005615245e-04, 3.135165795695190e-04, 1.239824209217587e-04, 4.601229427867011e-05, 1.607366323256981e-05, 5.300389280603969e-06, 1.654217722483963e-06, 4.898124140933825e-07, 1.379128758534175e-07, 3.700278418066096e-08, 9.479197177577245e-09, 2.322794506597858e-09, 5.453721522008689e-10, 1.228880765193060e-10, 2.661385544957729e-11, +4.672897193886569e-02, 4.236177834722165e-02, 3.485183782282227e-02, 2.607587282253836e-02, 1.779285560247008e-02, 1.110991951204951e-02, 6.371443019989266e-03, 3.368913973744788e-03, 1.648666421281617e-03, 7.495374165683856e-04, 3.177121301788765e-04, 1.259902451892819e-04, 4.689197696827053e-05, 1.642955133818251e-05, 5.434230600894089e-06, 1.701262793703192e-06, 5.053383948381133e-07, 1.427425105576083e-07, 3.842364067771240e-08, 9.875715690752219e-09, 2.428041431045435e-09, 5.720055344098941e-10, 1.293276011738979e-10, 2.810440797761302e-11, +4.655493480124785e-02, 4.222021093420397e-02, 3.476157979169368e-02, 2.603698011870410e-02, 1.779148101786419e-02, 1.112791781323130e-02, 6.394172270606816e-03, 3.388230707282642e-03, 1.662006478312619e-03, 7.574941959870622e-04, 3.219329472368112e-04, 1.280163661944144e-04, 4.778244235119368e-05, 1.679094172701760e-05, 5.570577674333781e-06, 1.749344654794168e-06, 5.212588383357159e-07, 1.477113526453199e-07, 3.989037068336987e-08, 1.028642571006051e-08, 2.537428160803772e-09, 5.997818932118402e-10, 1.360667634006872e-10, 2.966975605812295e-11, +4.638218921924295e-02, 4.207957430401844e-02, 3.467173254836582e-02, 2.599806570088028e-02, 1.778987170363837e-02, 1.114566817465160e-02, 6.416740913177544e-03, 3.407483399947697e-03, 1.675344716589835e-03, 7.654741066242090e-04, 3.261788514822309e-04, 1.300607595809019e-04, 4.868372436156807e-05, 1.715787377021532e-05, 5.709457961214276e-06, 1.798478512774312e-06, 5.375809764272916e-07, 1.528224624866850e-07, 4.140415017182063e-08, 1.071174297301488e-08, 2.651091178538587e-09, 6.287431288514196e-10, 1.431176590013844e-10, 3.131319795510233e-11, +4.621072086876975e-02, 4.193985945759166e-02, 3.458229403209923e-02, 2.595913208601159e-02, 1.778803112987363e-02, 1.116317273583945e-02, 6.439149420609862e-03, 3.426671583535544e-03, 1.688680497039330e-03, 7.734767175772624e-04, 3.304496621069825e-04, 1.321233992550229e-04, 4.959585592717409e-05, 1.753038648428795e-05, 5.850898896141330e-06, 1.848679646201195e-06, 5.543121094281112e-07, 1.580789427698017e-07, 4.296617625407598e-08, 1.115209236307238e-08, 2.769170509175534e-09, 6.589323929987227e-10, 1.504927920826442e-10, 3.303815605611736e-11, +4.604051563678258e-02, 4.180105750900177e-02, 3.449326218125724e-02, 2.592018173494225e-02, 1.778596272042889e-02, 1.118043362408959e-02, 6.461398276139252e-03, 3.445794803665062e-03, 1.702013188204082e-03, 7.815015992940307e-04, 3.347451968056858e-04, 1.342042574045827e-04, 5.051886896909283e-05, 1.790851852545547e-05, 5.994927883706295e-06, 1.899963403219493e-06, 5.714596056395996e-07, 1.634839385687755e-07, 4.457766734244092e-08, 1.160790802823088e-08, 2.891809782495794e-09, 6.903941164143408e-10, 1.582050858275930e-10, 3.484818066464597e-11, +4.587155961739878e-02, 4.166315968375730e-02, 3.440463493379588e-02, 2.588121705357570e-02, 1.778366985351790e-02, 1.119745295434074e-02, 6.483487972990548e-03, 3.464852619581364e-03, 1.715342166227204e-03, 7.895483236306779e-04, 3.390652718251053e-04, 1.363033045180892e-04, 5.145279440161418e-05, 1.829230818411178e-05, 6.141572294181332e-06, 1.952345199592634e-06, 5.890309008444785e-07, 1.690406374029299e-07, 4.623986331213488e-08, 1.207963349935273e-08, 3.019156296102189e-09, 7.231740369499922e-10, 1.662678934554306e-10, 3.674695387711352e-11, +4.570383910811191e-02, 4.152615731710641e-02, 3.431641022773538e-02, 2.584224039400981e-02, 1.778115586228123e-02, 1.121423282906180e-02, 6.505419014047229e-03, 3.483844603959974e-03, 1.728666814833369e-03, 7.976164639081216e-04, 3.434097020130475e-04, 1.384205094040996e-04, 5.239766213239934e-05, 1.868179337942098e-05, 6.290859459239708e-06, 2.005840516719740e-06, 6.070334977852304e-07, 1.747522692871443e-07, 4.795402565999714e-08, 1.256772180817765e-08, 3.151361078742252e-09, 7.573192278821917e-10, 1.746950093698334e-10, 3.873829354558238e-11, +4.553734060608693e-02, 4.139004185237512e-02, 3.422858600161288e-02, 2.580325405564792e-02, 1.777842403535281e-02, 1.123077533814561e-02, 6.527191911527517e-03, 3.502770342712301e-03, 1.741986525308525e-03, 8.057055949668610e-04, 3.477783008667798e-04, 1.405558392107246e-04, 5.335350106289392e-05, 1.907701165404446e-05, 6.442816667702599e-06, 2.060464899638698e-06, 6.254749656261227e-07, 1.806221067733035e-07, 4.972143766021883e-08, 1.307263560498871e-08, 3.288578953974790e-09, 7.928781265764585e-10, 1.835006804968560e-10, 4.082615732704855e-11, +4.537205080453680e-02, 4.125480483933464e-02, 3.414116019491756e-02, 2.576426028628676e-02, 1.777547761742144e-02, 1.124708255881008e-02, 6.548807186667278e-03, 3.521629434792420e-03, 1.755300696477955e-03, 8.138152932202563e-04, 3.521708805809611e-04, 1.427092594452849e-04, 5.432033908898698e-05, 1.947800016899863e-05, 6.597471161313387e-06, 2.116233955016029e-06, 6.443629393989669e-07, 1.866534649828246e-07, 5.154340451703734e-08, 1.359484727589341e-08, 3.430968604165937e-09, 8.299005634793020e-10, 1.926996178129430e-10, 4.301464682027878e-11, +4.520795658917705e-02, 4.112043793259718e-02, 3.405413074850873e-02, 2.572526128318092e-02, 1.777231980978664e-02, 1.126315655550645e-02, 6.570265369409510e-03, 3.540421492005219e-03, 1.768608734682721e-03, 8.219451367062801e-04, 3.565872520950788e-04, 1.448807339941052e-04, 5.529820310191234e-05, 1.988479569864333e-05, 6.754850130540710e-06, 2.173163349124288e-06, 6.637051194328501e-07, 1.928497016302502e-07, 5.342125351433687e-08, 1.413483905968383e-08, 3.578692634800735e-09, 8.684377914351718e-10, 2.023070080636286e-10, 4.530801179111378e-11, +4.504504503475756e-02, 4.098693289003906e-02, 3.396749560501728e-02, 2.568625919408534e-02, 1.776895377090940e-02, 1.127899937983449e-02, 6.591566998100445e-03, 3.559146138815943e-03, 1.781910053754575e-03, 8.300947051377634e-04, 3.610272251403859e-04, 1.470702251424386e-04, 5.628711898938702e-05, 2.029743462580113e-05, 6.914980710411266e-06, 2.231268805807734e-06, 6.835092707680403e-07, 1.992142170378856e-07, 5.535633416209428e-08, 1.469310316423800e-08, 3.731917639095868e-09, 9.085425153253296e-10, 2.123385256734191e-10, 4.771065448714377e-11, +4.488330340166864e-02, 4.085428157125165e-02, 3.388125270923101e-02, 2.564725611827542e-02, 1.776538261695741e-02, 1.129461307046422e-02, 6.612712619192014e-03, 3.577803012161155e-03, 1.795204074989377e-03, 8.382635799511534e-04, 3.654906082863329e-04, 1.492776935945109e-04, 5.728711163698362e-05, 2.071595293700726e-05, 7.077889976373547e-06, 2.290566104436979e-06, 7.037832225543008e-07, 2.057504541414740e-07, 5.735001833961595e-08, 1.527014188242628e-08, 3.890814262899134e-09, 9.502689220255176e-10, 2.228103448473138e-10, 5.022713404265211e-11, +4.472271913262009e-02, 4.072247593601856e-02, 3.379540000846487e-02, 2.560825410754588e-02, 1.776160942234490e-02, 1.130999965306429e-02, 6.633702786950691e-03, 3.596391761261163e-03, 1.808490227119074e-03, 8.464513443538058e-04, 3.699772089864881e-04, 1.515030984936758e-04, 5.829820492973132e-05, 2.114038621789011e-05, 7.243604940193490e-06, 2.351071077853321e-06, 7.245348674338373e-07, 2.124618984868949e-07, 5.940370043550801e-08, 1.586646770748551e-08, 4.055557269860872e-09, 9.936727106790988e-10, 2.337391518643365e-10, 5.286217097470293e-11, +4.456327984939165e-02, 4.059150804281948e-02, 3.370993545291584e-02, 2.556925516718852e-02, 1.775763722026702e-02, 1.132516114023635e-02, 6.654538063172564e-03, 3.614912047433917e-03, 1.821767946282297e-03, 8.546575833698299e-04, 3.744868336239402e-04, 1.537463974426689e-04, 5.932042175394131e-05, 2.157076964868201e-05, 7.412152545883008e-06, 2.412799610303462e-06, 7.457721609090959e-07, 2.193520782178834e-07, 6.151879748432610e-08, 1.648260344782414e-08, 4.226325606862447e-09, 1.038811123282216e-09, 2.451421575634041e-10, 5.562065177123565e-11, +4.440497334965190e-02, 4.046137004735952e-02, 3.362485699600370e-02, 2.553026125694932e-02, 1.775346900322881e-02, 1.134009953145561e-02, 6.675219016904510e-03, 3.633363543910429e-03, 1.835036675993636e-03, 8.628818838845118e-04, 3.790192875561827e-04, 1.560075465239576e-04, 6.035378399925335e-05, 2.200713799986046e-05, 7.583559665662564e-06, 2.475767635365390e-06, 7.675031206956829e-07, 2.264245640547726e-07, 6.369674929985336e-08, 1.711908234122241e-08, 4.403302469686895e-09, 1.085742975577419e-09, 2.570371100217970e-10, 5.850763357201293e-11, +4.424778760384563e-02, 4.033205420112382e-02, 3.354016259469772e-02, 2.549127429196554e-02, 1.774910772356860e-02, 1.135481681301709e-02, 6.695746224171436e-03, 3.651745935651723e-03, 1.848295867111625e-03, 8.711238346873321e-04, 3.835743751594729e-04, 1.582865003201697e-04, 6.139831256089741e-05, 2.244952562791885e-05, 7.757853095958515e-06, 2.539991133866013e-06, 7.897358260606025e-07, 2.336829692642527e-07, 6.593901860495263e-08, 1.777644816839006e-08, 4.586675368916113e-09, 1.134528688251946e-09, 2.694423074264067e-10, 6.152834894324661e-11, +4.409171075214642e-02, 4.020355284995708e-02, 3.345585020982976e-02, 2.545229614368294e-02, 1.774455629397607e-02, 1.136931495798764e-02, 6.716120267709398e-03, 3.670058919167346e-03, 1.861544977805499e-03, 8.793830265135998e-04, 3.881518998726601e-04, 1.605832119345994e-04, 6.245402734216756e-05, 2.289796647126709e-05, 7.935059553436375e-06, 2.605486131791345e-06, 8.124784171460975e-07, 2.411309496201616e-07, 6.824709115794425e-08, 1.845525536584613e-08, 4.776636196039541e-09, 1.185230318436848e-09, 2.823766111379131e-10, 6.468821074671570e-11, +4.393673110147393e-02, 4.007585843266726e-02, 3.337191780639467e-02, 2.541332864075396e-02, 1.773981758800472e-02, 1.138359592616321e-02, 6.736341736704600e-03, 3.688302202335457e-03, 1.874783473520783e-03, 8.876590520847261e-04, 3.927516642404837e-04, 1.628976330117771e-04, 6.352094725710288e-05, 2.335249404626098e-05, 8.115205671070667e-06, 2.672268698189861e-06, 8.357390942793088e-07, 2.487722033553086e-07, 7.062247587545981e-08, 1.915606913808415e-08, 4.973381289758415e-09, 1.237911591502865e-09, 2.958594589479379e-10, 6.799281710416473e-11, +4.378283712257336e-02, 3.994896347965313e-02, 3.328836335383787e-02, 2.537437356991676e-02, 1.773489444057891e-02, 1.139766166403146e-02, 6.756411226538099e-03, 3.706475504224514e-03, 1.888010826943728e-03, 8.959515061471583e-04, 3.973734699563366e-04, 1.652297137580981e-04, 6.459909023337196e-05, 2.381314144336087e-05, 8.298317994252555e-06, 2.740354943069782e-06, 8.595261172680369e-07, 2.566104711043506e-07, 7.306670495172569e-08, 1.987946556898715e-08, 5.177111502470055e-09, 1.292637933148947e-09, 3.099108785291862e-10, 7.144795645775775e-11, +4.363001744715687e-02, 3.982286061155552e-02, 3.320518482633081e-02, 2.533543267685622e-02, 1.772978964849540e-02, 1.141151410473940e-02, 6.776329338536115e-03, 3.724578554916578e-03, 1.901226517964677e-03, 9.042599855099881e-04, 4.020171179044872e-04, 1.675794029624983e-04, 6.568847321535449e-05, 2.427994132341776e-05, 8.484422976935653e-06, 2.809761015290885e-06, 8.838478046828231e-07, 2.646495358377285e-07, 7.558133397422763e-08, 2.062603173245615e-08, 5.388032266916089e-09, 1.349476501779041e-09, 3.245515010785000e-10, 7.505961272733913e-11, +4.347826086510354e-02, 3.969754253793097e-02, 3.312238020303462e-02, 2.529650766704636e-02, 1.772450597091944e-02, 1.142515516806592e-02, 6.796096679725934e-03, 3.742611095332259e-03, 1.914430033640378e-03, 9.125840890812658e-04, 4.066824082017649e-04, 1.699466480171729e-04, 6.678911216741908e-05, 2.475292591408794e-05, 8.673546977821301e-06, 2.880503100451610e-06, 9.087125331256531e-07, 2.728932227866936e-07, 7.816794203571558e-08, 2.139636580221729e-08, 5.606353662978705e-09, 1.408496221162769e-09, 3.398025751527026e-10, 7.883397056523605e-11, +4.332755632171881e-02, 3.957300205594846e-02, 3.303994746835268e-02, 2.525760020657558e-02, 1.771904612987528e-02, 1.143858676039902e-02, 6.815713862597188e-03, 3.760572877057291e-03, 1.927620868155304e-03, 9.209234179030315e-04, 4.113691402386995e-04, 1.723313949383268e-04, 6.790102207738942e-05, 2.523212700637400e-05, 8.865716256583677e-06, 2.952597418772032e-06, 9.341287364854967e-07, 2.813453993594332e-07, 8.082813184250149e-08, 2.219107716077141e-08, 5.832290484608552e-09, 1.469767813375328e-09, 3.556859806970178e-10, 8.277742070931332e-11, +4.317789291504982e-02, 3.944923204910822e-02, 3.295788461217205e-02, 2.521871192295450e-02, 1.771341281073151e-02, 1.145181077471755e-02, 6.835181504868561e-03, 3.778463662170803e-03, 1.940798522782027e-03, 9.292775751850987e-04, 4.160771127201205e-04, 1.747335883869525e-04, 6.902421696019748e-05, 2.571757595129307e-05, 9.060956970135894e-06, 3.026060222973472e-06, 9.601049051810014e-07, 2.900099750483380e-07, 8.356352981901240e-08, 2.301078650745206e-08, 6.066062306868192e-09, 1.533363832011988e-09, 3.722242432658182e-10, 8.689656543497484e-11, +4.302925989325634e-02, 3.932622548598150e-02, 3.287618963009415e-02, 2.517984440590657e-02, 1.770760866268056e-02, 1.146482909057739e-02, 6.854500229259625e-03, 3.796283223075221e-03, 1.953962505840666e-03, 9.376461663375829e-04, 4.208061237052044e-04, 1.771531716896230e-04, 7.015870986171649e-05, 2.620930365667012e-05, 9.259295168937327e-06, 3.100907796155277e-06, 9.866495853905470e-07, 2.988909013284215e-07, 8.637578620855405e-08, 2.385612596555576e-08, 6.307893553074310e-09, 1.599358695672206e-09, 3.894405484353396e-10, 9.119822410677692e-11, +4.288164665203621e-02, 3.920397541897279e-02, 3.279486052365558e-02, 2.514099920814277e-02, 1.770163629921307e-02, 1.147764357410180e-02, 6.873670663267980e-03, 3.814031342327893e-03, 1.967112332657482e-03, 9.460287990022332e-04, 4.255559706469815e-04, 1.795900868592989e-04, 7.130451286277274e-05, 2.670734058405723e-05, 9.460756793343449e-06, 3.177156449669564e-06, 1.013771378269993e-06, 3.079921715469423e-07, 8.926657517025145e-08, 2.472773918851151e-08, 6.558013562022514e-09, 1.667828721708496e-09, 4.073587564079930e-10, 9.568943883030656e-11, +4.273504273210309e-02, 3.908247498310176e-02, 3.271389530053854e-02, 2.510217784611947e-02, 1.769549829858671e-02, 1.149025607797584e-02, 6.892693438951311e-03, 3.831707812474384e-03, 1.980247525522613e-03, 9.544250830825521e-04, 4.303264504312887e-04, 1.820442746161363e-04, 7.246163708332843e-05, 2.721171674577641e-05, 9.665367669998247e-06, 3.254822520994418e-06, 1.041478939158333e-06, 3.173178208042473e-07, 9.223759487212331e-08, 2.562628146505372e-08, 6.816656655277590e-09, 1.738852160234812e-09, 4.260034168077658e-10, 1.003774802049437e-10, +4.258943781671641e-02, 3.896171739480690e-02, 3.263329197477258e-02, 2.506338180078111e-02, 1.768919720428979e-02, 1.150266844144480e-02, 6.911569192714587e-03, 3.849312435883509e-03, 1.993367613647071e-03, 9.628346307727579e-04, 4.351173594151808e-04, 1.845156744082946e-04, 7.363009268683509e-05, 2.772246170208700e-05, 9.873153508270447e-06, 3.333922371606340e-06, 1.069780976771590e-06, 3.268719258258916e-07, 9.529056758026075e-08, 2.655241982336615e-08, 7.084062204512885e-09, 1.812509228389301e-09, 4.453997836662070e-10, 1.052698531781155e-10, +4.244482172926076e-02, 3.884169595076808e-02, 3.255304856692594e-02, 2.502461251828677e-02, 1.768273552549917e-02, 1.151488249031626e-02, 6.930298565101977e-03, 3.866845024584022e-03, 2.006472133118927e-03, 9.712570565855695e-04, 4.399284934647830e-04, 1.870042244327303e-04, 7.480988888474914e-05, 2.823960455847494e-05, 1.008413989673356e-05, 3.414472384852394e-06, 1.098686252385158e-06, 3.366586048260582e-07, 9.842723974406862e-08, 2.750683313416166e-08, 7.360474698881444e-09, 1.888882144845925e-09, 4.655738305983553e-10, 1.103743030016134e-10, +4.230118443087523e-02, 3.872240402674958e-02, 3.247316310428903e-02, 2.498587141072206e-02, 1.767611573753314e-02, 1.152690003696585e-02, 6.948882200593694e-03, 3.884305400103078e-03, 2.019560626858823e-03, 9.796919773788799e-04, 4.447596479926045e-04, 1.895098616559779e-04, 7.600103394120935e-05, 2.876317396306470e-05, 1.029835229969098e-05, 3.496488963822866e-06, 1.128203579004952e-06, 3.466820173623413e-07, 1.016493820775449e-07, 2.849021221266620e-08, 7.646143812402489e-09, 1.968055164569584e-09, 4.865522661679635e-10, 1.156988212905344e-10, +4.215851601813029e-02, 3.860383507646247e-02, 3.239363362104873e-02, 2.494715985679606e-02, 1.766934028229894e-02, 1.153872288034661e-02, 6.967320747407472e-03, 3.901693393306374e-03, 2.032632644574788e-03, 9.881390123812975e-04, 4.496106179942956e-04, 1.920325218349051e-04, 7.720353517786928e-05, 2.929319810415191e-05, 1.051581605374602e-05, 3.579988529224871e-06, 1.158341820527557e-06, 3.569463641819213e-07, 1.049587896365579e-07, 2.950325991947229e-08, 7.941324471345538e-09, 2.050114613808953e-09, 5.083625494412379e-10, 1.212516521853688e-10, +4.201680672075168e-02, 3.848598263044563e-02, 3.231445815845447e-02, 2.490847920252360e-02, 1.766241156873471e-02, 1.155035280600153e-02, 6.985614857304730e-03, 3.919008844240061e-03, 2.045687742716417e-03, 9.965977832166063e-04, 4.544811980848606e-04, 1.945721395374409e-04, 7.841739897888219e-05, 2.982970470785642e-05, 1.073655636441811e-05, 3.664987517257661e-06, 1.189109890889748e-06, 3.674558870591999e-07, 1.083572818921008e-07, 3.054669126023103e-08, 8.246276921595711e-09, 2.135148925321442e-09, 5.310329057283112e-10, 1.270412986177445e-10, +4.187604689939010e-02, 3.836884029496588e-02, 3.223563476497658e-02, 2.486983076189359e-02, 1.765533197324667e-02, 1.156179158607951e-02, 7.003765185401221e-03, 3.936251601974332e-03, 2.058725484428436e-03, 1.005067913927145e-03, 4.593711825343193e-04, 1.971286481632668e-04, 7.964263079603312e-05, 3.037272103589420e-05, 1.096059830280500e-05, 3.751502377490102e-06, 1.220516753207580e-06, 3.782148686249325e-07, 1.118467027994851e-07, 3.162123348414930e-08, 8.561266795982457e-09, 2.223248673824253e-09, 5.545923425115287e-10, 1.330765286803012e-10, +4.173622704343527e-02, 3.825240175093583e-02, 3.215716149645632e-02, 2.483121581752333e-02, 1.764810384014053e-02, 1.157304097935430e-02, 7.021772389982155e-03, 3.953421524448793e-03, 2.071745439503698e-03, 1.013549030996130e-03, 4.642803653028247e-04, 1.997019799644671e-04, 8.087923515401469e-05, 3.092227388346803e-05, 1.118796680229205e-05, 3.839549570741034e-06, 1.252571418905400e-06, 3.892276321869278e-07, 1.154289208634564e-07, 3.272762618126102e-08, 8.886565181554929e-09, 2.314506611665670e-09, 5.790706655596202e-10, 1.393663821011525e-10, +4.159733776887393e-02, 3.813666075285039e-02, 3.207903641624904e-02, 2.479263562129921e-02, 1.764072948204816e-02, 1.158410273124651e-02, 7.039637132321727e-03, 3.970518478319520e-03, 2.084747184335637e-03, 1.022040763368951e-03, 4.692085400752321e-04, 2.022920660661329e-04, 8.212721565584288e-05, 3.147838957727490e-05, 1.141868665530859e-05, 3.929145566962976e-06, 1.285282946835024e-06, 4.004985415423609e-07, 1.191058291991978e-07, 3.386662137844068e-08, 9.222448686786292e-09, 2.409017704710376e-09, 6.044984952267103e-10, 1.459201768233571e-10, +4.145936981619061e-02, 3.802161112774051e-02, 3.200125759535964e-02, 2.475409139500433e-02, 1.763321118034881e-02, 1.159497857384850e-02, 7.057360076506897e-03, 3.987542338807896e-03, 2.097730301870206e-03, 1.030542742473446e-03, 4.741555002951237e-04, 2.048988364869128e-04, 8.338657498840769e-05, 3.204109397362979e-05, 1.165278251013205e-05, 4.020306843129830e-06, 1.318660442385382e-06, 4.120320007817689e-07, 1.228793455892039e-07, 3.503898363412816e-08, 9.569199508689945e-09, 2.506879168432642e-09, 6.309072829350814e-10, 1.527475156898007e-10, +4.132231404830956e-02, 3.790724677414416e-02, 3.192382311257134e-02, 2.471558433093285e-02, 1.762555118558539e-02, 1.160567022595200e-02, 7.074941889265393e-03, 4.004492989551160e-03, 2.110694381557345e-03, 1.039054602239186e-03, 4.791210391982916e-04, 2.075222201595062e-04, 8.465731492815587e-05, 3.261041245670480e-05, 1.189027886774019e-05, 4.113049881129128e-06, 1.352713056582923e-06, 4.238324540847931e-07, 1.267514125360001e-07, 3.624549013173479e-08, 9.927105499830171e-09, 2.608190504211038e-09, 6.583293278405294e-10, 1.598582932338628e-10, +4.118616144857777e-02, 3.779356166109458e-02, 3.184673105456758e-02, 2.467711559249179e-02, 1.761775171787544e-02, 1.161617939307836e-02, 7.092383239797841e-03, 4.021370322454642e-03, 2.123639019301992e-03, 1.047575979115772e-03, 4.841049498456764e-04, 2.101621449510928e-04, 8.593943634690076e-05, 3.318636993688195e-05, 1.213120007871182e-05, 4.207391165659334e-06, 1.387449985183045e-06, 4.359043855077267e-07, 1.307239973106857e-07, 3.748693077169945e-08, 1.029646023520971e-08, 2.713053535818188e-09, 6.867977936790586e-10, 1.672627025762078e-10, +4.105090311878745e-02, 3.768054982712495e-02, 3.176997951604731e-02, 2.463868631479026e-02, 1.760981496731729e-02, 1.162650776751148e-02, 7.109684799613973e-03, 4.038174237545823e-03, 2.136563817414683e-03, 1.056106512090189e-03, 4.891070251557668e-04, 2.128185376836942e-04, 8.723293921775619e-05, 3.376899084921935e-05, 1.237557034017633e-05, 4.303347182132827e-06, 1.422880467752882e-06, 4.482523187629477e-07, 1.347990919972842e-07, 3.876410826216650e-08, 1.067756307901709e-08, 2.821572446099107e-09, 7.163467257936396e-10, 1.749712424280235e-10, +4.091653027723763e-02, 3.756820537928963e-02, 3.169356659983426e-02, 2.460029760521669e-02, 1.760174309439098e-02, 1.163665702833298e-02, 7.126847242372760e-03, 4.054904642830034e-03, 2.149468384561750e-03, 1.064645842703211e-03, 4.941270579364624e-04, 2.154913241544623e-04, 8.853782262118966e-05, 3.435829915202849e-05, 1.262341369281239e-05, 4.400934414585009e-06, 1.459013786745677e-06, 4.608808169902966e-07, 1.389787135328798e-07, 4.007783820825466e-08, 1.107071925121592e-08, 2.933853813831355e-09, 7.470110683396239e-10, 1.829947242009882e-10, +4.078303425683345e-02, 3.745652249220135e-02, 3.161749041697993e-02, 2.456195054400399e-02, 1.759353823035449e-02, 1.164662884145991e-02, 7.143871243726519e-03, 4.071561454147932e-03, 2.162352335715179e-03, 1.073193615064896e-03, 4.991648409164007e-04, 2.181804291558894e-04, 8.985408475119198e-05, 3.495431832556321e-05, 1.287475401789619e-05, 4.500169343590152e-06, 1.495859266567094e-06, 4.737944825204840e-07, 1.432649037435267e-07, 4.142894919988966e-08, 1.147623989395914e-08, 3.050006650760387e-09, 7.788266816674060e-10, 1.913442792242310e-10, +4.065040650322284e-02, 3.734549540708427e-02, 3.154174908686082e-02, 2.452364618478312e-02, 1.758520247763465e-02, 1.165642485968458e-02, 7.160757481168766e-03, 4.088144595034666e-03, 2.175215292102098e-03, 1.081749475869164e-03, 5.042201667757478e-04, 2.208857764959359e-04, 9.118172292155853e-05, 3.555707137081697e-05, 1.312961503439931e-05, 4.601068444184422e-06, 1.533426272633699e-06, 4.869979566305933e-07, 1.476597293759133e-07, 4.281828289817094e-08, 1.189444213781034e-08, 3.170142438803105e-09, 8.118303598807880e-10, 2.000313660685136e-10, +4.051863857296897e-02, 3.723511843084226e-02, 3.146634073726986e-02, 2.448538555512514e-02, 1.757673791021348e-02, 1.166604672271660e-02, 7.177506633885870e-03, 4.104653996580759e-03, 2.188056881153993e-03, 1.090313074407511e-03, 5.092928281764620e-04, 2.236072890180703e-04, 9.252073357227882e-05, 3.616658080842935e-05, 1.338802029613680e-05, 4.703648183796663e-06, 1.571724210423951e-06, 5.004959192917673e-07, 1.521652821247724e-07, 4.424669412024594e-08, 1.232564916775514e-08, 3.294375167412809e-09, 8.460598485695019e-10, 2.090677779778346e-10, +4.038772213175872e-02, 3.712538593514290e-02, 3.139126350450276e-02, 2.444716965707232e-02, 1.756814657400952e-02, 1.167549605722695e-02, 7.194119382612382e-03, 4.121089597294722e-03, 2.200876736455609e-03, 1.098884062581849e-03, 5.143826177920284e-04, 2.263448886212192e-04, 9.387111227603113e-05, 3.678286867769905e-05, 1.364999318896533e-05, 4.807925020187387e-06, 1.610762524521955e-06, 5.142930889091511e-07, 1.567836786560192e-07, 4.571505092266371e-08, 1.277019028898484e-08, 3.422821371098384e-09, 8.815538627142039e-10, 2.184656504086260e-10, +4.025764895264505e-02, 3.701629235551563e-02, 3.131651553343838e-02, 2.440899946765798e-02, 1.755943048725431e-02, 1.168477447689398e-02, 7.210596409489916e-03, 4.137451342967338e-03, 2.213674497693617e-03, 1.107462094916492e-03, 5.194893283366645e-04, 2.290984962796190e-04, 9.523285374477747e-05, 3.740595653570294e-05, 1.391555692803194e-05, 4.913915399396468e-06, 1.650550697654282e-06, 5.283942220541727e-07, 1.615170606256139e-07, 4.722423468318147e-08, 1.322840099243531e-08, 3.555600167090678e-09, 9.183521047622615e-10, 2.282374686766872e-10, +4.012841091432406e-02, 3.690783219046537e-02, 3.124209497761492e-02, 2.437087593941605e-02, 1.755059164086432e-02, 1.169388358245144e-02, 7.226938397929665e-03, 4.153739186537665e-03, 2.226449810605027e-03, 1.116046828569329e-03, 5.246127525940098e-04, 2.318680320625705e-04, 9.660595183645583e-05, 3.803586545651944e-05, 1.418473455507343e-05, 5.021635753700062e-06, 1.691098249720140e-06, 5.428041131892583e-07, 1.663675946941331e-07, 4.877514018099766e-08, 1.370062302006335e-08, 3.692833293148786e-09, 9.564952828725077e-10, 2.383960757119602e-10, +3.999999999944447e-02, 3.680000000059995e-02, 3.116799999930049e-02, 2.433280000087975e-02, 1.754163199880782e-02, 1.170282496173812e-02, 7.243146032478268e-03, 4.169953087960721e-03, 2.239202326925400e-03, 1.124637923342177e-03, 5.297526834452905e-04, 2.346534151540891e-04, 9.799039956176666e-05, 3.867261603055560e-05, 1.445754893576657e-05, 5.131102499577167e-06, 1.732414736815195e-06, 5.575275943850521e-07, 1.713374725370491e-07, 5.036867567538636e-08, 1.418720442984371e-08, 3.834645145498997e-09, 9.960251293271561e-10, 2.489546799212349e-10, +3.987240829294975e-02, 3.669279040777199e-02, 3.109422876955934e-02, 2.429477255707047e-02, 1.753255349846737e-02, 1.171160018974939e-02, 7.259219998687194e-03, 4.186093014076861e-03, 2.251931704336881e-03, 1.133235041690341e-03, 5.349089138969706e-04, 2.374545638724462e-04, 9.938618909104867e-05, 3.931622836397586e-05, 1.473402275712934e-05, 5.242332035686311e-06, 1.774509750249306e-06, 5.725695350302413e-07, 1.764289108507050e-07, 5.200576298270665e-08, 1.468849966046898e-08, 3.981162816898958e-09, 1.036984419108917e-09, 2.599268631588246e-10, +3.974562798045175e-02, 3.658619809423417e-02, 3.102077946831322e-02, 2.425679448997611e-02, 1.752335805099742e-02, 1.172021082869019e-02, 7.275160982985326e-03, 4.202158938482781e-03, 2.264637606416029e-03, 1.141837848731389e-03, 5.400812371078899e-04, 2.402713956896017e-04, 1.007933117612414e-04, 3.996672207823158e-05, 1.501417852497326e-05, 5.355340740852835e-06, 1.817392915558485e-06, 5.879348415340744e-07, 1.816441513539856e-07, 5.368733755176373e-08, 1.520486959573552e-08, 4.132516134819641e-09, 1.079416988641360e-09, 2.713265888052371e-10, +3.961965134663534e-02, 3.648021780180880e-02, 3.094765028439870e-02, 2.421886665902011e-02, 1.751404754167754e-02, 1.172865842802977e-02, 7.290969672554919e-03, 4.218150841404258e-03, 2.277319702581555e-03, 1.150446012253192e-03, 5.452694464158916e-04, 2.431038272505201e-04, 1.022117580829310e-04, 4.062411630969009e-05, 1.529803856140694e-05, 5.470144972067174e-06, 1.861073891511347e-06, 6.036284570216551e-07, 1.869854607856780e-07, 5.541434853749613e-08, 1.573668162859790e-08, 4.288837699737492e-09, 1.123367754690443e-09, 2.831682099538219e-10, +3.949447077369333e-02, 3.637484433107026e-02, 3.087483941561983e-02, 2.418098990152054e-02, 1.750462383026093e-02, 1.173694452455779e-02, 7.306646755210712e-03, 4.234068709570487e-03, 2.289977668041886e-03, 1.159059202721194e-03, 5.504733353639474e-04, 2.459517743923709e-04, 1.036415177474757e-04, 4.128842970936193e-05, 1.558562500239104e-05, 5.586761062494625e-06, 1.905562369110358e-06, 6.196553610221282e-07, 1.924551308975236e-07, 5.718775887296739e-08, 1.628430972487528e-08, 4.450262923529275e-09, 1.168882733425129e-09, 2.954664777053561e-10, +3.937007873979098e-02, 3.627007254054043e-02, 3.080234506879716e-02, 2.414316503313999e-02, 1.749508875131842e-02, 1.174507064244189e-02, 7.322192919282138e-03, 4.249912536090095e-03, 2.302611183742655e-03, 1.167677093284966e-03, 5.556926977257756e-04, 2.488151521636050e-04, 1.050825796342074e-04, 4.195968044272438e-05, 1.587695979534443e-05, 5.705205319496937e-06, 1.950868070588132e-06, 6.360205691498211e-07, 1.980554784429553e-07, 5.900854533963631e-08, 1.684813448659187e-08, 4.616930067961722e-09, 1.216009059634861e-09, 3.082365495704795e-10, +3.924646781755913e-02, 3.616589734589777e-02, 3.073016545981238e-02, 2.410539284832619e-02, 1.748544411457821e-02, 1.175303829328663e-02, 7.337608853498699e-03, 4.265682320328783e-03, 2.315219936314103e-03, 1.176299359784061e-03, 5.609273275309655e-04, 2.516938748429099e-04, 1.065349318177057e-04, 4.263788618964119e-05, 1.617206469680208e-05, 5.825494022666257e-06, 1.997000748399101e-06, 6.527291327784759e-07, 2.037888451615292e-07, 6.087769863588720e-08, 1.742854321493567e-08, 4.788980283268482e-09, 1.264795006101704e-09, 3.214939979798890e-10, +3.912363067261609e-02, 3.606231371919799e-02, 3.065829881364941e-02, 2.406767412074359e-02, 1.747569170526090e-02, 1.176084897619367e-02, 7.352895246878233e-03, 4.281378067788583e-03, 2.327803618018397e-03, 1.184925680753157e-03, 5.661770190896024e-04, 2.545878559580346e-04, 1.079985615751426e-04, 4.332306414437542e-05, 1.647096127012404e-05, 5.947643421871695e-06, 2.043970184206786e-06, 6.697861387086326e-07, 2.096575977590440e-07, 6.279622344379430e-08, 1.802592997281725e-08, 4.966557646806273e-09, 1.315290003124777e-09, 3.352548189021262e-10, +3.900156006211686e-02, 3.595931668810799e-02, 3.058674336443170e-02, 2.403000960369626e-02, 1.746583328441035e-02, 1.176850417782316e-02, 7.368052788618237e-03, 4.296999789988752e-03, 2.340361926696920e-03, 1.193555737426534e-03, 5.714415670164097e-04, 2.574970083044884e-04, 1.094734553936927e-04, 4.401523101569607e-05, 1.677367088325632e-05, 6.071669735319061e-06, 2.091786187867017e-06, 6.871967088282984e-07, 2.156641278833619e-07, 6.476513849410231e-08, 1.864069564701314e-08, 5.149809201782617e-09, 1.367544658194687e-09, 3.495354405688139e-10, +3.888024883332973e-02, 3.585690133515168e-02, 3.051549735545609e-02, 2.399240003054199e-02, 1.745587058922016e-02, 1.177600537245635e-02, 7.383082167989998e-03, 4.312547504348263e-03, 2.352894565717528e-03, 1.202189213741888e-03, 5.767207662543962e-04, 2.604212439641027e-04, 1.109595989780070e-04, 4.471440302707514e-05, 1.708021470654282e-05, 6.197589147623963e-06, 2.140458596407297e-06, 7.049659997669780e-07, 2.218108520959257e-07, 6.678547662939995e-08, 1.927324800987608e-08, 5.338884996046974e-09, 1.421610775815437e-09, 3.643527323071068e-10, +3.875968992223875e-02, 3.575506279696755e-02, 3.044455903922304e-02, 2.395484611509814e-02, 1.744580533335582e-02, 1.178335402205920e-02, 7.397984074235567e-03, 4.328021234069863e-03, 2.365401243921774e-03, 1.210825796343495e-03, 5.820144120980216e-04, 2.633604743234590e-04, 1.124569772577458e-04, 4.542059591697489e-05, 1.739061371058900e-05, 6.325417807898830e-06, 2.189997273002662e-06, 7.230992025431827e-07, 2.281002118389871e-07, 6.885828486546779e-08, 1.992400178059613e-08, 5.533938120937425e-09, 1.477541377471376e-09, 3.797240134791344e-10, +3.863987635217310e-02, 3.565379626357861e-02, 3.037392667746399e-02, 2.391734855203921e-02, 1.743563920727277e-02, 1.179055157634717e-02, 7.412759196467593e-03, 4.343421008025780e-03, 2.377881675572174e-03, 1.219465174584749e-03, 5.873223002158957e-04, 2.663146100921818e-04, 1.139655743951708e-04, 4.613382493922443e-05, 1.770488866417695e-05, 6.455171827854157e-06, 2.240412105948280e-06, 7.416015422055282e-07, 2.345346733985519e-07, 7.098462445078127e-08, 2.059337868599627e-08, 5.735124750174875e-09, 1.535390721736630e-09, 3.956670625281694e-10, +3.852080123246081e-02, 3.555309697767318e-02, 3.030359854116499e-02, 2.387990801728606e-02, 1.742537387852998e-02, 1.179759947285077e-02, 7.427408223571695e-03, 4.358746860644917e-03, 2.390335580299448e-03, 1.228107040530077e-03, 5.926442266729860e-04, 2.692835613210856e-04, 1.154853737927877e-04, 4.685410486348223e-05, 1.802306013223148e-05, 6.586867279914184e-06, 2.291713007629029e-06, 7.604782774674990e-07, 2.411167278630460e-07, 7.316557092414774e-08, 2.128180752084535e-08, 5.942604178796439e-09, 1.595214324524331e-09, 4.122001261311924e-10, +3.840245775710795e-02, 3.545296023389757e-02, 3.023357291058778e-02, 2.384252516838766e-02, 1.741501099209978e-02, 1.180449913698228e-02, 7.441931844111666e-03, 4.373998831801670e-03, 2.402762683049834e-03, 1.236751088956263e-03, 5.979799879523682e-04, 2.722672374201849e-04, 1.170163581010432e-04, 4.758144997578560e-05, 1.834514847383800e-05, 6.720520195347664e-06, 2.343909913486408e-06, 7.797347003360309e-07, 2.478488910777216e-07, 7.540221417046223e-08, 2.198972420767349e-08, 6.156538862120222e-09, 1.657068979473067e-09, 4.293419284575479e-10, +3.828483920350188e-02, 3.535338137815956e-02, 3.016384807528759e-02, 2.380520064489480e-02, 1.740455217067322e-02, 1.181125198210315e-02, 7.456330746237179e-03, 4.389176966706263e-03, 2.415162714032431e-03, 1.245397017353176e-03, 6.033293809765083e-04, 2.752655471765549e-04, 1.185585092260665e-04, 4.831587407918396e-05, 1.867117384031102e-05, 6.856146562413700e-06, 2.397012780982945e-06, 7.993761357339727e-07, 2.547337035948083e-07, 7.769565847456141e-08, 2.271757185607220e-08, 6.377094454732898e-09, 1.721012778467708e-09, 4.471116805332902e-10, +3.816793893113805e-02, 3.525435580694303e-02, 3.009442233412822e-02, 2.376793506872615e-02, 1.739399901496158e-02, 1.181785940959224e-02, 7.470605617594037e-03, 4.404281315796625e-03, 2.427535408666605e-03, 1.254044525923931e-03, 6.086922031280789e-04, 2.782783987720487e-04, 1.201118083374589e-04, 4.905739049445539e-05, 1.900115617331417e-05, 6.993762324523258e-06, 2.451031588564470e-06, 8.194079411165740e-07, 2.617737306194247e-07, 8.004702257316086e-08, 2.346580082146485e-08, 6.604439849492218e-09, 1.787105132291912e-09, 4.655290897108403e-10, +3.805175038037058e-02, 3.515587896663319e-02, 3.002529399529451e-02, 2.373072904452722e-02, 1.738335310399386e-02, 1.182432280891499e-02, 7.484757145237018e-03, 4.419311934631790e-03, 2.439880507529494e-03, 1.262693317584496e-03, 6.140682522703294e-04, 2.813056998008642e-04, 1.216762358761227e-04, 4.980601206090469e-05, 1.933511520303083e-05, 7.133383378416532e-06, 2.505976334620443e-06, 8.398355060820853e-07, 2.689715619512641e-07, 8.245743970485763e-08, 2.423486876333043e-08, 6.838747216535875e-09, 1.855406791409374e-09, 4.846143692434978e-10, +3.793626707118496e-02, 3.505794635285259e-02, 2.995646137630198e-02, 2.369358316002180e-02, 1.737261599541027e-02, 1.183064355769310e-02, 7.498786015545006e-03, 4.434268883786796e-03, 2.452197756303585e-03, 1.271343097962749e-03, 6.194573267669947e-04, 2.843473572869607e-04, 1.232517715621317e-04, 5.056175113724188e-05, 1.967307044638584e-05, 7.275025572356492e-06, 2.561857036442635e-06, 8.606642519766002e-07, 2.763298119220738e-07, 8.492805765818359e-08, 2.502524070286576e-08, 7.080192042288629e-09, 1.925979866870977e-09, 5.043882479643514e-10, +3.782148260199357e-02, 3.496055350980725e-02, 2.988792280400401e-02, 2.365649798635641e-02, 1.736178922575176e-02, 1.183682302177502e-02, 7.512692914138655e-03, 4.449152228749104e-03, 2.464486905724394e-03, 1.279993575397010e-03, 6.248592255017611e-04, 2.874032777013226e-04, 1.248383944026367e-04, 5.132461960253921e-05, 2.001504120531752e-05, 7.418704704338900e-06, 2.618683729182417e-06, 8.818996314932297e-07, 2.838511193289351e-07, 8.746003881769229e-08, 2.583738908006979e-08, 7.328953168459164e-09, 1.998887851344822e-09, 5.248719800690718e-10, +3.770739064845260e-02, 3.486369602964300e-02, 2.981967661459671e-02, 2.361947407843761e-02, 1.735087431074578e-02, 1.184286255530698e-02, 7.526478525800318e-03, 4.463962039816473e-03, 2.476747711528288e-03, 1.288644460934055e-03, 6.302737478972892e-04, 2.904733669790712e-04, 1.264360826998053e-04, 5.209462885726612e-05, 2.036104656510058e-05, 7.564436520319159e-06, 2.676466464806914e-06, 9.035471282657517e-07, 2.915381473633755e-07, 9.005456020806748e-08, 2.667179381023582e-08, 7.585212831018542e-09, 2.074195640266188e-09, 5.460873550020635e-10, +3.759398496230062e-02, 3.476736955181213e-02, 2.975172115362119e-02, 2.358251197526283e-02, 1.733987274558812e-02, 1.184876350080470e-02, 7.540143534396260e-03, 4.478698391996321e-03, 2.488979934400409e-03, 1.297295468326627e-03, 6.357006939337993e-04, 2.935575305364166e-04, 1.280448140587930e-04, 5.287178982439950e-05, 2.071110539271887e-05, 7.712236712456104e-06, 2.735215311054258e-06, 9.256122564568168e-07, 2.993935835363168e-07, 9.271281353623620e-08, 2.752894233983478e-08, 7.849156699151529e-09, 2.151969553104259e-09, 5.680567074453905e-10, +3.748125937021783e-02, 3.467156976244951e-02, 2.968405477596381e-02, 2.354561220024418e-02, 1.732878600522100e-02, 1.185452718922551e-02, 7.553688622801165e-03, 4.493361364906533e-03, 2.501183339922753e-03, 1.305946314030461e-03, 6.411398641672218e-04, 2.966556732874582e-04, 1.296645653957425e-04, 5.365611295060943e-05, 2.106523633528864e-05, 7.862120917373262e-06, 2.794940350388250e-06, 9.481005603408566e-07, 3.074201395988954e-07, 9.543600523147612e-08, 2.840932970177627e-08, 8.120973914172769e-09, 2.232277354742595e-09, 5.908029274098870e-10, +3.736920777270594e-02, 3.457629239375851e-02, 2.961667584585425e-02, 2.350877526152598e-02, 1.731761554460748e-02, 1.186015494004112e-02, 7.567114472824786e-03, 4.507951042677726e-03, 2.513357698522400e-03, 1.314596717200835e-03, 6.465910597469230e-04, 2.997676996608220e-04, 1.312953129458087e-04, 5.444760820751739e-05, 2.142345781853135e-05, 8.014104714437528e-06, 2.855651678952604e-06, 9.710176138817788e-07, 3.156205514591607e-07, 9.822535648350146e-08, 2.931345857003100e-08, 8.400857128398954e-09, 2.315188276970087e-09, 6.143494704278026e-10, +3.725782414298787e-02, 3.448153322340651e-02, 2.954958273686125e-02, 2.347200165229575e-02, 1.730636279900205e-02, 1.186564806131075e-02, 7.580421765140781e-03, 4.522467513856938e-03, 2.525502785419909e-03, 1.323246399688647e-03, 6.520540824330011e-04, 3.028935136161420e-04, 1.329370322712080e-04, 5.524628509302717e-05, 2.178578804529638e-05, 8.168203624055831e-06, 2.917359405525093e-06, 9.943690203056002e-07, 3.239975790946880e-07, 1.010821032785176e-07, 3.024183931360104e-08, 8.689002543968908e-09, 2.400773040079223e-09, 6.387203678463211e-10, +3.714710252592735e-02, 3.438728807392948e-02, 2.948277383188662e-02, 2.343529185108899e-02, 1.729502918421773e-02, 1.187100784975469e-02, 7.593611179217610e-03, 4.536910871312719e-03, 2.537618380577878e-03, 1.331895086036051e-03, 6.575287346131701e-04, 3.060330186603766e-04, 1.345896982692875e-04, 5.605215263272511e-05, 2.215224499413305e-05, 8.324433105989695e-06, 2.980073650471780e-06, 1.018160411668100e-06, 3.325540064611170e-07, 1.040074964332314e-07, 3.119499004982245e-08, 8.985609951602796e-09, 2.489103874568348e-09, 6.639402372212471e-10, +3.703703703696740e-02, 3.429355281214610e-02, 2.941624752315718e-02, 2.339864632208788e-02, 1.728361609688939e-02, 1.187623559082828e-02, 7.606683393251519e-03, 4.551281212141638e-03, 2.549704268649696e-03, 1.340542503471651e-03, 6.630148193192248e-04, 3.091861178639677e-04, 1.362532851806132e-04, 5.686521938135068e-05, 2.252284641791179e-05, 8.482808557688296e-06, 3.043804544701633e-06, 1.042397448417635e-06, 3.412926413966533e-07, 1.070028016268076e-07, 3.217343669698676e-08, 9.290882769292286e-09, 2.580254542944648e-09, 6.900342928101224e-10, +3.692762186108808e-02, 3.420032334858045e-02, 2.935000221221500e-02, 2.336206551541391e-02, 1.727212491473365e-02, 1.188133255879627e-02, 7.619639084101524e-03, 4.565578637576194e-03, 2.561760238928487e-03, 1.349188381905272e-03, 6.685121402430980e-04, 3.123527138768333e-04, 1.379277665970738e-04, 5.768549342433359e-05, 2.289760984249425e-05, 8.643345312639817e-06, 3.108562228621711e-06, 1.067085818953220e-06, 3.502163155225440e-07, 1.100692994307589e-07, 3.317771302626626e-08, 9.605028080912800e-09, 2.674300361624415e-09, 7.170283561640024e-10, +3.681885125178197e-02, 3.410759563689388e-02, 2.928403630990557e-02, 2.332554986741465e-02, 1.726055699680523e-02, 1.188630001680736e-02, 7.632478927226360e-03, 4.579803252894058e-03, 2.573786085296252e-03, 1.357832453922314e-03, 6.740205017525145e-04, 3.155327089441980e-04, 1.396131154699993e-04, 5.851298237939815e-05, 2.327655256545218e-05, 8.806058638741769e-06, 3.174356851093206e-06, 1.092231239178011e-06, 3.593278841395712e-07, 1.132082853367636e-07, 3.420836071293041e-08, 9.928256674749836e-09, 2.771318222927256e-09, 7.449488668170986e-10, +3.671071953004852e-02, 3.401536567332530e-02, 2.921834823636451e-02, 2.328909980094478e-02, 1.724891368374972e-02, 1.189113921696920e-02, 7.645203596623346e-03, 4.593955167328710e-03, 2.585781606173224e-03, 1.366474454777698e-03, 6.795397089062428e-04, 3.187260049222577e-04, 1.413093041182893e-04, 5.934769339823167e-05, 2.365969165483436e-05, 8.970963736690072e-06, 3.241198568388526e-06, 1.117839452048271e-06, 3.686302261205731e-07, 1.164210697823968e-07, 3.526592938683788e-08, 1.026078308193031e-08, 2.871386617160681e-09, 7.738228930734313e-10, +3.660322108340542e-02, 3.392362949614033e-02, 2.915293642100268e-02, 2.325271572564156e-02, 1.723719629805312e-02, 1.189585140042354e-02, 7.657813764769168e-03, 4.608034493981433e-03, 2.597746604467447e-03, 1.375114122389441e-03, 6.850695674689567e-04, 3.219325032936800e-04, 1.430163042365527e-04, 6.018963316821755e-05, 2.404704394798206e-05, 9.138075738387419e-06, 3.309097543149704e-06, 1.143916227118001e-06, 3.781262437990406e-07, 1.197089781747729e-07, 3.635097668219262e-08, 1.060282561475108e-08, 2.974585654791709e-09, 8.036781428896620e-10, +3.649635036491754e-02, 3.383238318508851e-02, 2.908779930248939e-02, 2.321639803819457e-02, 1.722540614428779e-02, 1.190043779742156e-02, 7.670310102562438e-03, 4.622041349734580e-03, 2.609680887524576e-03, 1.383751197331820e-03, 6.906098839257004e-04, 3.251521051829368e-04, 1.447340869032518e-04, 6.103880791422901e-05, 2.443862605039165e-05, 9.307409705370771e-06, 3.378063943348289e-06, 1.170467360079272e-06, 3.878188628537964e-07, 1.230733509120845e-07, 3.746406828654857e-08, 1.095460640489538e-08, 3.080997088701744e-09, 8.345429748531526e-10, +3.639010189224301e-02, 3.374162286086890e-02, 2.902293532873450e-02, 2.318014712261035e-02, 1.721354450935512e-02, 1.190489962739956e-02, 7.682693279268141e-03, 4.635975855166241e-03, 2.621584267077919e-03, 1.392385422828205e-03, 6.961604654959765e-04, 3.283847113714719e-04, 1.464626225888542e-04, 6.189522340048538e-05, 2.483445433462535e-05, 9.478980627258635e-06, 3.448107941247049e-06, 1.197498672298468e-06, 3.977110321898162e-07, 1.265155434030385e-07, 3.860577798905199e-08, 1.131635144152955e-08, 3.190704336521352e-09, 8.664464092543794e-10, +3.628447024669545e-02, 3.365134468460388e-02, 2.895834295686877e-02, 2.314396335047153e-02, 1.720161266272503e-02, 1.190923809905459e-02, 7.694963962463745e-03, 4.649838134466145e-03, 2.633456559198713e-03, 1.401016544743497e-03, 7.017211201474464e-04, 3.316302223127001e-04, 1.482018811639848e-04, 6.275888493246632e-05, 2.523454493926847e-05, 9.652803420217721e-06, 3.519239712363578e-06, 1.225016010348479e-06, 4.078057238151922e-07, 1.300369260841743e-07, 3.977668772790655e-08, 1.168829060927083e-08, 3.303792503041112e-09, 8.994181392526841e-10, +3.617945007232306e-02, 3.356154485732074e-02, 2.889402065322304e-02, 2.310784708119085e-02, 1.718961185667196e-02, 1.191345441042039e-02, 7.707122817987133e-03, 4.663628315352892e-03, 2.645297584246656e-03, 1.409644311576252e-03, 7.072916566092624e-04, 3.348885381468369e-04, 1.499518319075796e-04, 6.362979735888538e-05, 2.563891376793385e-05, 9.828892925449623e-06, 3.591469434436128e-06, 1.253025245537019e-06, 4.181059327142972e-07, 1.336388844350657e-07, 4.097738763704964e-08, 1.207065772601818e-08, 3.420348402694973e-09, 9.334885421343944e-10, +3.607503607500306e-02, 3.347221961944113e-02, 2.882996689330585e-02, 2.307179866226010e-02, 1.717754332650782e-02, 1.191754974894334e-02, 7.719170509886116e-03, 4.677346528992435e-03, 2.657107166820703e-03, 1.418268474450449e-03, 7.128718843850237e-04, 3.381595587155646e-04, 1.517124435150389e-04, 6.450796507371950e-05, 2.604757648831258e-05, 1.000726390769747e-05, 3.664807286391843e-06, 1.281532273431170e-06, 4.286146767171692e-07, 1.373228189913966e-07, 4.220847609202728e-08, 1.246369058063767e-08, 3.540460582112417e-09, 9.686886906622886e-10, +3.597122302155237e-02, 3.338336525027844e-02, 2.876618016178005e-02, 2.303581842949423e-02, 1.716540829081173e-02, 1.192152529155858e-02, 7.731107700369682e-03, 4.690992909917869e-03, 2.668885135710112e-03, 1.426888787106941e-03, 7.184616137653716e-04, 3.414431835765234e-04, 1.534836841063754e-04, 6.539339201829451e-05, 2.646054853127084e-05, 1.018793105377257e-05, 3.739263447317606e-06, 1.310543013378259e-06, 4.393349963651539e-07, 1.410901453559072e-07, 4.347055975505472e-08, 1.286763097049386e-08, 3.664219342735592e-09, 1.005050364515318e-09, +3.586800573885297e-02, 3.329497806754212e-02, 2.870265895243788e-02, 2.299990670727026e-02, 1.715320795165653e-02, 1.192538220476604e-02, 7.742935049760798e-03, 4.704567595950382e-03, 2.680631323845752e-03, 1.435505005894585e-03, 7.240606558402206e-04, 3.447393120176397e-04, 1.552655212343583e-04, 6.628608168342446e-05, 2.687784508999245e-05, 1.037090897110157e-05, 3.814848095433708e-06, 1.340063408023213e-06, 4.502699547728415e-07, 1.449422942072062e-07, 4.476425361925169e-08, 1.328272473881884e-08, 3.791716763497737e-09, 1.042606061817529e-09, +3.576537911299288e-02, 3.320705442685030e-02, 2.863940176817521e-02, 2.296406380876187e-02, 1.714094349483235e-02, 1.192912164470671e-02, 7.754653216450818e-03, 4.718070728121550e-03, 2.692345568251730e-03, 1.444116889761077e-03, 7.296688225106364e-04, 3.480478430712798e-04, 1.570579218926507e-04, 6.718603711160387e-05, 2.729948111916677e-05, 1.055621218629372e-05, 3.891571407070539e-06, 1.370099422822490e-06, 4.614226374863322e-07, 1.488807113064465e-07, 4.609018105203931e-08, 1.370922181191058e-08, 3.923046723558988e-09, 1.081389010755031e-09, +3.566333808842139e-02, 3.311959072124899e-02, 2.857640712096440e-02, 2.292829003616895e-02, 1.712861609006692e-02, 1.193274475723870e-02, 7.766262856855386e-03, 4.731502450596756e-03, 2.704027709997232e-03, 1.452724200243479e-03, 7.352859265003638e-04, 3.513686755282397e-04, 1.588608525239364e-04, 6.809326089925180e-05, 2.772547133422175e-05, 1.074385514372891e-05, 3.969443555648547e-06, 1.400657045554733e-06, 4.727961523378720e-07, 1.529068575018607e-07, 4.744897383768859e-08, 1.414737623615234e-08, 4.058304925095815e-09, 1.121433181279892e-09, +3.556187766711905e-02, 3.303258338073882e-02, 2.851367353182626e-02, 2.289258568094285e-02, 1.711622689124304e-02, 1.193625267801345e-02, 7.777764625371913e-03, 4.744862910599873e-03, 2.715677594148716e-03, 1.461326701458467e-03, 7.409117813670049e-04, 3.547017079515605e-04, 1.606742790280369e-04, 6.900775519900533e-05, 2.815583021060130e-05, 1.093385220416620e-05, 4.048474710661580e-06, 1.431742285828217e-06, 4.843936292968844e-07, 1.570222087311527e-07, 4.884127221900715e-08, 1.459744621484444e-08, 4.197588916140057e-09, 1.162773296899730e-09, +3.546099290778136e-02, 3.294602887180864e-02, 2.845119953080078e-02, 2.285695102400694e-02, 1.710377703661294e-02, 1.193964653255186e-02, 7.789159174338436e-03, 4.758152258339117e-03, 2.727295069722353e-03, 1.469924160092308e-03, 7.465462015128592e-04, 3.580468386901775e-04, 1.624981667700165e-04, 6.992952172206311e-05, 2.859057198308715e-05, 1.112621764337316e-05, 4.128675036663907e-06, 1.463361174585285e-06, 4.962182203174560e-07, 1.612282560217471e-07, 5.026772493815556e-08, 1.505969414484076e-08, 4.340998113463860e-09, 1.205444846551854e-09, +3.536067892501690e-02, 3.285992369697630e-02, 2.838898365691727e-02, 2.282138633597301e-02, 1.709126764900984e-02, 1.194292743632035e-02, 7.800447153993999e-03, 4.771370646934071e-03, 2.738879989636777e-03, 1.478516345390562e-03, 7.521890021954287e-04, 3.614039658923999e-04, 1.643324805882719e-04, 7.085856174057556e-05, 2.902971064516436e-05, 1.132096565077591e-05, 4.210054692261015e-06, 1.495519763603804e-06, 5.082730991822932e-07, 1.655265054888920e-07, 5.172898927658001e-08, 1.553438665298098e-08, 4.488633825506306e-09, 1.249484096560627e-09, +3.526093088855844e-02, 3.277426439433587e-02, 2.832702445816298e-02, 2.278589187735316e-02, 1.707869983605635e-02, 1.194609649480681e-02, 7.811629212440340e-03, 4.784518232343879e-03, 2.750432210666140e-03, 1.487103029147520e-03, 7.578399995375864e-04, 3.647729875192182e-04, 1.661771848026060e-04, 7.179487609008199e-05, 2.947325994843017e-05, 1.151811032813029e-05, 4.292623829104438e-06, 1.528224124995836e-06, 5.205614613432066e-07, 1.699184783316156e-07, 5.322573109405222e-08, 1.602179463231087e-08, 4.640599275338010e-09, 1.294928102676854e-09, +3.516174402248786e-02, 3.268904753711219e-02, 2.826532049145156e-02, 2.275046789876774e-02, 1.706607469037038e-02, 1.194915480359661e-02, 7.822705995605077e-03, 4.797595173296605e-03, 2.761951593393466e-03, 1.495683985695416e-03, 7.634990105374248e-04, 3.681538013574466e-04, 1.680322432222860e-04, 7.273846517199289e-05, 2.992123340204616e-05, 1.171766568821385e-05, 4.376392590890778e-06, 1.561480350703597e-06, 5.330865237581557e-07, 1.744057108265384e-07, 5.475862486680597e-08, 1.652219327808238e-08, 4.796999623659512e-09, 1.341814722197845e-09, +3.506311360447367e-02, 3.260426973322104e-02, 2.820387032258986e-02, 2.271511464114885e-02, 1.705339328976785e-02, 1.195210344844825e-02, 7.833678147206079e-03, 4.810601631219702e-03, 2.773438002164320e-03, 1.504258991893373e-03, 7.691658530777763e-04, 3.715463050326924e-04, 1.698976191540792e-04, 7.368932895611596e-05, 3.037364427223264e-05, 1.191964565353906e-05, 4.461371112365122e-06, 1.595294551992843e-06, 5.458515247249006e-07, 1.789897543195387e-07, 5.632835372475979e-08, 1.703586212352523e-08, 4.957941991829567e-09, 1.390182626166841e-09, +3.496503496502171e-02, 3.251992762483692e-02, 2.814267252624472e-02, 2.267983233594017e-02, 1.704065669746281e-02, 1.195494350536917e-02, 7.844546308717306e-03, 4.823537770171617e-03, 2.784891305040782e-03, 1.512827827116139e-03, 7.748403459354237e-04, 3.749503960221599e-04, 1.717732754102711e-04, 7.464746698322441e-05, 3.083050558180541e-05, 1.212406405508753e-05, 4.547569518328953e-06, 1.629672858943788e-06, 5.588597237112903e-07, 1.836721752152740e-07, 5.793560948781598e-08, 1.756308507538197e-08, 5.123535484919132e-09, 1.440071311650427e-09, +3.486750348673814e-02, 3.243601788796632e-02, 2.808172568590837e-02, 2.264462120529256e-02, 1.702786596226486e-02, 1.195767604069118e-02, 7.855311119335776e-03, 4.836403756774503e-03, 2.796311373755752e-03, 1.521390273242580e-03, 7.805223087899881e-04, 3.783659716672837e-04, 1.736591743166598e-04, 7.561287836766759e-05, 3.129183010975423e-05, 1.233093463106559e-05, 4.634997922652892e-06, 1.664621419939685e-06, 5.721144011822507e-07, 1.884545549645611e-07, 5.958109270122675e-08, 1.810415044919870e-08, 5.293891214787152e-09, 1.491521114092564e-09, +3.477051460360489e-02, 3.235253723202759e-02, 2.802102839386339e-02, 2.260948146225591e-02, 1.701502211877360e-02, 1.196030211114587e-02, 7.865973215949913e-03, 4.849199760148032e-03, 2.807698083667542e-03, 1.529946114643980e-03, 7.862115622325210e-04, 3.817929291861946e-04, 1.755552777205269e-04, 7.658556180002123e-05, 3.175763039086248e-05, 1.254027102568102e-05, 4.723666427294248e-06, 1.700146401153183e-06, 5.856188584234944e-07, 1.933384900496153e-07, 6.126551267001773e-08, 1.865935100436311e-08, 5.469122323173904e-09, 1.544573219743791e-09, +3.467406380026703e-02, 3.226948239943703e-02, 2.796057925114699e-02, 2.257441331096721e-02, 1.700212618757066e-02, 1.196282276393974e-02, 7.876533233109004e-03, 4.861925951844251e-03, 2.819051313714841e-03, 1.538495138172108e-03, 7.919079277737827e-04, 3.852311656860164e-04, 1.774615469985832e-04, 7.756551554977649e-05, 3.222791871536780e-05, 1.275208678794109e-05, 4.813585121319688e-06, 1.736253986030564e-06, 5.993764173620105e-07, 1.983255919671519e-07, 6.298958749245968e-08, 1.922898397888230e-08, 5.649344004807888e-09, 1.599269678164197e-09, +3.457814661133210e-02, 3.218685016520096e-02, 2.790037686751448e-02, 2.253941694683494e-02, 1.698917917540904e-02, 1.196523903682931e-02, 7.886991802993936e-03, 4.874582505783584e-03, 2.830370946371958e-03, 1.547037133147119e-03, 7.976112278522313e-04, 3.886805781749985e-04, 1.793779430648888e-04, 7.855273746806755e-05, 3.270270712866311e-05, 1.296639537047209e-05, 4.904764079933165e-06, 1.772950374774000e-06, 6.133904203833719e-07, 2.034174872093550e-07, 6.475404409258032e-08, 1.981335112389215e-08, 5.834673530522046e-09, 1.655653414798634e-09, +3.448275862068088e-02, 3.210463733651354e-02, 2.784041986140223e-02, 2.250449255671967e-02, 1.697618207539963e-02, 1.196755195819576e-02, 7.897349555389040e-03, 4.887169598191796e-03, 2.841656867604425e-03, 1.555571891345230e-03, 8.033212858417094e-04, 3.921410635744777e-04, 1.813044263787447e-04, 7.954722499043526e-05, 3.318200743103759e-05, 1.318321012836007e-05, 4.997213363509180e-06, 1.810241783821927e-06, 6.276642301459073e-07, 2.086158172427156e-07, 6.655961825170637e-08, 2.041275873789072e-08, 6.025230270375239e-09, 1.713768243622734e-09, +3.438789546078974e-02, 3.202284075236093e-02, 2.778070685988996e-02, 2.246964031911129e-02, 1.696313586719539e-02, 1.196976254711964e-02, 7.907607117655088e-03, 4.899687407538055e-03, 2.852908966824908e-03, 1.564099206986236e-03, 8.090379260588495e-04, 3.956125187306754e-04, 1.832409569525541e-04, 8.054897513962629e-05, 3.366583117745715e-05, 1.340254431801299e-05, 5.090943016631658e-06, 1.848134445327651e-06, 6.422012293917807e-07, 2.139222384847438e-07, 6.840705463902864e-08, 2.102751770068774e-08, 6.221135716774718e-09, 1.773658879858132e-09, +3.429355281206389e-02, 3.194145728313063e-02, 2.772123649866253e-02, 2.243486040430259e-02, 1.695004151717295e-02, 1.197187181345510e-02, 7.917765114703398e-03, 4.912136114474009e-03, 2.864127136849479e-03, 1.572618876720844e-03, 8.147609737701902e-04, 3.990948404263298e-04, 1.851874943596567e-04, 8.155798452842717e-05, 3.415418967738410e-05, 1.362441109604452e-05, 5.185963067138529e-06, 1.886634606636326e-06, 6.570048207550315e-07, 2.193384222785622e-07, 7.029710684118208e-08, 2.165794350706260e-08, 6.422513507595519e-09, 1.835370952755427e-09, +3.419972640218195e-02, 3.186048383022697e-02, 2.766200742197122e-02, 2.240015297455965e-02, 1.693689997861160e-02, 1.197388075790408e-02, 7.927824168971040e-03, 4.924515901773879e-03, 2.875311273854201e-03, 1.581130699617832e-03, 8.204902551990149e-04, 4.025879253921606e-04, 1.871439977421274e-04, 8.257424936253088e-05, 3.464709399463528e-05, 1.384882351817906e-05, 5.282283525172158e-06, 1.925748529760372e-06, 6.720784265666145e-07, 2.248660548653832e-07, 7.223053739083165e-08, 2.230435630012330e-08, 6.629489449292505e-09, 1.898951018443229e-09, +3.410641200545073e-02, 3.177991732569180e-02, 2.760301828259431e-02, 2.236551818428856e-02, 1.692371219186988e-02, 1.197579037209013e-02, 7.937784900397066e-03, 4.936826954275541e-03, 2.886461277332054e-03, 1.589634477151057e-03, 8.262255975319103e-04, 4.060916703181711e-04, 1.891104258185447e-04, 8.359776544343567e-05, 3.514455494727841e-05, 1.407579453817823e-05, 5.379914382235773e-06, 1.965482490853497e-06, 6.874254886564801e-07, 2.305068373548763e-07, 7.420811779425827e-08, 2.296708090435849e-08, 6.842191540000798e-09, 1.964446572841716e-09, +3.401360544217107e-02, 3.169975473183089e-02, 2.754426774179743e-02, 2.233095618019912e-02, 1.691047908455974e-02, 1.197760163863193e-02, 7.947647926399791e-03, 4.949069458822592e-03, 2.897577050050206e-03, 1.598130013186298e-03, 8.319668289250596e-04, 4.096059718647838e-04, 1.910867368917243e-04, 8.462852817137506e-05, 3.564658310756606e-05, 1.430533700678892e-05, 5.478865610256097e-06, 2.005842779683397e-06, 7.030494681527680e-07, 2.362624856934365e-07, 7.623062855793645e-08, 2.364644685837544e-08, 7.060749992620539e-09, 2.031906064639100e-09, +3.392130257801365e-02, 3.161999304084569e-02, 2.748575446929337e-02, 2.229646710146529e-02, 1.689720157171829e-02, 1.197931553121667e-02, 7.957413861855089e-03, 4.961243604207430e-03, 2.908658498007636e-03, 1.606617113967957e-03, 8.377137785102690e-04, 4.131307266738158e-04, 1.930728888564176e-04, 8.566653254827726e-05, 3.615318880190693e-05, 1.453746367071272e-05, 5.579147160652224e-06, 2.046835699103263e-06, 7.189538452781260e-07, 2.421347306303536e-07, 7.829885921409673e-08, 2.434278844731653e-08, 7.285297257881594e-09, 2.101378908329306e-09, +3.382949932340510e-02, 3.154062927447007e-02, 2.742747714320144e-02, 2.226205107988230e-02, 1.688388055597708e-02, 1.198093301467299e-02, 7.967083319075656e-03, 4.973349581115242e-03, 2.919705530393068e-03, 1.615095588105623e-03, 8.434662764007249e-04, 4.166658313792886e-04, 1.950688392069737e-04, 8.671177318075392e-05, 3.666438211087385e-05, 1.477218717159681e-05, 5.680768963410987e-06, 2.088467564522209e-06, 7.351421191432378e-07, 2.481253176818977e-07, 8.041360834526676e-08, 2.505644473494666e-08, 7.515968047384035e-09, 2.172915497309209e-09, +3.373819163292396e-02, 3.146166048361291e-02, 2.736943445000636e-02, 2.222770824002099e-02, 1.687051692772923e-02, 1.198245504504374e-02, 7.976656907791225e-03, 4.985387582068971e-03, 2.930718059543279e-03, 1.623565246560487e-03, 8.492241536965005e-04, 4.202111826180766e-04, 1.970745450449649e-04, 8.776424428311569e-05, 3.718017286924790e-05, 1.500952004504620e-05, 5.783740926168824e-06, 2.130744703374717e-06, 7.516178075375755e-07, 2.542360070933209e-07, 8.257568360778343e-08, 2.578775959540440e-08, 7.752899356610075e-09, 2.246567217033730e-09, +3.364737550470646e-02, 3.138308374800507e-02, 2.731162508451702e-02, 2.219343869937888e-02, 1.685711156529411e-02, 1.198388256965836e-02, 7.986135235129780e-03, 4.997357801375238e-03, 2.941696000901748e-03, 1.632025902631651e-03, 8.549872424898108e-04, 4.237666770403972e-04, 1.990899630867731e-04, 8.882393968041559e-05, 3.770057066609878e-05, 1.524947471965752e-05, 5.888072933300445e-06, 2.173673454589234e-06, 7.683844467174581e-07, 2.604685737987933e-07, 8.478590175427219e-08, 2.653708174461022e-08, 7.996230487903408e-09, 2.322386458227082e-09, +3.355704697986196e-02, 3.130489617585202e-02, 2.725404774982462e-02, 2.215924256852834e-02, 1.684366533507976e-02, 1.198521652720499e-02, 7.995518905599576e-03, 5.009260435071127e-03, 2.952639272977627e-03, 1.640477371942292e-03, 8.607553758700055e-04, 4.273322113201361e-04, 2.011150496711375e-04, 8.989085281151639e-05, 3.822558484489969e-05, 1.549206351607399e-05, 5.993774845014191e-06, 2.217260168055976e-06, 7.854455911914296e-07, 2.668248073792708e-07, 8.704508865508328e-08, 2.730476477132353e-08, 8.246103073411334e-09, 2.400426630148360e-09, +3.346720214189743e-02, 3.122709490349100e-02, 2.719670115726067e-02, 2.212511995126185e-02, 1.683017909174307e-02, 1.198645784780217e-02, 8.004808521072116e-03, 5.021095680871954e-03, 2.963547797305094e-03, 1.648919472425726e-03, 8.665283879283334e-04, 4.309076821650169e-04, 2.031497607666609e-04, 9.096497673218388e-05, 3.875522450367802e-05, 1.573729864606190e-05, 6.100856496454498e-06, 2.261511204094134e-06, 8.028048135030463e-07, 2.733065120183169e-07, 8.935407931868487e-08, 2.809116716784289e-08, 8.502661097985780e-09, 2.480742173909800e-09, +3.337783711615164e-02, 3.114967709505322e-02, 2.713958402635458e-02, 2.209107094473459e-02, 1.681665367834778e-02, 1.198760745307038e-02, 8.014004680766048e-03, 5.032863738119868e-03, 2.974421498403028e-03, 1.657352024311358e-03, 8.723061137624541e-04, 4.344929863266088e-04, 2.051940519792768e-04, 9.204630411820278e-05, 3.928949849519954e-05, 1.598519221160825e-05, 6.209327696811291e-06, 2.306432932918490e-06, 8.204657040110797e-07, 2.799155064558757e-07, 9.171371791100259e-08, 2.889665236034135e-08, 8.766050922038725e-09, 2.563388575845839e-09, +3.328894806923802e-02, 3.107263994213095e-02, 2.708269508479108e-02, 2.205709563960396e-02, 1.680308992652027e-02, 1.198866625620300e-02, 8.023107981231783e-03, 5.044564807733407e-03, 2.985260303735041e-03, 1.665774850110522e-03, 8.780883894807203e-04, 4.380880206101802e-04, 2.072478785596720e-04, 9.313482726851565e-05, 3.982841542718717e-05, 1.623575620403976e-05, 6.319198228436677e-06, 2.352031734105632e-06, 8.384318706672297e-07, 2.866536239400195e-07, 9.412485777370372e-08, 2.972158873883082e-08, 9.036421304347828e-09, 2.648422380931202e-09, +3.320053120849659e-02, 3.099598066344918e-02, 2.702603306836725e-02, 2.202319412016657e-02, 1.678948865660324e-02, 1.198963516203714e-02, 8.032119016337071e-03, 5.056199092157866e-03, 2.996064143669869e-03, 1.674187774602237e-03, 8.838750522062243e-04, 4.416926818843938e-04, 2.093111954106691e-04, 9.423053810838268e-05, 4.037198366257268e-05, 1.648900250316299e-05, 6.430477845968902e-06, 2.398313996059822e-06, 8.567069387913592e-07, 2.935227121766688e-07, 9.658836144141960e-08, 3.056634968674815e-08, 9.313923424807994e-09, 2.735901206246189e-09, +3.311258278145443e-02, 3.091969650454199e-02, 2.696959672094938e-02, 2.198936646449252e-02, 1.677585067780716e-02, 1.199051506712400e-02, 8.041038377253252e-03, 5.067766795316571e-03, 3.006832951442088e-03, 1.682590624818853e-03, 8.896659400806164e-04, 4.453068670908443e-04, 2.113839570945622e-04, 9.533342819256251e-05, 4.092021131978154e-05, 1.674494287642578e-05, 6.543176275463695e-06, 2.445286115478640e-06, 8.752945508443275e-07, 3.005246332773083e-07, 9.910510065790209e-08, 3.143131361015674e-08, 9.598710907124632e-09, 2.825883754487297e-09, +3.302509907529487e-02, 3.084378473743330e-02, 2.691338479442964e-02, 2.195561274455695e-02, 1.676217678835970e-02, 1.199130685979887e-02, 8.049866652442429e-03, 5.079268122562965e-03, 3.017566663113203e-03, 1.690983230031627e-03, 8.954608922677003e-04, 4.489304732534423e-04, 2.134661178404097e-04, 9.644348870851215e-05, 4.147310627304992e-05, 1.700358897809947e-05, 6.657303213533155e-06, 2.492954496818494e-06, 8.941983661984556e-07, 3.076612637046982e-07, 1.016759563911089e-07, 3.231686396655635e-08, 9.890939841444240e-09, 2.918429827521287e-09, +3.293807641633515e-02, 3.076824266032263e-02, 2.685739604868245e-02, 2.192193302636927e-02, 1.674846777565315e-02, 1.199201142025079e-02, 8.058604427645322e-03, 5.090703280633589e-03, 3.028265217533080e-03, 1.699365421736198e-03, 9.012597489568097e-04, 4.525633974876477e-04, 2.155576315512828e-04, 9.756071047960593e-05, 4.203067615277425e-05, 1.726495234848257e-05, 6.772868326492317e-06, 2.541325551760140e-06, 9.134220609056971e-07, 3.149344942166085e-07, 1.043018188472166e-07, 3.322338929329600e-08, 1.019076880691830e-08, 3.013600339980882e-09, +3.285151116951183e-02, 3.069306759727454e-02, 2.680162925152080e-02, 2.188832737009952e-02, 1.673472441638961e-02, 1.199262962059186e-02, 8.067252285869870e-03, 5.102072477601819e-03, 3.038928556301718e-03, 1.707737033638008e-03, 9.070623513659635e-04, 4.562055370095424e-04, 2.176584518114649e-04, 9.868508396837141e-05, 4.259292834589139e-05, 1.752904441312496e-05, 6.889881249513337e-06, 2.590405698674231e-06, 9.329693274635289e-07, 3.223462298075700e-07, 1.069835874835527e-07, 3.415128323558165e-08, 1.049835889419586e-08, 3.111457332900074e-09, +3.276539973787501e-02, 3.061825689791304e-02, 2.674608317865225e-02, 2.185479583020260e-02, 1.672094747672443e-02, 1.199316232492606e-02, 8.075810807380616e-03, 5.113375922832484e-03, 3.049556623731383e-03, 1.716097901637630e-03, 9.128685417448183e-04, 4.598567891447602e-04, 2.197685318936068e-04, 9.981659927974240e-05, 4.315986999629063e-05, 1.779587648207342e-05, 7.008351585787607e-06, 2.640201362087103e-06, 9.528438745786597e-07, 3.298983896486743e-07, 1.097221710204487e-07, 3.510094457407426e-08, 1.081387372784097e-08, 3.212063987387233e-09, +3.267973856208984e-02, 3.054380793712002e-02, 2.669075661363493e-02, 2.182133845553996e-02, 1.670713771240749e-02, 1.199361038941789e-02, 8.084280569688752e-03, 5.124613826937254e-03, 3.060149366809089e-03, 1.724447863816043e-03, 9.186781633773999e-04, 4.635170513372591e-04, 2.218878247658340e-04, 1.009552461643277e-04, 4.373150800525550e-05, 1.806545974913757e-05, 7.128288905695723e-06, 2.690718972146786e-06, 9.730494269285649e-07, 3.375929070254193e-07, 1.125184874520058e-07, 3.607277725207048e-08, 1.113747948867041e-08, 3.315484638333971e-09, +3.259452411994630e-02, 3.046971811473775e-02, 2.663564834783331e-02, 2.178795528949875e-02, 1.669329586892253e-02, 1.199397466236036e-02, 8.092662147542869e-03, 5.135786401730806e-03, 3.070706735159421e-03, 1.732786760419846e-03, 9.244910605846440e-04, 4.671862211579469e-04, 2.240162830988044e-04, 1.021010140216948e-04, 4.430784903193605e-05, 1.833780529117682e-05, 7.249702745985475e-06, 2.741964964089431e-06, 9.935897249209299e-07, 3.454317292736277e-07, 1.153734640557747e-07, 3.706719040226107e-08, 1.146934493600762e-08, 3.421784788157884e-09, +3.250975292587634e-02, 3.039598485527604e-02, 2.658075718037387e-02, 2.175464637010899e-02, 1.667942268162466e-02, 1.199425598424281e-02, 8.100956112920428e-03, 5.146893860187832e-03, 3.081228681007718e-03, 1.741114433846401e-03, 9.303070787267272e-04, 4.708641963131584e-04, 2.261538592727192e-04, 1.032538919036667e-04, 4.488889949385036e-05, 1.861292406740791e-05, 7.372602608957954e-06, 2.793945777706182e-06, 1.014468524451036e-06, 3.534168177134427e-07, 1.182880374013435e-07, 3.808459837306024e-08, 1.180964142984867e-08, 3.531031120577131e-09, +3.242542153047859e-02, 3.032260560762267e-02, 2.652608191810064e-02, 2.172141173015814e-02, 1.666551887587580e-02, 1.199445518781817e-02, 8.109163035019776e-03, 5.157936416400723e-03, 3.091715159143582e-03, 1.749430728628938e-03, 9.361260642052020e-04, 4.745508746529816e-04, 2.283005053842828e-04, 1.044138685176332e-04, 4.547466556741528e-05, 1.889082691873284e-05, 7.496997961661827e-06, 2.846667856810633e-06, 1.035689596657147e-06, 3.615501475814212e-07, 1.212631533578323e-07, 3.912542075450005e-08, 1.215854295293584e-08, 3.643291514414888e-09, +3.234152652005055e-02, 3.024957784475862e-02, 2.647162137553076e-02, 2.168825139730365e-02, 1.665158516717853e-02, 1.199457309816996e-02, 8.117283480252946e-03, 5.168914285538121e-03, 3.102166126884779e-03, 1.757735491421610e-03, 9.419478644649468e-04, 4.782461541794436e-04, 2.304561732536142e-04, 1.055809322298732e-04, 4.606515318850572e-05, 1.917152456708759e-05, 7.622898235095902e-06, 2.900137648706949e-06, 1.057256727673957e-06, 3.698337079607392e-07, 1.242997671002940e-07, 4.019008240368514e-08, 1.251622613273507e-08, 3.758635057431711e-09, +3.225806451612794e-02, 3.017689906347673e-02, 2.641737437480985e-02, 2.165516539418323e-02, 1.663762226130774e-02, 1.199461053277873e-02, 8.125318012238956e-03, 5.179827683804118e-03, 3.112581544041424e-03, 1.766028570984494e-03, 9.477723279959140e-04, 4.819499330545443e-04, 2.326208144311063e-04, 1.067550710688890e-04, 4.666036805304173e-05, 1.945502761481088e-05, 7.750312823419953e-06, 2.954361603658722e-06, 1.079173718384126e-06, 3.782695017095182e-07, 1.273988431150154e-07, 4.127901346979996e-08, 1.288287026331229e-08, 3.877132060183636e-09, +3.217503217503116e-02, 3.010456678410455e-02, 2.636333974566735e-02, 2.162215373852305e-02, 1.662363085444075e-02, 1.199456830158825e-02, 8.133267191797839e-03, 5.190676828398287e-03, 3.122961372880576e-03, 1.774309818168568e-03, 9.535993043347074e-04, 4.856621096081528e-04, 2.347943802042363e-04, 1.079362727287508e-04, 4.726031561760370e-05, 1.974134654403342e-05, 7.879251083174090e-06, 3.009346174358708e-06, 1.101444384167990e-06, 3.868595453873009e-07, 1.305613552037218e-07, 4.239264941866550e-08, 1.325865732710556e-08, 3.998854069904220e-09, +3.209242618741884e-02, 3.003257855023081e-02, 2.630951632537182e-02, 2.158921644324370e-02, 1.660961163328543e-02, 1.199444720707111e-02, 8.141131576945113e-03, 5.201461937476335e-03, 3.133305578091134e-03, 1.782579085900642e-03, 9.594286440659605e-04, 4.893825823457532e-04, 2.369768216043218e-04, 1.091245245724511e-04, 4.786500110007411e-05, 2.003049171608719e-05, 8.009722332506509e-06, 3.065097815399470e-06, 1.124072554651469e-06, 3.956058691796775e-07, 1.337882864866791e-07, 4.353143105683771e-08, 1.364377201658781e-08, 4.123873884408201e-09, +3.201024327784804e-02, 2.996093192843568e-02, 2.625590295868627e-02, 2.155635351656428e-02, 1.659556527520675e-02, 1.199424804429407e-02, 8.148911722886971e-03, 5.212183230111576e-03, 3.143614126749094e-03, 1.790836229168260e-03, 9.652601988235532e-04, 4.931112499560559e-04, 2.391680894132281e-04, 1.103198136352681e-04, 4.847442948030632e-05, 2.032247337093493e-05, 8.141735850409860e-06, 3.121622982745085e-06, 1.147062073452237e-06, 4.045105168210920e-07, 1.370806294046962e-07, 4.469580455524409e-08, 1.403840175581685e-08, 4.252265566014968e-09, +3.192848020434149e-02, 2.988962450802498e-02, 2.620249849782328e-02, 2.152356496210438e-02, 1.658149244835134e-02, 1.199397160098292e-02, 8.156608182015948e-03, 5.222840926257039e-03, 3.153886988283150e-03, 1.799081105004577e-03, 9.710938212916450e-04, 4.968480113184626e-04, 2.413681341700202e-04, 1.115221266281365e-04, 4.908860550081929e-05, 2.061730162661931e-05, 8.275300875966212e-06, 3.178928133203935e-06, 1.170416797924207e-06, 4.135755455158338e-07, 1.404393857200228e-07, 4.588622147235129e-08, 1.444273672186788e-08, 4.384104455489532e-09, +3.184713375796104e-02, 2.981865390076755e-02, 2.614930180240037e-02, 2.149085077898399e-02, 1.656739381177057e-02, 1.199361865758684e-02, 8.164221503907164e-03, 5.233435246708298e-03, 3.164124134440635e-03, 1.807313572473215e-03, 9.769293652055354e-04, 5.005927655103972e-04, 2.435769061775646e-04, 1.127314499410270e-04, 4.970753366751811e-05, 2.091498647873234e-05, 8.410426607600748e-06, 3.237019723902736e-06, 1.194140598900384e-06, 4.228030258572442e-07, 1.438655665161468e-07, 4.710313877686102e-08, 1.485696986614514e-08, 4.519467185999145e-09, +3.176620076238813e-02, 2.974801774063675e-02, 2.609631173939511e-02, 2.145821096192166e-02, 1.655327001554176e-02, 1.199318998734250e-02, 8.171752235315110e-03, 5.243966413066994e-03, 3.174325539253810e-03, 1.815533492653094e-03, 9.827666853523607e-04, 5.043454118144921e-04, 2.457943555090748e-04, 1.139477696463302e-04, 5.033121825043964e-05, 2.121553779990396e-05, 8.547122202344153e-06, 3.295904211761825e-06, 1.218237360434124e-06, 4.321950417451397e-07, 1.473601921964844e-07, 4.834701886992622e-08, 1.528129693556775e-08, 4.658431697083198e-09, +3.168567807351017e-02, 2.967771368355512e-02, 2.604352718310043e-02, 2.142564550133065e-02, 1.653912170088786e-02, 1.199268635633757e-02, 8.179200920170918e-03, 5.254434647705000e-03, 3.184491179006470e-03, 1.823740728623251e-03, 9.886056375716301e-04, 5.081058497256445e-04, 2.480204320146069e-04, 1.151710715022490e-04, 5.095966328452299e-05, 2.151896533931076e-05, 8.685396775103864e-06, 3.355588052971870e-06, 1.242710979538881e-06, 4.417536903014879e-07, 1.509242924819713e-07, 4.961832960688554e-08, 1.571591649362666e-08, 4.801077248634611e-09, +3.160556257901333e-02, 2.960773940714259e-02, 2.599094701507985e-02, 2.139315438341317e-02, 1.652494950029525e-02, 1.199210852357390e-02, 8.186568099580143e-03, 5.264840173729287e-03, 3.194621032200918e-03, 1.831935145447641e-03, 9.944460787555840e-04, 5.118739789579275e-04, 2.502550853274974e-04, 1.164013409561933e-04, 5.159287257040394e-05, 2.182527872220369e-05, 8.825259397944108e-06, 3.416077702471983e-06, 1.267565365926449e-06, 4.514810817843343e-07, 1.545589064075453e-07, 5.091754431850883e-08, 1.616102994130768e-08, 4.947484434890251e-09, +3.152585119798183e-02, 2.953809261046826e-02, 2.593857012412275e-02, 2.136073759025302e-02, 1.651075403763026e-02, 1.199145724103030e-02, 8.193854311821090e-03, 5.275183214947443e-03, 3.204715079525274e-03, 1.840116610159948e-03, 1.000287866849423e-03, 5.156496994513802e-04, 2.524982648707496e-04, 1.176385631481808e-04, 5.223084967523386e-05, 2.213448744945555e-05, 8.966719099374971e-06, 3.477379613429438e-06, 1.292804441743800e-06, 4.613793395000169e-07, 1.582650823175293e-07, 5.224514183175063e-08, 1.661684153787751e-08, 5.097735198428547e-09, +3.144654088050266e-02, 2.946877101380535e-02, 2.588639540619975e-02, 2.132839509990605e-02, 1.649653592825369e-02, 1.199073325372471e-02, 8.201060092343518e-03, 5.285463995833784e-03, 3.214773303821078e-03, 1.848284991748354e-03, 1.006130860851347e-03, 5.194329113786493e-04, 2.547499198633639e-04, 1.188827229142408e-04, 5.287359793352091e-05, 2.244660089712720e-05, 9.109784863650277e-06, 3.539500236720960e-06, 1.318432141308537e-06, 4.714505997136713e-07, 1.620438778599092e-07, 5.360160649000604e-08, 1.708355842152804e-08, 5.251912844171947e-09, +3.136762860727686e-02, 2.939977235838962e-02, 2.583442176441808e-02, 2.129612688648933e-02, 1.648229577913417e-02, 1.198993729977619e-02, 8.208185973767919e-03, 5.295682741496197e-03, 3.224795690051300e-03, 1.856440161140355e-03, 1.011974920812484e-03, 5.232235151515115e-04, 2.570099993266136e-04, 1.201338047898214e-04, 5.352112044799525e-05, 2.276162831605336e-05, 9.254465630074640e-06, 3.602446020415770e-06, 1.344452410843024e-06, 4.816970115580610e-07, 1.658963599795125e-07, 5.498742817286539e-08, 1.756139062987560e-08, 5.410102053392232e-09, +3.128911138923616e-02, 2.933109440618089e-02, 2.578264810897690e-02, 2.126393292026822e-02, 1.646803418895953e-02, 1.198907011046623e-02, 8.215232485885160e-03, 5.305839677643497e-03, 3.234782225268609e-03, 1.864581991187529e-03, 1.017819907836628e-03, 5.270214114272550e-04, 2.592784520902656e-04, 1.213917930131973e-04, 5.417342009049552e-05, 2.307957883144690e-05, 9.400770292319421e-06, 3.666223409260362e-06, 1.370869208207234e-06, 4.921207369407304e-07, 1.698236049100827e-07, 5.640310231536183e-08, 1.805055112031054e-08, 5.572388897716357e-09, +}; + +#define ORDER7OFFSET 8 +static double _sph_ine_tab_order7[] = { // 400x8x8, expand ECPsph_ine_opt up to order 7 + 9.8026402119191969e-01, 6.5349192120920351e-03, 2.6139378114514981e-05, 7.4683463291239355e-08, 1.6596258120430169e-10, 3.0174930359192018e-13, 4.6422874557112354e-16, 6.1897068982828512e-19, +-9.7372910197982765e-01, 3.2023718077062419e-01, 2.5878731168002735e-03, 1.1128001992975867e-05, 3.3026855408959629e-08, 7.5136040823133709e-11, 1.3880501389645580e-13, 2.1602149894998125e-16, + 1.2939662827504519e+00,-6.4308829935269984e-01, 1.2551367599264518e-01, 1.0979793491245177e-03, 4.9127935503807721e-06, 1.4937146675075184e-08, 3.4539483992972387e-11, 6.4559806614079017e-14, +-1.9370545821031517e+00, 1.1580861775979472e+00,-3.8209020812425043e-01, 5.2696403386895060e-02, 4.8308632669755771e-04, 2.2181696704892722e-06, 6.8595629751683660e-09, 1.6053920119069382e-11, + 3.0951407597010991e+00,-2.0584978437151644e+00, 8.7694252119556637e-01,-2.1617330039631805e-01, 2.2938769717294961e-02, 2.1737026586275069e-04, 1.0169196985922520e-06, 3.1850916175148835e-09, +-5.1536386034162636e+00, 3.6748397777459081e+00,-1.8300456389194231e+00, 6.0511367789001502e-01,-1.1889503085684590e-01, 1.0209897925470555e-02, 9.9309533441240569e-05, 4.7138144747566653e-07, + 8.8284783811621708e+00,-6.6127497381642781e+00, 3.6630497567517954e+00,-1.4573589693451083e+00, 3.9350660876655841e-01,-6.4198924933068918e-02, 4.6132048683245799e-03, 4.5873862878265983e-05, +-1.5441228119326450e+01, 1.1997609036386198e+01,-7.1825650336245719e+00, 3.2520983558196255e+00,-1.0768877756605337e+00, 2.4558185884604522e-01,-3.4218776603575786e-02, 2.1070725887895958e-03, + 9.4232969402368738e-01, 1.8842072248189790e-02, 2.2608161419807049e-04, 1.9377316839134449e-06, 1.2917741501860030e-08, 7.0458634440905395e-11, 3.2518769403919528e-13, 1.3007324130803201e-15, +-9.2348762177549759e-01, 2.9541854683583807e-01, 7.3119099240881941e-03, 9.4961770253260684e-05, 8.4833548392324935e-07, 5.8014194233285842e-09, 3.2194882442293417e-11, 1.5045597321540574e-13, + 1.2189061686113356e+00,-5.9837314747827841e-01, 1.1091248587239898e-01, 3.0391986746324926e-03, 4.1360118750538900e-05, 3.7982317956857146e-07, 2.6454643276949385e-09, 1.4874146513869068e-11, +-1.8172793160896141e+00, 1.0786168609303228e+00,-3.4843822565893084e-01, 4.4518358195681659e-02, 1.3096058606303291e-03, 1.8421673778491488e-05, 1.7266555078284553e-07, 1.2197133111721585e-09, + 2.8958961770199370e+00,-1.9166687833994813e+00, 8.0659598494846896e-01,-1.9310068012914899e-01, 1.8486565378438458e-02, 5.7694789862663064e-04, 8.3303021926115510e-06, 7.9361239482497811e-08, +-4.8125649604194187e+00, 3.4196981657051060e+00,-1.6891239063857508e+00, 5.4934842532331474e-01,-1.0398856326993432e-01, 7.8305801654959106e-03, 2.5799607630247782e-04, 3.8084155547410485e-06, + 8.2322631261245256e+00,-6.1499690901020792e+00, 3.3866122278617823e+00,-1.3326807070714561e+00, 3.5249374128334970e-01,-5.4957383792028344e-02, 3.3581685315328034e-03, 1.1660936998126413e-04, +-1.4382232216226605e+01, 1.1151798284051441e+01,-6.6462082881454876e+00, 2.9855109426027053e+00,-9.7532815764401248e-01, 2.1701353993802336e-01,-2.8660325236325203e-02, 1.4514722406969232e-03, + 9.0634623461009090e-01, 3.0191419289002229e-02, 6.0365594002390120e-04, 8.6222878071640075e-06, 9.5793522420571317e-08, 8.7078931258835689e-10, 6.6980358520539028e-12, 4.4651821349417492e-14, +-8.7615481532108863e-01, 2.7232642954104402e-01, 1.1478085148261291e-02, 2.5014213993017678e-04, 3.7368181637148698e-06, 4.2675374352681547e-08, 3.9522876709252972e-10, 3.0812383227510867e-12, + 1.1484812448621327e+00,-5.5672597788256606e-01, 9.7602571952114428e-02, 4.6711725339896419e-03, 1.0746117479100407e-04, 1.6560939157543097e-06, 1.9302756985549667e-08, 1.8136992002922571e-10, +-1.7052072227446988e+00, 1.0046214408046865e+00,-3.1749025958474708e-01, 3.7219907545368539e-02, 1.9695355591575888e-03, 4.7200423402148745e-05, 7.4514594178107065e-07, 8.8273456379934407e-09, + 2.7098286635493851e+00,-1.7846840214427508e+00, 7.4167078043384294e-01,-1.7216171276217007e-01, 1.4598868029562954e-02, 8.4844945581954490e-04, 2.1044418045323422e-05, 3.3895218792941198e-07, +-4.4945126849921362e+00, 3.1824074295817741e+00,-1.5588414166682454e+00, 4.9836282896499584e-01,-9.0643824003961010e-02, 5.7988784220065195e-03, 3.7073015120335159e-04, 9.4839471515876702e-06, + 7.6769201145739103e+00,-5.7198059356913165e+00, 3.1308220858799527e+00,-1.2182341926822216e+00, 3.1536001377840717e-01,-4.6798400159514246e-02, 2.3107820151120509e-03, 1.6360636721506695e-04, +-1.3396726050265226e+01, 1.0365994031135923e+01,-6.1496849757658119e+00, 2.7402208087898625e+00,-8.8279654394801343e-01, 1.9140428752157862e-01,-2.3821947891002823e-02, 9.1705648089344472e-04, + 8.7220092337240918e-01, 4.0649623967526478e-02, 1.1375526396986200e-03, 2.2743978290032441e-05, 3.5372519699820537e-07, 4.5013401478051409e-09, 4.8471099230041167e-11, 4.5236215845941172e-13, +-8.3155129940488270e-01, 2.5084238558307564e-01, 1.5135943334285990e-02, 4.6498071026480366e-04, 9.7572103430983264e-06, 1.5630927908732275e-07, 2.0293140870730405e-09, 2.2169470873901089e-11, + 1.0823936849879583e+00,-5.1793552316184588e-01, 8.5479999325103154e-02, 6.0274276960538189e-03, 1.9698772159630734e-04, 4.2798932300048642e-06, 7.0125367514469557e-08, 9.2495532481679587e-10, +-1.6003292081498042e+00, 9.3572008437456744e-01,-2.8903775197220921e-01, 3.0719422141331131e-02, 2.4842467506665036e-03, 8.5298230423324554e-05, 1.9057080222780615e-06, 3.1805669219869356e-08, + 2.5360492925243716e+00,-1.6618549884059748e+00, 6.8175743900683483e-01,-1.5317317484332565e-01, 1.1216217662382511e-02, 1.0449443151645107e-03, 3.7479832148836273e-05, 8.5775146127530156e-07, +-4.1979042809303468e+00, 2.9617097119186551e+00,-1.4384033392752202e+00, 4.5176420165333059e-01,-7.8712659639880292e-02, 4.0737799852723590e-03, 4.4526402563700929e-04, 1.6640594094197763e-05, + 7.1596139928490015e+00,-5.3199466984122505e+00, 2.8941457450346810e+00,-1.1132014382797852e+00, 2.8175996036651185e-01,-3.9609390353052297e-02, 1.4439024413086473e-03, 1.9135686163733944e-04, +-1.2479560691261252e+01, 9.6359151927183717e+00,-5.6900452873674521e+00, 2.5145553063612267e+00,-7.9852137202033435e-01, 1.6846968276036239e-01,-1.9622121217220369e-02, 4.8643505348642993e-04, + 8.3978798313602487e-01, 5.0278777219392702e-02, 1.8083628128130330e-03, 4.6476863475103180e-05, 9.2923322568682679e-07, 1.5202190761830370e-08, 2.1045690830412920e-10, 2.5251620877033690e-12, +-7.8950920591663221e-01, 2.3085612570115763e-01, 1.8331034193029110e-02, 7.2906676100230338e-04, 1.9735596202560045e-05, 4.0729134286398402e-07, 6.8072985305878819e-09, 9.5702320096276054e-11, + 1.0203653316177899e+00,-4.8180517154468228e-01, 7.4448856144035347e-02, 7.1383682338402050e-03, 3.0452034832227702e-04, 8.5671472756799931e-06, 1.8122485327130275e-07, 3.0816565735468356e-09, +-1.5021705031624721e+00, 8.7155951951330246e-01,-2.6288790382160415e-01, 2.4942296026930530e-02, 2.8728472818709697e-03, 1.2995004279077571e-04, 3.7745024736590657e-06, 8.1513344950616236e-08, + 2.3737300226757747e+00,-1.5475416231151957e+00, 6.2647708924308343e-01,-1.3596691350369175e-01, 8.2848120872041423e-03, 1.1779484503180245e-03, 5.6246332153980064e-05, 1.6806713266889449e-06, +-3.9212716457909704e+00, 2.7564363568358425e+00,-1.3270738865913767e+00, 4.0919127294341562e-01,-6.8060135616446013e-02, 2.6185550432223930e-03, 4.8832716024563305e-04, 2.4587330797104786e-05, + 6.6777080026268134e+00,-4.9482428298270840e+00, 2.6751631930917630e+00,-1.0168287304062604e+00, 2.5137767639308761e-01,-3.3288620054200239e-02, 7.3347603782468170e-04, 2.0370096152682481e-04, +-1.1625950832453897e+01, 8.9575876260971974e+00,-5.2645575632663526e+00, 2.3069716282416373e+00,-7.2179523438153681e-01, 1.4795127807168990e-01,-1.5987769391248810e-02, 1.4436127249575748e-04, + 8.0900813390195137e-01, 5.9136711998269177e-02, 2.5984248346443460e-03, 8.1602119988568529e-05, 1.9937440989837620e-06, 3.9861393778217388e-08, 6.7441007289210616e-10, 9.8894709565733370e-12, +-7.4987142190368217e-01, 2.1226494919214414e-01, 2.1105221236656466e-02, 1.0331478057727132e-03, 3.4296010003590145e-05, 8.6675378398143374e-07, 1.7728481386030997e-08, 3.0490347624195681e-10, + 9.6213637109582628e-01,-4.4815194233560052e-01, 6.4420647123664826e-02, 8.0315447299392495e-03, 4.2536232244204982e-04, 1.4732011752951923e-05, 3.8247590540029950e-07, 7.9708020723250485e-09, +-1.4102883134314268e+00, 8.1181116411665255e-01,-2.3886249721994149e-01, 1.9820368221598276e-02, 3.1523975640603673e-03, 1.7882312166910724e-04, 6.4212061047703017e-06, 1.7059208103855432e-07, + 2.2220994775480793e+00,-1.4411489334070891e+00, 5.7547918379956142e-01,-1.2038863985068156e-01, 5.7560011575772587e-03, 1.2575873380518436e-03, 7.6204399632299953e-05, 2.8278977444582265e-06, +-3.6632484109551684e+00, 2.5655015484561563e+00,-1.2241719410728060e+00, 3.7031171928339490e-01,-5.8563403681184699e-02, 1.4003428606463469e-03, 5.0574323979248991e-04, 3.2775061712515717e-05, + 6.2287499594113243e+00,-4.6026989794897499e+00, 2.4725595920253056e+00,-9.2842163898956009e-01, 2.2392435828527485e-01,-2.7744211857661669e-02, 1.5821695988948634e-04, 2.0390775615499368e-04, +-1.0831448938901074e+01, 8.3273220273103945e+00,-4.8706921672149415e+00, 2.1160468117348481e+00,-6.5196964886822473e-01, 1.2961431123818087e-01,-1.2853441333188338e-02,-1.2250678576580822e-04, + 7.7976817698039569e-01, 6.7277296171929499e-02, 3.4916826889013811e-03, 1.2955215459523910e-04, 3.7400651834043109e-06, 8.8359785089865186e-08, 1.7665834484750311e-09, 3.0612666113608771e-11, +-7.1249088080846623e-01, 1.9497321794746991e-01, 2.3496967072627564e-02, 1.3690204636101551e-03, 5.3887758961751879e-05, 1.6126334347021716e-06, 3.9031339567062386e-08, 7.9404259425038293e-10, + 9.0746409875593614e-01,-4.1680553350187360e-01, 5.5313732384526498e-02, 8.7319012869226578e-03, 5.5546168788426261e-04, 2.2903092278585263e-05, 7.0568857630776713e-07, 1.7428017873227283e-08, +-1.3242696322578098e+00, 7.5616938801020328e-01,-2.1679680501312235e-01, 1.5291390699522562e-02, 3.3381072686805768e-03, 2.2996441416497468e-04, 9.8743537157402464e-06, 3.1208523233204411e-07, + 2.0804390202680132e+00,-1.3421238021048882e+00, 5.2843939463691725e-01,-1.0629681726590039e-01, 3.5858243834211026e-03, 1.2927430827166003e-03, 9.6431114100888404e-05, 4.3001304820664107e-06, +-3.4225628223729014e+00, 2.3878964052855043e+00,-1.1290670058384129e+00, 3.3481988604367696e-01,-5.0110663677867602e-02, 3.8977588107529429e-04, 5.0253499433557829e-04, 4.0775245729729223e-05, + 5.8104592276584057e+00,-4.2814620166354134e+00, 2.2851174995788206e+00,-8.4734041064749255e-01, 1.9913604407565472e-01,-2.2893240283195705e-02,-3.0068253229251132e-04, 1.9474714709673377e-04, +-1.0091921244293818e+01, 7.7416934255740957e+00,-4.5061065526214819e+00, 1.9404685070816470e+00,-5.8845024896520459e-01, 1.1324561529997010e-01,-1.0160564519207264e-02,-3.2582032446300539e-04, + 7.5198060650995613e-01, 7.4750705123524219e-02, 4.4735552747135884e-03, 1.9145054496441701e-04, 6.3758922105259504e-06, 1.7377864863844500e-07, 4.0084271163009513e-09, 8.0140265403706879e-11, +-6.7722990138643191e-01, 1.7889186722960354e-01, 2.5541597101674748e-02, 1.7294307968902785e-03, 7.8809782578458508e-05, 2.7265405891186056e-06, 7.6240255475121822e-08, 1.7912131067983940e-09, + 8.5612176861603539e-01,-3.8760743629063099e-01, 4.7052808268300841e-02, 9.2620021224437323e-03, 6.9134087192228668e-04, 3.3137673449530779e-05, 1.1831275927140491e-06, 3.3806938667362403e-08, +-1.2437292049066664e+00, 7.0434989800817671e-01,-1.9653858151108700e-01, 1.1298539062212220e-02, 3.4435143344135558e-03, 2.8175351974753449e-04, 1.4129386966351814e-05, 5.1874964759009641e-07, + 1.9480791029148432e+00,-1.2499520206511234e+00, 4.8505766415168505e-01,-9.3561637233013181e-02, 1.7345883153182832e-03, 1.2911872069675465e-03, 1.1619002580428953e-04, 6.0830234475917119e-06, +-3.1980311235659666e+00, 2.2226834977238612e+00,-1.0411754547519423e+00, 3.0243468662106004e-01,-4.2600211970564392e-02,-4.3936159502053250e-04, 4.8301800542174280e-04, 4.8261228703185599e-05, + 5.4207146212898278e+00,-3.9828108420804780e+00, 2.1117096658141228e+00,-7.7299571692650071e-01, 1.7677153847157967e-01,-1.8660906752278696e-02,-6.5981346459104248e-04, 1.7855357219214476e-04, +-9.4035254633703058e+00, 7.1975221597198358e+00,-4.1686314328022149e+00, 1.7790264528305988e+00,-5.3069236085684590e-01, 9.8651707804128880e-02,-7.8567684975879709e-03,-4.7573153804546752e-04, + 7.2556324652119175e-01, 8.1603675475303103e-02, 5.5308158567526321e-03, 2.6814817011733050e-04, 1.0118236689945199e-05, 3.1249303054554872e-07, 8.1680546480394421e-09, 1.8505870874646271e-10, +-6.4395957104588863e-01, 1.6393795060292921e-01, 2.7271543235439007e-02, 2.1079833323137658e-03, 1.0923233504583809e-04, 4.2911607674193806e-06, 1.3615914490846191e-07, 3.6286733805526805e-09, + 8.0789752164881778e-01,-3.6041011212793272e-01, 3.9568427005120935e-02, 9.6422393886148594e-03, 8.3003312418662408e-04, 4.5434169241548001e-05, 1.8463304949515499e-06, 5.9956752452376447e-08, +-1.1683076337767506e+00, 6.5608823734761923e-01,-1.7794712822312514e-01, 7.7899625416864675e-03, 3.4806478092208400e-03, 3.3286070384052740e-04, 1.9155570483237268e-05, 8.0253085582874493e-07, + 1.8243958711243700e+00,-1.1641555340886196e+00, 4.4505640068718472e-01,-8.2064075889185337e-02, 1.6648037810677212e-04, 1.2597004297052563e-03, 1.3490457867322165e-04, 8.1509273138241745e-06, +-2.9885514052129896e+00, 2.0689917582548660e+00,-9.5995705985614377e-01, 2.7289766497118262e-01,-3.5939569423463998e-02,-1.1104432149258753e-03, 4.5088458051357127e-04, 5.4991977076291643e-05, + 5.0575431634678552e+00,-3.7051469332299583e+00, 1.9512923621407998e+00,-7.0484473029436645e-01, 1.5661050762458634e-01,-1.4979787660913995e-02,-9.3378576897674135e-04, 1.5728247051138567e-04, +-8.7626900966978134e+00, 6.6918562291464436e+00,-3.8562579736094031e+00, 1.6306046041401872e+00,-4.7819693645592365e-01, 8.5657044343556837e-02,-5.8952718211697421e-03,-5.8106519988730698e-04, + 7.0043891182906681e-01, 8.7879741252336371e-02, 6.6514808895691601e-03, 3.6025586326844829e-04, 1.5188671466163159e-05, 5.2417064879454034e-07, 1.5310580005413701e-08, 3.8764860933462549e-10, +-6.1255917057673048e-01, 1.5003421661706534e-01, 2.8716569129326460e-02, 2.4990580445275702e-03, 1.4521625145803304e-04, 6.3881221521916672e-06, 2.2682306868940051e-07, 6.7619080416659064e-09, + 7.6259338719379577e-01,-3.3507622738975784e-01, 3.2796552344216218e-02, 9.8910237260169294e-03, 9.6902516952766023e-04, 5.9742986548017573e-05, 2.7251820289599583e-06, 9.9181579124276465e-08, +-1.0976696145835536e+00, 6.1113839135050052e-01,-1.6089242906450921e-01, 4.7183702326629683e-03, 3.4601759234509843e-03, 3.8220946252580612e-04, 2.4901909535807378e-05, 1.1741755289217471e-06, + 1.7088080059340540e+00,-1.0842898822546911e+00, 4.0817880774430726e-01,-7.1695025018337785e-02,-1.1507838964197729e-03, 1.2041806351532633e-03, 1.5213470614552257e-04, 1.0470024878906233e-05, +-2.7930978881887452e+00, 1.9260117560622474e+00,-8.8491177565718648e-01, 2.4597120896794389e-01,-3.0044682425534094e-02,-1.6442816574465113e-03, 4.0927867732154857e-04, 6.0797937794689290e-05, + 4.7191096442509926e+00,-3.4469855692299536e+00, 1.8028992034628519e+00,-6.4238750277847179e-01, 1.3845172993492774e-01,-1.1789149257439050e-02,-1.1354405527151056e-03, 1.3256025269033509e-04, +-8.1660952134809470e+00, 6.2219549196221857e+00,-3.5671259328219165e+00, 1.4941738642253670e+00,-4.3050681409060354e-01, 7.4102422562743422e-02,-4.2343266608081218e-03,-6.4947212252000652e-04, + 6.7653509115585764e-01, 9.3619453711148437e-02, 7.8247075047973361e-03, 4.6817389213251788e-04, 2.1809302588703060e-05, 8.3169380316640691e-07, 2.6845839106695370e-08, 7.5116414964521603e-10, +-5.8291563744470920e-01, 1.3710871501066899e-01, 2.9903978314941550e-02, 2.8977346399741708e-03, 1.8673003491639732e-04, 9.0962687403022732e-06, 3.5741731228145525e-07, 1.1786786392379368e-08, + 7.2002435245537821e-01,-3.1147794194894435e-01, 2.6678148473310549e-02, 1.0024958943524433e-02, 1.1062055099278463e-03, 7.5975974755668207e-05, 3.8472072989924145e-06, 1.5518671023582782e-07, +-1.0315022944043226e+00, 5.6927149174961078e-01,-1.4525434988677363e-01, 2.0406506935674289e-03, 3.3915406731694952e-03, 4.2894318828371234e-04, 3.1302189278366045e-05, 1.6429585635658092e-06, + 1.6007737861539333e+00,-1.0099418231422339e+00, 3.7418733700275841e-01,-6.2354491688944989e-02,-2.2462830380930200e-03, 1.1297401300360758e-03, 1.6755625992526742e-04, 1.3000939207766570e-05, +-2.6107156092961672e+00, 1.7929913098620505e+00,-8.1557676127301892e-01, 2.2143690295407401e-01,-2.4839190973640266e-02,-2.0593835510282119e-03, 3.6086276735710352e-04, 6.5568778731791541e-05, + 4.4037069191582177e+00,-3.2069476871427853e+00, 1.6656354269902836e+00,-5.8516362405601940e-01, 1.2211149031376858e-01,-9.0343235638862159e-03,-1.2760412177453136e-03, 1.0572846499248901e-04, +-7.6106546063010025e+00, 5.7852736115223795e+00,-3.2995126762810094e+00, 1.3687853729454371e+00,-3.8720328076304733e-01, 6.3843523951374492e-02,-2.8367158690523692e-03,-6.8756629736393211e-04, + 6.5378365099509328e-01, 9.8860585972095197e-02, 9.0406990031680241e-03, 5.9211854635582786e-04, 3.0199384709771990e-05, 1.2610194255060750e-06, 4.4572360713685708e-08, 1.3657531627828630e-09, +-5.5492306502299804e-01, 1.2509443036171458e-01, 3.0858806513483560e-02, 3.2997235319789093e-03, 2.3366498001809927e-04, 1.2490285821143204e-05, 5.3817201045369360e-07, 1.9454378632940004e-08, + 6.8001749538471268e-01,-2.8949624769372490e-01, 2.1158799750389621e-02, 1.0059002105238671e-02, 1.2398178596509401e-03, 9.4014617101876663e-05, 5.2370507262609069e-06, 2.3201589237389004e-07, +-9.6951374307843752e-01, 5.3027461265555553e-01,-1.3092189756473638e-01,-2.8247772098543948e-04, 3.2830800855117334e-03, 4.7239552859014748e-04, 3.8279242647421962e-05, 2.2165051380231211e-06, + 1.4997883557339931e+00,-9.4072712539152559e-01, 3.4286225599436737e-01,-5.3950861186466297e-02,-3.1461837789551802e-03, 1.0407931880865068e-03, 1.8094296562235087e-04, 1.5700885299413431e-05, +-2.4405154811255185e+00, 1.6692314146324350e+00,-7.5152362286285745e-01, 1.9909400873893507e-01,-2.0253758310537336e-02,-2.3721805609084878e-03, 3.0787744404033642e-04, 6.9242789985185624e-05, + 4.1097468957579535e+00,-2.9837523235828458e+00, 1.5386725939591925e+00,-5.3274913757189535e-01, 1.0742210632733709e-01,-6.6661400653137536e-03,-1.3654454313906926e-03, 7.7882766679659955e-05, +-7.0934992193407993e+00, 5.3794496848082920e+00,-3.0518230059354683e+00, 1.2535643100271705e+00,-3.4790291195113154e-01, 5.4749581796981146e-02,-1.6692977243881460e-03,-7.0104734847108207e-04, + 6.3212055882855778e-01, 1.0363832351432690e-01, 1.0290617742595889e-02, 7.3214608836806800e-04, 4.0572505442938572e-05, 1.8409903951734991e-06, 7.0716749121595126e-08, 2.3549180120250378e-09, +-5.2848223531423089e-01, 1.1392894125692292e-01, 3.1603999316155720e-02, 3.7013029472832775e-03, 2.8584852849574354e-04, 1.6639630305683086e-05, 7.8023915834957168e-07, 3.0683142917169482e-08, + 6.4241117657115376e-01,-2.6902035348422937e-01, 1.6188358954983412e-02, 1.0006610204495312e-02, 1.3684192426888704e-03, 1.1371710400602738e-04, 6.9161119058441742e-06, 3.3398310514249155e-07, +-9.1143153005538313e-01, 4.9394965164460292e-01,-1.1779253422597798e-01,-2.2867882279659245e-03, 3.1421392393123945e-03, 5.1206406734664682e-04, 4.5748542384322117e-05, 2.9006907595814624e-06, + 1.4053811816999859e+00,-8.7628851781371597e-01, 3.1400032194703958e-01,-4.6400218303560413e-02,-3.8740095254380016e-03, 9.4113479182316286e-04, 1.9215062987698183e-04, 1.8525427718158576e-05, +-2.2816696995137020e+00, 1.5540824596784044e+00,-6.9235586005466221e-01, 1.7875806512346992e-01,-1.6225457058464871e-02,-2.5972387779984460e-03, 2.5219450435117879e-04, 7.1797749920942690e-05, + 3.8357521591921064e+00,-2.7762095995527467e+00, 1.4212436830001058e+00,-4.8475369489459080e-01, 9.4230575570007913e-02,-4.6404083371122153e-03,-1.4122597673161079e-03, 4.9907278073958589e-05, +-6.6119617587448527e+00, 5.0022894412835193e+00,-2.8225797397579591e+00, 1.1477041736489264e+00,-3.1225466682155500e-01, 4.6702164632216117e-02,-7.0259400777278346e-04,-6.9480977829807541e-04, + 6.1148562440283416e-01, 1.0798544151784339e-01, 1.1566504859259460e-02, 8.8817430247801793e-04, 5.3134271581452243e-05, 2.6031094538138318e-06, 1.0796789265196720e-07, 3.8824084886943443e-09, +-5.0350018288499077e-01, 1.0355410318927427e-01, 3.2160576329364712e-02, 4.0992616495368660e-03, 3.4305603477200781e-04, 2.1607723751929168e-05, 1.0955577675252521e-06, 4.6568321367801105e-08, + 6.0705428607426504e-01,-2.4994711326469471e-01, 1.1720621936067120e-02, 9.8798745114891569e-03, 1.4908423226621154e-03, 1.3492441447217907e-04, 8.9023130602554878e-06, 4.6560165329275253e-07, +-8.5700139933895980e-01, 4.6011228991349445e-01,-1.0577154253505153e-01,-4.0048409259391829e-03, 2.9751710238176093e-03, 5.4758699386164909e-04, 5.3621202201754032e-05, 3.6996046650875074e-06, + 1.3171136892524542e+00,-8.1629378471651537e-01, 2.8741355394488577e-01,-3.9625722432615695e-02,-4.4508853276452182e-03, 8.3401139998367547e-04, 2.0110335132328497e-04, 2.1429899212454705e-05, +-2.1334074739689695e+00, 1.4469407170972572e+00,-6.3770650129106132e-01, 1.6025959679319804e-01,-1.2697207197970826e-02,-2.7474483572824376e-03, 1.9536416362973314e-04, 7.3243080994551916e-05, + 3.5803481910662267e+00,-2.5832142092809542e+00, 1.3126385462058829e+00,-4.4081793003106473e-01, 8.2397334463124153e-02,-2.9174471889062657e-03,-1.4239786695322534e-03, 2.2504800459211216e-05, +-6.1635624003471809e+00, 4.6517559704402851e+00,-2.6104149879369034e+00, 1.0504614980982283e+00,-2.7993721847076752e-01, 3.9594065397854192e-02, 8.9582551822782941e-05,-6.7304034150603674e-04, + 5.9182225785982312e-01, 1.1193246996806840e-01, 1.2861206300848820e-02, 1.0600018573026131e-03, 6.8080436851770604e-05, 3.5812854647933541e-06, 1.5950562293111320e-07, 6.1594335787483536e-09, +-4.7988978789175474e-01, 9.3915753519105180e-02, 3.2547782800760115e-02, 4.4908468069764645e-03, 4.0502110276316482e-04, 2.7451370716701161e-05, 1.4967119789005301e-06, 6.8388484817904754e-08, + 5.7380554141085993e-01,-2.3218049428251669e-01, 7.7130266910678397e-03, 9.6896435949282485e-03, 1.6061615729578756e-03, 1.5746551889141041e-04, 1.1209975997555802e-05, 6.3151284923990496e-07, +-8.0598603569337657e-01, 4.2859102588018189e-01,-9.4771438247117576e-02,-5.4662541142089602e-03, 2.7878275352832410e-03, 5.7872245572447264e-04, 6.1806462717301267e-05, 4.6155640030852076e-06, + 1.2345770615735585e+00,-7.6043399660938582e-01, 2.6292809613066498e-01,-3.3557032257251006e-02,-4.8957613328625164e-03, 7.2218449452280114e-04, 2.0778151284950121e-04, 2.4370528733199525e-05, +-1.9950110581829443e+00, 1.3472450812210153e+00,-5.8723591412876996e-01, 1.4344292412304313e-01,-9.6172616178474835e-03,-2.8341951842696714e-03, 1.3865700009428370e-04, 7.3613139389525843e-05, + 3.3422561394039594e+00,-2.4037393767011768e+00, 1.2121997010910022e+00,-4.0061103681700028e-01, 7.1795119459050163e-02,-1.4616562783368483e-03,-1.4071092408551565e-03,-3.7766418509808654e-06, +-5.7459955161051361e+00, 4.3259578905631644e+00,-2.4140620738616732e+00, 9.6115097697545848e-01,-2.5065650042123744e-01, 3.3328287355620469e-02, 7.3046507447223667e-04,-6.3930475393127314e-04, + 5.7307724359753986e-01, 1.1550784737417021e-01, 1.4168304690264741e-02, 1.2473256784867859e-03, 8.5595417026832456e-05, 4.8115603553464772e-06, 2.2902362552396599e-07, 9.4520782310601813e-09, +-4.5756939622336967e-01, 8.4963436951852891e-02, 3.2783229666495418e-02, 4.8737165699277215e-03, 4.7144464027582038e-04, 3.4220369361681344e-05, 1.9967861190680560e-06, 9.7609247537290581e-08, + 5.4253283317522261e-01,-2.1563108258197916e-01, 4.1263750562023707e-03, 9.4456359387279244e-03, 1.7136629293374346e-03, 1.8116180501045597e-04, 1.3849789334997261e-05, 8.3641609646187901e-07, +-7.5816391575720177e-01, 3.9922627701118829e-01,-8.4711426525757305e-02,-6.6979535264483740e-03, 2.5850429351030072e-03, 6.0533032068928552e-04, 7.0213729337154201e-05, 5.6491680424752862e-06, + 1.1573901927683901e+00,-7.0842186661409379e-01, 2.4038316521436362e-01,-2.8129776164531609e-02,-5.2256165464749033e-03, 6.0798759308689269e-04, 2.1221135531154117e-04, 2.7305321372707929e-05, +-1.8658120593824838e+00, 1.2544740410131330e+00,-5.4062977755872010e-01, 1.2816506608698749e-01,-6.9387353082686490e-03,-2.8675161931328262e-03, 8.3101168390790545e-05, 7.2961499594027777e-05, + 3.1202861003956168e+00,-2.2368312458464410e+00, 1.1193184336161659e+00,-3.6382853378830676e-01, 6.2307922350744852e-02,-2.4112649150340127e-04,-1.3672832192860801e-03,-2.8520532861616185e-05, +-5.3571173462420578e+00, 4.0231389017224242e+00,-2.2323480522277261e+00, 8.7914096096708927e-01,-2.2414345208527198e-01, 2.7817118531322290e-02, 1.2406368593590247e-03,-5.9662482699994154e-04, + 5.5520052881374982e-01, 1.1873806389269009e-01, 1.5482056574249271e-02, 1.4497565120138100e-03, 1.0585114379976830e-04, 6.3318238351507594e-06, 3.2074654725563727e-07, 1.4088813448812710e-08, +-4.3646246492105972e-01, 7.6650150094726005e-02, 3.2883022890035057e-02, 5.2458969591214592e-03, 5.4200276367034200e-04, 4.1957285099610632e-05, 2.6092199685171513e-06, 1.3588423745757952e-07, + 5.1311261501578576e-01,-2.0021562314172253e-01, 9.2457532332822223e-04, 9.1565430015623315e-03, 1.8128165987723126e-03, 2.0583081836973594e-04, 1.6828849282241838e-05, 1.0850017866483729e-06, +-7.1332823815750834e-01, 3.7186954502920327e-01,-7.5516898779079841e-02,-7.7244012351232010e-03, 2.3711085232385764e-03, 6.2735609886253798e-04, 7.8754221696600800e-05, 6.7993832465562170e-06, + 1.0851977831867117e+00,-6.5999022360109261e-01, 2.1963007604968726e-01,-2.3285064799774689e-02,-5.4556445728141442e-03, 4.9337735080768805e-04, 2.1445595337271628e-04, 3.0194727502562765e-05, +-1.7451880067878043e+00, 1.1681428686964548e+00,-4.9759720436998917e-01, 1.1429472906517542e-01,-4.6191745877481108e-03,-2.8562398184289991e-03, 2.9515369501442767e-05, 7.1356110369282479e-05, + 2.9133308754842591e+00,-2.0816036738723822e+00, 1.0334311892876764e+00,-3.3019020213102684e-01, 5.3830032050921073e-02, 7.7271429827155402e-04,-1.3093573801159827e-03,-5.1421506701027790e-05, +-4.9949345493566408e+00, 3.7416680918922527e+00,-2.0641867801152456e+00, 8.0384930156912882e-01,-2.0015194727678215e-01, 2.2981287153902033e-02, 1.6383062449407619e-03,-5.4754701188866823e-04, + 5.3814502575599521e-01, 1.2164779459258269e-01, 1.6797334644926810e-02, 1.6668328431054260e-03, 1.2900621387254921e-04, 8.1815218869364681e-06, 4.3944136354752532e-07, 2.0467992482426019e-08, +-4.1649723116341253e-01, 6.8932103756033578e-02, 3.2861882897969527e-02, 5.6057426983618062e-03, 6.1635367300038257e-04, 5.0697361526157277e-05, 3.3476668879136894e-06, 1.8505345698023041e-07, + 4.8542933491944612e-01,-1.8585659221185807e-01,-1.9255957765390123e-03, 8.8301234996253520e-03, 1.9032527271193962e-03, 2.3128939904924222e-04, 2.0150759524071334e-05, 1.3818880855663526e-06, +-6.7128592713130419e-01, 3.4638264000064745e-01,-6.7118967008428995e-02,-8.5678058455024159e-03, 2.1497407166303391e-03, 6.4481680029088585e-04, 8.7342287467806956e-05, 8.0636514473669645e-06, + 1.0176685671319516e+00,-6.1489059371670152e-01, 2.0053133950138652e-01,-1.8969042462892671e-02,-5.5994228700253649e-03, 3.7997931861443563e-04, 2.1460743267656874e-04, 3.3002133726837689e-05, +-1.6325591608486532e+00, 1.0878010090949430e+00,-4.5786900246580270e-01, 1.0171137489490098e-01,-2.6201630475855804e-03,-2.8081129326205639e-03,-2.1461982847762774e-05, 6.8875212320741806e-05, + 2.7203601699435964e+00,-1.9372333976883624e+00, 9.5401623104072053e-01,-2.9943818340743678e-01, 4.6265155816085701e-02, 1.6054231930737930e-03,-1.2375034871120981e-03,-7.2267574341344752e-05, +-4.6575935676319586e+00, 3.4800309416967083e+00,-1.9085725001605276e+00, 7.3473951431979456e-01,-1.7845689111212770e-01, 1.8749191184904014e-02, 1.9395547285008170e-03,-4.9420324167389468e-04, + 5.2186642676769435e-01, 1.2426002354623281e-01, 1.8109574553236779e-02, 1.8980333216599039e-03, 1.5520529429173760e-04, 1.0401364057689620e-05, 5.9042316391895563e-07, 2.9065232086341831e-08, +-3.9760640322146157e-01, 6.1768501745156495e-02, 3.2733254858252285e-02, 5.9519016550368519e-03, 6.9414360647804718e-04, 6.0468545982510536e-05, 4.2258569107535140e-06, 2.4713920657486427e-07, + 4.5937490496661804e-01,-1.7248179958014215e-01,-4.4547131671675774e-03, 8.4732896307730104e-03, 1.9847396546397262e-03, 2.5735628800428555e-04, 2.3815777730868586e-05, 1.7315623969608594e-06, +-6.3185670454676024e-01, 3.2263695912423646e-01,-5.9454032886425486e-02,-9.2483154711935564e-03, 1.9241425634839923e-03, 6.5778852468515456e-04, 9.5896427254088288e-05, 9.4380145754600356e-06, + 9.5449366367099664e-01,-5.7289188256410684e-01, 1.8295982725340393e-01,-1.5132474300997942e-02,-5.6690669258560424e-03, 2.6912887358252640e-04, 2.1278028429507693e-04, 3.5694204126821207e-05, +-1.5273855462351036e+00, 1.0130296552900417e+00,-4.2119606485964545e-01, 9.0304362023396173e-02,-9.0696116704163873e-04,-2.7299155029925038e-03,-6.9347001957930249e-05, 6.5603919617794230e-05, + 2.5404152015251453e+00,-1.8029555472748398e+00, 8.8059054418969995e-01,-2.7133522477298228e-01, 3.9525613453555208e-02, 2.2798347896328878e-03,-1.1552888119367207e-03,-9.0924643454165125e-05, +-4.3433707487999849e+00, 3.2368209772430214e+00,-1.7645738979634253e+00, 6.7131723711345659e-01,-1.5885247180286238e-01, 1.5056195610017632e-02, 2.1585608299073493e-03,-4.3836487266638664e-04, + 5.0632303128156109e-01, 1.2659615938310420e-01, 1.9414725961929391e-02, 2.1427878322747501e-03, 1.8457874920727049e-04, 1.3033033729320789e-05, 7.7955558864395464e-07, 4.0440585254881367e-08, +-3.7972687189845689e-01, 5.5121335018702422e-02, 3.2509410490677147e-02, 6.2832825795277143e-03, 7.7501197276446331e-04, 7.1291609867789766e-05, 5.2574664477182687e-06, 3.2433977000567461e-07, + 4.3484820691715931e-01,-1.6002401865773663e-01,-6.6909069354795514e-03, 8.0921859009136128e-03, 2.0571645125077370e-03, 2.8385426854208532e-04, 2.7820997982803142e-05, 2.1383280537869562e-06, +-5.9487222557489594e-01, 3.0051281633980337e-01,-5.2463388987066935e-02,-9.7841948661147142e-03, 1.6970593704216936e-03, 6.6639559967932417e-04, 1.0434007183481382e-04, 1.0917250464343908e-05, + 8.9538504191469936e-01,-5.3377915085614669e-01, 1.6679799860331945e-01,-1.1730366488101576e-02,-5.6753706444286085e-03, 1.6190778969498039e-04, 2.0910564749798254e-04, 3.8241096600297560e-05, +-1.4291641927708461e+00, 9.4343949722992604e-01,-3.8734787883863908e-01, 7.9972154092707845e-02, 5.5182319954734209e-04,-2.6275640930727212e-03,-1.1378761562321598e-04, 6.1631379459619481e-05, + 2.3726036900007719e+00,-1.6780594807126341e+00, 8.1270697018623417e-01,-2.4566306033809754e-01, 3.3531598567726847e-02, 2.8163268479815770e-03,-1.0657481460859372e-03,-1.0732307006569251e-04, +-4.0506631707134062e+00, 3.0107320241703808e+00,-1.6313285986741464e+00, 6.1312696102804187e-01,-1.4115055491355821e-01, 1.1843991694029206e-02, 2.3078019612728304e-03,-3.8149044727321462e-04, + 4.9147558396896840e-01, 1.2867614289814339e-01, 2.0709207512346110e-02, 2.4004873350573211e-03, 2.1724245697873001e-04, 1.6118904802967000e-05, 1.0132462072213529e-06, 5.5245420189452952e-08, +-3.6279944107082501e-01, 4.8955190099743473e-02, 3.2201542047945640e-02, 6.5990258599359997e-03, 8.5859575015950534e-04, 8.3180346300394651e-05, 6.4559958511731225e-06, 4.1902107786650511e-07, + 4.1175463117056849e-01,-1.4842064242472136e-01,-8.6600504920866482e-03, 7.6922611607032785e-03, 2.1205159355344914e-03, 3.1061190150911126e-04, 3.2160559944783300e-05, 2.6062565857863167e-06, +-5.6017527359528985e-01, 2.7989881915351977e-01,-4.6092849781379924e-02,-1.0191987979863561e-02, 1.4708289700609161e-03, 6.7080110188553945e-04, 1.1260214814407608e-04, 1.2495015174545837e-05, + 8.4007409274880962e-01,-4.9735247687286965e-01, 1.5193718465486972e-01,-8.7216168006930238e-03,-5.6279341267305317e-03, 5.9176874402554788e-05, 2.0372644551246684e-04, 4.0616575843904385e-05, +-1.3374265696216794e+00, 8.7866863089238600e-01,-3.5611114548443340e-01, 7.0621590723219732e-02, 1.7845360344239409e-03,-2.5062052344550874e-03,-1.5454357802610841e-04, 5.7048432779865113e-05, + 2.2160952005140655e+00,-1.5618849177559015e+00, 7.4995155227531973e-01,-2.2222091819687750e-01, 2.8210501378976446e-02, 3.2330614802699104e-03,-9.7144814330246622e-04,-1.2144600811747807e-04, +-3.7779801182699670e+00, 2.8005510194441365e+00,-1.5080380702958069e+00, 5.5974901281714384e-01,-1.2517920864410537e-01, 9.0600128865544020e-03, 2.3982363605945523e-03,-3.2476792932053535e-04, + 4.7728712330727152e-01, 1.3051854726566881e-01, 2.1989865403775299e-02, 2.6704925925566392e-03, 2.5329778994219378e-04, 1.9701767580191719e-05, 1.2984371722997170e-06, 7.4228929149467966e-08, +-3.4676857604160272e-01, 4.3237070772605218e-02, 3.1819849058026206e-02, 6.8984770318854562e-03, 9.4453323318308558e-04, 9.6141829942059847e-05, 7.8346557496384816e-06, 5.3370657664357055e-07, + 3.9000564681420791e-01,-1.3761336341445532e-01,-1.0385934529852845e-02, 7.2783344119446806e-03, 2.1748686865115945e-03, 3.3746490645914548e-04, 3.6825876995658759e-05, 3.1391457466671332e-06, +-5.2761901022866320e-01, 2.6069128933262276e-01,-4.0292410188762479e-02,-1.0486667103874988e-02, 1.2474271112744555e-03, 6.7119861122557506e-04, 1.2061746600292147e-04, 1.4163988085408483e-05, + 7.8831029956128595e-01,-4.6342589953468549e-01, 1.3827692565948660e-01,-6.0686931991520993e-03,-5.5352799289824645e-03,-3.8394942826501847e-05, 1.9679327122410238e-04, 4.2798041647142697e-05, +-1.2517361990959714e+00, 8.1838061649477190e-01,-3.2728850139285204e-01, 6.2167215665227801e-02, 2.8167524277890304e-03,-2.3702996042251081e-03,-1.9146891471864179e-04, 5.1945708535494353e-05, + 2.0701168155907435e+00,-1.4538183504553304e+00, 6.9194107738989752e-01,-2.0082414344628491e-01, 2.3496288087742713e-02, 3.5462040270099536e-03,-8.7454475186614193e-04,-1.3331934776184397e-04, +-3.5239351660460736e+00, 2.6051513405788431e+00,-1.3939629036398005e+00, 5.1079676980637967e-01,-1.1078134960441935e-01, 6.6569025118552016e-03, 2.4394669616912817e-03,-2.6915199812639249e-04, + 4.6372283987689639e-01, 1.3214067137099661e-01, 2.3253935306907839e-02, 2.9521418881752050e-03, 2.9283173221180460e-04, 2.3824566057159731e-05, 1.6425915131854470e-06, 9.8244200036602451e-08, +-3.3158216850589978e-01, 3.7936232125907382e-02, 3.1373618374395923e-02, 7.1811628046206145e-03, 1.0324671992311529e-03, 1.1017672577357988e-04, 9.4062627747541379e-06, 6.7106553504571187e-07, + 3.6951840063180719e-01,-1.2754787604494336e-01,-1.1890427841260601e-02, 6.8546548982525816e-03, 2.2203700060299978e-03, 3.6425723539044644e-04, 4.1805876716538116e-05, 3.7404833483055783e-06, +-4.9706627667675052e-01, 2.4279372436137203e-01,-3.5015929637765203e-02,-1.0681769683918554e-02, 1.0285084128547305e-03, 6.6780506374130048e-04, 1.2832695372814017e-04, 1.5916016697522584e-05, + 7.3986000103812255e-01,-4.3182643634546569e-01, 1.2572435757196287e-01,-3.7373382106352573e-03,-5.4049587925178097e-03,-1.3030471950107377e-04, 1.8846093083574146e-04, 4.4766488621672377e-05, +-1.1716864373835882e+00, 7.6226267507281509e-01,-3.0069733503653029e-01, 5.4530657860037746e-02, 3.6715280769570990e-03,-2.2236978602784355e-03,-2.2449653827072115e-04, 4.6412091838959644e-05, + 1.9339491124564034e+00,-1.3532897108916981e+00, 6.3832079978167899e-01,-1.8130292826028951e-01, 1.9328932160682766e-02, 3.7701216016567235e-03,-7.7683442471373218e-04,-1.4300305548315854e-04, +-3.2872388233481016e+00, 2.4234866148982852e+00,-1.2884184410945321e+00, 4.6591408940139922e-01,-9.7813499386557701e-02, 4.5920287851734052e-03, 2.4398889032951347e-03,-2.1539692911264367e-04, + 4.5074994374633842e-01, 1.3355862673628041e-01, 2.4499007353954140e-02, 3.2447578322689821e-03, 3.3591711365320748e-04, 2.8530148355292379e-05, 2.0536754529774242e-06, 1.2825379283863569e-07, +-3.1719131701005798e-01, 3.3024026081801827e-02, 3.0871298039919413e-02, 7.4467693843703400e-03, 1.1220475608859470e-03, 1.2527963537051689e-04, 1.1183145060993709e-05, 8.3390001895891058e-07, + 3.5021534309185981e-01,-1.1817359972520822e-01,-1.3193625976576480e-02, 6.4249569532442343e-03, 2.2572275184844911e-03, 3.9084188052000105e-04, 4.7087248197145811e-05, 4.4134168393843647e-06, +-4.6838894281706800e-01, 2.2611629677144385e-01,-3.0220839741560271e-02,-1.0789523789785874e-02, 8.1544328324628006e-04, 6.6085458144411974e-04, 1.3567776726406165e-04, 1.7742258687789045e-05, + 6.9450523958851185e-01,-4.0239317087150667e-01, 1.1419364417626629e-01,-1.6962970804563667e-03,-5.2436457556821574e-03,-2.1619248873359519e-04, 1.7888556346511083e-04, 4.6506411243937326e-05, +-1.0968984104600186e+00, 7.1002401351852140e-01,-2.7616869077314277e-01, 4.7640061295609257e-02, 4.3696290039606641e-03,-2.0697089110500522e-03,-2.5362479836465003e-04, 4.0533513261431518e-05, + 1.8069224239785400e+00,-1.2597692775206228e+00, 5.8876233295791680e-01,-1.6350114076755007e-01, 1.5653893287948976e-02, 3.9175631137423634e-03,-6.7979973036383400e-04,-1.5058374917155263e-04, +-3.0666917014991628e+00, 2.2545849741520807e+00,-1.1907707284266960e+00, 4.2477293677119954e-01,-8.6144643010336572e-02, 2.8270430733087163e-03, 2.4068222256140889e-03,-1.6408553582499468e-04, + 4.3833754034640571e-01, 1.3478741848379269e-01, 2.5722993967448239e-02, 3.5476533437506399e-03, 3.8261294065795442e-04, 3.3861031585752710e-05, 2.5401371444033779e-06, 1.6533477223851329e-07, +-3.0355012186261299e-01, 2.8473757609974698e-02, 3.0320565432319223e-02, 7.6951228941031496e-03, 1.2129335630010815e-03, 1.4143947079208293e-04, 1.3177057695610922e-05, 1.0251307620545520e-06, + 3.3202387947258771e-01,-1.0944342127596621e-01,-1.4313988651867452e-02, 5.9925100414628500e-03, 2.2856985403736972e-03, 4.1708145295146917e-04, 5.2654691541841336e-05, 5.1607284781215701e-06, +-4.4146730074855389e-01, 2.1057538866558381e-01,-2.5867873833641326e-02,-1.0820963154906788e-02, 6.0935117413838573e-04, 6.5059316987757933e-04, 1.4262329438551760e-04, 1.9633319273818802e-05, + 6.5204268941413768e-01,-3.7497640480419597e-01, 1.0360545140693077e-01, 8.2932182853868303e-05,-5.0572274819427471e-03,-2.9582083924075808e-04, 1.6822226362849839e-04, 4.8005666110833997e-05, +-1.0270190942183337e+00, 6.6139426888019570e-01,-2.5354625401889685e-01, 4.1429559859006315e-02, 4.9297413191884895e-03,-1.9111613269358553e-03,-2.7890575383378383e-04, 3.4392012942957611e-05, + 1.6884133630985294e+00,-1.1727648029655715e+00, 5.4296169748637890e-01,-1.4727524511328297e-01, 1.2421640103183286e-02, 3.9998224244758313e-03,-5.8464992855194152e-04,-1.5616835929727990e-04, +-2.8611781660641009e+00, 2.0975437223226674e+00,-1.1004327657405772e+00, 3.8707119552355007e-01,-7.5655181028822460e-02, 1.3274776613973307e-03, 2.3466311617653286e-03,-1.1565460037560793e-04, + 4.2645651427528147e-01, 1.3584102074895249e-01, 2.6924100307774070e-02, 3.8601368873148801e-03, 4.3296480659351440e-04, 3.9859182077987587e-05, 3.1108822230599180e-06, 2.1068315663568771e-07, +-2.9061549352632898e-01, 2.4260550881324033e-02, 2.9728390124195862e-02, 7.9261717054988721e-03, 1.3047955778119811e-03, 1.5863984758618797e-04, 1.5399108128045877e-05, 1.2477821516345220e-06, + 3.1487604440765304e-01,-1.0131345530730311e-01,-1.5268466748366925e-02, 5.5601643921919137e-03, 2.3060806510687331e-03, 4.4284856494364658e-04, 5.8491165762613325e-05, 5.9848158800520721e-06, +-4.1618949971495617e-01, 1.9609315894427617e-01,-2.1920816739239173e-02,-1.0786032626595606e-02, 4.1113050376303216e-04, 6.3727418504902099e-04, 1.4912307276217468e-04, 2.1579382384818096e-05, + 6.1228265865923237e-01,-3.4943687000875434e-01, 9.3886460740992272e-02, 1.6263285976434085e-03,-4.8508815683338449e-03,-3.6905682546827472e-04, 1.5662314162150635e-04, 4.9255301568223926e-05, +-9.6171952866798671e-01, 6.1612206338915998e-01,-2.3268541158590797e-01, 3.5838793680876793e-02, 5.3686627086929851e-03,-1.7504585374353788e-03,-3.0043497560858950e-04, 2.8065038769693439e-05, + 1.5778415920571467e+00,-1.0918188473357608e+00, 5.0063751315009808e-01,-1.3249330566986992e-01, 9.5872130731214887e-03, 4.0268861456002319e-03,-4.9235702079328887e-04,-1.5987874353475630e-04, +-2.6696604393929073e+00, 1.9515243867882084e+00,-1.0168610354863246e+00, 3.5253064734740991e-01,-6.6235967734396869e-02, 6.2379603567742220e-05, 2.2648313030131425e-03,-7.0417176065501290e-05, + 4.1507942051346391e-01, 1.3673244692666470e-01, 2.8100797136110928e-02, 4.1815170393489799e-03, 4.8700536682520361e-04, 4.6565811587817153e-05, 3.7752465742708520e-06, 2.6561775241990278e-07, +-2.7834697358679922e-01, 2.0361224668563882e-02, 2.9101091858164344e-02, 8.1399705143129619e-03, 1.3973165459897968e-03, 1.7685948964596860e-04, 1.7859691409870861e-05, 1.5049665394365886e-06, + 2.9870819825536310e-01,-9.3742821292054052e-02,-1.6072619682151013e-02, 5.1303925940373550e-03, 2.3187033990637244e-03, 4.6802604475477770e-04, 6.4578131947965118e-05, 6.8876776694169591e-06, +-3.9245101954741712e-01, 1.8259714092240775e-01,-1.8346273278248199e-02,-1.0693684801208518e-02, 2.2148555648330952e-04, 6.2115448133671447e-04, 1.5514263822238760e-04, 2.3570334511283026e-05, + 5.7504816046982488e-01,-3.2564499629037891e-01, 8.4968918766486198e-02, 2.9575594285211814e-03,-4.6291485340555867e-03,-4.3585597117754417e-04, 1.4423576405447921e-04, 5.0249363344624576e-05, +-9.0069315676020378e-01, 5.7397366229131130e-01,-2.1345238162552505e-01, 3.0812463737655421e-02, 5.7014771849663651e-03,-1.5896284002725519e-03,-3.1834270895085559e-04, 2.1624942888084059e-05, + 1.4746668190515151e+00,-1.0165063022950624e+00, 4.6152932478464281e-01,-1.1903406890004251e-01, 7.1098242538401822e-03, 4.0075674612840692e-03,-4.0368773731212315e-04,-1.6184713674065546e-04, +-2.4911731213465775e+00, 1.8157481251686627e+00,-9.3955228704269333e-01, 3.2089510766708379e-01,-5.7787428508701250e-02,-9.9602247534514438e-04, 2.1661857996598025e-03,-2.8582106858697596e-05, + 4.0418038256257549e-01, 1.3747381510781040e-01, 2.9251795904910800e-02, 4.5111064491249620e-03, 5.4475486502466653e-04, 5.4021189832236542e-05, 4.5429667023009339e-06, 3.3158335049823001e-07, +-2.6670656745476506e-01, 1.6754176349655286e-02, 2.8444394007688337e-02, 8.3366660044223318e-03, 1.4901931067154480e-03, 1.9607263974386692e-04, 2.0568435024384212e-05, 1.7998680754519400e-06, + 2.8346074380442032e-01,-8.6693436162784743e-02,-1.6740723865172825e-02, 4.7053274884243535e-03, 2.3239210284410699e-03, 4.9250700968554630e-04, 7.0895789205720799e-05, 7.8709039241461315e-06, +-3.7015417996720507e-01, 1.7001986818747628e-01,-1.5113454106886460e-02,-1.0551968557246381e-02, 4.0950638461724129e-05, 6.0249116099078768e-04, 1.6065331737753313e-04, 2.5595880423759411e-05, + 5.4017404815468129e-01,-3.0348023091446896e-01, 7.6790220247529142e-02, 4.0981743048445988e-03,-4.3959971300207889e-03,-4.9624815221134956e-04, 1.3120192330793164e-04, 5.0984683484110615e-05, +-8.4365427906915025e-01, 5.3473172713104877e-01,-1.9572340803040997e-01, 2.6299921726941719e-02, 5.9417145142787496e-03,-1.4303676759937734e-03,-3.3278624091403347e-04, 1.5138645283609413e-05, + 1.3783860062001989e+00,-9.4643209217437207e-01, 4.2539605191899454e-01,-1.0678611687467242e-01, 4.9524908776988055e-03, 3.9496272328946409e-03,-3.1923187746884163e-04,-1.6221233125929366e-04, +-2.3248180983745712e+00, 1.6894914621871013e+00,-8.6804055891354681e-01, 2.9192870534149795e-01,-5.0218749914833966e-02,-1.8726214943781887e-03, 2.0547916527421332e-03, 9.7289269215878509e-06, + 3.9373499705458892e-01, 1.3807640903787721e-01, 3.0376025902280650e-02, 4.8482252559443927e-03, 6.0622169911332029e-04, 6.2264473470811872e-05, 5.4241480791707109e-06, 4.1015326974234868e-07, +-2.5565858801671171e-01, 1.3419273915172863e-02, 2.7763472866436868e-02, 8.5164839588120697e-03, 1.5831364554568608e-03, 2.1624947053297227e-04, 2.3534152975680651e-05, 2.1357262498329328e-06, + 2.6907786193188454e-01,-8.0129821343118843e-02,-1.7285872925080478e-02, 4.2867966727790779e-03, 2.3221061209779325e-03, 5.1619481993415398e-04, 7.7423301404831981e-05, 8.9356710775424245e-06, +-3.4920768327500340e-01, 1.5829852670369338e-01,-1.2193977608499613e-02,-1.0368110142969036e-02,-1.3008825533492377e-04, 5.8153885400390550e-04, 1.6563197683730041e-04, 2.7645650218755527e-05, + 5.0750620997869678e-01,-2.8283040620102762e-01, 6.9292522204195545e-02, 5.0677835934206739e-03,-4.1548835559824778e-03,-5.5032516451761606e-04, 1.1765669051306285e-04, 5.1460658702367538e-05, +-7.9033661617972439e-01, 4.9819415766339026e-01,-1.7938401452855418e-01, 2.2254792462101713e-02, 6.1014956172152131e-03,-1.2740818933763851e-03,-3.4394333483530313e-04, 8.6674371140014653e-06, + 1.2885307738431147e+00,-8.8122903940900121e-01, 3.9201455307117128e-01,-9.5647086907359097e-02, 3.0816999807319993e-03, 3.8598835367458619e-03,-2.3942738058471994e-04,-1.6111649425504400e-04, +-2.1697598132521159e+00, 1.5720823327374869e+00,-8.0189442097918717e-01, 2.6541429535542221e-01,-4.3447136641366110e-02,-2.5897075712775276e-03, 1.9341570544839403e-03, 4.4466559174528923e-05, + 3.8372024440834651e-01, 1.3855073490661421e-01, 3.1472613289835888e-02, 5.1922040174789824e-03, 6.7140301665549523e-04, 7.1333551462491736e-05, 6.4292318356570356e-06, 5.0303123915151187e-07, +-2.4516950950173230e-01, 1.0337755422725220e-02, 2.7063003083297191e-02, 8.6797176876823954e-03, 1.6758729641476590e-03, 2.3735649165490991e-04, 2.6764808737343817e-05, 2.5158193141223917e-06, + 2.5550726492445752e-01,-7.4018923201104522e-02,-1.7720070301597664e-02, 3.8763538989579193e-03, 2.3136440590750215e-03, 5.3900293317803161e-04, 8.4139013195603588e-05, 1.0082740922716339e-05, +-3.2952618812556206e-01, 1.4737463130819192e-01,-9.5616866394693939e-03,-1.0148587423028335e-02,-2.9137402999481745e-04, 5.5854746450821656e-04, 1.7006073953725829e-04, 2.9709297373971574e-05, + 4.7690081943375395e-01,-2.6359115177635883e-01, 6.2422386708929169e-02, 5.8842222746872709e-03,-3.9088051221798769e-03,-5.9822980203099265e-04, 1.0372771189867252e-04, 5.1679023269197141e-05, +-7.4049197121011279e-01, 4.6417301606022959e-01,-1.6432831405466033e-01, 1.8634626245036728e-02, 6.1916651320236679e-03,-1.1219210470151300e-03,-3.5200660799879376e-04, 2.2669000047143044e-06, + 1.2046649872703423e+00,-8.2055588250004075e-01, 3.6117829622577424e-01,-8.5522952193020474e-02, 1.4671015063175835e-03, 3.7443106844810914e-03,-1.6458246754411240e-04,-1.5870253928648535e-04, +-2.0252208697703828e+00, 1.4628964090740042e+00,-7.4071442054160286e-01, 2.4115199429339090e-01,-3.7397129878503854e-02,-3.1672186184517059e-03, 1.8072706469195858e-03, 7.5640836140476289e-05, + 3.7411440513853228e-01, 1.3890657425611341e-01, 3.2540861885794289e-02, 5.5423861995794006e-03, 7.4028533083050278e-04, 8.1264906567496393e-05, 7.5689601399612259e-06, 6.1205261708987485e-07, +-2.3520783088241887e-01, 7.4921353805935398e-03, 2.6347199536398719e-02, 8.8267176548070085e-03, 1.7681445948533956e-03, 2.5935694934089276e-04, 3.0267486608085508e-05, 2.9434477386754489e-06, + 2.4269996626301241e-01,-6.8329945983800683e-02,-1.8054314791277098e-02, 3.4753076292800972e-03, 2.2989282235835479e-03, 5.6085467737869725e-04, 9.1020654177767179e-05, 1.1312463356944735e-05, +-3.1102991224681309e-01, 1.3719372487728676e-01,-7.1924790246751177e-03,-9.8991978406368260e-03,-4.4276112313756185e-04, 5.3376032652897030e-04, 1.7392667718921722e-04, 3.1776587680964035e-05, + 4.4822363712409985e-01,-2.4566534830934120e-01, 5.6130450271207728e-02, 6.5637004739831691e-03,-3.6603488468515992e-03,-6.4014628585192532e-04, 8.9534713036980480e-05, 5.1643620632731141e-05, +-6.9388898543344102e-01, 4.3249352753151293e-01,-1.5045836931055431e-01, 1.5400578872619230e-02, 6.2219122320374930e-03,-9.7481152833317573e-04,-3.5717874155101389e-04,-4.0130793660470362e-06, + 1.1263825129649541e+00,-7.6409543554969617e-01, 3.3269612764673107e-01,-7.6327358730263931e-02, 8.1227528941511806e-05, 3.6081286838678464e-03,-9.4895160415246413e-05,-1.5511197875885271e-04, +-1.8904779485146501e+00, 1.3613536916358349e+00,-6.8413071710476792e-01, 2.1895782916682954e-01,-3.1999982140243348e-02,-3.6229680763936573e-03, 1.6766634874841012e-03, 1.0331003925683163e-04, + 3.6489698144859828e-01, 1.3915303327473649e-01, 3.3580235556368500e-02, 5.8981302732741669e-03, 8.1284514928978906e-04, 9.2093492632815279e-05, 8.8543405906078632e-06, 7.3918495194046629e-07, +-2.2574394817386179e-01, 4.8661175790419287e-03, 2.5619855917490594e-02, 8.9578821933350688e-03, 1.8597091347391825e-03, 2.8221121554832950e-04, 3.4048370983274831e-05, 3.4219178485691983e-06, + 2.3061006575290371e-01,-6.3034196358668790e-02,-1.8298679569872783e-02, 3.0847469911547184e-03, 2.2783558487143645e-03, 5.8168295714217610e-04, 9.8045530419029893e-05, 1.2624782501010870e-05, +-2.9364426211157252e-01, 1.2770509856305484e-01,-5.0641507789019047e-03,-9.6251206075491300e-03,-5.8419998756661408e-04, 5.0741271795655125e-04, 1.7722148653174960e-04, 3.3837479076195660e-05, + 4.2134936067462736e-01,-2.2896261978618027e-01, 5.0371117839594366e-02, 7.1209417094102480e-03,-3.4117354391460259e-03,-6.7629190146951241e-04, 7.5189179719994828e-05, 5.1360177230081505e-05, +-6.5031198046080763e-01, 4.0299315190411894e-01,-1.3768360072842034e-01, 1.2517117113761037e-02, 6.2008806980675176e-03,-8.3348465465868404e-04,-3.5966842342818742e-04,-1.0128217302755009e-05, + 1.0533051323649265e+00,-7.1155287921000165e-01, 3.0639113175832455e-01,-6.7981014169902598e-02,-1.1007645667618820e-03, 3.4558840137285446e-03,-3.0470457269611822e-05,-1.5048319232751088e-04, +-1.7648580115749282e+00, 1.2669153445038601e+00,-6.3180089194426681e-01, 1.9866249088532062e-01,-2.7193083945567856e-02,-3.9728517934946427e-03, 1.5444644369679726e-03, 1.2757103333770815e-04, + 3.5604862376371788e-01, 1.3929858872573009e-01, 3.4590342088955839e-02, 6.2588114605153806e-03, 8.8904960925763744e-04, 1.0385262719327381e-04, 1.0296609929935530e-05, 8.8652789391850375e-07, +-2.1675003503798779e-01, 2.4445139214797629e-03, 2.4884380277645432e-02, 9.0736492114700563e-03, 1.9503402771899059e-03, 3.0587716424925349e-04, 3.8112733025223884e-05, 3.9545257657493109e-06, + 2.1919454895946755e-01,-5.8104938749045404e-02,-1.8462385182171491e-02, 2.7055653516293611e-03, 2.2523244636019268e-03, 6.0142990703264398e-04, 1.0519070280983506e-04, 1.4019245831992437e-05, +-2.7729948770851298e-01, 1.1886153161408693e-01,-3.1562511064690581e-03,-9.3309735933588978e-03,-7.1572324785963096e-04, 4.7973068704632352e-04, 1.7994115588399658e-04, 3.5882192515553947e-05, + 3.9616101932259989e-01,-2.1339886158790394e-01, 4.5102279596088493e-02, 7.5693098346666550e-03,-3.1648590786074772e-03,-7.0690971468215767e-04, 6.0794187953451035e-05, 5.0836081262623054e-05, +-6.0955988091050384e-01, 3.7552072109282958e-01,-1.2592023833045007e-01, 9.9517476615955704e-03, 6.1362691636359032e-03,-6.9850212761935870e-04,-3.5968693558841914e-04,-1.6039679215099874e-05, + 9.8508060200333336e-01,-6.6265417361663093e-01, 2.8209957536453928e-01,-6.0411124566853658e-02,-2.1013269404930712e-03, 3.2915225098601769e-03, 2.8664587879045976e-05,-1.4495005387298203e-04, +-1.6477347756199643e+00, 1.1790807578607683e+00,-5.8340791955130378e-01, 1.8011018432851730e-01,-2.2919438139297345e-02,-4.2310358894230024e-03, 1.4124496184325071e-03, 1.4855096173805170e-04, + 3.4755106188273222e-01, 1.3935113074209471e-01, 3.5570918430281387e-02, 6.6238231664178084e-03, 9.6885711317343595e-04, 1.1657389883502731e-04, 1.1907197363510769e-05, 1.0563124726093469e-06, +-2.0819993114063751e-01, 2.1316883900360240e-04, 2.4143827766407180e-02, 9.1744887969447513e-03, 2.0398275712539384e-03, 3.3031053298754033e-04, 4.2464924199445339e-05, 4.5445417708456226e-06, + 2.0841309997964111e-01,-5.3517260708277989e-02,-1.8553866952638890e-02, 2.3384817150891475e-03, 2.2212288568256959e-03, 6.2004650350940167e-04, 1.1243315197910554e-04, 1.5495015975831653e-05, +-2.6193036068791908e-01, 1.1061904939973242e-01,-1.4499483016188197e-03,-9.0208653480339882e-03,-8.3743337039196282e-04, 4.5093015067269935e-04, 1.8208562747375843e-04, 3.7901274136768707e-05, + 3.7254941008765152e-01,-1.9889580183011801e-01, 4.0285048852691394e-02, 7.9209255785448011e-03,-2.9213233672494210e-03,-7.3226224950154151e-04, 4.6444358910362887e-05, 5.0080168639501243e-05, +-5.7144521191776954e-01, 3.4993563776112946e-01,-1.1509081423761174e-01, 7.6747677198946967e-03, 6.0349223746573649e-03,-5.7027872166072458e-04,-3.5744530633595830e-04,-2.1713877136641996e-05, + 9.2138084967889899e-01,-6.1714458455879373e-01, 2.5966992997400035e-01,-5.3550875321924082e-02,-2.9407360111823469e-03, 3.1184550885035496e-03, 8.2547654803585846e-05,-1.3864086641524843e-04, +-1.5385254342376928e+00, 1.0973848211010937e+00,-5.3865828899067236e-01, 1.6315756759010575e-01,-1.9127177971615273e-02,-4.4101272818753874e-03, 1.2820865348975342e-03, 1.6640012914240917e-04, + 3.3938704044940549e-01, 1.3931800270319919e-01, 3.6521817181581290e-02, 6.9925781322524123e-03, 1.0522179600110739e-03, 1.3028708870192911e-04, 1.3697687749320640e-05, 1.2508997590535370e-06, +-2.0006903774620630e-01,-1.8411110990098345e-03, 2.3400930779049839e-02, 9.2608966370030382e-03, 2.1279762591577367e-03, 3.5546526825727936e-04, 4.7108376137213929e-05, 5.1951951841596371e-06, + 1.9822792664719646e-01,-4.9247947630359029e-02,-1.8580837236451951e-02, 1.9840601306798829e-03, 2.1854585063198792e-03, 6.3749214561653589e-04, 1.1974992969607790e-04, 1.7050884817424131e-05, +-2.4747587427755549e-01, 1.0293669835512322e-01, 7.2094262716267121e-05,-8.6984426569765017e-03,-9.4949170067518910e-04, 4.2121622799945165e-04, 1.8365846010555168e-04, 3.9885649032180818e-05, + 3.5041257263267872e-01,-1.8538059360583087e-01, 3.5883519485147120e-02, 8.1867735120405086e-03,-2.6824737979813384e-03,-7.5262602279423671e-04, 3.2225917680754151e-05, 4.9102517799437508e-05, +-5.3579316623850959e-01, 3.2610713080682185e-01,-1.0512369282025516e-01, 5.6590355256046342e-03, 5.9029142351136547e-03,-4.4910247573505101e-04,-3.5315195707839712e-04,-2.7122230046049774e-05, + 8.6190029704533144e-01,-5.7478731476649514e-01, 2.3896196645834669e-01,-4.7338952885649037e-02,-3.6372887102532900e-03, 2.9396169696530410e-03, 1.3126961363742369e-04,-1.3167756036189295e-04, +-1.4366876118118266e+00, 1.0213953914205034e+00,-4.9728026409633419e-01, 1.4767277353336716e-01,-1.5769125366894593e-02,-4.5213284123295783e-03, 1.1545733783152683e-03, 1.8128592970397521e-04, + 3.3154025846320401e-01, 1.3920603839369469e-01, 3.7442994251172868e-02, 7.3645093402690568e-03, 1.1390749681563881e-03, 1.4502010547504470e-04, 1.5679784898999189e-05, 1.4727789349113140e-06, +-1.9233422006950932e-01,-3.7306227385114632e-03, 2.2658126710466443e-02, 9.3333881777515337e-03, 2.2146070194493288e-03, 3.8129385363185850e-04, 5.2045606285204475e-05, 5.9096598519114562e-06, + 1.8860359733099785e-01,-4.5275366144347344e-02,-1.8550342899220109e-02, 1.6427272807051294e-03, 2.1453954226801630e-03, 6.5373421318249336e-04, 1.2711829684975947e-04, 1.8685289600113281e-05, +-2.3387896347534520e-01, 9.5776336655199884e-02, 1.4258328099042497e-03,-8.3669339959822273e-03,-1.0521087350431647e-03, 3.9078277722654040e-04, 1.8466649594222159e-04, 4.1826667014049844e-05, + 3.2965530013054511e-01,-1.7278543594037876e-01, 3.1864541454586365e-02, 8.3768002087736687e-03,-2.4494270536008582e-03,-7.6828684082313071e-04, 1.8216837323747003e-05, 4.7914254698868999e-05, +-5.0244073607092388e-01, 3.0391356362028471e-01,-9.5952635705473674e-02, 3.8797592411342827e-03, 5.7456233459318605e-03,-3.3515263590976107e-04,-3.4701078055810868e-04,-3.2240896722826232e-05, + 8.0635429969120853e-01,-5.3536223278090844e-01, 2.1984591669826814e-01,-4.1719104060090509e-02,-4.2074818142664909e-03, 2.7575210037561835e-03, 1.7496446574900482e-04,-1.2417511586265771e-04, +-1.3417165324721170e+00, 9.5071094381015664e-01,-4.5902227224668585e-01, 1.3353450732262456e-01,-1.2802386099242523e-02,-4.5745775743778585e-03, 1.0308740120585718e-03, 1.9338769362963842e-04, + 3.2399531256837122e-01, 1.3902159663137451e-01, 3.8334497572396202e-02, 7.7390706985107603e-03, 1.2293640863857041e-03, 1.6079893311943399e-04, 1.7865275211885710e-05, 1.7245647944241930e-06, +-1.8497371593699671e-01,-5.4668273936533118e-03, 2.1917583499260061e-02, 9.3924934533080109e-03, 2.2995556313520965e-03, 4.0774761989873279e-04, 5.7278228809466080e-05, 6.6910403110275838e-06, + 1.7950688854334340e-01,-4.1579355585838883e-02,-1.8468818384736581e-02, 1.3147884071474988e-03, 2.1014123589507593e-03, 6.6874761006647425e-04, 1.3451584823434852e-04, 2.0396330702694144e-05, +-2.2108624412918229e-01, 8.9102439510462289e-02, 2.6259491946895273e-03,-8.0291892240627431e-03,-1.1455355057371631e-03, 3.5981210667533365e-04, 1.8511953448239798e-04, 4.3716140798733464e-05, + 3.1018868363964458e-01,-1.6104722142373004e-01, 2.8197513075057745e-02, 8.5000043042227323e-03,-2.2230974234710927e-03,-7.7953577229273609e-04, 4.4870521055355840e-06, 4.6527368895236681e-05, +-4.7123590506337465e-01, 2.8324179135365007e-01,-8.7516399062016123e-02, 2.3143027716756772e-03, 5.5678016851852304e-03,-2.2851557359110462e-04,-3.3921959452782484e-04,-3.7050489398045722e-05, + 7.5447769641702478e-01,-4.9866469241611899e-01, 2.0220169726648157e-01,-3.6639729978148169e-02,-4.6661757719910985e-03, 2.5743056516601233e-03, 2.1380060473298270e-04,-1.1624117483793628e-04, +-1.2531423888331439e+00, 8.8495838939944826e-01,-4.2365141221981806e-01, 1.2063121407978820e-01,-1.0187978856263574e-02,-4.5786761272562683e-03, 9.1174906342818534e-04, 2.0289233912737981e-04, + 3.1673764387737868e-01, 1.3877059353770221e-01, 3.9196456801974297e-02, 8.1157375311211727e-03, 1.3230149900754860e-03, 1.7764759066825491e-04, 2.0265991841616609e-05, 2.0089947075775809e-06, +-1.7796705033967647e-01,-7.0604077105931307e-03, 2.1181223131779295e-02, 9.4387525211966569e-03, 2.3826725741273986e-03, 4.3477703673421128e-04, 6.2806970232427435e-05, 7.5423586936252611e-06, + 1.7090664262908334e-01,-3.8141126981446158e-02,-1.8342134703298554e-02, 1.0004417204958396e-03, 2.0538713445901213e-03, 6.8251429890502113e-04, 1.4192062447992987e-04, 2.2181790799743288e-05, +-2.0904776961052951e-01, 8.2881918055608239e-02, 3.6859489430175942e-03,-7.6877158250008657e-03,-1.2300559694225141e-03, 3.2847483471590473e-04, 1.8503001621455708e-04, 4.5546377066967589e-05, + 2.9192968766613775e-01,-1.5010720863043969e-01, 2.4854188784225184e-02, 8.5645191037669686e-03,-2.0042206001801453e-03,-7.8666572106365277e-04,-8.9012740788492581e-06, 4.4954541350200144e-05, +-4.4203689629657744e-01, 2.6398656370863571e-01,-7.9758360774140891e-02, 9.4200717508374082e-04, 5.3736370234856575e-03,-1.2919888306124009e-04,-3.2996892106965195e-04,-4.1535775170411273e-05, + 7.0602346000521310e-01,-4.6450443632358879e-01, 1.8591819056264541e-01,-3.2053512064866597e-02,-5.0267443251491286e-03, 2.3917781186076378e-03, 2.4797324994962737e-04,-1.0797581251917660e-04, +-1.1705278963288019e+00, 8.2379105003375674e-01,-3.9095207233100093e-01, 1.0886031126305798e-01,-7.8904954155651144e-03,-4.5414037664301722e-03, 7.9778352112818741e-04, 2.0999072905083062e-04, + 3.0975348810095971e-01, 1.3845853261270291e-01, 4.0029073920369647e-02, 8.4940068972169987e-03, 1.4199516602923759e-03, 1.9558810330051689e-04, 2.2893779574397409e-05, 2.3289250750842381e-06, +-1.7129495548825679e-01,-8.5213206321365920e-03, 2.0450743263041721e-02, 9.4727114459656359e-03, 2.4638225736376882e-03, 4.6233198569114347e-04, 6.8631689297040359e-05, 8.4665424209534917e-06, + 1.6277363485612020e-01,-3.4943169021921197e-02,-1.8175644648316978e-02, 6.9979142313092262e-04, 2.0031225055087850e-03, 6.9502283285164583e-04, 1.4931121155630853e-04, 2.4039155129808784e-05, +-1.9771680387804141e-01, 7.7083950875083282e-02, 4.6182518934270514e-03,-7.3447119835474643e-03,-1.3059802991996828e-03, 2.9692987595578829e-04, 1.8441271790665587e-04, 4.7310200877204782e-05, + 2.7480075475312471e-01,-1.3991071757214574e-01, 2.1808501266477785e-02, 8.5776883383306673e-03,-1.7933750957348630e-03,-7.8996852946110457e-04,-2.1893436223950993e-05, 4.3208984321819322e-05, +-4.1471147232527045e-01, 2.4604997000083917e-01,-7.2626175292337683e-02,-2.5597356454582464e-04, 5.1668096186256573e-03,-3.7143842904170080e-05,-3.1944104735404073e-04,-4.5685371028906052e-05, + 6.6076144232610967e-01,-4.3270457763748776e-01, 1.7089257915394584e-01,-2.7917067492955666e-02,-5.3012111155927846e-03, 2.2114530982681735e-03, 2.7769792007501280e-04,-9.9471442138816387e-05, +-1.0934660199635975e+00, 7.6688677784882153e-01,-3.6072465070471438e-01, 9.8127480778593720e-02,-5.8777893822385260e-03,-4.4696229216785229e-03, 6.8941119489708915e-04, 2.1487464272851539e-04, + 3.0302982877199008e-01, 1.3809053276472510e-01, 4.0832614661752573e-02, 8.8733977591789574e-03, 1.5200929438710909e-03, 2.1464048396388399e-04, 2.5760460578227291e-05, 2.6873273075835110e-06, +-1.6493929600726498e-01,-9.8588467328933616e-03, 1.9727637099644847e-02, 9.4949187780699121e-03, 2.5428841068550474e-03, 4.9036201447473569e-04, 7.4751400570725681e-05, 9.4664127259171470e-06, + 1.5508044927437162e-01,-3.1969160536431736e-02,-1.7974224525960245e-02, 4.1285946855219163e-04, 1.9495031358842106e-03, 7.0626788895249972e-04, 1.5666682834695388e-04, 2.5965632615308184e-05, +-1.8704960981080335e-01, 7.1679827277248781e-02, 5.4342759925188645e-03,-7.0020967591727474e-03,-1.3736389893318477e-03, 2.6532453372957079e-04, 1.8328446103936584e-04, 4.9000973919326193e-05, + 2.5872943708805213e-01,-1.3040684655250398e-01, 1.9036396862877000e-02, 8.5461356192054905e-03,-1.5910014960062780e-03,-7.8973255013166572e-04,-3.4441844130695971e-05, 4.1304293501273181e-05, +-3.8913628364055608e-01, 2.2934092349043936e-01,-6.6071454112355307e-02,-1.2968235328332210e-03, 4.9505436878022370e-03, 4.7763591512068747e-05,-3.0780932866015652e-04,-4.9491437337741885e-05, + 6.1847720713099541e-01,-4.0310065411219487e-01, 1.5702972938883111e-01,-2.4190631836574918e-02,-5.5003743737769640e-03, 2.0345875418561355e-03, 3.0320482771463496e-04,-9.0812829783930854e-05, +-1.0215778612431903e+00, 7.1394620941508080e-01,-3.3278437013565398e-01, 8.8346016218201401e-02,-4.1206911414473678e-03,-4.3693732602740456e-03, 5.8693636018146487e-04, 2.1773428347358355e-04, + 2.9655435336451019e-01, 1.3767135443517489e-01, 4.1607400706778833e-02, 9.2534510191908930e-03, 1.6233530929910000e-03, 2.3482272479644770e-04, 2.8877801163267880e-05, 3.0872833628166550e-06, +-1.5888299892933530e-01,-1.1081636175818949e-02, 1.9013211678805660e-02, 9.5059224797091769e-03, 2.6197488737585346e-03, 5.1881657265215298e-04, 8.1164301322763112e-05, 1.0544674033455390e-05, + 1.4780136275351635e-01,-2.9203889014755714e-02,-1.7742312661307734e-02, 1.3959616764098147e-04, 1.8933369909189626e-03, 7.1624980705050625e-04, 1.6396740284239887e-04, 2.7958177597550177e-05, +-1.7700525176827206e-01, 6.6642801491722664e-02, 6.1445147559900364e-03,-6.6615375991048885e-03,-1.4333776902726895e-03, 2.3379468128123971e-04, 1.8166383450266953e-04, 5.0612607098622434e-05, + 2.4364805325999472e-01,-1.2154820891048665e-01, 1.6515683281236093e-02, 8.4758281000876529e-03,-1.3974197530621276e-03,-7.8624063076736966e-04,-4.6505654704377588e-05, 3.9254312372997579e-05, +-3.6519626217048140e-01, 2.1377468218464230e-01,-6.0049469985378162e-02,-2.1962036955934005e-03, 4.7276541137858787e-03, 1.2568311317310568e-04,-2.9523769898740973e-04,-5.2949373780945767e-05, + 5.7897094435512364e-01,-3.7553974956505487e-01, 1.4424162064187904e-01,-2.0837766804548168e-02,-5.6339206933978866e-03, 1.8622118300091616e-03, 3.2473408841602615e-04,-8.2077199425337213e-05, +-9.5451069392017851e-01, 6.6469114477801539e-01,-3.0696018055062990e-01, 7.9436220969126101e-02,-2.5927468697295435e-03,-4.2459571878721864e-03, 4.9055287958994374e-04, 2.1875625124625049e-04, + 2.9031541212227518e-01, 1.3720542394864341e-01, 4.2353802576534087e-02, 9.6337294410105585e-03, 1.7296422831160759e-03, 2.5615079761014668e-04, 3.2257479675343960e-05, 3.5319808755253328e-06, +-1.5310998817363178e-01,-1.2197751523528949e-02, 1.8308604667529614e-02, 9.5062672535703788e-03, 2.6943212448942537e-03, 5.4764522908371178e-04, 8.7867801231545078e-05, 1.1703904218973639e-05, + 1.4091223665010283e-01,-2.6633174755995234e-02,-1.7483944924798968e-02,-1.2011025611811423e-04, 1.8349337728501983e-03, 7.2497413744906437e-04, 1.7119363754038467e-04, 3.0013511969834029e-05, +-1.6754541140609808e-01, 6.1947957022830201e-02, 6.7586088687300056e-03,-6.3244754128813294e-03,-1.4855526992087688e-03, 2.0246501614123546e-04, 1.7957093234294031e-04, 5.2139567936094255e-05, + 2.2949336842892828e-01,-1.1329068824570955e-01, 1.4225888692673277e-02, 8.3721348142177486e-03,-1.2128446975489130e-03,-7.7976846177634472e-04,-5.8050388312165491e-05, 3.7073008632518219e-05, +-3.4278405667463785e-01, 1.9927240351713449e-01,-5.4518883102426453e-02,-2.9683794873857231e-03, 4.5005888028810540e-03, 1.9681156926565769e-04,-2.8188035862863767e-04,-5.6057521018681028e-05, + 5.4205646019177234e-01,-3.4987967781029805e-01, 1.3244681681684881e-01,-1.7825091097722155e-02,-5.7105288143493435e-03, 1.6951576909737464e-03, 3.4253164851042069e-04,-7.3334410791019730e-05, +-8.9193613800207039e-01, 6.1886304241878798e-01,-2.8309374259960129e-01, 7.1324853268172020e-02,-1.2699796229861983e-03,-4.1040171619450361e-03, 4.0036106458999016e-04, 2.1812191798489903e-04, + 2.8430197942343349e-01, 1.3669685620984090e-01, 4.3072233170773078e-02, 1.0013817472272989e-02, 1.8388671084725459e-03, 2.7863866271244731e-04, 3.5911055627298343e-05, 4.0247079154598599e-06, +-1.4760512321359259e-01,-1.3214707621514360e-02, 1.7614799796527081e-02, 9.4964922343283541e-03, 2.7665176918223637e-03, 5.7679787148087270e-04, 9.4858554502155732e-05, 1.2946545756733259e-05, + 1.3439041559207823e-01,-2.4243800251998453e-02,-1.7202787504535813e-02,-3.6642506906111282e-04, 1.7745887853685008e-03, 7.3245119998501386e-04, 1.7832706466571884e-04, 3.2128147510857243e-05, +-1.5863421584407669e-01, 5.7572080446333988e-02, 7.2854123622997629e-03,-5.9921474126722347e-03,-1.5305270382928765e-03, 1.7144937409106038e-04, 1.7702710706397993e-04, 5.3576883262080768e-05, + 2.1620629629041069e-01,-1.0559321081949305e-01, 1.2148131368630492e-02, 8.2398801174904893e-03,-1.0373999372886387e-03,-7.7058324218928797e-04,-6.9047535726985497e-05, 3.4774362379367490e-05, +-3.2179950710990374e-01, 1.8576073049538361e-01,-4.9441487625933422e-02,-3.6263380665280719e-03, 4.2714670771792519e-03, 2.6137552393427834e-04,-2.6788161169456493e-04,-5.8816870662124808e-05, + 5.0756023760528735e-01,-3.2598822461597377e-01, 1.2156997698417002e-01,-1.5122032586198108e-02,-5.7379642601171291e-03, 1.5340831774956188e-03, 3.5684584623078006e-04,-6.4647195105468083e-05, +-8.3354846222126111e-01, 5.7622162180718295e-01,-2.6103848638227839e-01, 6.3944614573632610e-02,-1.3067067958446362e-04,-3.9476055614229792e-03, 3.1638251524886889e-04, 2.1600615032561860e-04, + 2.7850361751932462e-01, 1.3614947586037429e-01, 4.3763141897989570e-02, 1.0393320981093900e-02, 1.9509310545083431e-03, 3.0229828536108822e-04, 3.9849940156636418e-05, 4.5688474092068384e-06, +-1.4235414165895033e-01,-1.4139508755273048e-02, 1.6932641034816488e-02, 9.4771290063349663e-03, 2.8362662067339946e-03, 6.0622488859177854e-04, 1.0213249399959259e-04, 1.4274897762570552e-05, + 1.2821463290367729e-01,-2.2023444441166065e-02,-1.6902167133124729e-02,-5.9955930185133337e-04, 1.7125827341880891e-03, 7.3869565665072396e-04, 1.8535009183799704e-04, 3.4298408239490189e-05, +-1.5023807734484335e-01, 5.3493543986975346e-02, 7.7330537755475031e-03,-5.6656079070946420e-03,-1.5686670590938350e-03, 1.4085109080095128e-04, 1.7405473874513954e-04, 5.4920137666979470e-05, + 2.0373162133181869e-01,-9.8417533918224789e-02, 1.0264999074985849e-02, 8.0833926342756650e-03,-8.7113029361436623e-04,-7.5894262380080016e-04,-7.9474161170173065e-05, 3.2372265709623189e-05, +-3.0214915525004349e-01, 1.7317140707882156e-01,-4.4781977061710367e-02,-4.1818960556327962e-03, 4.0421144511808837e-03, 3.1962476606508475e-04,-2.5337582981732224e-04,-6.1230785617058991e-05, + 4.7532056232886505e-01,-3.0374244353664293e-01, 1.1154140225985931e-01,-1.2700600141568286e-02,-5.7231656058704125e-03, 1.3794949863895048e-03, 3.6792452959202193e-04,-5.6071435796364164e-05, +-7.7906300586550792e-01, 5.3654356581950413e-01,-2.4065873975945745e-01, 5.7233677906724893e-02, 8.4484053538978841e-04,-3.7802477910985899e-03, 2.3857315254355343e-04, 2.1257633087546631e-04, + 2.7291044249601559e-01, 1.3556683700060490e-01, 4.4427009348928730e-02, 1.0771866919344390e-02, 2.0657349470126021e-03, 3.2713965916830729e-04, 4.4085367882613101e-05, 5.1678712615823469e-06, +-1.3734360549541069e-01,-1.4978683269313897e-02, 1.6262845602919865e-02, 9.4486999142036933e-03, 2.9035057166784078e-03, 6.3587733559157360e-04, 1.0968486702822691e-04, 1.5691108928525819e-05, + 1.2236492222609680e-01,-1.9960621493876424e-02,-1.6585098962123207e-02,-8.1976281770751794e-04, 1.6491816538518858e-03, 7.4372609945946269e-04, 1.9224603882170559e-04, 3.6520452630205800e-05, +-1.4232554371997322e-01, 4.9692196261159886e-02, 8.1089926739481271e-03,-5.3457472210013497e-03,-1.6003395175777477e-03, 1.1076340073959759e-04, 1.7067702003738803e-04, 5.6165468156299861e-05, + 1.9201773998113311e-01,-9.1728049051852195e-02, 8.5604374979150206e-03, 7.9065500712204046e-03,-7.1401291356752022e-04,-7.4509389779999846e-04,-8.9312506073412290e-05, 2.9880433260414543e-05, +-2.8374578903298531e-01, 1.6144092071083990e-01,-4.0507727075923657e-02,-4.6457985227239791e-03, 3.8140941131099225e-03, 3.7182666104744623e-04,-2.3848752115559457e-04,-6.3304732367883598e-05, + 4.4518670974382524e-01,-2.8302800177245080e-01, 1.0229661624662523e-01,-1.0535173588037631e-02,-5.6723230892942204e-03, 1.2317683788267396e-03, 3.7601266267170939e-04,-4.7656483106054814e-05, +-7.2821471151627604e-01, 4.9962131585147601e-01,-2.2182892110842814e-01, 5.1135253071280320e-02, 1.6743394828479070e-03,-3.6049992397759068e-03, 1.6683463665275637e-04, 2.0799163496794301e-04, + 2.6751309231711878e-01, 1.3495224157457431e-01, 4.5064342468919237e-02, 1.1149102923697311e-02, 2.1831773777757362e-03, 3.5317083579531288e-04, 4.8628370221647497e-05, 5.8253342121163484e-06, +-1.3256085074254448e-01,-1.5738315822921886e-02, 1.5606015915128869e-02, 9.4117166359970680e-03, 2.9681854970871314e-03, 6.6570708331455683e-04, 1.1751027241348265e-04, 1.7197171340887860e-05, + 1.1682253491962259e-01,-1.8044623814507027e-02,-1.6254312262699383e-02,-1.0273181026063359e-03, 1.5846369429752074e-03, 7.4756465485967499e-04, 1.9899916599217551e-04, 3.8790295545968591e-05, +-1.3486715873412963e-01, 4.6149260612581636e-02, 8.4200718753327710e-03,-5.0333088997075665e-03,-1.6259090692115371e-03, 8.1269864306605911e-05, 1.6691775692934992e-04, 5.7309555438241987e-05, + 1.8101641934671125e-01,-8.5491598940402994e-02, 7.0196470298753439e-03, 7.7128202353007325e-03,-5.6596718382148897e-04,-7.2927339198675014e-04,-9.8549597398016887e-05, 2.7312323204271769e-05, +-2.6650801828711423e-01, 1.5051017007589029e-01,-3.6588594464856100e-02,-5.0278098989664363e-03, 3.5887354039625089e-03, 4.1826125530533683e-04,-2.2333148640895224e-04,-6.5046026364281486e-05, + 4.1701818836300453e-01,-2.6373857248149912e-01, 9.3775976555832363e-02,-8.6023103551361724e-03,-5.5909502172224040e-03, 1.0911649357272840e-03, 3.8135035927680229e-04,-3.9445493163236986e-05, +-6.8075676084450365e-01, 4.6526195297305550e-01,-2.0443279176151374e-01, 4.5597185897794379e-02, 2.3739039125659301e-03,-3.4244966566773938e-03, 1.0102434550943201e-04, 2.0240252497702116e-04, + 2.6230269681567442e-01, 1.3430875650923180e-01, 4.5675670187881219e-02, 1.1524696864389790e-02, 2.3031551068443579e-03, 3.8039796030418669e-04, 5.3489750206693692e-05, 6.5448674617039956e-06, +-1.2799394030644262e-01,-1.6424077445419516e-02, 1.4962650534445378e-02, 9.3666789914703640e-03, 3.0302645886089853e-03, 6.9566695201053611e-04, 1.2560269856692541e-04, 1.8794915167768197e-05, + 1.1156986286102311e-01,-1.6265468967097775e-02,-1.5912274117730968e-02,-1.2225347117886393e-03, 1.5191854920503628e-03, 7.5023660566641659e-04, 2.0559469514365872e-04, 4.1103829762101296e-05, +-1.2783533182812087e-01, 4.2847240508951501e-02, 8.6725657038186736e-03,-4.7289053432101394e-03,-1.6457361385861932e-03, 5.2444815343925854e-05, 1.6280118503581885e-04, 5.8349612251074261e-05, + 1.7068257233707237e-01,-7.9677307315779350e-02, 5.6289872938358430e-03, 7.5052985656546035e-03,-4.2686356098279861e-04,-7.1170605013629431e-04,-1.0717686366496693e-04, 2.4681068151871431e-05, +-2.5035987965285172e-01, 1.4032415629069403e-01,-3.2996731080754821e-02,-5.3367974745722703e-03, 3.3671595623091253e-03, 4.5921705132685844e-04,-2.0801304585462278e-04,-6.6463591324085933e-05, + 3.9068403594354573e-01,-2.4577527022881449e-01, 8.5924315112289068e-02,-6.8805675244317235e-03,-5.4839489669374353e-03, 9.5784836107476782e-04, 3.8417128960020351e-04,-3.1475783493477608e-05, +-6.3645930617236024e-01, 4.3328615895152245e-01,-1.8836276371847388e-01, 4.0571588877162792e-02, 2.9580569344537628e-03,-3.2410044608098543e-03, 4.0964070553201461e-05, 1.9595042886005426e-04, + 2.5727084951153539e-01, 1.3363922969291969e-01, 4.6261539470083213e-02, 1.1898336350595449e-02, 2.4255634415736439e-03, 4.0882531156240281e-04, 5.8680058843942713e-05, 7.3301721038473691e-06, +-1.2363161981861570e-01,-1.7041253542352419e-02, 1.4333154217441933e-02, 9.3140739603394373e-03, 3.0897112206701122e-03, 7.2571083034049478e-04, 1.3395556224077640e-04, 2.0486004197580096e-05, + 1.0659036627626328e-01,-1.4613850252224857e-02,-1.5561211258179239e-02,-1.4057443124814023e-03, 1.4530498896699125e-03, 7.5177003118634335e-04, 2.1201882325353356e-04, 4.3456846970498665e-05, +-1.2120421652848815e-01, 3.9769831505526460e-02, 8.8722245698004548e-03,-4.4330320040697497e-03,-1.6601751223359004e-03, 2.4353822256453317e-05, 1.5835180104735501e-04, 5.9283369115353843e-05, + 1.6097404803401461e-01,-7.4256420635155529e-02, 4.3758888299682795e-03, 7.2867424640780014e-03,-2.9653142266373653e-04,-6.9260516820148714e-04,-1.1518976125149372e-04, 2.1999415395271129e-05, +-2.3523046866917013e-01, 1.3083169586647259e-01,-2.9706411605583693e-02,-5.5808080641851603e-03, 3.1503029799197996e-03, 4.9498737903533763e-04,-1.9262832347481586e-04,-6.7567732970581377e-05, + 3.6606216453564272e-01,-2.2904612649325176e-01, 7.8690605113661632e-02,-5.3503380639679660e-03,-5.3556691312046829e-03, 8.3189852630558079e-04, 3.8470141143004329e-04,-2.3779198197001702e-05, +-5.9510829102889451e-01, 4.0352725141424040e-01,-1.7351925854934314e-01, 3.6014500751991703e-02, 3.4399069507220206e-03,-3.0564564524367768e-03,-1.3552429087391549e-05, 1.8876757369683044e-04, + 2.5240958113873391e-01, 1.3294630487222800e-01, 4.6822511748690523e-02, 1.2269728200345290e-02, 2.5502965928054320e-03, 4.3845534712421438e-04, 6.4209573028958276e-05, 8.1850123940815416e-06, +-1.1946327626650591e-01,-1.7594769993523024e-02, 1.3717847120407849e-02, 9.2543748878394644e-03, 3.1465022446392600e-03, 7.5579378034859558e-04, 1.4256174770210767e-04, 2.2271932205674494e-05, + 1.0186850627298288e-01,-1.3081090681707049e-02,-1.5203130185113382e-02,-1.5772962678708095e-03, 1.3864386945941654e-03, 7.5219546596130848e-04, 2.1825872980029966e-04, 4.5845058168498270e-05, +-1.1494959695468993e-01, 3.6901839315959084e-02, 9.0243161517080759e-03,-4.1460802716954022e-03,-1.6695728881137982e-03,-2.9458430728880516e-06, 1.5359420888795718e-04, 6.0109057872978596e-05, + 1.5185143627064901e-01,-6.9202160866383672e-02, 3.2487714116583178e-03, 7.0596026863624078e-03,-1.7476603434687390e-04,-6.7217226485813452e-04,-1.2258741298999397e-04, 1.9279675908091957e-05, +-2.2105359713703268e-01, 1.2198515389770556e-01,-2.6693874146394340e-02,-5.7671383867070568e-03, 2.9389381922534244e-03, 5.2586729670592238e-04,-1.7726457607094168e-04,-6.8369927473957521e-05, + 3.4303875103473824e-01,-2.1346560237431267e-01, 7.2027652673452333e-02,-3.9937001376028451e-03,-5.2099623103977147e-03, 7.1332393100693851e-04, 3.8315798283385181e-04,-1.6382477117073843e-05, +-5.5650435340905091e-01, 3.7583028783486028e-01,-1.5981011370573911e-01, 3.1885572820283724e-02, 3.8312755442447494e-03,-2.8724933541874349e-03,-6.2752886970612258e-05, 1.8097694864015337e-04, + 2.4771133477484561e-01, 1.3223243554088901e-01, 4.7359159712892472e-02, 1.2638597882069639e-02, 2.6772480086058740e-03, 4.6928875204293161e-04, 7.0088275034031950e-05, 9.1132088901963720e-06, +-1.1547889923395660e-01,-1.8089217474012168e-02, 1.3116973232704922e-02, 9.1880408569447753e-03, 3.2006225790044826e-03, 7.8587212916011941e-04, 1.5141364608050378e-04, 2.4154020122840127e-05, + 9.7389681759944433e-02,-1.1659100115503418e-02,-1.4839835708142925e-02,-1.7375537120686759e-03, 1.3195467625043726e-03, 7.5154557734037467e-04, 2.2430257821338834e-04, 4.8264113350731474e-05, +-1.0904878187544785e-01, 3.4229103563389610e-02, 9.1336634347003523e-03,-3.8683491557043644e-03,-1.6742675360124648e-03,-2.9404733540175343e-05, 1.4855298005564006e-04, 6.0825393351552280e-05, + 1.4327788543883746e-01,-6.4489588565405320e-02, 2.2369684972328753e-03, 6.8260520357116775e-03,-6.1334718489572219e-05,-6.5059706643514129e-04,-1.2937226065411591e-04, 1.6533681512620215e-05, +-2.0776747400424278e-01, 1.1374019604317305e-01,-2.3937172701967997e-02,-5.9023996617487721e-03, 2.7336928085641282e-03, 5.5215096131036340e-04,-1.6200055688607689e-04,-6.8882624659204363e-05, + 3.2150767004741582e-01,-1.9895413584589930e-01, 6.5891811322187965e-02,-2.7942784627722943e-03,-5.0502310130578244e-03, 6.0207273882638033e-04, 3.7974881805898076e-04,-9.3076242794157976e-06, +-5.2046180589331514e-01, 3.5005123340982991e-01,-1.4715003273821109e-01, 2.8147779879105519e-02, 4.1428143289514606e-03,-2.6904965712750382e-03,-1.0688089013572138e-04, 1.7269237493971719e-04, + 2.4316894247138041e-01, 1.3149989788932251e-01, 4.7872064417931140e-02, 1.3004688934047281e-02, 2.8063106860841259e-03, 5.0132449109820414e-04, 7.6325833569151826e-05, 1.0118631494751800e-05, +-1.1166904458205790e-01,-1.8528874120241623e-02, 1.2530708098226234e-02, 9.1155162085427080e-03, 3.2520646685470010e-03, 8.1590354815957230e-04, 1.6050319466565492e-04, 2.6133413976373101e-05, + 9.3140170461816274e-02,-1.0340335341626854e-02,-1.4472948021197259e-02,-1.8868900701331784e-03, 1.2525556175606322e-03, 7.4985486190669445e-04, 2.3013951201065626e-04, 5.0709620435342220e-05, +-1.0348050580344313e-01, 3.1738426814767434e-02, 9.2046798424666107e-03,-3.6000558717738567e-03,-1.6745873921161034e-03,-5.4980756464230928e-05, 1.4325252756531011e-04, 6.1431553468948354e-05, + 1.3521893261821055e-01,-6.0095475520937407e-02, 1.3306573603760492e-03, 6.5880115801932020e-03, 4.4017695514261129e-05,-6.2805758855291962e-04,-1.3554973252705990e-04, 1.3772749624832304e-05, +-1.9531440813914797e-01, 1.0605555796725830e-01,-2.1416040620635089e-02,-5.9925768854524599e-03, 2.5350665687088733e-03, 5.7412941422646025e-04,-1.4690690469937795e-04,-6.9119065870972305e-05, + 3.0136996610640626e-01,-1.8543772109406434e-01, 6.0242717676266933e-02,-1.7371167698432216e-03,-4.8794732876730439e-03, 4.9804253262336682e-04, 3.7467175271952840e-04,-2.5722717179206263e-06, +-4.8680768720047063e-01, 3.2605618824704441e-01,-1.3546007617579861e-01, 2.4767153895287310e-02, 4.3841116858668160e-03,-2.5116185255368260e-03,-1.4619103781839327e-04, 1.6401866358619252e-04, + 2.3877560329078890e-01, 1.3075080287873109e-01, 4.8361812690695019e-02, 1.3367762367335400e-02, 2.9373774618854020e-03, 5.3455986395257689e-04, 8.2931586410475120e-05, 1.1205192430161011e-05, +-1.0802480041205781e-01,-1.8917726654671452e-02, 1.1959165881198663e-02, 9.0372301926112640e-03, 3.3008279591262074e-03, 8.4584712040104671e-04, 1.6982191595310859e-04, 2.8211083571921808e-05, + 8.9107073757386357e-02,-9.1177628952153721e-03,-1.4103918427500486e-02,-2.0256859811682900e-03, 1.1856338600349358e-03, 7.4715936063074310e-04, 2.3575964615533244e-04, 5.3177163368088666e-05, +-9.8224836652601732e-02, 2.9417508529343835e-02, 9.2414016807133639e-03,-3.3413454248833827e-03,-1.6708502068704296e-03,-7.9638708166500090e-05, 1.3771699287244295e-04, 6.1927158069518756e-05, + 1.2764234518194556e-01,-5.5998186293068838e-02, 5.2079447609414131e-04, 6.3471745984060076e-03, 1.4156406905198164e-04,-6.0472029884418084e-04,-1.4112792691185598e-04, 1.1007654995655449e-05, +-1.8364053147501441e-01, 9.8892831004446791e-02,-1.9111764234278072e-02,-6.0430832120502431e-03, 2.3434466975483653e-03, 5.9208873373406922e-04,-1.3204655063395150e-04,-6.9093116245458894e-05, + 2.8253336247946120e-01,-1.7284751765230363e-01, 5.5043046708826641e-02,-8.0856048975557881e-04,-4.7003232730517680e-03, 4.0108891935121415e-04, 3.6811428822519795e-04, 3.8099644723883102e-06, +-4.5538088013176481e-01, 3.0372066961800848e-01,-1.2466719006360144e-01, 2.1712538637508844e-02, 4.5637902327999632e-03,-2.3368098862519100e-03,-1.8094480611642846e-04, 1.5505184368271087e-04, + 2.3452486266179109e-01, 1.2998710749926079e-01, 4.8828994805704053e-02, 1.3727596057108341e-02, 3.0703412820095892e-03, 5.6899056278152647e-04, 8.9914524582543942e-05, 1.2376839175302189e-05, +-1.0453775516253030e-01,-1.9259490074861052e-02, 1.1402405828265273e-02, 8.9535967350560172e-03, 3.3469183893616323e-03, 8.7566339699512899e-04, 1.7936095625716947e-04, 3.0387821882281029e-05, + 8.5278265087669253e-02,-7.9848244271388640e-03,-1.3734043817176085e-02,-2.1543265861642541e-03, 1.1189376023272250e-03, 7.4349639249134158e-04, 2.4115405413873374e-04, 5.5662319359037259e-05, +-9.3263089514808120e-02, 2.7254883578244560e-02, 9.2475180946219870e-03,-3.0922992770099390e-03,-1.6633625336828148e-03,-1.0334981644874821e-04, 1.3197014512752092e-04, 6.2312246760364904e-05, + 1.2051797309305268e-01,-5.2177568020099277e-02,-2.0094422953012558e-04, 6.1050284411720392e-03, 2.3159073476242630e-04,-5.8074034697388349e-04,-1.4611731215597747e-04, 8.2486078790974609e-06, +-1.7269554111315194e-01, 9.2216262898096757e-02,-1.7007065913806362e-02,-6.0588098339635641e-03, 2.1591217129952114e-03, 6.0630851068990774e-04,-1.1747513605091627e-04,-6.8819111025812072e-05, + 2.6491180401124870e-01,-1.6111948721168498e-01, 5.0258285172666936e-02, 3.8511354723868088e-06,-4.5150880221512908e-03, 3.1103310282559770e-04, 3.6025338889389798e-04, 9.8291383845084730e-06, +-4.2603129122293371e-01, 2.8292894533054580e-01,-1.1470376937605749e-01, 1.8955363640155560e-02, 4.6895958061532392e-03,-2.1668439916795127e-03,-2.1140703615196368e-04, 1.4587944692188764e-04, + 2.3041059297044869e-01, 1.2921062526765931e-01, 4.9274202408309417e-02, 1.4083984126749501e-02, 3.2050954516521530e-03, 6.0461073195072887e-04, 9.7283278073640147e-05, 1.3637547391232590e-05, +-1.0119996770278938e-01,-1.9557626005303475e-02, 1.0860438174804012e-02, 8.8650143063271937e-03, 3.3903479002091400e-03, 9.0531444320405337e-04, 1.8911112372966762e-04, 3.2664245107706265e-05, + 8.1642341697485910e-02,-6.9354044457569791e-03,-1.3364479993129084e-02,-2.2731991455773948e-03, 1.0526109266051978e-03, 7.3890430619810178e-04, 2.4631475126866043e-04, 5.8160675216845122e-05, +-8.8577746143242889e-02, 2.5239865016166225e-02, 9.2263987274798561e-03,-2.8529431791320991e-03,-1.6524192656406501e-03,-1.2609129341283347e-04, 1.2603529209338012e-04, 6.2587255993624331e-05, + 1.1381761115940911e-01,-4.8614847912260617e-02,-8.4221862849262474e-04, 5.8628744819716663e-03, 3.1439380079703204e-04,-5.5626184982743656e-04,-1.5053044351812092e-04, 5.5052380743253725e-06, +-1.6243245907166973e-01, 8.5992572546401899e-02,-1.5085995847228625e-02,-6.0441717222987730e-03, 1.9822938301751326e-03, 6.1706060827074877e-04,-1.0324143590067459e-04,-6.8311715467625782e-05, + 2.4842503161807161e-01,-1.5019405613511089e-01, 4.5856521832410124e-02, 7.1148426215800979e-04,-4.3257809243797268e-03, 2.2766853131757987e-04, 3.5125540831229866e-04, 1.5478640836537220e-05, +-3.9861908775318250e-01, 2.6357341456274153e-01,-1.0550725372915967e-01, 1.6469435994943629e-02, 4.7684786694041645e-03,-2.0023387287743839e-03,-2.3784297186912637e-04, 1.3658083555527294e-04, + 2.2642697530973949e-01, 1.2842303601606811e-01, 4.9698026663774257e-02, 1.4436736328512370e-02, 3.3415338657987450e-03, 6.4141302934324449e-04, 1.0504610305760120e-04, 1.4991313862136770e-05, +-9.8003939293671377e-02,-1.9815359803638771e-02, 1.0333229539760416e-02, 8.7718658792758798e-03, 3.4311339631752221e-03, 9.3476387496033121e-04, 1.9906292564196988e-04, 3.5040793371109291e-05, + 7.8188579490032606e-02,-5.9638002677447448e-03,-1.2996253933650398e-02,-2.3826909547070034e-03, 9.8678635814757488e-04, 7.3342224956038967e-04, 2.5123467461647263e-04, 6.0667842755026267e-05, +-8.4152379757777354e-02, 2.3362490808655347e-02, 9.1811192537282968e-03,-2.6232542407731239e-03,-1.6383033104838043e-03,-1.4784590061159785e-04, 1.1993520204872139e-04, 6.2752995618995666e-05, + 1.0751487056643270e-01,-4.5292537892095600e-02,-1.4100754747300324e-03, 5.6218463149516479e-03, 3.9027592535597266e-04,-5.3141822121810154e-04,-1.5438169699769197e-04, 2.7865843083449372e-06, +-1.5280740845852830e-01, 8.0190777764419810e-02,-1.3333831893137218e-02,-6.0031495610611057e-03, 1.8130900917235921e-03, 6.2460817074480254e-04,-8.9387782783092215e-05,-6.7585797811194886e-05, + 2.3299818622294810e-01,-1.4001580184602072e-01, 4.1808253262268481e-02, 1.3247016592729220e-03,-4.1341520240036379e-03, 1.5076671670241637e-04, 3.4127612430543460e-04, 2.0754879714050404e-05, +-3.7301398806896879e-01, 2.4555403276184906e-01,-9.7019753005113021e-02, 1.4230748582268632e-02, 4.8066676040707237e-03,-1.8437761143556509e-03,-2.6051578136598451e-04, 1.2722756301885205e-04, + 2.2256848231537130e-01, 1.2762589502004709e-01, 5.0101056612604930e-02, 1.4785677424089989e-02, 3.4795512213302011e-03, 6.7938868896755353e-04, 1.1321087059006940e-04, 1.6442149476156380e-05, +-9.4942587295324204e-02,-2.0035696506520040e-02, 9.8207078498679032e-03, 8.6745189649293820e-03, 3.4692991276917677e-03, 9.6397688650439383e-04, 2.0920660480519337e-04, 3.7517732010646746e-05, + 7.4906890788804165e-02,-5.0646940253427607e-03,-1.2630275073518292e-02,-2.4831875277335561e-03, 9.2158534922373190e-04, 7.2708995597651517e-04, 2.5590766004872129e-04, 6.3179473253146862e-05, +-7.9971584814146929e-02, 2.1613474239265285e-02, 9.1144849467410544e-03,-2.4031673042178648e-03,-1.6212853860072484e-03,-1.6860152812097089e-04, 1.1369203599982637e-04, 6.2810625109819434e-05, + 1.0158505905341221e-01,-4.2194345879486894e-02,-1.9109956335656587e-03, 5.3829263465313172e-03, 4.5954351295432461e-04,-5.0633253679150943e-04,-1.5768702007344862e-04, 1.0108844798505177e-07, +-1.4377940493289909e-01, 7.4782035141580522e-02,-1.1736986910310311e-02,-5.9393281820855565e-03, 1.6515723428420885e-03, 6.2920484991250318e-04,-7.5950487742948409e-05,-6.6656314744765671e-05, + 2.1856144007447961e-01,-1.3053316139275375e-01, 3.8086204057691184e-02, 1.8529465592909029e-03,-3.9417155071509447e-03, 8.0082312610474165e-05, 3.3046086437846071e-04, 2.5656975233705545e-05, +-3.4909460146723337e-01, 2.2877777745604108e-01,-8.9187700679218149e-02, 1.2217303461347634e-02, 4.8097374849527200e-03,-1.6915197989271975e-03,-2.7968450266316965e-04, 1.1788375794611505e-04, + 2.1882986202023130e-01, 1.2682064151063979e-01, 5.0483877714072298e-02, 1.5130646568001910e-02, 3.6190432114115130e-03, 7.1852758450472939e-04, 1.2178505674247761e-04, 1.7994072269238409e-05, +-9.2009220509591511e-02,-2.0221435694514497e-02, 9.3227668309847703e-03, 8.5733257159785088e-03, 3.5048705879808517e-03, 9.9292026981458257e-04, 2.1953217502006434e-04, 4.0095153431687319e-05, + 7.1787784815077013e-02,-4.2331265880261593e-03,-1.2267345679203463e-02,-2.5750710238531208e-03, 8.5711876901769807e-04, 7.1994754746038505e-04, 2.6032841674219007e-04, 6.5691270963621744e-05, +-7.6020911403103172e-02, 1.9984157740249520e-02, 9.0290524296811267e-03,-2.1925806849382497e-03,-1.6016239199188710e-03,-1.8835078877478225e-04, 1.0732728952763017e-04, 6.2761629646062724e-05, + 9.6005069143352689e-02,-3.9305093254829823e-02,-2.3509377445442682e-03, 5.1469609148479490e-03, 5.2250428840476992e-04,-4.8111792599145179e-04,-1.6046369915272666e-04,-2.5434059463030271e-06, +-1.3531016239818250e-01, 6.9739491139584539e-02,-1.0282923008478891e-02,-5.8559317834213382e-03, 1.4977461593101784e-03, 6.3109422118304173e-04,-6.2960254506721965e-05,-6.5538208745400856e-05, + 2.0504965353776705e-01,-1.2169816061129796e-01, 3.4665160394259903e-02, 2.3048197279647731e-03,-3.7497746068401944e-03, 1.5357530590645553e-05, 3.1894470572829464e-04, 3.0186470901545817e-05, +-3.2674781414906501e-01, 2.1315815205339356e-01,-8.1961532802000220e-02, 1.0408949237095075e-02, 4.7826708918193407e-03,-1.5458306942116641e-03,-2.9560236112408740e-04, 1.0860652368093780e-04, + 2.1520612266421010e-01, 1.2600860661222030e-01, 5.0847070561314031e-02, 1.5471496696320209e-02, 3.7599067029481740e-03, 7.5881829347952657e-04, 1.3077573413304631e-04, 1.9651100553612341e-05, +-8.9197516051989806e-02,-2.0375185349940927e-02, 8.8392701013662173e-03, 8.4686230887847606e-03, 3.5378797695716554e-03, 1.0215624264785777e-03, 2.3002945546329569e-04, 4.2772979479912816e-05, + 6.8822330702048878e-02,-3.4644732664781963e-03,-1.1908170388071732e-02,-2.6587188913011501e-03, 7.9348739570967060e-04, 7.1203535357942677e-04, 2.6449249955446248e-04, 6.8199005661738672e-05, +-7.2286803968527075e-02, 1.8466469908446668e-02, 8.9271497466997633e-03,-1.9913613346097796e-03,-1.5795650398549447e-03,-2.0709062849986971e-04, 1.0086174360774764e-04, 6.2607796218540975e-05, + 9.0753273876973739e-02,-3.6610638066822521e-02,-2.7353785840869629e-03, 4.9146740604211377e-03, 5.7946520863955955e-04,-4.5587798401178822e-04,-1.6273014341308852e-04,-5.1396511872193673e-06, +-1.2736391194379626e-01, 6.5038143636422463e-02,-8.9600722063893634e-03,-5.7558561915215158e-03, 1.3515688270966191e-03, 6.3050936425899430e-04,-5.0442584462393402e-05,-6.4246316659147506e-05, + 1.9240205558021872e-01,-1.1346616242194746e-01, 3.1521815946045445e-02, 2.6881502899812853e-03,-3.5594441542956294e-03,-4.3674034376382006e-05, 3.0685273591931137e-04, 3.4347060648741381e-05, +-3.0586821800216618e-01, 1.9861472491271731e-01,-7.5295390740835660e-02, 8.7872313130121157e-03, 4.7299142640782107e-03,-1.4068809070747340e-03,-3.0851541143601155e-04, 9.9446346617590854e-05, + 2.1169251840019979e-01, 1.2519102074501401e-01, 5.1191209752746131e-02, 1.5808093922906798e-02, 3.9020398978967170e-03, 8.0024816176558578e-04, 1.4018956481062959e-04, 2.1417246150976862e-05, +-8.6501497655185777e-02,-2.0499374776450002e-02, 8.3700548990035539e-03, 8.3607330556396652e-03, 3.5683619354871846e-03, 1.0498733726296288e-03, 2.4068810393170525e-04, 4.5550964297338664e-05, + 6.6002122878735775e-02,-2.7544211759428852e-03,-1.1553364976199756e-02,-2.7345027072168942e-03, 7.3078240736912685e-04, 7.0339374564547621e-04, 2.6839627959592124e-04, 7.0698524242744626e-05, +-6.8756544054678653e-02, 1.7052885484721642e-02, 8.8108948814924655e-03,-1.7993494783720716e-03,-1.5553426407735930e-03,-2.2482195342537060e-04, 9.4315423755776434e-05, 6.2351189900735151e-05, + 8.5809429539400295e-02,-3.4097803581952885e-02,-3.0693503746270509e-03, 4.6866800614267894e-03, 6.3073067626079977e-04,-4.3070719760492993e-04,-1.6450568462093626e-04,-7.6809895845125813e-06, +-1.1990723312135318e-01, 6.0654713178668281e-02,-7.7577630212980310e-03,-5.6416984069750688e-03, 1.2129564634817012e-03, 6.2767258611205550e-04,-3.8418170203768936e-05,-6.2795288867914287e-05, + 1.8056194630002145e-01,-1.0579563289998470e-01, 2.8634629248580304e-02, 3.0100608055511706e-03,-3.3716709854083675e-03,-9.7284104640610737e-05, 2.9430036209584078e-04, 3.8144332382426791e-05, +-2.8635757920000615e-01, 1.8507270116571206e-01,-6.9146845925243478e-02, 7.3352540236070341e-03, 4.6554290630752152e-03,-1.2747661457654614e-03,-3.1866146218558514e-04, 9.0447507760796486e-05, + 2.0828453584086179e-01, 1.2436902052852410e-01, 5.1516862905747383e-02, 1.6140316945021150e-02, 4.0453424792145582e-03, 8.4280336815936827e-04, 1.5003279444436839e-04, 2.3296507748952541e-05, +-8.3915515312337693e-02,-2.0596266644405253e-02, 7.9149354726749457e-03, 8.2499628598503294e-03, 3.5963558119944906e-03, 1.0778247375441772e-03, 2.5149764887862221e-04, 4.8428697623306431e-05, + 6.3319248667932440e-02,-2.0989481445906830e-03,-1.1203464414526850e-02,-2.8027871932785010e-03, 6.6908586879686500e-04, 6.9406298547802152e-04, 2.7203691332354767e-04, 7.3185761375340106e-05, +-6.5418196812523116e-02, 1.5736388090883596e-02, 8.6822128407234769e-03,-1.6163627736347974e-03,-1.5291785183217423e-03,-2.4154927421205690e-04, 8.7707566868414641e-05, 6.1994130417632263e-05, + 8.1154584903406712e-02,-3.1754311801242316e-02,-3.3574752685509163e-03, 4.4634948377610065e-03, 6.7660102214402303e-04,-4.0569137946050882e-04,-1.6581039243371585e-04,-1.0161344536332434e-05, +-1.1290889670464903e-01, 5.6567523256677271e-02,-6.6661525492894072e-03,-5.5157836544862428e-03, 1.0817903616050306e-03, 6.2279526638031059e-04,-2.6903275913774924e-05,-6.1199518385147519e-05, + 1.6947641996132629e-01,-9.8647923857753214e-02, 2.5983691659268570e-02, 3.2770270542793714e-03,-3.1872523933876326e-03,-1.4574688887644666e-04, 2.8139365818960808e-04, 4.1585527983975607e-05, +-2.6812434381907951e-01, 1.7246252495104103e-01,-6.3476644969802237e-02, 6.0375537177570840e-03, 4.5627383681359941e-03,-1.1495167491054183e-03,-3.2626924567967351e-04, 8.1648492832770214e-05, + 2.0497788139429890e-01, 1.2354365521962719e-01, 5.1824589799719677e-02, 1.6468056459875771e-02, 4.1897157422277689e-03, 8.8646898878076545e-04, 1.6031124776974290e-04, 2.5292864397848398e-05, +-8.1434226174671706e-02,-2.0667968221714447e-02, 7.4737061640566677e-03, 8.1366053069913853e-03, 3.6219032337063322e-03, 1.1053897564698982e-03, 2.6244752018945181e-04, 5.1405608502974205e-05, + 6.0766257952957259e-02,-1.4943030604716752e-03,-1.0858930268547616e-02,-2.8639293888491953e-03, 6.0847121188422650e-04, 6.8408308804540825e-04, 2.7541231045210266e-04, 7.5656749225785954e-05, +-6.2260561013428931e-02, 1.4510435532425684e-02, 8.5428514110494277e-03,-1.4422000337373682e-03,-1.5012825580141976e-03,-2.5728036785143110e-04, 8.1056595151970544e-05, 6.1539169125116941e-05, + 7.6770996545854620e-02,-2.9568721596202375e-02,-3.6039972183215746e-03, 4.2455463196075811e-03, 7.1737122754679452e-04,-3.8090810661758380e-04,-1.6666490463141423e-04,-1.2575208972046008e-05, +-1.0633971814205699e-01, 5.2756388965939524e-02,-5.6761636283948281e-03,-5.3801901402900877e-03, 9.5792263304680578e-04, 6.1607780752171901e-04,-1.5910103253956927e-05,-5.9473079224671241e-05, + 1.5909610710799652e-01,-9.1987070765555068e-02, 2.3550605130596584e-02, 3.4949329470047646e-03,-3.0068528023303341e-03,-1.8933666700260199e-04, 2.6822974098915814e-04, 4.4679319616948315e-05, +-2.5108317787355161e-01, 1.6071950988861827e-01,-5.8248473668615755e-02, 4.8799819362050087e-03, 4.4549692971087834e-03,-1.0311074753352816e-03,-3.3155779981200228e-04, 7.3082397069319389e-05, + 2.0176846934008369e-01, 1.2271589271679301e-01, 5.2114941636677577e-02, 1.6791214593464540e-02, 4.3350627121849731e-03, 9.3122906108048550e-04, 1.7103032523971300e-04, 2.7410269163302520e-05, +-7.9052576623290682e-02,-2.0716441845646735e-02, 7.0461442061183557e-03, 8.0209390863601182e-03, 3.6450488077328699e-03, 1.1325432582252549e-03, 2.7352707865459708e-04, 5.4480969366483561e-05, + 5.8336134777643947e-02,-9.3698755803792166e-04,-1.0520157492560980e-02,-2.9182779650334684e-03, 5.4900370744121255e-04, 6.7349369728310240e-04, 2.7852110095439637e-04, 7.8107626271063996e-05, +-5.9273122335681869e-02, 1.3368927488878584e-02, 8.3943956903257313e-03,-1.2766445560976865e-03,-1.4718529711876969e-03,-2.7202595701651688e-04, 7.4380096552993061e-05, 6.0989066498611896e-05, + 7.2642049824560448e-02,-2.7530371140555385e-02,-3.8128114284329091e-03, 4.0331838684157448e-03, 7.5332985902399350e-04,-3.5642715903989462e-04,-1.6709027167674832e-04,-1.4917631504454421e-05, +-1.0017242096511583e-01, 4.9202513463120261e-02,-4.7794267067397993e-03,-5.2367717040161382e-03, 8.4118121636084058e-04, 6.0770967404530168e-04,-5.4471417671400504e-06,-5.7629673395471736e-05, + 1.4937493442823610e-01,-8.5779604922652075e-02, 2.1318369069578222e-02, 3.6691209533338473e-03,-2.8310188214539568e-03,-2.2832574393608692e-04, 2.5489716719048685e-04, 4.7435602067213903e-05, +-2.3515453935088818e-01, 1.4978349577844957e-01,-5.3428738466638745e-02, 3.8495978927974156e-03, 4.3348916096378406e-03,-9.1946617462090072e-04,-3.3473603250941180e-04, 6.4777321557837723e-05, + 1.9865241060018290e-01, 1.2188662515974390e-01, 5.2388460408490177e-02, 1.7109704342763540e-02, 4.4812882487522418e-03, 9.7706664725546750e-04, 1.8219500082818570e-04, 2.9652642948901961e-05, +-7.6765785440439008e-02,-2.0743514687356149e-02, 6.6320122610655091e-03, 7.9032291173049586e-03, 3.6658395965068124e-03, 1.1592616480836531e-03, 2.8472564410836191e-04, 5.7653900442797444e-05, + 5.6022270753082859e-02,-4.2373895207984541e-04,-1.0187480665624995e-02,-2.9661726645587045e-03, 4.9074092678630995e-04, 6.6233397438764086e-04, 2.8136260139944582e-04, 8.0534645223207205e-05, +-5.6446009705162704e-02, 1.2306175426024135e-02, 8.2382814860578347e-03,-1.1194670911169732e-03,-1.4410765697081558e-03,-2.8579940690325685e-04, 6.7694811130423061e-05, 6.0346770215861340e-05, + 6.8752185131186833e-02,-2.5629324337039815e-02,-3.9874915703183647e-03, 3.8266868310228132e-03, 7.8475819204324717e-04,-3.3231095507476498e-04,-1.6710781496953936e-04,-1.7184200623741676e-05, +-9.4381509468226654e-02, 4.5888391667223180e-02,-3.9682260658838731e-03,-5.0871785371345429e-03, 7.3137431336980029e-04, 5.9786950692921953e-04, 4.4804969068638391e-06,-5.5682585888539615e-05, + 1.4026990113544985e-01,-7.9994378867221314e-02, 1.9271275610492418e-02, 3.8044384022527687e-03,-2.6601928260244750e-03,-2.6298272981193006e-04, 2.4147634465894693e-04, 4.9865300724216780e-05, +-2.2026428000267118e-01, 1.3959852965269953e-01,-4.8986364116029281e-02, 2.9345695302299959e-03, 4.2049528215746326e-03,-8.1448145765795118e-04,-3.3600244264372101e-04, 5.6756758588076480e-05, + 1.9562600216221609e-01, 1.2105667415187220e-01, 5.2645678360792231e-02, 1.7423449032202411e-02, 4.6282991381871863e-03, 1.0239638968934750e-03, 1.9380982093197759e-04, 3.2023868501463010e-05, +-7.4569328010343897e-02,-2.0750887857272027e-02, 6.2310607192780990e-03, 7.7837269156726500e-03, 3.6843248188435929e-03, 1.1855228864272337e-03, 2.9603252221195256e-04, 6.0923374473150797e-05, + 5.3818440153071870e-02, 4.8485666676128386e-05,-9.8611797127833196e-03,-3.0079438537856974e-03, 4.3373319169271417e-04, 6.5064249789000971e-04, 2.8393678085539043e-04, 8.2934180090044591e-05, +-5.3769954486395738e-02, 1.1316874575825616e-02, 8.0758076671823519e-03,-9.7042848501131731e-04,-1.4091290723252409e-03,-2.9861643938129033e-04, 6.1016622834638085e-05, 5.9615393905959301e-05, + 6.5086829062221352e-02,-2.3856320959835961e-02,-4.1313149278588961e-03, 3.6262723010464732e-03, 8.1192950155282745e-04,-3.0861498103856210e-04,-1.6673899813817862e-04,-1.9371027240422159e-05, +-8.8943150022057313e-02, 4.2797720695337146e-02,-3.2354500754476056e-03,-4.9328761263843848e-03, 6.2829430944640367e-04, 5.8672530094174989e-04, 1.3870761452461117e-05,-5.3644647039572871e-05, + 1.3174087071739446e-01,-7.4602404086321322e-02, 1.7394812677751836e-02, 3.9052799851619275e-03,-2.4947251984273802e-03,-2.9357110858295124e-04, 2.2803995211473038e-04, 5.1980194722603751e-05, +-2.0634327480371578e-01, 1.3011256944395402e-01,-4.4892606321183207e-02, 2.1240824776303569e-03, 4.0673101315088197e-03,-7.1600946227600511e-04,-3.3554497430238276e-04, 4.9039964020396119e-05, + 1.9268571711518331e-01, 1.2022679563086970e-01, 5.2887117544404581e-02, 1.7732381785124381e-02, 4.7760041739120752e-03, 1.0719021086869041e-03, 2.0587890431674659e-04, 3.4527784610273687e-05, +-7.2458921484313613e-02,-2.0740144896205542e-02, 5.8430297790179261e-03, 7.6626709761416223e-03, 3.7005555687470411e-03, 1.2113064636277192e-03, 3.0743702986735650e-04, 6.4288221690120422e-05, + 5.1718776588108070e-02, 4.8252425411295444e-04,-9.5414851518151704e-03,-3.0439121744213447e-03, 3.7802401155352400e-04, 6.3845717482131198e-04, 2.8624422656319410e-04, 8.5302732400255031e-05, +-5.1236252333995119e-02, 1.0396077840712954e-02, 7.9081475488075453e-03,-8.2928202689742849e-04,-1.3761754363956151e-03,-3.1049486417160431e-04, 5.4360556185241080e-05, 5.8798196624924271e-05, + 6.1632330174708073e-02,-2.2202730252839628e-02,-4.2472856286608213e-03, 3.4321021555888819e-03, 8.3510849990142222e-04,-2.8538821263445282e-04,-1.6600531069717618e-04,-2.1474725860361608e-05, +-8.3835060427547708e-02, 3.9915316558635103e-02,-2.5745451791217011e-03,-4.7751625679284208e-03, 5.3172122889671807e-04, 5.7443463402754864e-04, 2.2724360171849384e-05,-5.1528201671849913e-05, + 1.2375037698618281e-01,-6.9576700153898802e-02, 1.5675574261818689e-02, 3.9756267648172446e-03,-2.3348853512940443e-03,-3.2034806079894078e-04, 2.1465336232525387e-04, 5.3792754692524344e-05, +-1.9332707714008163e-01, 1.2127720865717219e-01,-4.1120878264487862e-02, 1.4082562895084546e-03, 3.9238594352134079e-03,-6.2387981033912266e-04,-3.3354098401340576e-04, 4.1642315139270432e-05, + 1.8982819526033021e-01, 1.1939768441129971e-01, 5.3113289445864798e-02, 1.8036445010794301e-02, 4.9243142261853664e-03, 1.1208617910735850e-03, 2.1840594305199269e-04, 3.7168180510261897e-05, +-7.0430510849030500e-02,-2.0712759693946439e-02, 5.4676513251316686e-03, 7.5402871666822475e-03, 3.7145845514307586e-03, 1.2365933715844865e-03, 3.1892851925672606e-04, 6.7747135029480748e-05, + 4.9717751155084061e-02, 8.8102362769072046e-04,-9.2285829027008957e-03,-3.0743882836653854e-03, 3.2365050686384341e-04, 6.2581516229679975e-04, 2.8828610956737276e-04, 8.7636936622819206e-05, +-4.8836727527393341e-02, 9.5391714888700338e-03, 7.7363593835779523e-03,-6.9577552785565896e-04,-1.3423702094391258e-03,-3.2145432668557669e-04, 4.7740777366514422e-05, 5.7898563107263164e-05, + 5.8375899016263375e-02,-2.0660507742282515e-02,-4.3381561047433339e-03, 3.2442894297095666e-03, 8.5455090445573484e-04,-2.6267352631410899e-04,-1.6492816339440811e-04,-2.3492394651524986e-05, +-7.9036406758545896e-02, 3.7227036677874747e-02,-1.9794733343439326e-03,-4.6151843863391469e-03, 4.4142577190734518e-04, 5.6114493921522043e-04, 3.1044477206305894e-05,-4.9345084446966573e-05, + 1.1626344343642064e-01,-6.4892154486952666e-02, 1.4101177373690345e-02, 4.0190819698530875e-03,-2.1808716440496210e-03,-3.4356350987207849e-04, 2.0137506465235235e-04, 5.5315994514401774e-05, +-1.8115559792337332e-01, 1.1304742054821977e-01,-3.7646589986559564e-02, 7.7806739370013360e-04, 3.7762616807220607e-03,-5.3790083852192075e-04,-3.3015730293171073e-04, 3.4575652854741500e-05, + 1.8705023426217310e-01, 1.1856997842122061e-01, 5.3324694689367888e-02, 1.8335589907371171e-02, 5.0731423015490133e-03, 1.1708227216790130e-03, 2.3139420438016300e-04, 3.9948790497765063e-05, +-6.8480255840952492e-02,-2.0670103874250986e-02, 5.1046506235430528e-03, 7.4167891318145038e-03, 3.7264658359931818e-03, 1.2613660723233544e-03, 3.3049640050894730e-04, 7.1298675543254847e-05, + 4.7810151966701506e-02, 1.2464523429621920e-03,-8.9226186941547443e-03,-3.0996726725856637e-03, 2.7064381832623934e-04, 6.1275279886024493e-04, 2.9006415047127664e-04, 8.9933564812724146e-05, +-4.6563699623739310e-02, 8.7418525165018114e-03, 7.5613960277882229e-03,-5.6965315729423259e-04,-1.3078578956641760e-03,-3.3151607209125800e-04, 4.1170599286457089e-05, 5.6919984833042674e-05, + 5.5305552140241118e-02,-1.9222155039222765e-02,-4.4064469155640374e-03, 3.0629040859667988e-03, 8.7050311903826266e-04,-2.4050809905439084e-04,-1.6352879457232243e-04,-2.5421594639748783e-05, +-7.4527707179463887e-02, 3.4719707808927108e-02,-1.4446726485449896e-03,-4.4539509817580931e-03, 3.5717197525009735e-04, 5.4699381066869793e-04, 3.8836505587354228e-05,-4.7106600875938239e-05, + 1.0924741498839100e-01,-6.0525391967778397e-02, 1.2660185183060979e-02, 4.0389038325245822e-03,-2.0328202945488622e-03,-3.6345936432555139e-04, 1.8825708348038580e-04, 5.6563336434838004e-05, +-1.6977280695616939e-01, 1.0538132041928271e-01,-3.4446999670657591e-02, 2.2527822047363043e-04, 3.6259667954900367e-03,-4.5786417857099360e-04,-3.2555037816572755e-04, 2.7848607456097856e-05, + 1.8434878130692359e-01, 1.1774426265347510e-01, 5.3521822803062363e-02, 1.8629775981137381e-02, 5.2224035927061867e-03, 1.2217640054500880e-03, 2.4484653346508629e-04, 4.2873288766338587e-05, +-6.6604518653448491e-02,-2.0613453682458996e-02, 4.7537478470101036e-03, 7.2923787017214539e-03, 3.7362546241604764e-03, 1.2856084640336801e-03, 3.4213016300144432e-04, 7.4941277983670452e-05, + 4.5991064970989495e-02, 1.5811126959829024e-03,-8.6237020989608296e-03,-3.1200555534825654e-03, 2.1902950106776967e-04, 5.9930554494914230e-04, 2.9158058546684606e-04, 9.2189530516186219e-05, +-4.4409952275006589e-02, 8.0001075617063752e-03, 7.3841138452644516e-03,-4.5065705974763580e-04,-1.2727733331993861e-03,-3.4070272511824005e-04, 3.4662490172242938e-05, 5.5866041940913968e-05, + 5.2410059836712965e-02,-1.7880682423198936e-02,-4.4544650564304830e-03, 2.8879782316041801e-03, 8.8320201491252567e-04,-2.1892379533298474e-04,-1.6182818687401546e-04,-2.7260328249439626e-05, +-7.0290742259911901e-02, 3.2381058997816264e-02,-9.6502097388658295e-04,-4.2923478186958006e-03, 2.7871953505989610e-04, 5.3210933654376075e-04, 4.6107796893708855e-05,-4.4823513469540948e-05, + 1.0267180125772817e-01,-5.6454653733711287e-02, 1.1342035881795609e-02, 4.0380357070643486e-03,-1.8908133786226069e-03,-3.8026893139269410e-04, 1.7534538964288947e-04, 5.7548488874785630e-05, +-1.5912645499143946e-01, 9.8239944740817750e-02,-3.1501075951041513e-02,-2.5762797407914879e-04, 3.4742353976552646e-03,-3.8354875544873292e-04,-3.1986647935309447e-04, 2.1466907409775744e-05, + 1.8172092523760880e-01, 1.1692107285085521e-01, 5.3705152043241687e-02, 1.8918970582165979e-02, 5.3720155194599828e-03, 1.2736641313850130e-03, 2.5876535696540531e-04, 4.5945284468856038e-05, +-6.4799852386753592e-02,-2.0543996409491144e-02, 4.4146594463999878e-03, 7.1672463046290186e-03, 3.7440070344943489e-03, 1.3093058448961094e-03, 3.5381939531090777e-04, 7.8673256529086382e-05, + 4.4255855977262448e-02, 1.8871519115066064e-03,-8.3319102274190364e-03,-3.1358168078893956e-03, 1.6882790361638644e-04, 5.8550793186181696e-04, 2.9283813277218926e-04, 9.4401891969694292e-05, +-4.2368704065755838e-02, 7.3101932626348509e-03, 7.2052809072880412e-03,-3.3852877322368457e-04,-1.2372420783106639e-03,-3.4903808506953809e-04, 2.8228085301561701e-05, 5.4740386009319921e-05, + 4.9678897328390689e-02,-1.6629574013028104e-02,-4.4843208661683115e-03, 2.7195108315981801e-03, 8.9287479850594961e-04,-1.9794754036173005e-04,-1.5984699363633009e-04,-2.9007017384778379e-05, +-6.6308471341418790e-02, 3.0199659211712790e-02,-5.3580224008402226e-04,-4.1311484608097708e-03, 2.0582582644783592e-04, 5.1661045224461798e-04, 5.2867427185266308e-05,-4.2506032533920357e-05, + 9.6508130553131580e-02,-5.2659684485575065e-02, 1.0136976848283278e-02, 4.0191336873153819e-03,-1.7548860022273906e-03,-3.9421647994000188e-04, 1.6268030248629259e-04, 5.8285336245902265e-05, +-1.4916781503870663e-01, 9.1587045902141118e-02,-2.8789370430124077e-02,-6.7750703932391515e-04, 3.3221584855120034e-03,-3.1472426517083413e-04,-3.1324195832619224e-04, 1.5433670938383322e-05, + 1.7916388913712039e-01, 1.1610089894305210e-01, 5.3875149270517397e-02, 1.9203148456510000e-02, 5.5218977613195582e-03, 1.3265010277776241e-03, 2.7315268737931891e-04, 4.9168317011024413e-05, +-6.3062990194068289e-02,-2.0462836383667041e-02, 4.0870993806094436e-03, 7.0415713801800610e-03, 3.7497799014502313e-03, 1.3324448750290762e-03, 3.6555380383167469e-04, 8.2492810624339310e-05, + 4.2600153810401248e-02, 2.1665725727172437e-03,-8.0472911059682219e-03,-3.1472259876615958e-03, 1.2005453142372672e-04, 5.7139351862921500e-04, 2.9383995959485096e-04, 9.6567854627925461e-05, +-4.0433581237684008e-02, 6.6686179601043571e-03, 7.0255845424581622e-03,-2.3301046836836977e-04,-1.2013807933682053e-03,-3.5654693547578420e-04, 2.1878201495208183e-05, 5.3546723720672548e-05, + 4.7102199197788366e-02,-1.5462755344360252e-02,-4.4979436394374413e-03, 2.5574719617828933e-03, 8.9973895438460528e-04,-1.7760167887601378e-04,-1.5760547432674645e-04,-3.0660481227846181e-05, +-6.2564954542148624e-02, 2.8164859317331412e-02,-1.5267532123692390e-04,-3.9710255476077365e-03, 1.3824765147667283e-04, 5.0060730850897263e-04, 5.9125978799745994e-05,-4.0163811144837796e-05, + 9.0729813859480035e-02,-4.9121627712205566e-02, 9.0360037196048470e-03, 3.9845919250642969e-03,-1.6250327234640150e-03,-4.0551693303789626e-04, 1.5029688066486719e-04, 5.8787840084295996e-05, +-1.3985144157168561e-01, 8.5388901478435475e-02,-2.6293899649448498e-02,-1.0406090300702281e-03, 3.1706752829159823e-03,-2.5115418817400119e-04,-3.0580355125235225e-04, 9.7496803242166170e-06, + 1.7667502333223031e-01, 1.1528418825208531e-01, 5.4032269872565070e-02, 1.9482291314913101e-02, 5.6719722823552216e-03, 1.3802521159070680e-03, 2.8801012810779271e-04, 5.2545851580363577e-05, +-6.1390835080145006e-02,-2.0371000559631827e-02, 3.7707802172169194e-03, 6.9155227918177679e-03, 3.7536305886656379e-03, 1.3550135368586469e-03, 3.7732323008489595e-04, 8.6398030909376413e-05, + 4.1019834520513179e-02, 2.4212423443947736e-03,-7.7698667659789906e-03,-3.1545423623444381e-03, 7.2720394841507222e-05, 5.5699485621749523e-04, 2.9458964972414378e-04, 9.8684773056030545e-05, +-3.8598592176118406e-02, 6.0721246517902918e-03, 6.8456382863302375e-03,-1.3384602602283923e-04,-1.1652976357626489e-03,-3.6325486780364083e-04, 1.5622854021793517e-05, 5.2288801416600479e-05, + 4.4670716827908699e-02,-1.4374563186276269e-02,-4.4970960412278240e-03, 2.4018066425857132e-03, 9.0400225319492000e-04,-1.5790431898567582e-04,-1.5512343839915057e-04,-3.2219913911922673e-05, +-5.9045280014184964e-02, 2.6266738101427288e-02, 1.8835475226874378e-04,-3.8125608012862548e-03, 7.5742744073354750e-05, 4.8420164949292100e-04, 6.4895337530111060e-05,-3.7805943861750674e-05, + 8.5312018115612259e-02,-4.5822928271309779e-02, 8.0308040075304180e-03, 3.9365658345862052e-03,-1.5012132949267340e-03,-4.1437567262497192e-04, 1.3822530015644827e-04, 5.9069950812647264e-05, +-1.3113494638692202e-01, 7.9614136981534134e-02,-2.3998035815302611e-02,-1.3526288570313025e-03, 3.0205894032845075e-03,-1.9259838862002623e-04,-2.9766871400731753e-04, 4.4136390509365918e-06, + 1.7425179879329661e-01, 1.1447134848177461e-01, 5.4176957728498093e-02, 1.9756387417966668e-02, 5.8221633488593728e-03, 1.4348943621154929e-03, 3.0333887918439819e-04, 5.6081274913682877e-05, +-5.9780450311522002e-02,-2.0269443731677009e-02, 3.4654141149917522e-03, 6.7892592364521553e-03, 3.7556168158566416e-03, 1.3770010941938937e-03, 3.8911766674550469e-04, 9.0386905211462521e-05, + 3.9511006579844993e-02, 2.6529030378308442e-03,-7.4996360657912627e-03,-3.1580150066804666e-03, 2.6832341563145894e-05, 5.4234345851121883e-04, 2.9509117184246450e-04, 1.0075015222199759e-04, +-3.6858103542014145e-02, 5.5176751115899765e-03, 6.6659882769153200e-03,-4.0781969193990839e-05,-1.1290926453593427e-03,-3.6918811861389914e-04, 9.4712755899428931e-06, 5.0970390546378842e-05, + 4.2375778653604118e-02,-1.3359717440984478e-02,-4.4833874137957235e-03, 2.2524382905237889e-03, 9.0586281537651393e-04,-1.3886966077310590e-04,-1.5242019696369238e-04,-3.3684862211248990e-05, +-5.5735496094588596e-02, 2.4496052049655367e-02, 4.9096341171620504e-04,-3.6562541447925194e-03, 1.8071057760111076e-05, 4.6748719669132544e-04, 7.0188504646970980e-05,-3.5440968770191596e-05, + 8.0231548144243964e-02,-4.2747241806707428e-02, 7.1137049212704308e-03, 3.8769933542480992e-03,-1.3833577906171611e-03,-4.2098844062929077e-04, 1.2649121833430686e-04, 5.9145529448730250e-05, +-1.2297878995095139e-01, 7.4233561135635701e-02,-2.1886405631404541e-02,-1.6187528397705784e-03, 2.8725834810444878e-03,-1.3881534510525143e-04,-2.8894598276774021e-04,-5.7758796032089730e-07, + 1.7189180090596970e-01, 1.1366275050576490e-01, 5.4309645210350810e-02, 2.0025431177573820e-02, 5.9723975403450178e-03, 1.4904043282272189e-03, 3.1913974362108211e-04, 5.9777891305126310e-05, +-5.8229050400204804e-02,-2.0159053396874460e-02, 3.1707136984994375e-03, 6.6629296499165352e-03, 3.7557964987029110e-03, 1.3983980502683794e-03, 4.0092727241731779e-04, 9.4457324577676335e-05, + 3.8069997003330344e-02, 2.8631790624724859e-03,-7.2365772672993017e-03,-3.1578829227293988e-03,-1.7606626368684656e-05, 5.2746977955148069e-04, 2.9534884863299078e-04, 1.0276164822476855e-04, +-3.5206817940857858e-02, 5.0024350937714276e-03, 6.4871191386506565e-03, 4.6431735961878669e-05,-1.0928581284268923e-03,-3.7437341955561513e-04, 3.4319371271833909e-06, 4.9595274005324793e-05, + 4.0209253034629286e-02,-1.2413294981623611e-02,-4.4582860595649577e-03, 2.1092718215016070e-03, 9.0550922243460771e-04,-1.2050830947814495e-04,-1.4951452168844627e-04,-3.5055203372590980e-05, +-5.2622548016252893e-02, 2.2844188620123402e-02, 7.5853115981647712e-04,-3.5025320056382417e-03,-3.5004140366196360e-05, 4.5055003511835953e-04, 7.5019423190214989e-05,-3.3076872468090686e-05, + 7.5466736636376291e-02,-3.9879350518996715e-02, 6.2776250848499381e-03, 3.8076144224931910e-03,-1.2713711759628223e-03,-4.2554132263560425e-04, 1.1511612322774826e-04, 5.9028278591384206e-05, +-1.1534608715537301e-01, 6.9220012787688773e-02,-1.9944796638952711e-02,-1.8437014866791160e-03, 2.7272324067177936e-03,-8.9564053768724972e-05,-2.7973535289497412e-04,-5.2287506497074705e-06, + 1.6959272359268079e-01, 1.1285873096763190e-01, 5.4430753217546271e-02, 2.0289422774525920e-02, 6.1226037543893044e-03, 1.5467582202729460e-03, 3.3541313432045738e-04, 6.3638918855957592e-05, +-5.6733992625048899e-02,-2.0040654291707455e-02, 2.8863928342220402e-03, 6.5366736069306514e-03, 3.7542276011071863e-03, 1.4191961049878964e-03, 4.1274238518949484e-04, 9.8607089325839721e-05, + 3.6693338333341444e-02, 3.0535853061725154e-03,-6.9806503867466318e-03,-3.1543751916313853e-03,-6.0597050811398833e-05, 5.1240319652782183e-04, 2.9536732674960187e-04, 1.0471706849356746e-04, +-3.3639753027168928e-02, 4.5237605471102112e-03, 6.3094593942368072e-03, 1.2804099684774395e-04,-1.0566790362870934e-03,-3.7883785957867482e-04,-2.4874299325324109e-06, 4.8167233355230092e-05, + 3.8163513574279141e-02,-1.1530705293341981e-02,-4.4231305772840764e-03, 1.9721964370896911e-03, 9.0312066845349361e-04,-1.0282757324229440e-04,-1.4642461037403978e-04,-3.6331123199132240e-05, +-4.9694218867621126e-02, 2.1303122766578978e-02, 9.9416632220109859e-04,-3.3517548739522987e-03,-8.3715348214905634e-05, 4.3346899869895161e-04, 7.9402817924217325e-05,-3.0721097637990838e-05, + 7.0997341634200101e-02,-3.7205084840985288e-02, 5.5160298600591146e-03, 3.7299888130585377e-03,-1.1651373742644763e-03,-4.2821080174706289e-04, 1.0411766736253452e-04, 5.8731682031373100e-05, +-1.0820242647518538e-01, 6.4548218625758061e-02,-1.8160070508618106e-02,-2.0317688011843322e-03, 2.5850152902087914e-03,-4.4605640720862079e-05,-2.7012867015197803e-04,-9.5460061878761525e-06, + 1.6735236376308271e-01, 1.1205959470568150e-01, 5.4540691240584527e-02, 2.0548367791949091e-02, 6.2727132058047804e-03, 1.6039319354916981e-03, 3.5215908150656652e-04, 6.7667485966407131e-05, +-5.5292769057401214e-02,-1.9915012624264247e-02, 2.6121673168575249e-03, 6.4106217144755777e-03, 3.7509679992235364e-03, 1.4393881116049653e-03, 4.2455353500997500e-04, 1.0283391509342883e-04, + 3.5377756433136967e-02, 3.2255344830355269e-03,-6.7317993378778786e-03,-3.1477111505517608e-03,-1.0214273078718765e-04, 4.9717199804753765e-04, 2.9515154770416301e-04, 1.0661437149349227e-04, +-3.2152221950101437e-02, 4.0791847694248767e-03, 6.1333864407610329e-03, 2.0428701672570593e-04,-1.0206333372094073e-03,-3.8260875874853405e-04,-8.2798101088036409e-06, 4.6690036914755217e-05, + 3.6231406719526314e-02,-1.0707667792284666e-02,-4.3791403229556589e-03, 1.8410881223379322e-03, 8.9886714533831324e-04,-8.5831745496907613e-05,-1.4316805866719005e-04,-3.7513094483390951e-05, +-4.6939074511810980e-02, 1.9865376483489662e-02, 1.2007260794445517e-03,-3.2042241776970353e-03,-1.2829006068640326e-04, 4.1631605228676451e-04, 8.3354048331406790e-05,-2.8380552872904558e-05, + 6.6804450995300635e-02,-3.4711250601130283e-02, 4.8228900073330914e-03, 3.6455124627810414e-03,-1.0645228781307431e-03,-4.2916387169072593e-04, 9.3509985792459017e-05, 5.8268952354896528e-05, +-1.0151570159643092e-01, 6.0194660937785888e-02,-1.6520082770116580e-02,-2.1868583899987129e-03, 2.4463262662052471e-03,-3.7047170273614666e-06,-2.6021002915092671e-04,-1.3536726878761222e-05, + 1.6516861607390451e-01, 1.1126561701420661e-01, 5.4639857450520468e-02, 2.0802276864338321e-02, 6.4226594205972071e-03, 1.6619011075916690e-03, 3.6937724062754702e-04, 7.1866628069115697e-05, +-5.3902999059697906e-02,-1.9782840022558132e-02, 2.3477554737651729e-03, 6.2848959976545687e-03, 3.7460753566596408e-03, 1.4589680330220870e-03, 4.3635145491351644e-04, 1.0713543886540957e-04, + 3.4120159037139774e-02, 3.3803439851689474e-03,-6.4899538841956851e-03,-3.1381005908068427e-03,-1.4225045046756214e-04, 4.8180337723057690e-04, 2.9470671971651343e-04, 1.0845166597186353e-04, +-3.0739815051970827e-02, 3.6664064377471871e-03, 5.9592311237791585e-03, 2.7540581159865660e-04,-9.8479238031849172e-04,-3.8571355305227963e-04,-1.3938879317551404e-05, 4.5167428704112584e-05, + 3.4406221489718017e-02,-9.9401907058846890e-03,-4.3274250617210894e-03, 1.7158118812675587e-03, 8.9290965599996149e-04,-6.9522372174790094e-05,-1.3976183740436321e-04,-3.8601855873083213e-05, +-4.4346412195602702e-02, 1.8523981161309967e-02, 1.3808359081277487e-03,-3.0601885328623334e-03,-1.6895013775592989e-04, 3.9915666813602904e-04, 8.6888974007415289e-05,-2.6061624448386344e-05, + 6.2870393356912663e-02,-3.2385561287759032e-02, 4.1926434366788383e-03, 3.5554324147708373e-03,-9.6937995010731317e-04,-4.2855819947558882e-04, 8.3303998121620862e-05, 5.7652985930181575e-05, +-9.5255954644671695e-02, 5.6137454697849143e-02,-1.5013608502919948e-02,-2.3125166276840858e-03, 2.3114842458523584e-03, 3.3369493856785163e-05,-2.5005617468641027e-04,-1.7209323003176381e-05, + 1.6303946797989499e-01, 1.1047704575216551e-01, 5.4728638811105353e-02, 2.1051165341862549e-02, 6.5723782251452456e-03, 1.7206411502588960e-03, 3.8706690068516343e-04, 7.6239284602972645e-05, +-5.2562422227729486e-02,-1.9644797218130269e-02, 2.0928786948783834e-03, 6.1596102772655988e-03, 3.7396070102708292e-03, 1.4779308979081232e-03, 4.4812709114362009e-04, 1.1150922496330802e-04, + 3.2917625009599216e-02, 3.5192422721393654e-03,-6.2550314157711331e-03,-3.1257439735915323e-03,-1.8092972153716143e-04, 4.6632342920241020e-04, 2.9403829056344889e-04, 1.1022720977914155e-04, +-2.9398382737459851e-02, 3.2832784538796168e-03, 5.7872819404719599e-03, 3.4162781166838328e-04,-9.4922125050218051e-04,-3.8817968959378420e-04,-1.9458979512029459e-05, 4.3603118225225476e-05, + 3.2681661191339466e-02,-9.2245514060515944e-03,-4.2689938719190834e-03, 1.5962237339612103e-03, 8.8540045035824847e-04,-5.3898504004677543e-05,-1.3622227510228801e-04,-3.9598391242012633e-05, +-4.1906212597391058e-02, 1.7272442555218696e-02, 1.5369075498751720e-03,-2.9198494217218185e-03,-2.0591129304475375e-04, 3.8205019502081524e-04, 9.0023831815968483e-05,-2.3770189757292464e-05, + 5.9178655152609755e-02,-3.0216575054432267e-02, 3.6201598191792153e-03, 3.4608604899284616e-03,-8.7954945270893499e-04,-4.2654232905062960e-04, 7.3507694478173373e-05, 5.6896324692032530e-05, +-8.9395230207042015e-02, 5.2356233318088322e-02,-1.3630273546995045e-02,-2.4119631118281895e-03, 2.1807417098712346e-03, 6.6842229352844613e-05,-2.3973690228275415e-04,-2.0573079968411309e-05, + 1.6096299505866199e-01, 1.0969410330951160e-01, 5.4807411210747538e-02, 2.1295052969596169e-02, 6.7218077310142472e-03, 1.7801272989096441e-03, 4.0522699294776542e-04, 8.0788296225466695e-05, +-5.1268891749150391e-02,-1.9501497482792576e-02, 1.8472618948148084e-03, 6.0348705384466288e-03, 3.7316198659782963e-03, 1.4962727567956133e-03, 4.5987161220886004e-04, 1.1595277097915888e-04, + 3.1767394266357815e-02, 3.6433748296189859e-03,-6.0269385648638622e-03,-3.1108326601098270e-03,-2.1819253956000938e-04, 4.5075715258117229e-04, 2.9315192145481627e-04, 1.1193940829740080e-04, +-2.8124019436738829e-02, 2.9277975492577116e-03, 5.6177889006455602e-03, 4.0317753827673808e-04,-9.1397911349926260e-04,-3.9003453158764043e-04,-2.4835092718751691e-05, 4.2000771055929328e-05, + 3.1051816985996541e-02,-8.5572780944069473e-03,-4.2047633579764326e-03, 1.4821724971432089e-03, 8.7648327962912373e-04,-3.8956934213161675e-05,-1.3256504513773580e-04,-4.0503909627252727e-05, +-3.9609095080403486e-02, 1.6104708184421508e-02, 1.6711556184995789e-03,-2.7833663479164663e-03,-2.3938268879500964e-04, 3.6505021851490746e-04, 9.2775124163140481e-05,-2.1511632146515517e-05, + 5.5713803264824995e-02,-2.8193636132222949e-02, 3.1007078465191454e-03, 3.3627857908191377e-03,-7.9486334443736007e-04,-4.2325591842365341e-04, 6.4126405534077716e-05, 5.6011124165238112e-05, +-8.3907439397047950e-02, 4.8832042451510710e-02,-1.2360490824916843e-02,-2.4881186248465669e-03, 2.0542926301216138e-03, 9.6932437607077622e-05,-2.2931545487140493e-04,-2.3638009100653682e-05, + 1.5893735659327671e-01, 1.0891698844071170e-01, 5.4876539611705070e-02, 2.1533963581308671e-02, 6.8708883157940093e-03, 1.8403346506888961e-03, 4.2385610000488210e-04, 8.5516402261039798e-05, +-5.0020368152565012e-02,-1.9353509835149427e-02, 1.6106339133648145e-03, 5.9107752898757901e-03, 3.7221703040592313e-03, 1.5139906383110438e-03, 4.7157641691516843e-04, 1.2046351363928225e-04, + 3.0666858317415585e-02, 3.7538097265376325e-03,-5.8055726734991125e-03,-3.0935491532570235e-03,-2.5405315394163349e-04, 4.3512845457869859e-04, 2.9205346195723453e-04, 1.1358681250846629e-04, +-2.6913048590877953e-02, 2.5980945969348215e-03, 5.4509670721599518e-03, 4.6027334807647062e-04,-8.7911955051776661e-04,-3.9130527257549499e-04,-3.0062814647122571e-05, 4.0364000234472227e-05, + 2.9511143187812776e-02,-7.9351327457875039e-03,-4.1355652245401407e-03, 1.3735013682676417e-03, 8.6629366489870074e-04,-2.4692422012829399e-05,-1.2880515718454393e-04,-4.1319825783789651e-05, +-3.7446275933600282e-02, 1.5015136992031669e-02, 1.7856129471857242e-03,-2.6508615131284443e-03,-2.6956662456465417e-04, 3.4820491122976034e-04, 9.5159517756582089e-05,-1.9290856916964233e-05, + 5.2461412925631952e-02,-2.6306820338441280e-02, 2.6299249417498778e-03, 3.2620861335996665e-03,-7.1514687503145414e-04,-4.1883000361919471e-04, 5.5163056778788079e-05, 5.5009127194805667e-05, +-7.8768233264073229e-02, 4.5547241274818517e-02,-1.1195401396966590e-02,-2.5436308014391211e-03, 1.9322795990650865e-03, 1.2385218230241815e-04,-2.1884891303659796e-04,-2.6414711398812995e-05, + 1.5696079139750671e-01, 1.0814587797434649e-01, 5.4936378214160989e-02, 2.1767924807426689e-02, 7.0195626003286384e-03, 1.9012382027229909e-03, 4.4295246512332450e-04, 9.0426238382356191e-05, +-4.8814913423160217e-02,-1.9201362032403607e-02, 1.3827278600336279e-03, 5.7874159131158127e-03, 3.7113140933737734e-03, 1.5310825056754761e-03, 4.8323314141624781e-04, 1.2503883458409742e-04, + 2.9613551390756609e-02, 3.8515427980392886e-03,-5.5908231251255835e-03,-3.0740673483163877e-03,-2.8852785105814779e-04, 4.1946015935782877e-04, 2.9074892597925520e-04, 1.1516811673280798e-04, +-2.5762008592717323e-02, 2.2924255821291928e-03, 5.2869998353514665e-03, 5.1312723694362438e-04,-8.4469088188367518e-04,-3.9201885930466583e-04,-3.5138328034899199e-05, 3.8696358408781180e-05, + 2.8054434174846515e-02,-7.3550952228006554e-03,-4.0621532603336147e-03, 1.2700493314163324e-03, 8.5495917646713829e-04,-1.1097902297858831e-05,-1.2495695250098749e-04,-4.2047741398791575e-05, +-3.5409529397647174e-02, 1.3998471107527083e-02, 1.8821447700631518e-03,-2.5224240564352312e-03,-2.9665830822535658e-04, 3.3155737205511031e-04, 9.7193752225703347e-05,-1.7112308268616547e-05, + 4.9408000505174257e-02,-2.4546884393367371e-02, 2.2037892390865425e-03, 3.1595384960478069e-03,-6.4022051015968494e-04,-4.1338728367079782e-04, 4.6618407347400189e-05, 5.3901642878290253e-05, +-7.3954884898541629e-02, 4.2485410721149822e-02,-1.0126819898804807e-02,-2.5808976851019660e-03, 1.8148002396971559e-03, 1.4780618306043205e-04,-2.0838857672253523e-04,-2.8914253559231311e-05, + 1.5503161386947020e-01, 1.0738092840709190e-01, 5.4987270633049111e-02, 2.1996967796767221e-02, 7.1677754226855848e-03, 1.9628128886398032e-03, 4.6251400186638083e-04, 9.5520334520873398e-05, +-4.7650685462378300e-02,-1.9045543361902423e-02, 1.1632814078479867e-03, 5.6648770017884431e-03, 3.6991063140108466e-03, 1.5475472135989430e-03, 4.9483366532476780e-04, 1.2967606605141202e-04, + 2.8605142100475878e-02, 3.9375024796749827e-03,-5.3825725515358903e-03,-3.0525527904188225e-03,-3.2163475010545941e-04, 4.0377401931040611e-04, 2.8924446882550470e-04, 1.1668215606925610e-04, +-2.4667639620800895e-02, 2.0091631861263830e-03, 5.1260418691545899e-03, 5.6194469684317863e-04,-8.1073647935268043e-04,-3.9220192272624872e-04,-4.0058375875717800e-05, 3.7001330723376169e-05, + 2.6676802806927278e-02,-6.8143484802902872e-03,-3.9852097765981295e-03, 1.1716524017358282e-03, 8.4259972087951046e-04, 1.8353179973661224e-06,-1.2103410268534830e-04,-4.2689426999216188e-05, +-3.3491151287217566e-02, 1.3049809564867294e-02, 1.9624618255235111e-03,-2.3981138940610204e-03,-3.2084569899838342e-04, 3.1514595366494863e-04, 9.8894557992247018e-05,-1.4979986992274172e-05, + 4.6540960852084860e-02,-2.2905218776924141e-02, 1.8185936639867947e-03, 3.0558285627148773e-03,-5.6990161299265429e-04,-4.0704242157753361e-04, 3.8491273780350869e-05, 5.2699530223307973e-05, +-6.9446179629009008e-02, 3.9631268170276956e-02,-9.1471840371275259e-03,-2.6020893427163394e-03, 1.7019129622117476e-03, 1.6899147409742761e-04,-1.9798033669589284e-04,-3.1148055579342907e-05, + 1.5314821026037520e-01, 1.0662227738981650e-01, 5.5029550085697383e-02, 2.2221126951630341e-02, 7.3154738091904814e-03, 2.0250336133744149e-03, 4.8253830393938768e-04, 1.0080111300262330e-04, +-4.6525932870558701e-02,-1.8886507245893178e-02, 9.5203704120742222e-04, 5.5432366903488094e-03, 3.6856012878532327e-03, 1.5633844656791061e-03, 5.0637011692713965e-04, 1.3437249645179911e-04, + 2.7639425624665523e-02, 4.0125543165118929e-03,-5.1806979253554084e-03,-3.0291629367723526e-03,-3.5339361120981412e-04, 3.8809072894171234e-04, 2.8754636532187807e-04, 1.1812790356447318e-04, +-2.3626871308153628e-02, 1.7467889414730080e-03, 4.9682218898967536e-03, 6.0692461950014086e-04,-7.7729506683250232e-04,-3.9188071658878527e-04,-4.4820234660217576e-05, 3.5282328415671670e-05, + 2.5373660249626638e-02,-6.3102647842597148e-03,-3.9053515416074660e-03, 1.0781447236941806e-03, 8.2932783294990646e-04, 1.4117376395711000e-05,-1.1704961154155243e-04,-4.3246804579010037e-05, +-3.1683925033886354e-02, 1.2164583839730281e-02, 2.0281324621200881e-03,-2.2779651941260051e-03,-3.4230941331043124e-04, 2.9900457774067243e-04, 1.0027858279702904e-04,-1.2897468728014968e-05, + 4.3848508873616632e-02,-2.1373803876279004e-02, 1.4709219572964219e-03, 2.9515594417143676e-03,-5.0400590755630861e-04,-3.9990235681067079e-04, 3.0778739152811734e-05, 5.1413186080718959e-05, +-6.5222312749895636e-02, 3.6970588139015492e-02,-8.2495078427794050e-03,-2.6091676929052201e-03, 1.5936421278678770e-03, 1.8759716564115510e-04,-1.8766503440658037e-04,-3.3127789253016691e-05, + 1.5130903514582611e-01, 1.0587004511301450e-01, 5.5063539588540163e-02, 2.2440439675832442e-02, 7.4626069428349812e-03, 2.0878752862824911e-03, 5.0302265522667597e-04, 1.0627088690467641e-04, +-4.5438990032811613e-02,-1.8724673672045680e-02, 7.4874226216509882e-04, 5.4225669723047577e-03, 3.6708525165808194e-03, 1.5785947724025052e-03, 5.1783487754468427e-04, 1.3912537582581432e-04, + 2.6714316360765933e-02, 4.0775051692185423e-03,-4.9850715476005159e-03,-3.0040474219021045e-03,-3.8382565533286866e-04, 3.7242994106769498e-04, 2.8566098900883357e-04, 1.1950446713998215e-04, +-2.2636811191547389e-02, 1.5038859193030919e-03, 4.8136451621466703e-03, 6.4825924131167289e-04,-7.4440100936379165e-04,-3.9108106312327152e-04,-4.9421687748368577e-05, 3.3542683092463275e-05, + 2.4140697110850481e-02,-5.8403928750544410e-03,-3.8231352496384298e-03, 9.8935953711473310e-04, 8.1524897043382875e-04, 2.5759683731528841e-05,-1.1301581972027655e-04,-4.3721930965238497e-05, +-2.9981089985904923e-02, 1.1338535078912314e-02, 2.0805938218854932e-03,-2.1619895181404433e-03,-3.6122268519865359e-04, 2.8316303752733336e-04, 1.0136232630739221e-04,-1.0867922627906538e-05, + 4.1319625064817234e-02,-1.9945169192956958e-02, 1.1576264987951668e-03, 2.8472596216921383e-03,-4.4234874645969154e-04,-3.9206662554087105e-04, 2.3476348059427366e-05, 5.0052536931540483e-05, +-6.1264794257774188e-02, 3.4490128547092810e-02,-7.4273384029626679e-03,-2.6039046916140336e-03, 1.4899826752446021e-03, 2.0380429427342619e-04,-1.7747880919207683e-04,-3.4865286881138541e-05, + 1.4951260808793981e-01, 1.0512433559830579e-01, 5.5089552161317772e-02, 2.2654946135255250e-02, 7.6091261293456929e-03, 2.1513128525872142e-03, 5.2396403998660401e-04, 1.1193185862737760e-04, +-4.4388272489634020e-02,-1.8560431461447355e-02, 5.5314975915769782e-04, 5.3029340077927582e-03, 3.6549126266495376e-03, 1.5931794098353390e-03, 5.2922058508377511e-04, 1.4393192117389078e-04, + 2.5827841028186665e-02, 4.1331071376744799e-03,-4.7955619390609855e-03,-2.9773483243540092e-03,-4.1295339549978979e-04, 3.5681028505105540e-04, 2.8359479239539948e-04, 1.2081108630336015e-04, +-2.1694733890512186e-02, 1.2791319123470844e-03, 4.6623957995183722e-03, 6.8613412447085000e-04,-7.1208459029585016e-04,-3.8982830533528743e-04,-5.3860998977718448e-05, 3.1785641656760191e-05, + 2.2973865802859268e-02,-5.4024460095055647e-03,-3.7390625598970285e-03, 9.0513002372510920e-04, 8.0046180931884602e-04, 3.6774764849327316e-05,-1.0894441182338950e-04,-4.4116981936348647e-05, +-2.8376311812364833e-02, 1.0567692903860636e-02, 2.1211621703298681e-03,-2.0501786583559238e-03,-3.7775137385806013e-04, 2.6764728748284475e-04, 1.0216208224966052e-04,-8.8941302767790698e-06, + 3.8944004716225472e-02,-1.8612355394429000e-02, 8.7580779620083241e-04, 2.7433902320069758e-03,-3.8474620347632546e-04,-3.8362768528214813e-04, 1.6578287978002179e-05, 4.8627034132101449e-05, +-5.7556360110654473e-02, 3.2177562163971378e-02,-6.6747158147682471e-03,-2.5878990070502335e-03, 1.3909042592115657e-03, 2.1778574987181958e-04,-1.6745343203709284e-04,-3.6372459534564118e-05, + 1.4775751047723301e-01, 1.0438523790228380e-01, 5.5107891037336203e-02, 2.2864689030484709e-02, 7.7549847611844101e-03, 2.2153213231889349e-03, 5.4535915317307864e-04, 1.1778611867709460e-04, +-4.3372272574949217e-02,-1.8394140384981994e-02, 3.6501754186814978e-04, 5.1843984204790403e-03, 3.6378333208026466e-03, 1.6071403790802029e-03, 5.4052013681717311e-04, 1.4878932165078964e-04, + 2.4978132189967223e-02, 4.1800612212443567e-03,-4.6120346435735236e-03,-2.9492004335054636e-03,-4.4080047887851571e-04, 3.4124938682127625e-04, 2.8135428826257650e-04, 1.2204712866900998e-04, +-2.0798070968722868e-02, 1.0712930796957024e-03, 4.5145388719679885e-03, 7.2072816975765879e-04,-6.8037227666764783e-04,-3.8814726544101437e-04,-5.8136886600212870e-05, 3.0014361854709961e-05, + 2.1869364048418570e-02,-4.9942908212913329e-03,-3.6535847382351124e-03, 8.2529004584710889e-04, 7.8505853798159931e-04, 4.7176110628331051e-05,-1.0484642568156532e-04,-4.4434237100220379e-05, +-2.6863654869709902e-02, 9.8483556786074476e-03, 2.1510424372268447e-03,-1.9425071976726719e-03,-3.9205401170047812e-04, 2.5247971990063304e-04, 1.0269388753298406e-04,-6.9785047402372904e-06, + 3.6712010548317353e-02,-1.7368879010359519e-02, 6.2279551561253161e-04, 2.6403516640839033e-03,-3.3101600954257989e-04,-3.7467124111013178e-04, 1.0077557561026488e-05, 4.7145652248482333e-05, +-5.4080889558676876e-02, 3.0021412870206991e-02,-5.9861361213059969e-03,-2.5625913057028640e-03, 1.2963549485186859e-03, 2.2970626816951899e-04,-1.5761662532421224e-04,-3.7661224225762616e-05, + 1.4604238254391230e-01, 1.0365282723856940e-01, 5.5118849878500582e-02, 2.3069713381112480e-02, 7.9001382797323130e-03, 2.2798758028695480e-03, 5.6720441085365109e-04, 1.2383564465391460e-04, +-4.2389555305342899e-02,-1.8226133138264919e-02, 1.8410904559466867e-04, 5.0670155838062302e-03, 3.6196653356896490e-03, 1.6204803665653129e-03, 5.5172669143824812e-04, 1.5369474361748005e-04, + 2.4163422167077980e-02, 4.2190207335470655e-03,-4.4343529506168985e-03,-2.9197315153001442e-03,-4.6739153923948396e-04, 3.2576389044175350e-04, 2.7894603200130869e-04, 1.2321208631270241e-04, +-1.9944401433530913e-02, 8.7921802173432893e-04, 4.3701223348556386e-03, 7.5221365689891141e-04,-6.4928697287071693e-04,-3.8606220900444147e-04,-6.2248497629044218e-05, 2.8231908412148165e-05, + 2.0823619455265244e-02,-4.6139369430075409e-03,-3.5671069320225603e-03, 7.4967478782738111e-04, 7.6912514871221003e-04, 5.6978040811000584e-05,-1.0073226353569516e-04,-4.4676065534705433e-05, +-2.5437556398272783e-02, 9.1770721400809153e-03, 2.1713370275159728e-03,-1.8389348165729299e-03,-4.0428188700504031e-04, 2.3767942849326114e-04, 1.0297347785285404e-04,-5.1231096232991517e-06, + 3.4614628538353696e-02,-1.6208699587827859e-02, 3.9613093857263559e-04, 2.5384896072197525e-03,-2.8097834897556110e-04,-3.6527657103035906e-04, 3.9661224237977116e-06, 4.5616890136367940e-05, +-5.0823328126181552e-02, 2.8010996392994182e-02,-5.3565170093719285e-03,-2.5292782615318008e-03, 1.2062645238341404e-03, 2.3972247918172096e-04,-1.4799236821053455e-04,-3.8743439365271594e-05, + 1.4436592052882499e-01, 1.0292716602353780e-01, 5.5122712993965650e-02, 2.3270066321275280e-02, 8.0445441358942670e-03, 2.3449515169260251e-03, 5.8949596069592103e-04, 1.3008230043845990e-04, +-4.1438754505287195e-02,-1.8056717184619042e-02, 1.0193208214638594e-05, 4.9508358966495782e-03, 3.6004584051869820e-03, 1.6332027052236896e-03, 5.6283367042910763e-04, 1.5864533554425903e-04, + 2.3382037320668153e-02, 4.2505944883330701e-03,-4.2623785440725091e-03,-2.8890625758793147e-03,-4.9275205932956421e-04, 3.1036948100445177e-04, 2.7637660496719640e-04, 1.2430557198286275e-04, +-1.9131442832335081e-02, 7.0183225584130766e-04, 4.2291787938781482e-03, 7.8075630880277422e-04,-6.1884826272543578e-04,-3.8359681435396473e-04,-6.6195382666677167e-05, 2.6441249730308034e-05, + 1.9833275088176387e-02,-4.2595273373675687e-03,-3.4799921062599604e-03, 6.7812130987332585e-04, 7.5274172533002165e-04, 6.6195577115124582e-05,-9.6611704872679160e-05,-4.4844912189005747e-05, +-2.4092802425543958e-02, 8.5506242959197242e-03, 2.1830539572369285e-03,-1.7394083695104394e-03,-4.1457915587791874e-04, 2.2326245901342390e-04, 1.0301624928557972e-04,-3.3296780362352931e-06, + 3.2643426721463684e-02,-1.5126189132943091e-02, 1.9355073942469748e-04, 2.4381005478245981e-03,-2.3445653111926323e-04,-3.5551684843852528e-04,-1.7649409912030676e-06, 4.4048774446865634e-05, +-4.7769615854406776e-02, 2.6136365199714115e-02,-4.7811660639071754e-03,-2.4891253915678780e-03, 1.1205474143532370e-03, 2.4798300284365848e-04,-1.3860118743211174e-04,-3.9630847901997168e-05, + 1.4272687400492079e-01, 1.0220830485081610e-01, 5.5119755561364100e-02, 2.3465796906010281e-02, 8.1881617493435224e-03, 2.4105238362697868e-03, 6.1222969249562155e-04, 1.3652783557176440e-04, +-4.0518569154104692e-02,-1.7886176474933110e-02,-1.5695547743149046e-04, 4.8359050484849155e-03, 3.5802612290331513e-03, 1.6453113366112436e-03, 5.7383475878292262e-04, 1.6363823275982429e-04, + 2.2632392679171581e-02, 4.2753497719438868e-03,-4.0959720834508051e-03,-2.8573081222223250e-03,-5.1690824270027606e-04, 2.9508090864905560e-04, 2.7365259883140296e-04, 1.2532731519036638e-04, +-1.8357042907227693e-02, 5.3813306547943751e-04, 4.0917271188949649e-03, 8.0651537634325110e-04,-5.8907264014905958e-04,-3.8077414687750675e-04,-6.9977471275487694e-05, 2.4645255110332007e-05, + 1.8895175972707130e-02,-3.9293292886253585e-03,-3.3925646668972395e-03, 6.1046902309798553e-04, 7.3598272581411176e-04, 7.4844326114031847e-05,-9.2493920685490517e-05,-4.4943285040261596e-05, +-2.2824505261332489e-02, 7.9660115015962422e-03, 2.1871143653058875e-03,-1.6438637513030243e-03,-4.2308297881832275e-04, 2.0924204706393321e-04, 1.0283722540874898e-04,-1.5996313766940599e-06, + 3.0790516762928731e-02,-1.4116103678503147e-02, 1.2971984550795134e-05, 2.3394367771093633e-03,-1.9127755116972515e-04,-3.4545945994021683e-04,-7.1253128897689143e-06, 4.2448865262829591e-05, +-4.4906620441431878e-02, 2.4388257255846587e-02,-4.2557513896864362e-03,-2.4431788129702938e-03, 1.0391053076959883e-03, 2.5462858419592234e-04,-1.2946043347957677e-04,-4.0335027571715059e-05, + 1.4112404334062451e-01, 1.0149628339931210e-01, 5.5110243849682050e-02, 2.3656955928009739e-02, 8.3309524666119374e-03, 2.4765683010302469e-03, 6.3540124872133483e-04, 1.4317388482195550e-04, +-3.9627759941312402e-02,-1.7714773052649235e-02,-3.1755693315136529e-04, 4.7222642742036740e-03, 3.5591214464091945e-03, 1.6568107740049980e-03, 5.8472390511983227e-04, 1.6867056204185264e-04, + 2.1912986888663166e-02, 4.2938151167775246e-03,-3.9349937233861248e-03,-2.8245764190347198e-03,-5.3988689453811833e-04, 2.7991201351908971e-04, 2.7078060090501063e-04, 1.2627715819738816e-04, +-1.7619171771885642e-02, 3.8718469718611401e-04, 3.9577739186763029e-03, 8.2964374070459892e-04,-5.5997372863337376e-04,-3.7761663781550131e-04,-7.3595047943760211e-05, 2.2846692476570203e-05, + 1.8006356469071755e-02,-3.6217260086971259e-03,-3.3051137953790978e-03, 5.4656009379474581e-04, 7.1891725904902801e-04, 8.2940371376462232e-05,-8.8387488945241058e-05,-4.4973742996430925e-05, +-2.1628082477768880e-02, 7.4204356348016457e-03, 2.1843594481770947e-03,-1.5522275723577716e-03,-4.2992367770888421e-04, 1.9562884331205538e-04, 1.0245102950553006e-04, 6.5902151705655044e-08, + 2.9048518112570525e-02,-1.3173556828606544e-02,-1.4752173767109897e-04, 2.2427109486000212e-03,-1.5127255261009460e-04,-3.3516631708580452e-04,-1.2125308356739905e-05, 4.0824263592194459e-05, +-4.2222074941177065e-02, 2.2758048374349318e-02,-3.7762744246115061e-03,-2.3923760090934034e-03, 9.6182946471799042e-04, 2.5979226134117614e-04,-1.2058454221014208e-04,-4.0867347702576326e-05, + 1.3955627729703671e-01, 1.0079113127921011e-01, 5.5094435442949993e-02, 2.3843595744363760e-02, 8.4728795182163769e-03, 2.5430606427024709e-03, 6.5900603505236060e-04, 1.5002196793132861e-04, +-3.8765146017826602e-02,-1.7542748551564541e-02,-4.7182548464769214e-04, 4.6099505987384527e-03, 3.5370856141133319e-03, 1.6677060665153520e-03, 5.9549532123487987e-04, 1.7373944604543744e-04, + 2.1222397466262061e-02, 4.3064828891905462e-03,-3.7793035767350533e-03,-2.7909697412369884e-03,-5.6171531105437969e-04, 2.6487575148246060e-04, 2.6776718041205663e-04, 1.2715505192466430e-04, +-1.6915914577071513e-02, 2.4811388174010574e-04, 3.8273148876690789e-03, 8.5028803060517707e-04,-5.3156248978291471e-04,-3.7414606719151137e-04,-7.7048728691486354e-05, 2.1048226569024629e-05, + 1.7164028458811618e-02,-3.3352088156512237e-03,-3.2178965166099302e-03, 4.8623978423419111e-04, 7.0160935494548713e-04, 9.0500174367557588e-05,-8.4300411090505620e-05,-4.4938884533443123e-05, +-2.0499237274462841e-02, 6.9112872908484758e-03, 2.1755568608899552e-03,-1.4644186599553114e-03,-4.3522490952609241e-04, 1.8243112637647899e-04, 1.0187186143444744e-04, 1.6660693533507404e-06, + 2.7410524565311317e-02,-1.2293995141742786e-02,-2.8969314052375121e-04, 2.1481002234646678e-03,-1.1427720246711320e-04,-3.2469416083318601e-04,-1.6775765762729812e-05, 3.9181620466883631e-05, +-3.9704519707054103e-02, 2.1237707903164059e-02,-3.3390447820945629e-03,-2.3375556850989115e-03, 8.8860276798852873e-04, 2.6359956020482740e-04,-1.1198528206272640e-04,-4.1238932053572296e-05, + 1.3802247075136609e-01, 1.0009286882007970e-01, 5.5072579464007260e-02, 2.4025770112887378e-02, 8.6139079749984939e-03, 2.6099768048800749e-03, 6.8303923088776722e-04, 1.5707348953726479e-04, +-3.7929601931286389e-02,-1.7370325593619507e-02,-6.1996986824294775e-04, 4.4989970716863004e-03, 3.5141991889959378e-03, 1.6780027642398412e-03, 6.0614348111540995e-04, 1.7884200756649186e-04, + 2.0559276337666882e-02, 4.3138117043620798e-03,-3.6287621261930757e-03,-2.7565846215070276e-03,-5.8242117700211486e-04, 2.4998422045762673e-04, 2.6461887568493547e-04, 1.2796105179534799e-04, +-1.6245464633304802e-02, 1.2010565739816337e-04, 3.7003360350336915e-03, 8.6858875199450096e-04,-5.0384742119121578e-04,-3.7038355053953232e-04,-8.0339438353151132e-05, 1.9252417575873088e-05, + 1.6365570290702965e-02,-3.0683698451439696e-03,-3.1311405208777256e-03, 4.2935673662495774e-04, 6.8411822733347599e-04, 9.7540483623624564e-05,-8.0240129355009049e-05,-4.4841337052183262e-05, +-1.9433940135846935e-02, 6.4361329281264739e-03, 2.1614066247951126e-03,-1.3803494013819965e-03,-4.3910385348703667e-04, 1.6965500369795053e-04, 1.0111347876858326e-04, 3.2002742469221178e-06, + 2.5870073063973410e-02,-1.1473175223545377e-02,-4.1516309437372072e-04, 2.0557500385873098e-03,-8.0131989517211383e-05,-3.1409485777283085e-04,-2.1087944775032645e-05, 3.7527147415561767e-05, +-3.7343248287518789e-02, 1.9819757515287369e-02,-2.9406569718920445e-03,-2.2794667873287395e-03, 8.1930153012666515e-04, 2.6616871084226244e-04,-1.0367198712712526e-04,-4.1460627187275367e-05, + 1.3652156253945191e-01, 9.9401507804960210e-02, 5.5044916797681240e-02, 2.4203534037636101e-02, 8.7540047038417168e-03, 2.6772929626154751e-03, 7.0749579980613532e-04, 1.6432973926034861e-04, +-3.7120054734491703e-02,-1.7197709093355412e-02,-7.6219325311549513e-04, 4.3894329921368401e-03, 3.4905065143384807e-03, 1.6877068844795610e-03, 6.1666311946427185e-04, 1.8397537363792094e-04, + 1.9922345641136291e-02, 4.3162286797811828e-03,-3.4832305889445662e-03,-2.7215120924214921e-03,-6.0203247090012896e-04, 2.3524868720026021e-04, 2.6134218225440603e-04, 1.2869531353249764e-04, +-1.5606116961355108e-02, 2.3994746345366857e-06, 3.5768148054041442e-03, 8.8468042807374712e-04,-4.7683474395372283e-04,-3.6634952910700644e-04,-8.3468388567556448e-05, 1.7461720177571795e-05, + 1.5608516435989645e-02,-2.8198952581501430e-03,-3.0450467587060815e-03, 3.7576320626875890e-04, 6.6649852914927340e-04, 1.0407825172755619e-04,-7.6213544770830955e-05,-4.4683746938453518e-05, +-1.8428411694139786e-02, 5.9927028976759699e-03, 2.1425465792072797e-03,-1.2999269433432090e-03,-4.4167140873673823e-04, 1.5730460073802393e-04, 1.0018918183207423e-04, 4.6681607143288386e-06, + 2.4421114591815757e-02,-1.0707142409584380e-02,-5.2542158614281688e-04, 1.9657775294396212e-03,-4.8682454561341292e-05,-3.0341568734631899e-04,-2.5073433414501509e-05, 3.5866628099111125e-05, +-3.5128257001400140e-02, 1.8497232882761085e-02,-2.5779688600271627e-03,-2.2187767546787379e-03, 7.5379708578655110e-04, 2.6761088068325396e-04,-9.5651776384278193e-05,-4.1542975907325623e-05, + 1.3505253341065820e-01, 9.8717052154028817e-02, 5.5011680312796962e-02, 2.4376943623222111e-02, 8.8931383229172937e-03, 2.7449855404503031e-03, 7.3237049995693608e-04, 1.7179189195295981e-04, +-3.6335481256629387e-02,-1.7025087475278117e-02,-8.9869327725216469e-04, 4.2812841239293249e-03, 3.4660508098760343e-03, 1.6968248790340677e-03, 6.2704922976402830e-04, 1.8913667945703595e-04, + 1.9310393781351270e-02, 4.3141315382335451e-03,-3.3425712385014867e-03,-2.6858379228225189e-03,-6.2057737755518566e-04, 2.2067961441723594e-04, 2.5794354180548389e-04, 1.2935808892608768e-04, +-1.4996262243117725e-02,-1.0571443678411303e-04, 3.4567211001013936e-03, 8.9869174771891854e-04,-4.5052858013413600e-04,-3.6206376323023821e-04,-8.6437056498866267e-05, 1.5678482974831144e-05, + 1.4890547806333611e-02,-2.5885589108541997e-03,-2.9597918261836877e-03, 3.2531524939074380e-04, 6.4880059954796742e-04, 1.1013055962443116e-04,-7.2227035697873082e-05,-4.4468770307470447e-05, +-1.7479106717187810e-02, 5.5788802955096112e-03, 2.1195574114764538e-03,-1.2230542608706286e-03,-4.4303240002739733e-04, 1.4538223888035050e-04, 9.9111802282049531e-05, 6.0695956352391824e-06, + 2.3057987012697422e-02,-9.9922109269212460e-03,-6.2183784979498620e-04, 1.8782746372020245e-03,-1.9779360981576162e-05,-2.9269961946623135e-04,-2.8744063610605127e-05, 3.4205430914332010e-05, +-3.3050197939618664e-02, 1.7263648031290393e-02,-2.2480817386522976e-03,-2.1560790648179192e-03, 6.9195718892345846e-04, 2.6803042068700302e-04,-8.7929759496861335e-05,-4.1496195314039109e-05, + 1.3361440408882719e-01, 9.8039498561219018e-02, 5.4973095082501762e-02, 2.4546055937553560e-02, 9.0312791565993582e-03, 2.8130312291593860e-03, 7.5765789436586393e-04, 1.7946100810157099e-04, +-3.5574905527608169e-02,-1.6852633809942119e-02,-1.0296620954820188e-03, 4.1745729015753991e-03, 3.4408741651796599e-03, 1.7053636025853394e-03, 6.3729706191623721e-04, 1.9432307214328550e-04, + 1.8722271717666050e-02, 4.3078905704180496e-03,-3.2066476875495901e-03,-2.6496428481078871e-03,-6.3808420748762747e-04, 2.0628668808699881e-04, 2.5442933196953468e-04, 1.2994972158437526e-04, +-1.4414381147248001e-02,-2.0489845622909293e-04, 3.3400182068520782e-03, 9.1074572059370441e-04,-4.2493112051198963e-04,-3.5754532859799237e-04,-8.9247164307025486e-05, 1.3904948273434054e-05, + 1.4209482691018908e-02,-2.3732164549521879e-03,-2.8755301569874927e-03, 2.7787287062176367e-04, 6.3107070266586241e-04, 1.1571454783416502e-04,-6.8286476744814202e-05,-4.4199064412621289e-05, +-1.6582699145971096e-02, 5.1926905806334951e-03, 2.0929672973796758e-03,-1.1496311078073391e-03,-4.4328578914832023e-04, 1.3388860242587381e-04, 9.7893694907632759e-05, 7.4046525420285488e-06, + 2.1775389726604592e-02,-9.3249454310374083e-03,-7.0566972981068120e-04, 1.7933109271710173e-03, 6.7211870260993657e-06,-2.8198558208912875e-04,-3.2111834726906389e-05, 3.2548522390398836e-05, +-3.1100335157642000e-02, 1.6112962186698485e-02,-1.9483218863016723e-03,-2.0919001330749667e-03, 6.3364723500039240e-04, 2.6752512088631589e-04,-8.0509229565553657e-05,-4.1330159061719199e-05, + 1.3220623343334861e-01, 9.7368837086929630e-02, 5.4929378602452020e-02, 2.4710928882628009e-02, 9.1683991901779296e-03, 2.8814070012519728e-03, 7.8335236113779628e-04, 1.8733803437595369e-04, +-3.4837396346418983e-02,-1.6680506874178755e-02,-1.1552864381033645e-03, 4.0693186270959573e-03, 3.4150175361300598e-03, 1.7133302821767927e-03, 6.4740211948862781e-04, 1.9953171432596163e-04, + 1.8156889472240229e-02, 4.2978504666368513e-03,-3.0753251353105634e-03,-2.6130027942087935e-03,-6.5458132287808321e-04, 1.9207884487612245e-04, 2.5080585692233278e-04, 1.3047064268335086e-04, +-1.3859039005603377e-02,-2.9577073276381739e-04, 3.2266636454400281e-03, 9.2095983743107593e-04,-4.0004278295020139e-04,-3.5281261513579694e-04,-9.1900659380779643e-05, 1.2143252199781860e-05, + 1.3563268272839560e-02,-2.1727998388106225e-03,-2.7923960360869094e-03, 2.3330013464310665e-04, 6.1335125784412565e-04, 1.2084735413255286e-04,-6.4397257958936411e-05,-4.3877279697137562e-05, +-1.5736068111650181e-02, 4.8322919056992030e-03, 2.0632561813485242e-03,-1.0795548599122817e-03,-4.4252489015132669e-04, 1.2282289509172077e-04, 9.6546732337040586e-05, 8.6735958237610871e-06, + 2.0568360017349383e-02,-8.7021438220169136e-03,-7.7807233501621192e-04, 1.7109361432608911e-03, 3.0957671907935237e-05,-2.7130871843121073e-04,-3.5188844543451953e-05, 3.0900481217532916e-05, +-2.9270503839366295e-02, 1.5039548937789233e-02,-1.6762235078340191e-03,-2.0267056171775905e-03, 5.7873132596845478e-04, 2.6618647227475296e-04,-7.3391843307666051e-05,-4.1054383423868722e-05, + 1.3082711669475680e-01, 9.6705051709757198e-02, 5.4880741006465783e-02, 2.4871621073021870e-02, 9.3044720244885217e-03, 2.9500901252740440e-03, 8.0944810354232255e-04, 1.9542380431849510e-04, +-3.4122064984999603e-02,-1.6508852140527747e-02,-1.2757476787497793e-03, 3.9655376580283348e-03, 3.3885207442290004e-03, 1.7207324877892781e-03, 6.5736015660181068e-04, 2.0475978756205748e-04, + 1.7613212844471857e-02, 4.2843320263613593e-03,-2.9484705826443190e-03,-2.5759890950759544e-03,-6.7009706966680849e-04, 1.7806429955216424e-04, 2.4707933875742563e-04, 1.3092136672700701e-04, +-1.3328880818110497e-02,-3.7890813330028646e-04, 3.1166099361432898e-03, 9.2944623413307014e-04,-3.7586236172685770e-04,-3.4788332826029959e-04,-9.4399695341884496e-05, 1.0395425121894703e-05, + 1.2949972684810211e-02,-1.9863121819743527e-03,-2.7105054489835623e-03, 1.9146524608442089e-04, 5.9568106119694468e-04, 1.2554605728888182e-04,-6.0564304174156631e-05,-4.3506052466289796e-05, +-1.4936284866784564e-02, 4.4959661109220481e-03, 2.0308597238444738e-03,-1.0127212606791220e-03,-4.4083758666560105e-04, 1.1218298643291669e-04, 9.5082302364099899e-05, 9.8768655016538242e-06, + 1.9432250977706612e-02,-8.1208212506205871e-03,-8.4010603588312760e-04, 1.6311825213749815e-03, 5.3063129937611618e-05,-2.6070063362777177e-04,-3.7987227201863213e-05, 2.9265512762747788e-05, +-2.7553072228327199e-02, 1.4038167552600705e-02,-1.4295129515401190e-03,-1.9609061767891151e-03, 5.2707319421361814e-04, 2.6409993239839710e-04,-6.6577789138705726e-05,-4.0678016798058935e-05, + 1.2947618385959800e-01, 9.6048120839987913e-02, 5.4827385279296571e-02, 2.5028191721728099e-02, 9.4394728305668731e-03, 3.0190581789555880e-03, 8.3593915996804321e-04, 2.0371903916684150e-04, +-3.3428063019610085e-02,-1.6337802700590862e-02,-1.3912219102645493e-03, 3.8632435868657840e-03, 3.3614224785098300e-03, 1.7275781040119228e-03, 6.6716717448591213e-04, 2.1000449558494997e-04, + 1.7090260319019224e-02, 4.2676337538778003e-03,-2.8259530178523255e-03,-2.5386687035449740e-03,-6.8465971545174668e-04, 1.6425057230304275e-04, 2.4325590960379447e-04, 1.3130248733014650e-04, +-1.2822626565141423e-02,-4.5484899277294273e-04, 3.0098052972764612e-03, 9.3631185849297940e-04,-3.5238716817766235e-04,-3.4277449226994877e-04,-9.6746613824618940e-05, 8.6633923514870285e-06, + 1.2367777572368481e-02,-1.8128229974232238e-03,-2.6299577792898506e-03, 1.5224060138112534e-04, 5.7809549846901491e-04, 1.2982762646667376e-04,-5.6792094418402873e-05,-4.3087998156782762e-05, +-1.4180600569791705e-02, 4.1821103353528160e-03, 1.9961729411492363e-03,-9.4902507909448122e-04,-4.3830654981814047e-04, 1.0196554860920418e-04, 9.3511307626292352e-05, 1.1015062592517272e-05, + 1.8362710905144519e-02,-7.5781952311838935e-03,-8.9274385446479849e-04, 1.5540668825480737e-03, 7.3165152781262286e-05,-2.5018963073038128e-04,-4.0519097641458039e-05, 2.7647463942885148e-05, +-2.5940906136328414e-02, 1.3103936296588868e-02,-1.2060941084799152e-03,-1.8948627328722661e-03, 4.7853700016766971e-04, 2.6134519237197795e-04,-6.0065943649472095e-05,-4.0209832309137186e-05, + 1.2815259807961801e-01, 9.5398017797403076e-02, 5.4769507466231000e-02, 2.5180700533004322e-02, 9.5733783044283736e-03, 3.0882890612465332e-03, 8.6281941373302236e-04, 2.1222434880312430e-04, +-3.2754580282214937e-02,-1.6167480126709752e-02,-1.5018800274671784e-03, 3.7624474121966053e-03, 3.3337602998216205e-03, 1.7338753028025575e-03, 6.7681941773629082e-04, 2.1526306738502761e-04, + 1.6587100155505186e-02, 4.2480333476599876e-03,-2.7076435758987601e-03,-2.5011043954987558e-03,-6.9829739284393063e-04, 1.5064451588161034e-04, 2.3934160445682759e-04, 1.3161467303450649e-04, +-1.2339066807845198e-02,-5.2409567975743310e-04, 2.9061942776635020e-03, 9.4165863848846973e-04,-3.2961316299906615e-04,-3.3750245565240008e-04,-9.8943927031350086e-05, 6.9489751037219176e-06, + 1.1814971128087765e-02,-1.6514637377486314e-03,-2.5508373664733935e-03, 1.1550281593927900e-04, 5.6062674918705261e-04, 1.3370887590845180e-04,-5.3084681290830482e-05,-4.2625705179682598e-05, +-1.3466434865836397e-02, 3.8892292027956242e-03, 1.9595535609375084e-03,-8.8836068774956047e-04,-4.3500945548712207e-04, 9.2166183927028201e-05, 9.1844167382594530e-05, 1.2088935072418838e-05, + 1.7355664068632020e-02,-7.0716717841160844e-03,-9.3687829246899492e-04, 1.4795925250158514e-03, 9.1385918668999738e-05,-2.3980093603066850e-04,-4.2796502069586753e-05, 2.6049838336534545e-05, +-2.4427335852748103e-02, 1.2232307612014093e-02,-1.0040349061679282e-03,-1.8288912682631350e-03, 4.3298801687656279e-04, 2.5799644338771199e-04,-5.3854016994126270e-05,-3.9658223188272760e-05, + 1.2685555418061140e-01, 9.4754711255781762e-02, 5.4707296879254720e-02, 2.5329207601905188e-02, 9.7061666220627403e-03, 3.1577610032847208e-03, 8.9008260273991402e-04, 2.2094023282307509e-04, +-3.2100842924829634e-02,-1.5997995276074831e-02,-1.6078878157988960e-03, 3.6631577018112552e-03, 3.3055706472755221e-03, 1.7396325173292052e-03, 6.8631337029622828e-04, 2.2053276012379291e-04, + 1.6102847648754803e-02, 4.2257890905990220e-03,-2.5934156735442837e-03,-2.4633549672819126e-03,-7.1103804795429482e-04, 1.3725234250306587e-04, 2.3534235469160100e-04, 1.3185866316804538e-04, +-1.1877058558155781e-02,-5.8711699004361040e-04, 2.8057183294147451e-03, 9.4558365121762264e-04,-3.0753508055818518e-04,-3.3208289810505390e-04,-1.0099430106123847e-04, 5.2538916921889304e-06, + 1.1289941568112171e-02,-1.5014236430651528e-03,-2.4732149347016156e-03, 8.1132729641162412e-05, 5.4330398215209855e-04, 1.3720642454520331e-04,-4.9445710229915446e-05,-4.2121729312667799e-05, +-1.2791365211177325e-02, 3.6159275426347992e-03, 1.9213251152602521e-03,-8.3062256899779858e-04,-4.3101919978646899e-04, 8.2779543580342117e-05, 9.0090821159342021e-05, 1.3099364447801237e-05, + 1.6407292753812124e-02,-6.5988325361870728e-03,-9.7332763960501138e-04, 1.4077509328027813e-03, 1.0784224888763753e-04,-2.2955691376000509e-04,-4.4831374034983451e-05, 2.4475811430417360e-05, +-2.3006125289999197e-02, 1.1419045027721106e-02,-8.2155481518814903e-04,-1.7632672075548505e-03, 3.9029321360248466e-04, 2.5412264105348570e-04,-4.7938687699409558e-05,-3.9031200632066231e-05, + 1.2558427724655030e-01, 9.4118165656326552e-02, 5.4640936299570481e-02, 2.5473773320182729e-02, 9.8378173947264516e-03, 3.2274525783390052e-03, 9.1772232896538363e-04, 2.2986708171840429e-04, +-3.1466111590223750e-02,-1.5829449041096136e-02,-1.7094060449302229e-03, 3.5653807480483038e-03, 3.2768888466542089e-03, 1.7448584168814093e-03, 6.9564575119329816e-04, 2.2581086188335248e-04, + 1.5636662549127614e-02, 4.2011411477347379e-03,-2.4831451226792495e-03,-2.4254754263588513e-03,-7.2290939369862436e-04, 1.2407965043048446e-04, 2.3126398222761912e-04, 1.3203526375637936e-04, +-1.1435521401392876e-02,-6.4435037981170002e-04, 2.7083163259578342e-03, 9.4817929166853064e-04,-2.8614654555504031e-04,-3.2653083907843055e-04,-1.0290054000626817e-04, 3.5797589375966335e-06, + 1.0791171021581177e-02,-1.3619458700140359e-03,-2.3971489028813959e-03, 4.9015393424803712e-05, 5.2615354236414797e-04, 1.4033666018635686e-04,-4.5878438601993900e-05,-4.1578588617193209e-05, +-1.2153116891595213e-02, 3.3609036086201644e-03, 1.8817797909306639e-03,-7.7570575616588882e-04,-4.2640411184959249e-04, 7.3799438014441005e-05, 8.8260734047977647e-05, 1.4047352937525887e-05, + 1.5514020500215378e-02,-6.1574227118647929e-03,-1.0028418011821312e-03, 1.3385233169364063e-03, 1.2264568578388693e-04,-2.1947727028354068e-04,-4.6635495690337087e-05, 2.2928245906475095e-05, +-2.1671443212080171e-02, 1.0660201677815164e-02,-6.5701329340194241e-04,-1.6982294112808127e-03, 3.5032174936365989e-04, 2.4978776617239632e-04,-4.2315727413964340e-05,-3.8336393865152075e-05, + 1.2433802127486079e-01, 9.3488341592089241e-02, 5.4570602176286780e-02, 2.5614458288249958e-02, 9.9683116246077289e-03, 3.2973427107699672e-03, 9.4573206777448645e-04, 2.3900517816590559e-04, +-3.0849679682771552e-02,-1.5661933049611138e-02,-1.8065905665011067e-03, 3.4691207156487928e-03, 3.2477491205977899e-03, 1.7495618828378117e-03, 7.0481351005483223e-04, 2.3109469425354470e-04, + 1.5187746633160415e-02, 4.1743127776865500e-03,-2.3767102239540729e-03,-2.3875171752362444e-03,-7.3393886762176432e-04, 1.1113145019109208e-04, 2.2711219431452803e-04, 1.3214534349449103e-04, +-1.1013433855473865e-02,-6.9620404926912759e-04, 2.6139250298869467e-03, 9.4953344061491935e-04,-2.6544018237707073e-04,-3.2086064766578782e-04,-1.0466557080622113e-04, 1.9280937697051075e-06, + 1.0317229806204737e-02,-1.2323238826308627e-03,-2.3226865852256462e-03, 1.9040039406874472e-05, 5.0919912950270825e-04, 1.4311570796372597e-04,-4.2385754548147442e-05,-4.0998758856186795e-05, +-1.1549553688835600e-02, 3.1229427612153443e-03, 1.8411810558174257e-03,-7.2350621621631824e-04,-4.2122816311980515e-04, 6.5218939329424625e-05, 8.6362903454997308e-05, 1.4934011265885031e-05, + 1.4672496450050945e-02,-5.7453399536155940e-03,-1.0261076810610787e-03, 1.2718820040696121e-03, 1.3590258887334410e-04,-2.0957924795388298e-04,-4.8220463852094005e-05, 2.1409706886547511e-05, +-2.0417836403666539e-02, 9.9521003162585213e-03,-5.0889909794339184e-04,-1.6339838165967348e-03, 3.1294538629432625e-04, 2.4505108079516996e-04,-3.6980116110787951e-05,-3.7581052150829585e-05, + 1.2311606789896040e-01, 9.2865196165335104e-02, 5.4496464821126578e-02, 2.5751323232913150e-02, 1.0097631660931500e-02, 3.3674106840502010e-03, 9.7410517705164934e-04, 2.4835469841683972e-04, +-3.0250871733625298e-02,-1.5495530318263923e-02,-1.8995924152446497e-03, 3.3743797823876688e-03, 3.2181846003911229e-03, 1.7537519856741074e-03, 7.1381382242674183e-04, 2.3638161475926322e-04, + 1.4755341415361375e-02, 4.1455114635590585e-03,-2.2739918426283191e-03,-2.3495281886975914e-03,-7.4415359395543258e-04, 9.8412190372807557e-05, 2.2289257890860338e-04, 1.3218982978605986e-04, +-1.0609829951802317e-02,-7.4305888685747981e-04, 2.5224795148333879e-03, 9.4972963102520763e-04,-2.4540771748082606e-04,-3.1508605367512962e-04,-1.0629242885173690e-04, 3.0031500292837130e-07, + 9.8667710649448376e-03,-1.1118980871877007e-03,-2.2498652909612553e-03,-8.8999632285133735e-06, 4.9246196811695740e-04, 1.4555940271926128e-04,-3.8970195535207656e-05,-4.0384669387816795e-05, +-1.0978669152132539e-02, 2.9009115815284764e-03, 1.7997660781490670e-03,-6.7392117968804891e-04,-4.1555117248559596e-04, 5.7030476132878825e-05, 8.4405867119888441e-05, 1.5760547063244113e-05, + 1.3879580733661016e-02,-5.3606239134732780e-03,-1.0437541533505057e-03, 1.2077916860458800e-03, 1.4771424603139579e-04,-1.9987780883366511e-04,-4.9597660486043692e-05, 1.9922477061762557e-05, +-1.9240204647134294e-02, 9.2913147224599462e-03,-3.7582040041127750e-04,-1.5707067540352991e-03, 2.7803883174807025e-04, 2.3996737858282118e-04,-3.1926148250083446e-05,-3.6772048514455229e-05, + 1.2191772517439360e-01, 9.2248683319656716e-02, 5.4418688599035078e-02, 2.5884428930589499e-02, 1.0225761156565190e-02, 3.4376361478854300e-03, 1.0028349061408600e-03, 2.5791571378026211e-04, +-2.9669041854736886e-02,-1.5330315862168792e-02,-1.9885579128186906e-03, 3.2811582727485002e-03, 3.1882273391887154e-03, 1.7574379629937613e-03, 7.2264408491871045e-04, 2.4166901913081799e-04, + 1.4338725992568094e-02, 4.1149299687107035e-03,-2.1748734683997260e-03,-2.3115531844201016e-03,-7.5358034963729243e-04, 8.5925782956769448e-05, 2.1861060061038906e-04, 1.3216970485697385e-04, +-1.0223796023857390e-02,-7.8527028345448929e-04, 2.4339135452319466e-03, 9.4884721245605194e-04,-2.2604007512899184e-04,-3.0922015973169014e-04,-1.0778424432274030e-04,-1.3022547329145397e-06, + 9.4385257404029019e-03,-1.0000526943433428e-03,-2.1787133311401111e-03,-3.4907164573213059e-05, 4.7596096970296483e-04, 1.4768326504247187e-04,-3.5633966563455280e-05,-3.9738699511214650e-05, +-1.0438578434746245e-02, 2.6937523870509024e-03, 1.7577479546588462e-03,-6.2684942322799753e-04,-4.0942900671190848e-04, 4.9225921242445627e-05, 8.2397712230865191e-05, 1.6528253868555919e-05, + 1.3132330821797147e-02,-5.0014465621937530e-03,-1.0563566537752837e-03, 1.1462105428178410e-03, 1.5817699707860159e-04,-1.9038580853102300e-04,-5.0778227266667868e-05, 1.8468571642209988e-05, +-1.8133777383990898e-02, 8.6746524002759458e-03,-2.5649564541151289e-04,-1.5085479675337617e-03, 2.4548001721209266e-04, 2.3458722869402305e-04,-2.7147530401845074e-05,-3.5915884961839003e-05, + 1.2074232642511661e-01, 9.1638754148526805e-02, 5.4337432114589940e-02, 2.6013836135736979e-02, 1.0352685025179590e-02, 3.5079991244769868e-03, 1.0319144045885581e-03, 2.6768819219407671e-04, +-2.9103572276589801e-02,-1.5166357263761324e-02,-2.0736287737370337e-03, 3.1894547849041881e-03, 3.1579083265240605e-03, 1.7606291985620393e-03, 7.3130191019763120e-04, 2.4695434342041956e-04, + 1.3937215012828477e-02, 4.0827473224067014e-03,-2.0792412608249839e-03,-2.2736337870634536e-03,-7.6224553403217692e-04, 7.3675628147605154e-05, 2.1427159713430525e-04, 1.3208600194888041e-04, +-9.8544676904217757e-03,-8.2316982534719804e-04, 2.3481599175495926e-03, 9.4696151297721676e-04,-2.0732746680291066e-04,-3.0327545427079176e-04,-1.0914422924755189e-04,-2.8783869243305697e-06, + 9.0312978650745786e-03,-8.9621279309366557e-04,-2.1092509399021418e-03,-5.9080100771911849e-05, 4.5971288686456711e-04, 1.4950248067989498e-04,-3.2378957990529983e-05,-3.9063175240148715e-05, +-9.9275106581682444e-03, 2.5004781215170972e-03, 1.7153177622015285e-03,-5.8219150954925340e-04,-4.0291377571880849e-04, 4.1796672627346430e-05, 8.0346085482709134e-05, 1.7238500725195136e-05, + 1.2427988779685342e-02,-4.6661031661054935e-03,-1.0644414193242415e-03, 1.0870912500820177e-03, 1.6738236737877724e-04,-1.8111416041805440e-04,-5.1773043879598015e-05, 1.7049753071661239e-05, +-1.7094091945790833e-02, 8.0991384797844471e-03,-1.4974509706874536e-04,-1.4476333627188199e-03, 2.1515032131431147e-04, 2.2895721256499058e-04,-2.2637470813224894e-05,-3.5018698994296386e-05, + 1.1958922914667840e-01, 9.1035357181867518e-02, 5.4252848394141823e-02, 2.6139605514233749e-02, 1.0478389399013520e-02, 3.5784800139653842e-03, 1.0613367306835690e-03, 2.7767199987772609e-04, +-2.8553871964810879e-02,-1.5003715203546833e-02,-2.1549422128545603e-03, 3.0992663112633274e-03, 3.1272575039600261e-03, 1.7633352023227072e-03, 7.3978512184999924e-04, 2.5223506596808962e-04, + 1.3550156761264046e-02, 4.0491297400401666e-03,-1.9869840818061762e-03,-2.2358086859381242e-03,-7.7017514210815435e-04, 6.1664638668213270e-05, 2.0988077628176008e-04, 1.3193980159794603e-04, +-9.5010270212238790e-03,-8.5706687415626915e-04, 2.2651507662593681e-03, 9.4414399824510327e-04,-1.8925947460422669e-04,-2.9726382529095979e-04,-1.1037566526676763e-04,-4.4269449849968032e-06, + 8.6439601470676107e-03,-7.9984162207877838e-04,-2.0414911169748138e-03,-8.1513369622075098e-05, 4.4373245977373933e-04, 1.5103188305261986e-04,-2.9206762936365930e-05,-3.8360366481202263e-05, +-9.4438017691463889e-03, 2.3201675931181056e-03, 1.6726464463700575e-03,-5.3984998921070837e-04,-3.9605402235431725e-04, 3.4733727970152943e-05, 7.8258203932312343e-05, 1.7892722360007108e-05, + 1.1763969362264495e-02,-4.3530038852535296e-03,-1.0684894026492403e-03, 1.0303818820239802e-03, 1.7541720935519852e-04,-1.7207199053176312e-04,-5.2592709752237926e-05, 1.5667545458414768e-05, +-1.6116973247518027e-02, 7.5620007375755346e-03,-5.4483022237783582e-05,-1.3880675063849698e-03, 1.8693474347114650e-04, 2.2312015310108722e-04,-1.8388761400198655e-05,-3.4086271235451761e-05, + 1.1845781396323680e-01, 9.0438438652109931e-02, 5.4165085063632573e-02, 2.6261797581455231e-02, 1.0602861587285010e-02, 3.6490595990938258e-03, 1.0910948597892579e-03, 2.8786690306056552e-04, +-2.8019375311126873e-02,-1.4842443955275952e-02,-2.2326310539154542e-03, 3.0105883528358766e-03, 3.0963037817472172e-03, 1.7655655913753191e-03, 7.4809174913281241e-04, 2.5750870922051087e-04, + 1.3176931355850921e-02, 4.0142314822900257e-03,-1.8979935164934007e-03,-2.1981137863726617e-03,-7.7739474083387237e-04, 4.9895263491313508e-05, 2.0544321338991775e-04, 1.3173222800331915e-04, +-9.1626998735608953e-03,-8.8725004133531887e-04, 2.1848178375858140e-03, 9.4046242739899161e-04,-1.7182512894769195e-04,-2.9119657474857308e-04,-1.1148189208444735e-04,-5.9468819614076065e-06, + 8.2754498322255773e-03,-7.1043802479443699e-04,-1.9754403976805467e-03,-1.0229771354660971e-04, 4.2803255515359205e-04, 1.5228593863537819e-04,-2.6118694240267402e-05,-3.7632484593354425e-05, +-8.9858878570200137e-03, 2.1519610370825983e-03, 1.6298865596348060e-03,-4.9972956822871481e-04,-3.8889490637687512e-04, 2.8027753212472341e-05, 7.6140866521712659e-05, 1.8492409933208267e-05, + 1.1137848894102612e-02,-4.0606659496660652e-03,-1.0689398857389957e-03, 9.7602671871398867e-04, 1.8236385005993095e-04,-1.6326678346284505e-04,-5.3247528921151743e-05, 1.4323248681796250e-05, +-1.5198514843768676e-02, 7.0606556572076051e-03, 3.0289537100962848e-05,-1.3299358982821691e-03, 1.6072203411137231e-04, 2.1711533589673088e-04,-1.4393852617655693e-05,-3.3124034004382186e-05, + 1.1734748363552069e-01, 8.9847942741117723e-02, 5.4074284522057460e-02, 2.6380472644806110e-02, 1.0726090035286850e-02, 3.7197190491296641e-03, 1.1211816924637770e-03, 2.9827256978011012e-04, +-2.7499540894402971e-02,-1.4682591847905851e-02,-2.3068238387267057e-03, 2.9234150276681407e-03, 3.0650750563656782e-03, 1.7673300718900552e-03, 7.5622002163151184e-04, 2.6277284140646440e-04, + 1.2816949046497120e-02, 3.9781956572870567e-03,-1.8121638838347505e-03,-2.1605823549134843e-03,-7.8392944857425158e-04, 3.8369510984259583e-05, 2.0096384922891762e-04, 1.3146444548924697e-04, +-8.8387533892100630e-03,-9.1398856434451742e-04, 2.1070927338014828e-03, 9.3598100551330467e-04,-1.5501298084048603e-04,-2.8508443348405525e-04,-1.1246629658812638e-04,-7.4372381482112784e-06, + 7.9247648248655447e-03,-6.2753407619118174e-04,-1.9110995562313070e-03,-1.2152010865008975e-04, 4.1262429802192409e-04, 1.5327873496303815e-04,-2.3115800945859046e-05,-3.6881680306267756e-05, +-8.5522989010567256e-03, 1.9950559803254917e-03, 1.5871738605647803e-03,-4.6173724515079944e-04,-3.8147838244249833e-04, 2.1669145440095147e-05, 7.4000466148501712e-05, 1.9039102345280303e-05, + 1.0547354881382217e-02,-3.7877063736345465e-03,-1.0661938155250633e-03, 9.2396696685427765e-04, 1.8830024317552922e-04,-1.5470451956022983e-04,-5.3747497759460710e-05, 1.3017952139698679e-05, +-1.4335061255016764e-02, 6.5926954570785772e-03, 1.0549144618381124e-04,-1.2733070345504309e-03, 1.3640478678179983e-04, 2.1097872222576453e-04,-1.0644921654653775e-05,-3.2137080682358859e-05, + 1.1625766211701540e-01, 8.9263811809260088e-02, 5.3980584110554869e-02, 2.6495690750475361e-02, 1.0848064284199630e-02, 3.7904399230807781e-03, 1.1515900623650780e-03, 3.0888857174449349e-04, +-2.6993850307755307e-02,-1.4524201696551720e-02,-2.3776449365656149e-03, 2.8377391735907968e-03, 3.0335982288342955e-03, 1.7686384219363690e-03, 7.6416836384231605e-04, 2.6802507807268961e-04, + 1.2469648611203588e-02, 3.9411549695895411e-03,-1.7293922379005957e-03,-2.1232451584993202e-03,-7.8980391727373651e-04, 2.7088971447755770e-05, 1.9644748832130254e-04, 1.3113765506413263e-04, +-8.5284936416140465e-03,-9.3753359112207571e-04, 2.0319071306368203e-03, 9.3076053238550123e-04,-1.3881116903276367e-04,-2.7893757657874372e-04,-1.1333230261857461e-04,-8.8971386270328195e-06, + 7.5909600504919707e-03,-5.5069286899139293e-04,-1.8484642476543499e-03,-1.3926385870272897e-04, 3.9751719643812879e-04, 1.5402397104462864e-04,-2.0198884293863245e-05,-3.6110041975526020e-05, +-8.1416529194833637e-03, 1.8487033873858163e-03, 1.5446287848361554e-03,-4.2578242089877589e-04,-3.7384337194788130e-04, 1.5648090448777208e-05, 7.1843002173793233e-05, 1.9534378086349480e-05, + 9.9903563068691800e-03,-3.5328351706561674e-03,-1.0606168824210944e-03, 8.7414140185833886e-04, 1.9330012401996824e-04,-1.4638980378483605e-04,-5.4102295304784801e-05, 1.1752548107385845e-05, +-1.3523191477525348e-02, 6.1558760179984979e-03, 1.7196765527363069e-04,-1.2182342805988262e-03, 1.1387949692549562e-04, 2.0474315362766627e-04,-7.1339343842394636e-06,-3.1130175732796691e-05, + 1.1518779365580660e-01, 8.8685986607832487e-02, 5.3884116277120531e-02, 2.6607511634191328e-02, 1.0968774931650639e-02, 3.8612041722429920e-03, 1.1823127439379839e-03, 3.1971438625363782e-04, +-2.6501807047974113e-02,-1.4367311204483271e-02,-2.4452146534727354e-03, 2.7535524455178338e-03, 3.0018992236805018e-03, 1.7695004752007440e-03, 7.7193538969535613e-04, 2.7326308348409186e-04, + 1.2134495843490842e-02, 3.9032324195100773e-03,-1.6495783610098735e-03,-2.0861305977601481e-03,-7.9504231722771820e-04, 1.6054839033314769e-05, 1.9189879765795989e-04, 1.3075309107935597e-04, +-8.2312634239807645e-03,-9.5811937901971265e-04, 1.9591929701578159e-03, 9.2485854748293483e-04,-1.2320748231383933e-04,-2.7276563905066309e-04,-1.1408336136908448e-04,-1.0325790741909688e-05, + 7.2731440449610519e-03,-4.7950644886866510e-04,-1.7875255932759400e-03,-1.5560869302320773e-04, 3.8271925950033084e-04, 1.5453494997941732e-04,-1.7368513207634498e-05,-3.5319594153254461e-05, +-7.7526504938297165e-03, 1.7122040683383891e-03, 1.5023577979145493e-03,-3.9177698438057742e-04,-3.6602592863319131e-04, 9.9546153165687814e-06, 6.9674093269459333e-05, 1.9979847611602230e-05, + 9.4648545621681054e-03,-3.2948490343385952e-03,-1.0525423612075401e-03, 8.2648693855356069e-04, 1.9743316630658399e-04,-1.3832598654831427e-04,-5.4321275947872541e-05, 1.0527744684873864e-05, +-1.2759703596506701e-02, 5.7481056475896034e-03, 2.3049491060423842e-04,-1.1647575697530299e-03, 9.3046591634823953e-05, 1.9843854798883107e-04,-3.8527014748788920e-06,-3.0107765250500959e-05, + 1.1413734193965910e-01, 8.8114406475943902e-02, 5.3785008736957803e-02, 2.6715994675763761e-02, 1.1088213593043111e-02, 3.9319941421135400e-03, 1.2133424598812410e-03, 3.3074939817378222e-04, +-2.6022935463715202e-02,-1.4211953338085670e-02,-2.5096493411219875e-03, 2.6708454075285021e-03, 2.9700030084705252e-03, 1.7699261055685511e-03, 7.7951989703396794e-04, 2.7848457189233163e-04, + 1.1810982125629532e-02, 3.8645419560992770e-03,-1.5726247495951792e-03,-2.0492648345976252e-03,-7.9966832425310691e-04, 5.2679330274883751e-06, 1.8732230578584962e-04, 1.3031201799014577e-04, +-7.9464401695302552e-03,-9.7596441395288603e-04, 1.8888826312763150e-03, 9.1832947091220166e-04,-1.0818941721945513e-04,-2.6657773180480083e-04,-1.1472294239385343e-04,-1.1722481523516570e-05, + 6.9704757555773692e-03,-4.1359388837298896e-04,-1.7282707143101484e-03,-1.7063086734775532e-04, 3.6823710884443313e-04, 1.5482457358112847e-04,-1.4625039259486656e-05,-3.4512296453486580e-05, +-7.3840696439503584e-03, 1.5849053306920132e-03, 1.4604546385522995e-03,-3.5963537658834641e-04,-3.5805939789836409e-04, 4.5786362975302184e-06, 6.7498990514283939e-05, 2.0377146226068067e-05, + 8.9689749746423714e-03,-3.0726254529739325e-03,-1.0422737322285020e-03, 7.8093913716883816e-04, 2.0076513957994915e-04,-1.3051527687990447e-04,-5.4413464255233339e-05, 9.3440783136033242e-06, +-1.2041600427616303e-02, 5.3674346230357210e-03, 2.8178703334023176e-04,-1.1129049426496537e-03, 7.3810434228476418e-05, 1.9209208709520861e-04,-7.9292905893616942e-07,-2.9073987925306379e-05, + 1.1310578928204949e-01, 8.7549009522916693e-02, 5.3683384628486083e-02, 2.6821198857208461e-02, 1.1206372863676300e-02, 4.0027925737046886e-03, 1.2446718883931290e-03, 3.4199290196019371e-04, +-2.5556779759132800e-02,-1.4058156676576145e-02,-2.5710615049943236e-03, 2.5896076199577421e-03, 2.9379336138078433e-03, 1.7699252125444268e-03, 7.8692086206452413e-04, 2.8368730867692828e-04, + 1.1498623082556655e-02, 3.8251890868689960e-03,-1.4984365936614886e-03,-2.0126719142079703e-03,-8.0370510907972099e-04,-5.2712815056667021e-06, 1.8272240224355744e-04, 1.2981572722030722e-04, +-7.6734339956876594e-03,-9.9127245512443691e-04, 1.8209090798843050e-03, 9.1122474030749193e-04,-9.3744231404747349e-05,-2.6038245776135695e-04,-1.1525452520446895e-04,-1.3086575073557774e-05, + 6.6821615405632225e-03,-3.5259949018191274e-04,-1.6706832177495847e-03,-1.8440326687407403e-04, 3.5407608389621207e-04, 1.5490533882948874e-04,-1.1968611109611528e-05,-3.3690042692243428e-05, +-7.0347610307451352e-03, 1.4661978585365969e-03, 1.4190014615523751e-03,-3.2927463564934106e-04,-3.4997456982386232e-04,-4.8999766372591238e-07, 6.5322590658167568e-05, 2.0727927461188883e-05, + 8.5009588892817328e-03,-2.8651172277500588e-03,-1.0300870995273411e-03, 7.3743265070100902e-04, 2.0335806638875192e-04,-1.2295884826084738e-04,-5.4387551716170131e-05, 8.2019258480683860e-06, +-1.1366076117031792e-02, 5.0120454578257423e-03, 3.2649979884792288e-04,-1.0626939411334398e-03, 5.6079307111225776e-05, 1.8572839568327818e-04, 2.0537356678158454e-06,-2.8032686317929068e-05, + 1.1209263584699650e-01, 8.6989732797174743e-02, 5.3579362665040403e-02, 2.6923182724259469e-02, 1.1323246281673510e-02, 4.0735826042905049e-03, 1.2762936701946840e-03, 3.5344410372304200e-04, +-2.5102903049821754e-02,-1.3905945738148975e-02,-2.6295599116148219e-03, 2.5098277217141356e-03, 2.9057141537143123e-03, 1.7695077074854626e-03, 7.9413743379026401e-04, 2.8886911136304588e-04, + 1.1196957311672778e-02, 3.7852714471318435e-03,-1.4269217506162873e-03,-1.9763738817123095e-03,-8.0717532879388387e-04,-1.5562673729722183e-05, 1.7810333732158970e-04, 1.2926553413220330e-04, +-7.4116858645409348e-03,-1.0042335103184422e-03, 1.7552060004416392e-03, 9.0359294356596705e-04,-7.9858992928099259e-05,-2.5418792809208518e-04,-1.1568159143335201e-04,-1.4417509919941918e-05, + 6.4074523542224926e-03,-2.9619111090077631e-04,-1.6147436384294359e-03,-1.9699551076417850e-04, 3.4024034112848170e-04, 1.5478933597930260e-04,-9.3991884121944928e-06,-3.2854660283021151e-05, +-6.7036434651232685e-03, 1.3555128033553164e-03, 1.3780698876106182e-03,-3.0061442506073297e-04,-3.4179982592405956e-04,-5.2614655093715583e-06, 6.3149449481015072e-05, 2.1033856925217990e-05, + 8.0591562684785845e-03,-2.6713473666559939e-03,-1.0162334213049315e-03, 6.9590161922296399e-04, 2.0527037839186072e-04,-1.1565693746646546e-04,-5.4251895217915334e-05, 7.1015161715718192e-06, +-1.0730503635134579e-02, 4.6802438419455677e-03, 3.6523544617631247e-04,-1.0141328692725856e-03, 3.9765376003642430e-05, 1.7936971207117559e-04, 4.6956635565468692e-06,-2.6987418355256888e-05, + 1.1109739891065711e-01, 8.6436512442530325e-02, 5.3473057282303511e-02, 2.7022004351081940e-02, 1.1438828291731590e-02, 4.1443477676187590e-03, 1.3082004153301739e-03, 3.6510212333158828e-04, +-2.4660886468126780e-02,-1.3755341284108949e-02,-2.6852496946422125e-03, 2.4314935080376153e-03, 2.8733668463152492e-03, 1.7686835006211496e-03, 8.0116892844164680e-04, 2.9402785052020644e-04, + 1.0905545184017831e-02, 3.7448793316385478e-03,-1.3579907141787985e-03,-1.9403908935612781e-03,-8.1010112017567033e-04,-2.5606427691501855e-05, 1.7346922212514888e-04, 1.2866277510293516e-04, +-7.1606658523792836e-03,-1.0150247464184698e-03, 1.6917079106974508e-03, 8.9547994738426720e-04,-6.6520625680176540e-05,-2.4800177850190343e-04,-1.1600761754272312e-04,-1.5714796352557647e-05, + 6.1456411059608133e-03,-2.4405859724299086e-04,-1.5604298408342784e-03,-2.0847405747403209e-04, 3.2673294757212671e-04, 1.5448824816942876e-04,-6.9165551864556595e-06,-3.2007909869103434e-05, +-6.3896997032038046e-03, 1.2523190720070763e-03, 1.3377219674526627e-03,-2.7357704712801482e-04,-3.3356127968868054e-04,-9.7459384656197183e-06, 6.0983795181290167e-05, 2.1296606608996101e-05, + 7.6420187752108812e-03,-2.4904043281065696e-03,-1.0009405669266411e-03, 6.5628001621419565e-04, 2.0655707070644079e-04,-1.0860893674853134e-04,-5.4014517068270601e-05, 6.0429413492536069e-06, +-1.0132423103317450e-02, 4.3704502085591020e-03, 3.9854684541253062e-04,-9.6722193306479002e-04, 2.4784638306239840e-05, 1.7303605048694774e-04, 7.1412069877773056e-06,-2.5941468963267933e-05, + 1.1011961215776910e-01, 8.5889283842722333e-02, 5.3364578781520823e-02, 2.7117721308007721e-02, 1.1553114209702771e-02, 4.2150719936189674e-03, 1.3403847097449200e-03, 3.7696599655201408e-04, +-2.4230328315046762e-02,-1.3606360602452086e-02,-2.7382324596272600e-03, 2.3545920039027834e-03, 2.8409130347556415e-03, 1.7674624888340661e-03, 8.0801482391491862e-04, 2.9916145054618477e-04, + 1.0623967712594676e-02, 3.7040961910183249e-03,-1.2915565790119045e-03,-1.9047413238826711e-03,-8.1250409477992298e-04,-3.5403023627909999e-05, 1.6882402891798057e-04, 1.2800880470733358e-04, +-6.9198715215763509e-03,-1.0238113394947027e-03, 1.6303502610896319e-03, 8.8692902157475615e-04,-5.3715951183436238e-05,-2.4183118549861107e-04,-1.1623606805768250e-04,-1.6978013748794894e-05, + 5.8960601820816482e-03,-1.9591232697099316e-04,-1.5077173839426593e-03,-2.1890231035544890e-04, 3.1355596882854390e-04, 1.5401335238376777e-04,-4.5203326525660196e-06,-3.1151485174816867e-05, +-6.0919725090526414e-03, 1.1561207983697694e-03, 1.2980110669409926e-03,-2.4808744343223714e-04,-3.2528291099553908e-04,-1.3953547999465637e-05, 5.8829541735557443e-05, 2.1517849628475780e-05, + 7.2480933074224110e-03,-2.3214375900933214e-03,-9.8441521365242712e-04, 6.1850195155235452e-04, 2.0726985391484167e-04,-1.0181347968820262e-04,-5.3683106396900778e-05, 5.0261673143598214e-06, +-9.5695308975157316e-03, 4.0811918834658401e-03, 4.2694134854651122e-04,-9.2195426945205659e-04, 1.1056858059425525e-05, 1.6674535525118477e-04, 9.3986674023856224e-06,-2.4897861763788200e-05, + 1.0915882501112990e-01, 8.5347981754998956e-02, 5.3254033468554202e-02, 2.7210390632123171e-02, 1.1666100188016599e-02, 4.2857396076363928e-03, 1.3728391216409860e-03, 3.8903467721437877e-04, +-2.3810843256130948e-02,-1.3459017772252849e-02,-2.7886063872807204e-03, 2.2791095332666857e-03, 2.8083732082805832e-03, 1.7658545441753262e-03, 8.1467475422970716e-04, 3.0426789034035590e-04, + 1.0351825483878099e-02, 3.6629990953553852e-03,-1.2275350016604080e-03,-1.8694418659409469e-03,-8.1440533562020852e-04,-4.4953219922493548e-05, 1.6417159172678894e-04, 1.2730499300799800e-04, +-6.6888263885227141e-03,-1.0307472685029575e-03, 1.5710695202379940e-03, 8.7798095916065281e-04,-4.1431726977153149e-05,-2.3568288259935273e-04,-1.1637038930209474e-04,-1.8206807897207272e-05, + 5.6580791200197562e-03,-1.5148184751261756e-04,-1.4565798521427853e-03,-2.2834072304560012e-04, 3.0071055182669169e-04, 1.5337552162677690e-04,-2.2099915345642984e-06,-3.0287013058678247e-05, +-5.8095609675323737e-03, 1.0664549860906795e-03, 1.2589826793103782e-03,-2.2407318397176976e-04,-3.1698669449874899e-04,-1.7894357088043015e-05, 5.6690302176865352e-05, 2.1699255385385349e-05, + 6.8760159536230530e-03,-2.1636535223945519e-03,-9.6684459525716822e-04, 5.8250193539121807e-04, 2.0745730324016077e-04,-9.5268521042189060e-05,-5.3265021779216172e-05, 4.0510440863459485e-06, +-9.0396694760176040e-03, 3.8110957767641240e-03, 4.5088434753407815e-04,-8.7831687436419831e-04,-1.4945103119466674e-06, 1.6051364699905330e-04, 1.1476266575469039e-05,-2.3859370769449868e-05, + 1.0821460199240010e-01, 8.4812540433487363e-02, 5.3141523788836867e-02, 2.7300068800547049e-02, 1.1777783181947381e-02, 4.3563353292209676e-03, 1.4055562076117441e-03, 4.0130703940437272e-04, +-2.3402061558912737e-02,-1.3313323910129418e-02,-2.8364663351136965e-03, 2.2050317843529676e-03, 2.7757670234185121e-03, 1.7638695030887932e-03, 8.2114850401567257e-04, 3.0934520387079485e-04, + 1.0088737648783319e-02, 3.6216591670827081e-03,-1.1658441583262905e-03,-1.8345076288768308e-03,-8.1582539532341902e-04,-5.4258035708193517e-05, 1.5951560718650620e-04, 1.2655272295228456e-04, +-6.4670784817006111e-03,-1.0359760563724623e-03, 1.5138032478332754e-03, 8.6867419226646691e-04,-2.9654681793057718e-05,-2.2956317642799354e-04,-1.1641400361598077e-04,-1.9400888327054098e-05, + 5.4311024253281487e-03,-1.1051460563889096e-04,-1.4069891550223801e-03,-2.3684690421966765e-04, 2.8819700256260211e-04, 1.5258522818606870e-04, 1.5136165416160707e-08,-2.9416053752073238e-05, +-5.5416170309670401e-03, 9.8288931073335379e-04, 1.2206751702350232e-03,-2.0146444646843692e-04,-3.0869272211241625e-04,-2.1578334567386208e-05, 5.4569401746268426e-05, 2.1842485127267207e-05, + 6.5245063417003939e-03,-2.0163115408990181e-03,-9.4839811382274380e-04, 5.4821510679063754e-04, 2.0716500447789639e-04,-8.8971410894838390e-05,-5.2767294939610486e-05, 3.1173155222399856e-06, +-8.5408178825994129e-03, 3.5588815789173202e-03, 4.7080256153751899e-04,-8.3629143872730131e-04,-1.2942407512523291e-05, 1.5435516114500376e-04, 1.3382121346275837e-05,-2.2828532019713300e-05, + 1.0728652211261770e-01, 8.4282893743043721e-02, 5.3027148458297708e-02, 2.7386811706243620e-02, 1.1888160916730030e-02, 4.4268442704989133e-03, 1.4385285185566290e-03, 4.1378187967570088e-04, +-2.3003628369573981e-02,-1.3169287399972682e-02,-2.8819039373340488e-03, 2.1323438711582689e-03, 2.7431133252109746e-03, 1.7615171563183530e-03, 8.2743600303747757e-04, 3.1439148063938085e-04, + 9.8343409696012990e-03, 3.5801419852253234e-03,-1.1064046999600631e-03,-1.7999522298951616e-03,-8.1678429563043688e-04,-6.3318734111104079e-05, 1.5485963560758266e-04, 1.2575338787588743e-04, +-6.2541989843759756e-03,-1.0396314619982661e-03, 1.4584901561130958e-03, 8.5904490383774206e-04,-1.8371547718026089e-05,-2.2347796266223121e-04,-1.1637030403338362e-04,-2.0560025650856039e-05, + 5.2145675223777095e-03,-7.2774762051661633e-05,-1.3589157986097569e-03,-2.4447572134243020e-04, 2.7601485905578299e-04, 1.5165254786310103e-04, 2.1558459157390358e-06,-2.8540101267824904e-05, +-5.2873422844293711e-03, 9.0502007043772692e-04, 1.1831204609836343e-03,-1.8019398717273249e-04,-3.0041931972847363e-04,-2.5015332338251107e-05, 5.2469890876863425e-05, 2.1949187888235917e-05, + 6.1923623548670982e-03,-1.8787205245917610e-03,-9.2922882511218305e-04, 5.1557743060659088e-04, 2.0643569635267527e-04,-8.2918963423675047e-05,-5.2196635400852288e-05, 2.2246286046737536e-06, +-8.0710828794588602e-03, 3.3233554261393383e-03, 4.8708707363943313e-04,-7.9585510059599772e-04,-2.3356262429565476e-05, 1.4828247881988073e-04, 1.5124221530903518e-05,-2.1807655107177811e-05, + 1.0637417829089819e-01, 8.3758975264229818e-02, 5.2911002590326023e-02, 2.7470674636223401e-02, 1.1997231855525189e-02, 4.4972519341538826e-03, 1.4717486053778060e-03, 4.2645791927910118e-04, +-2.2615203026668376e-02,-1.3026914107046414e-02,-2.9250077029000510e-03, 2.0610303913592871e-03, 2.7104301684373663e-03, 1.7588072394727336e-03, 8.3353732076657896e-04, 3.1940486604917055e-04, + 9.5882889196219623e-03, 3.5385079628902551e-03,-1.0491397051029423e-03,-1.7657878820665283e-03,-8.1730152812616442e-04,-7.2136806128524165e-05, 1.5020710224731312e-04, 1.2490838911233867e-04, +-6.0497809567317071e-03,-1.0418381264182294e-03, 1.4050701610191275e-03, 8.4912713523603058e-04,-7.5690895303615535e-06,-2.1743274179392526e-04,-1.1624264939998806e-04,-2.1684048926424087e-05, + 5.0079428303134773e-03,-3.8042085146254481e-05,-1.3123291304448009e-03,-2.5127940310232548e-04, 2.6416295974974997e-04, 1.5058716506194926e-04, 4.2130499193326600e-06,-2.7660583963863501e-05, +-5.0459849154597322e-03, 8.3247027495421291e-04, 1.1463446545249038e-03,-1.6019710437416063e-04,-2.9218315831636724e-04,-2.8215065219699650e-05, 5.0394557974871269e-05, 2.2020996792153690e-05, + 5.8784551904139453e-03,-1.7502354770908544e-03,-9.0947480716771500e-04, 4.8452586584690955e-04, 2.0530940902801828e-04,-7.7107520574173848e-05,-5.1559435957419123e-05, 1.3725422716524200e-06, +-7.6286906675048002e-03, 3.1034040024503595e-03, 5.0009613583951889e-04,-7.5698112090277693e-04,-3.2802091192821756e-05, 1.4230665051922624e-04, 1.6710410761767110e-05,-2.0798834549678089e-05, + 1.0547717679987829e-01, 8.3240718390020965e-02, 5.2793177818852267e-02, 2.7551712251991128e-02, 1.2104995168232460e-02, 4.5675442110434299e-03, 1.5052090244607760e-03, 4.3933380640417188e-04, +-2.2236458409857329e-02,-1.2886207577493355e-02,-2.9658631116491960e-03, 1.9910754807926749e-03, 2.6777348387877244e-03, 1.7557494242226562e-03, 8.3945266100766904e-04, 3.2438356167825434e-04, + 9.3502508323639738e-03, 3.4968126997747817e-03,-9.9397463087254161e-04,-1.7320254779064879e-03,-8.1739605608950432e-04,-8.0713955133143852e-05, 1.4556129876800166e-04, 1.2401913370754119e-04, +-5.8534381325891921e-03,-1.0427121762351514e-03, 1.3534844240385617e-03, 8.3895288976711048e-04, 2.7658686126520249e-06,-2.1143263467044809e-04,-1.1603435991000742e-04,-2.2772843044306217e-05, + 4.8107259563540412e-03,-6.1109186022048623e-06,-1.2671975606723561e-03,-2.5730764025764011e-04, 2.5263950757803698e-04, 1.4939837863437678e-04, 6.1877668844049512e-06,-2.6778865247815331e-05, +-4.8168368749562460e-03, 7.6488786360531455e-04, 1.1103686090768901e-03,-1.4141159570020556e-04,-2.8399935956233439e-04,-3.1187093252866364e-05, 4.8345941967252997e-05, 2.2059525699923578e-05, + 5.5817247385615606e-03,-1.6302544158728032e-03,-8.8926042105488758e-04, 4.5499850841182449e-04, 2.0382359855509506e-04,-7.1533010929693072e-05,-5.0861778860924777e-05, 5.6053579522647915e-07, +-7.2119791544343640e-03, 2.8979890480233987e-03, 5.1015775975286090e-04,-7.1963948968957914e-04,-4.1342600888558107e-05, 1.3643731271241368e-04, 1.8148370013880690e-05,-1.9803960970385748e-05, + 1.0459513673654169e-01, 8.2728056414809514e-02, 5.2673762417623532e-02, 2.7629978572107080e-02, 1.2211450701148719e-02, 4.6377073774756051e-03, 1.5389023429412520e-03, 4.5240811843035651e-04, +-2.1867080321732180e-02,-1.2747169224213262e-02,-3.0045527084354845e-03, 1.9224628646737005e-03, 2.6450438739408725e-03, 1.7523533101054039e-03, 8.4518235658691200e-04, 3.2932582546427332e-04, + 9.1199110975189179e-03, 3.4551073113455455e-03,-9.4083726244560077e-04,-1.6986746688941240e-03,-8.1708631736067015e-04,-8.9052081993964407e-05, 1.4092538486557547e-04, 1.2308703223821039e-04, +-5.6648037861733724e-03,-1.0423617871363066e-03, 1.3036753856473448e-03, 8.2855223221134074e-04, 1.2646418966634878e-05,-2.0548239778875359e-04,-1.1574871304221498e-04,-2.3826346146028980e-05, + 4.6224419990370663e-03, 2.3210782176745536e-05,-1.2234887611750631e-03,-2.6260768466725875e-04, 2.4144212991132011e-04, 1.4809510838692492e-04, 8.0811122918515640e-06,-2.5896244409069979e-05, +-4.5992312168603210e-03, 7.0194404338556784e-04, 1.0752084632454060e-03,-1.2377771017272818e-04,-2.7588159621514351e-04,-3.3940806268042202e-05, 4.6326344589537639e-05, 2.2066366182947600e-05, + 5.3011752602458891e-03,-1.5182154735087375e-03,-8.6869747199481572e-04, 4.2693471086924868e-04, 2.0201327710057422e-04,-6.6191004053638857e-05,-5.0109442614739176e-05,-2.1198328246283232e-07, +-6.8193907337546263e-03, 2.7061422455941569e-03, 5.1757210911286989e-04,-6.8379746909527010e-04,-4.9037296744040864e-05, 1.3068279767313305e-04, 1.9445603591733562e-05,-1.8824732053214171e-05, + 1.0372768951714240e-01, 8.2220922616230582e-02, 5.2552841415754031e-02, 2.7705526956734679e-02, 1.2316598947467150e-02, 4.7077280921694583e-03, 1.5728211437609149e-03, 4.6567936418358789e-04, +-2.1506766900911814e-02,-1.2609798500013772e-02,-3.0411561952209953e-03, 1.8551759057125611e-03, 2.6123730845090728e-03, 1.7486284169124728e-03, 8.5072686410845927e-04, 3.3422997180373667e-04, + 8.8969684008980421e-03, 3.4134387362291709e-03,-8.8965766135697642e-04,-1.6657439410878033e-03,-8.1639022812989405e-04,-9.7153270803734685e-05, 1.3630239005315561e-04, 1.2211349673287605e-04, +-5.4835296646688712e-03,-1.0408877101678081e-03, 1.2555867911959629e-03, 8.1795338443201688e-04, 2.2085548311017822e-05,-1.9958643831722320e-04,-1.1538893987563835e-04,-2.4844547077919853e-05, + 4.4426419545010630e-03, 5.0102349408826310e-05,-1.1811698446038761e-03,-2.6722444631316550e-04, 2.3056793459364341e-04, 1.4668590216279219e-04, 9.8942891488092497e-06,-2.5013957565774977e-05, +-4.3925396050922367e-03, 6.4333173902227721e-04, 1.0408761165795074e-03,-1.0723809589212807e-04,-2.6784218730905462e-04,-3.6485410539058343e-05, 4.4337842390908317e-05, 2.2043084805539848e-05, + 5.0358713441145137e-03,-1.4135941963333513e-03,-8.4788627850587326e-04, 4.0027518167817143e-04, 1.9991113883529861e-04,-6.1076760570016495e-05,-4.9307909282875327e-05,-9.4567164680192501e-07, +-6.4494655404478650e-03, 2.5269604587009405e-03, 5.2261370897943560e-04,-6.4942007884623222e-04,-5.5942591739453784e-05, 1.2505023679540206e-04, 2.0609427363820522e-05,-1.7862663244502016e-05, + 1.0287447839500551e-01, 8.1719250330302057e-02, 5.2430496709633852e-02, 2.7778410094053220e-02, 1.2420441018610669e-02, 4.7775933929223250e-03, 1.6069580305148831e-03, 4.7914598619527003e-04, +-2.1155228064703449e-02,-1.2474093058877658e-02,-3.0757505210811040e-03, 1.7891976492816694e-03, 2.5797375748142747e-03, 1.7445841776360972e-03, 8.5608675878518165e-04, 3.3909437157019656e-04, + 8.6811350058257908e-03, 3.3718500232557732e-03,-8.4036811290095874e-04,-1.6332406869939856e-03,-8.1532518755792318e-04,-1.0501977520132786e-04, 1.3169521558466148e-04, 1.2109993869396560e-04, +-5.3092849825700176e-03,-1.0383837632478156e-03, 1.2091637100068767e-03, 8.0718281714619005e-04, 3.1096118226525346e-05,-1.9374882882427640e-04,-1.1495822176544671e-04,-2.5827482884958550e-05, + 4.2709012193222016e-03, 7.4731242395727595e-05,-1.1402075250182889e-03,-2.7120058815665704e-04, 2.2001356226940554e-04, 1.4517894341881698e-04, 1.1628579216187618e-05,-2.4133178714519387e-05, +-4.1961699769264742e-03, 5.8876414736614704e-04, 1.0073796690825856e-03,-9.1737744125806430e-05,-2.5989218843968813e-04,-3.8829917360257585e-05, 4.2382298438525169e-05, 2.1991220698678835e-05, + 4.7849341242926216e-03,-1.3159010269532478e-03,-8.2691665661161070e-04, 3.7496206605280706e-04, 1.9754768140585328e-04,-5.6185278236768740e-05,-4.8462372228586222e-05,-1.6412431304076219e-06, +-6.1008351512458689e-03, 2.3596012973097144e-03, 5.2553348546199581e-04,-6.1647052951158111e-04,-6.2111917736143890e-05, 1.1954565766020046e-04, 2.1646959049088852e-05,-1.6919098179435168e-05, + 1.0203515800005800e-01, 8.1222973020338443e-02, 5.2306807171279342e-02, 2.7848679988420711e-02, 1.2522978616392590e-02, 4.8472906930057368e-03, 1.6413056320939989e-03, 4.9280636296043280e-04, +-2.0812184979719553e-02,-1.2340048906132897e-02,-3.1084099700915344e-03, 1.7245108657804840e-03, 2.5471517634642459e-03, 1.7402299319512577e-03, 8.6126272934888165e-04, 3.4391745205530823e-04, + 8.4721360735866558e-03, 3.3303805994986911e-03,-7.9290307289333478e-04,-1.6011712738401441e-03,-8.1390808314444306e-04,-1.1265400527721075e-04, 1.2710663650455727e-04, 1.2004776721924535e-04, +-5.1417554740879647e-03,-1.0349372902320290e-03, 1.1643525483887251e-03, 7.9626533794617603e-04, 3.9690847394817505e-05,-1.8797332169505029e-04,-1.1445968736059936e-04,-2.6775236348424109e-05, + 4.1068181838559356e-03, 9.7253831128524238e-05,-1.1005682617138311e-03,-2.7457661869682674e-04, 2.0977523519512167e-04, 1.4358205922327679e-04, 1.3285334698347778e-05,-2.3255020871645476e-05, +-4.0095643527274117e-03, 5.3797338901423344e-04, 9.7472382294714471e-04,-7.7223930497602705e-05,-2.5204147726966866e-04,-4.0983133390031792e-05, 4.0461373704586263e-05, 2.1912283408985248e-05, + 4.5475377417416455e-03,-1.2246789579586073e-03,-8.0586882564001290e-04, 3.5093901046371121e-04, 1.9495132294293868e-04,-5.1511334257315988e-05,-4.7577744202839648e-05,-2.2994620445790323e-06, +-5.7722166997002528e-03, 2.2032789881124802e-03, 5.2656064873479670e-04,-5.8491060834203745e-04,-6.7595837324242595e-05, 1.1417407512073921e-04, 2.2565110367766634e-05,-1.5995218811769659e-05, + 1.0120939389900120e-01, 8.0732024340067529e-02, 5.2181848753211128e-02, 2.7916387950177712e-02, 1.2624214005995751e-02, 4.9168077773109600e-03, 1.6758566071251859e-03, 5.0665881119204886e-04, +-2.0477369558933672e-02,-1.2207660538259710e-02,-3.1392062470774820e-03, 1.6610980903389132e-03, 2.5146294037004316e-03, 1.7355749202099370e-03, 8.6625557304482190e-04, 3.4869769683670132e-04, + 8.2697090206739626e-03, 3.2890665205634988e-03,-7.4719911402305449e-04,-1.5695411084004445e-03,-8.1215529676650520e-04,-1.2005851504892900e-04, 1.2253930381029600e-04, 1.1895838722083841e-04, +-4.9806425001104639e-03,-1.0306295896875474e-03, 1.1211010572081874e-03, 7.8522417566684669e-04, 4.7882295783569363e-05,-1.8226336322113920e-04,-1.1389640994473486e-04,-2.7687933570896066e-05, + 3.9500129104229169e-03, 1.1781612778951765e-04,-1.0622183876830985e-03,-2.7739098212986959e-04, 1.9984880272328512e-04, 1.4190272860745173e-04, 1.4865970381418896e-05,-2.2380537295247491e-05, +-3.8321967826333994e-03, 4.9070925056272224e-04, 9.4291024952098377e-04,-6.3646153892438283e-05,-2.4429883444353174e-04,-4.2953652616093633e-05, 3.8576538124579407e-05, 2.1807751006137822e-05, + 4.3229060331961217e-03,-1.1395013450931995e-03,-7.8481424163135782e-04, 3.2815121257655602e-04, 1.9214851459350713e-04,-4.7049524063013840e-05,-4.6658665713317641e-05,-2.9211369091713961e-06, +-5.4624073782893207e-03, 2.0572605284043350e-03, 5.2590443114001160e-04,-5.5470102207941956e-04,-7.2442155705601036e-05, 1.0893957667098018e-04, 2.3370580886988191e-05,-1.5092055233508506e-05, + 1.0039686217509600e-01, 8.0246338191350658e-02, 5.2055694589944947e-02, 2.7981584586988250e-02, 1.2724149989760659e-02, 4.9861327982641491e-03, 1.7106036482133441e-03, 5.2070158806866997e-04, +-2.0150523983745339e-02,-1.2076921073022037e-02,-3.1682085612117286e-03, 1.5989416599942428e-03, 2.4821836034919775e-03, 1.7306282779252467e-03, 8.7106619071477772e-04, 3.5343364557652909e-04, + 8.0736029107233015e-03, 3.2479407042991064e-03,-7.0319487200054109e-04,-1.5383546985181394e-03,-8.1008271131384371e-04,-1.2723599049356028e-04, 1.1799574671500566e-04, 1.1783319773983728e-04, +-4.8256622064241951e-03,-1.0255363153916998e-03, 1.0793583346093002e-03, 7.7408106119571107e-04, 5.5682850587137223e-05,-1.7662210735000191e-04,-1.1327140508289035e-04,-2.8565741611552721e-05, + 3.8001258910324953e-03, 1.3655446965650151e-04,-1.0251242240485537e-03,-2.7968014602764682e-04, 1.9022978363873331e-04, 1.4014809120803319e-04, 1.6371956207437987e-05,-2.1510722778050358e-05, +-3.6635714213759940e-03, 4.4673801132196107e-04, 9.1193792429456616e-04,-5.0956073628171381e-05,-2.3667202009100235e-04,-4.4749849804551884e-05, 3.6729081315780979e-05, 2.1679068433539045e-05, + 4.1103094326979551e-03,-1.0599698689175816e-03,-7.6381636394268454e-04, 3.0654545827384127e-04, 1.8916384858706401e-04,-4.2794296791841372e-05,-4.5709513607514672e-05,-3.5071145692960656e-06, +-5.1702793016155362e-03, 1.9208621038551100e-03, 5.2375569133995663e-04,-5.2580170077095516e-04,-7.6696032016379781e-05, 1.0384540236368064e-04, 2.4069853397043847e-05,-1.4210495169983875e-05, + 9.9597249026588272e-02, 7.9765848776880269e-02, 5.1928415096181749e-02, 2.8044319796619560e-02, 1.2822789881771990e-02, 5.0552542715303220e-03, 1.7455394859884109e-03, 5.3493289347268137e-04, +-1.9831400249708003e-02,-1.1947822370563008e-02,-3.1954837074579107e-03, 1.5380237484708958e-03, 2.4498268453535497e-03, 1.7253990307233517e-03, 8.7569558197241222e-04, 3.5812389375448450e-04, + 7.8835778791449956e-03, 3.2070331490217339e-03,-6.6083099168475542e-04,-1.5076157114651148e-03,-8.0770571785351180e-04,-1.3418923812314972e-04, 1.1347837499847257e-04, 1.1667359035445469e-04, +-4.6765447301232617e-03,-1.0197278504299055e-03, 1.0390748244143804e-03, 7.6285630482678438e-04, 6.3104713800599815e-05,-1.7105242908382510e-04,-1.1258762855675838e-04,-2.9408866174445591e-05, + 3.6568168796933562e-03, 1.5359615666507196e-04,-9.8925218169027191e-04,-2.8147868647742150e-04, 1.8091340552029038e-04, 1.3832495614404772e-04, 1.7804810270291476e-05,-2.0646515001646436e-05, +-3.5032207230282844e-03, 4.0584134877253211e-04, 8.8180343246984782e-04,-3.9107445378243377e-05,-2.2916784609689563e-04,-4.6379875305574940e-05, 3.4920122949151698e-05, 2.1527646086784085e-05, + 3.9090620718008166e-03,-9.8571263480206174e-04,-7.4293136018778092e-04, 2.8607014723852349e-04, 1.8602016187013471e-04,-3.8739987675294858e-05,-4.4734409812687165e-05,-4.0582746851521069e-06, +-4.8947747066028779e-03, 1.7934457519438133e-03, 5.2028839461007036e-04,-4.9817206625035260e-04,-8.0400089583732525e-05, 9.8894019536617636e-05, 2.4669190670546094e-05,-1.3351293142191105e-05, + 9.8810250382852557e-02, 7.9290490648204204e-02, 5.1800078061782898e-02, 2.8104642761066969e-02, 1.2920137483231720e-02, 5.1241610715243822e-03, 1.7806568929613271e-03, 5.4935087221662357e-04, +-1.9519759734648354e-02,-1.1820355146064762e-02,-3.2210961458610382e-03, 1.4783263986866829e-03, 2.4175710058671439e-03, 1.7198960897416684e-03, 8.8014484047426204e-04, 3.6276709233897409e-04, + 7.6994045885835916e-03, 3.1663711372746199e-03,-6.2005007335285724e-04,-1.4773270292744742e-03,-8.0503922326102470e-04,-1.4092117408882367e-04, 1.0898948143518630e-04, 1.1548094767954432e-04, +-4.5330334513089716e-03,-1.0132696566486610e-03, 1.0002023106980206e-03, 7.5156887025980702e-04, 7.0159891311911949e-05,-1.6555693751972231e-04,-1.1184797457181182e-04,-3.0217549352038671e-05, + 3.5197637946603106e-03, 1.6906004667768424e-04,-9.5456885120160089e-04,-2.8281937063956279e-04, 1.7189464129260096e-04, 1.3643981107687585e-04, 1.9166092219303766e-05,-1.9788795943223312e-05, +-3.3507037479826264e-03, 3.6781531740801877e-04, 8.5250124748893687e-04,-2.8056056279637028e-05,-2.2179224431192004e-04,-4.7851651096982468e-05, 3.3150622769826390e-05, 2.1354858605136654e-05, + 3.7185190653906451e-03,-9.1638240174293632e-04,-7.2220875429351156e-04, 2.6667530845379849e-04, 1.8273863535597998e-04,-3.4880847533984974e-05,-4.3737230181052412e-05,-4.5755245811928658e-06, +-4.6349014671335812e-03, 1.6744162540108104e-03, 5.1566097866861612e-04,-4.7177126866188631e-04,-8.3594524673172313e-05, 9.4087192597038194e-05, 2.5174633467801648e-05,-1.2515079290597960e-05, + 9.8035571537383959e-02, 7.8820198749403589e-02, 5.1670748743617108e-02, 2.8162601941935810e-02, 1.3016197058607170e-02, 5.1928424267466619e-03, 1.8159486871928070e-03, 5.6395361625519148e-04, +-1.9215372787980370e-02,-1.1694509074530859e-02,-3.2451080786941935e-03, 1.4198315531041908e-03, 2.3854273748902238e-03, 1.7141282474526735e-03, 8.8441514928921678e-04, 3.6736194740006039e-04, + 7.5208637134495104e-03, 3.1259794260746071e-03,-5.8079661925563610e-04,-1.4474908011787172e-03,-8.0209765825909815e-04,-1.4743481379936264e-04, 1.0453124428897289e-04, 1.1425664195524837e-04, +-4.3948842873749033e-03,-1.0062226010951946e-03, 9.6269390897824882e-04, 7.4023644534967426e-04, 7.6860183402244556e-05,-1.6013798852442402e-04,-1.1105527422046806e-04,-3.0992067425915333e-05, + 3.3886616862797087e-03, 1.8305711128905949e-04,-9.2104108220652224e-04,-2.8373323670057075e-04, 1.6316824312848620e-04, 1.3449883140518898e-04, 2.0457397056779475e-05,-1.8938393326666871e-05, +-3.2056045749906492e-03, 3.3246939599982847e-04, 8.2402398470180361e-04,-1.7759659600232347e-05,-2.1455033088141264e-04,-4.9172867952179187e-05, 3.1421390262025586e-05, 2.1162043862241250e-05, + 3.5380739709904778e-03,-8.5165493119550902e-04,-7.0169202206201158e-04, 2.4831260682591237e-04, 1.7933888886343205e-04,-3.1211069578267135e-05,-4.2721613391055308e-05,-5.0597944417939560e-06, +-4.3897289021859864e-03, 1.5632182401509940e-03, 5.1001761367935536e-04,-4.4655839407338471e-04,-8.6317213373174971e-05, 8.9426048121069718e-05, 2.5591999655504499e-05,-1.1702367854332140e-05, + 9.7272926796811515e-02, 7.8354908456727088e-02, 5.1540489954363770e-02, 2.8218245076995802e-02, 1.3110973312540681e-02, 5.2612879149595924e-03, 1.8514077357789081e-03, 5.7873916688063907e-04, +-1.8918018340084428e-02,-1.1570272888214064e-02,-3.2675795254754544e-03, 1.3625210820404875e-03, 2.3534066744350032e-03, 1.7081041738928483e-03, 8.8850777636894024e-04, 3.7190721966770209e-04, + 7.3477454518703633e-03, 3.0858804245356194e-03,-5.4301698058587845e-04,-1.4181084932813946e-03,-7.9889498580987088e-04,-1.5373326203933389e-04, 1.0010572986421384e-04, 1.1300203372243426e-04, +-4.2618650273347439e-03,-9.9864326096941753e-04, 9.2650405443128964e-04, 7.2887550971037767e-04, 8.3217176551843362e-05,-1.5479769703921804e-04,-1.1021229418567259e-04,-3.1732728726286536e-05, + 3.2632217663653264e-03, 1.9569095481202924e-04,-8.8863605299283012e-04,-2.8424967121020020e-04, 1.5472877385320333e-04, 1.3250788955241634e-04, 2.1680349314956120e-05,-1.8096082110265796e-05, +-3.0675308115532974e-03, 2.9962559864785945e-04, 7.9636263219152168e-04,-8.1779092991822282e-06,-2.0744646686194989e-04,-5.0350983629166037e-05, 2.9733093957554459e-05, 2.0950502142277738e-05, + 3.3671564102011570e-03,-7.9122744770461072e-04,-6.8141913831188728e-04, 2.3093534203157728e-04, 1.7583907182388777e-04,-2.7724813694872394e-05,-4.1690969863635389e-05,-5.5120328391075903e-06, +-4.1583838579057680e-03, 1.4593334922304046e-03, 5.0348936444898941e-04,-4.2249264598016455e-04,-8.8603816307004772e-05, 8.4911135507383892e-05, 2.5926884321867120e-05,-1.0913565304835836e-05, + 9.6522039145154406e-02, 7.7894555614468342e-02, 5.1409362148358062e-02, 2.8271619177829270e-02, 1.3204471367507700e-02, 5.3294874582212916e-03, 1.8870269581574590e-03, 5.9370551689948256e-04, +-1.8627483530686065e-02,-1.1447634467178169e-02,-3.2885683958731593e-03, 1.3063768100428710e-03, 2.3215190772060256e-03, 1.7018324132771854e-03, 8.9242407012132016e-04, 3.7640172403869787e-04, + 7.1798490635078954e-03, 3.0460943597007094e-03,-5.0665930497238634e-04,-1.3891809355850676e-03,-7.9544470981075767e-04,-1.5981970357190826e-04, 9.5714895104371915e-05, 1.1171847058256376e-04, +-4.1337547038071860e-03,-9.9058420851300165e-04, 8.9158848750162968e-04, 7.1750139927646915e-04, 8.9242236455223034e-05,-1.4953794901241508e-04,-1.0932173567002602e-04,-3.2439871551627762e-05, + 3.1431704952941844e-03, 2.0705829891169269e-04,-8.5732133134094890e-04,-2.8439648380135756e-04, 1.4657063599408821e-04, 1.3047256430841138e-04, 2.2836597598034869e-05,-1.7262586003853371e-05, +-2.9361121963824917e-03, 2.6911764529240277e-04, 7.6950676062481150e-04, 7.2770522328700253e-07,-2.0048431529001855e-04,-5.1393221984897722e-05, 2.8086270388387802e-05, 2.0721495488494605e-05, + 3.2052298416748943e-03,-7.3481720367002564e-04,-6.6142307937387820e-04, 2.1449844059305019e-04, 1.7225594984209182e-04,-2.4416228389626457e-05,-4.0648490656843505e-05,-5.9332025790522936e-06, +-3.9400470453449200e-03, 1.3622784313124048e-03, 4.9619526226169809e-04,-3.9953350327208838e-04,-9.0487880906084205e-05, 8.0542483414117197e-05, 2.6184660780603136e-05,-1.0148978134548382e-05, + 9.5782639922578419e-02, 7.7439076567349163e-02, 5.1277423504561659e-02, 2.8322770528496969e-02, 1.3296696742209371e-02, 5.3974313177911470e-03, 1.9227993292395219e-03, 6.0885061278850578e-04, +-1.8343563355229256e-02,-1.1326580923448598e-02,-3.3081305605238143e-03, 1.2513805404348079e-03, 2.2897742247843626e-03, 1.6953213809801238e-03, 8.9616545508866443e-04, 3.8084432903568116e-04, + 7.0169824317806578e-03, 3.0066394313563033e-03,-4.7167348459473991e-04,-1.3607083664968068e-03,-7.9175988404660150e-04,-1.6569739421159655e-04, 9.1360590229067192e-05, 1.1040728603955183e-04, +-4.0103430004243545e-03,-9.8209427715924410e-04, 8.5790423723917724e-04, 7.0612836792957460e-04, 9.4946502152689380e-05,-1.4436041295736747e-04,-1.0838623353619925e-04,-3.3113862149479364e-05, + 3.0282487232651104e-03, 2.1724943517724405e-04,-8.2706492734513012e-04,-2.8419997931124761e-04, 1.3868809861747292e-04, 1.2839815018884487e-04, 2.3927809475386911e-05,-1.6438579008785627e-05, +-2.8109992880878663e-03, 2.4079018768103939e-04, 7.4344471382927922e-04, 8.9939239447478047e-06,-1.9366689487311360e-04,-5.2306572921600688e-05, 2.6481332683964611e-05, 2.0476247211865343e-05, + 3.0517894757689057e-03,-6.8216014115747537e-04,-6.4173228439001479e-04, 1.9895844205459264e-04, 1.6860498722544558e-04,-2.1279470556742969e-05,-3.9597156302929747e-05,-6.3242768523080304e-06, +-3.7339496169263809e-03, 1.2716017768204342e-03, 4.8824329315978022e-04,-3.7764085695005860e-04,-9.2000941066039399e-05, 7.6319652221256562e-05, 2.6370482356267128e-05,-9.4088203002486600e-06, + 9.5054468517954377e-02, 7.6988408189658908e-02, 5.1144730006742058e-02, 2.8371744685151221e-02, 1.3387655330685290e-02, 5.4651100889216283e-03, 1.9587178823701002e-03, 6.2417235682822364e-04, +-1.8066060328295469e-02,-1.1207098679179406e-02,-3.3263199197877610e-03, 1.1975140781298223e-03, 2.2581812454494921e-03, 1.6885793608644667e-03, 8.9973342773200281e-04, 3.8523395622138410e-04, + 6.8589616491160632e-03, 2.9675319565557433e-03,-4.3801110500610784e-04,-1.3326904749248671e-03,-7.8785312135597847e-04,-1.7136965235178716e-04, 8.7044561401573330e-05, 1.0906979842115444e-04, +-3.8914296925603199e-03,-9.7321881018779411e-04, 8.2540960267348494e-04, 6.9476964629026179e-04, 1.0034088119393355e-04,-1.3926655113643578e-04,-1.0740835564485349e-04,-3.3755092759182122e-05, + 2.9182108823725258e-03, 2.2634864778334424e-04,-7.9783533897444551e-04,-2.8368502731937771e-04, 1.3107532208149621e-04, 1.2628966678194004e-04, 2.4955666711554285e-05,-1.5624686974598367e-05, +-2.6918622345891816e-03, 2.1449808702453410e-04, 7.1816378169615655e-04, 1.6655780376898920e-05,-1.8699663045569740e-04,-5.3097793084048517e-05, 2.4918578816865078e-05, 2.0215941547851118e-05, + 2.9063603216137159e-03,-6.3300964409015688e-04,-6.2237107866020360e-04, 1.8427348008962679e-04, 1.6490042557651440e-04,-1.8308723222978441e-05,-3.8539745560659947e-05,-6.6862356761170835e-06, +-3.5393699657038729e-03, 1.1868823655212597e-03, 4.7973130907791691e-04,-3.5677512775742008e-04,-9.3172613993890529e-05, 7.2241782724670467e-05, 2.6489284862914544e-05,-8.6932203256239151e-06, + 9.4337272074553627e-02, 7.6542487911379645e-02, 5.1011335520942502e-02, 2.8418586476528219e-02, 1.3477353382131661e-02, 5.5325146955499324e-03, 1.9947757121223579e-03, 6.3966860921207242e-04, +-1.7794784163173982e-02,-1.1089173539233430e-02,-3.3431884704737125e-03, 1.1447592508080882e-03, 2.2267487716308432e-03, 1.6816145029402898e-03, 9.0312955232257344e-04, 3.8956957957130803e-04, + 6.7056106239405527e-03, 2.9287865045262949e-03,-4.0562539473480621e-04,-1.3051264400791975e-03,-7.8373660297153180e-04,-1.7683985093213924e-04, 8.2768453419033864e-05, 1.0770730987739985e-04, +-3.7768241194142578e-03,-9.6399989303598164e-04, 7.9406413249780584e-04, 6.8343749778054807e-04, 1.0543604575181107e-04,-1.3425763037181132e-04,-1.0639060237680590e-04,-3.4363979717134090e-05, + 2.8128242263782762e-03, 2.3443460822976619e-04,-7.6960159104386963e-04,-2.8287512913759637e-04, 1.2372638083298177e-04, 1.2415186805346767e-04, 2.5921860819051550e-05,-1.4821489166579414e-05, +-2.5783896181485102e-03, 1.9010573986707937e-04, 6.9365035685321828e-04, 2.3746664880498964e-05,-1.8047540041998700e-04,-5.3773407228084209e-05, 2.3398199500544619e-05, 1.9941723449825939e-05, + 2.7684953580155896e-03,-5.8713537468110398e-04,-6.0336006197808721e-04, 1.7040325924517341e-04, 1.6115535857349532e-04,-1.5498211417067358e-05,-3.7478844055907981e-05,-7.0200626133401656e-06, +-3.3556307326966933e-03, 1.1077271193675757e-03, 4.7074786765274965e-04,-3.3689736662235634e-04,-9.4030694140677886e-05, 6.8307641283615411e-05, 2.6545789687001419e-05,-8.0022280669204522e-06, + 9.3630805208251913e-02, 7.6101253741513664e-02, 5.0877291870322867e-02, 2.8463340005256330e-02, 1.3565797481410060e-02, 5.5996363849023000e-03, 2.0309659769296570e-03, 6.5533719012972791e-04, +-1.7529551466738250e-02,-1.0972790758547790e-02,-3.3587863705636031e-03, 1.0930979285449331e-03, 2.1954849569829193e-03, 1.6744348213366313e-03, 9.0635545694125845e-04, 3.9385022480782736e-04, + 6.5567607081904594e-03, 2.8904160225926394e-03,-3.7447117572855359e-04,-1.2780149690819519e-03,-7.7942208799815379e-04,-1.8211140983098164e-04, 7.8533812418324659e-05, 1.0632110545355890e-04, +-3.6663446855978200e-03,-9.5447657034818871e-04, 7.6382860331643840e-04, 6.7214327205648394e-04, 1.1024242961118536e-04,-1.2933473248545667e-04,-1.0533540632686139e-04,-3.4940961624884580e-05, + 2.7118681152496311e-03, 2.4158074402654104e-04,-7.4233326822182363e-04,-2.8179248228590447e-04, 1.1663528436644266e-04, 1.2198925158498017e-04, 2.6828088920174305e-05,-1.4029519839046528e-05, +-2.4702873712230903e-03, 1.6748644890878688e-04, 6.6989007646089732e-04, 3.0298386971661583e-05,-1.7410458116852234e-04,-5.4339710189229347e-05, 2.1920285744176110e-05, 1.9654698508396932e-05, + 2.6377738201318773e-03,-5.4432218834255214e-04,-5.8471646471438556e-04, 1.5730902798671021e-04, 1.5738180305080007e-04,-1.2842216299639288e-05,-3.6416852788529773e-05,-7.3267417554076596e-06, +-3.1820960084744292e-03, 1.0337691519102543e-03, 4.6137300616939079e-04,-3.1796933969241827e-04,-9.4601244112061820e-05, 6.4515661619895807e-05, 2.6544507397322900e-05,-7.3358211473321833e-06, + 9.2934829737645150e-02, 7.5664644288814892e-02, 5.0742648907450963e-02, 2.8506048649919971e-02, 1.3652994530231640e-02, 5.6664667220231680e-03, 2.0672819015597360e-03, 6.7117588182306074e-04, +-1.7270185448830258e-02,-1.0857935104632538e-02,-3.3731620019730180e-03, 1.0425120419770909e-03, 2.1643974930789980e-03, 1.6670481925692513e-03, 9.0941282958645125e-04, 3.9807496869866620e-04, + 6.4122503441977202e-03, 2.8524319537071071e-03,-3.4450481469374241e-04,-1.2513543324918139e-03,-7.7492092299515135e-04,-1.8718778866800602e-04, 7.4342088590946672e-05, 1.0491245223512313e-04, +-3.5598183904906131e-03,-9.4468504877036189e-04, 7.3466499668149699e-04, 6.6089745591155213e-04, 1.1477022596100852e-04,-1.2449876437109183e-04,-1.0424513215726777e-04,-3.5486497580172586e-05, + 2.6151333417202514e-03, 2.4785558306115551e-04,-7.1600054264271055e-04,-2.8045804249890568e-04, 1.0979599646018581e-04, 1.1980606772213146e-04, 2.7676049904363218e-05,-1.3249269809556107e-05, +-2.3672777586590957e-03, 1.4652183575045456e-04, 6.4686795036782933e-04, 3.6341236486421601e-05,-1.6788508883629308e-04,-5.4802769383303427e-05, 2.0484836069936477e-05, 1.9355932986468458e-05, + 2.5137995944095504e-03,-5.0436912172493358e-04,-5.6645447417579453e-04, 1.4495354862190921e-04, 1.5359076650620077e-04,-1.0335087685955341e-05,-3.5355996484901203e-05,-7.6072549564087515e-06, +-3.0181687161344841e-03, 9.6466600374425402e-04, 4.5167895465896663e-04,-2.9995359955084928e-04,-9.4908682499771874e-05, 6.0863983469736845e-05, 2.6489741807163256e-05,-6.6939110655540216e-06, + 9.2249114425512799e-02, 7.5232598780112209e-02, 5.0607454584122302e-02, 2.8546755067822231e-02, 1.3738951729001331e-02, 5.7329975842406759e-03, 2.1037167794353820e-03, 6.8718243061337292e-04, +-1.7016515645400590e-02,-1.0744590915526403e-02,-3.3863620313840798e-03, 9.9298359908808406e-04, 2.1334936257200350e-03, 1.6594623540883190e-03, 9.1230341439059231e-04, 4.0224293832256573e-04, + 6.2719247298741870e-03, 2.8148443461368210e-03,-3.1568417537363109e-04,-1.2251423978412411e-03,-7.7024405163182057e-04,-1.9207248000252574e-04, 7.0194638900782742e-05, 1.0348259856229089e-04, +-3.4570803837373661e-03,-9.3465888642784638e-04, 7.0653647512361484e-04, 6.4970972174864462e-04, 1.1902938592319909e-04,-1.1975046770242031e-04,-1.0312207659917647e-04,-3.6001065470889584e-05, + 2.5224214973095195e-03, 2.5332307526446769e-04,-6.9057419664556659e-04,-2.7889158331098168e-04, 1.0320245279707608e-04, 1.1760632861341455e-04, 2.8467440867580395e-05,-1.2481188029533144e-05, +-2.2690984220450519e-03, 1.2710129274166101e-04, 6.2456847676476464e-04, 4.1904043489782356e-05,-1.6181741837228205e-04,-5.5168427777881583e-05, 1.9091763399631559e-05, 1.9046453960080739e-05, + 2.3961997147867128e-03,-4.6708844891350186e-04,-5.4858553357423079e-04, 1.3330106462524131e-04, 1.4979231115780665e-04,-7.9712550824475914e-06,-3.4298331780148822e-05,-7.8625793050152963e-06, +-2.8632881637002147e-03, 9.0009799812625232e-04, 4.4173079278397479e-04,-2.8281354406687925e-04,-9.4975868592392514e-05, 5.7350488274096704e-05, 2.6385594424010928e-05,-6.0763489866356569e-06, + 9.1573434731092154e-02, 7.4805057076400228e-02, 5.0471755018784328e-02, 2.8585501198392579e-02, 1.3823676559306639e-02, 5.7992211555794411e-03, 2.1402639748059351e-03, 7.0335454889864182e-04, +-1.6768377654691927e-02,-1.0632742153513286e-02,-3.3984314691886883e-03, 9.4449470069021130e-04, 2.1027801708564178e-03, 1.6516849030904501e-03, 9.1502900794538343e-04, 4.0635331030488718e-04, + 6.1356355011786406e-03, 2.7776619558235183e-03,-2.8796857180249987e-04,-1.1993766612816959e-03,-7.6540202438829617e-04,-1.9676900291277838e-04, 6.6092729798994474e-05, 1.0203277331143198e-04, +-3.3579735453551224e-03,-9.2442916996563818e-04, 6.7940735736288975e-04, 6.3858897371588390e-04, 1.2302961775599889e-04,-1.1509042828245018e-04,-1.0196846859104421e-04,-3.6485160331727862e-05, + 2.4335443753894844e-03, 2.5804289308919059e-04,-6.6602564111961475e-04,-2.7711175327121751e-04, 9.6848577071921625e-05, 1.1539381712188011e-04, 2.9203953820521424e-05,-1.1725683147285269e-05, +-2.1755014823002937e-03, 1.0912147129422771e-04, 6.0297574639256045e-04, 4.7014236832480718e-05,-1.5590168012475156e-04,-5.5442307277994962e-05, 1.7740901617961947e-05, 1.8727249555748637e-05, + 2.2846229535945215e-03,-4.3230480113261869e-04,-5.3111861577538090e-04, 1.2231726583590140e-04, 1.4599561467363466e-04,-5.7452373507310494e-06,-3.3245755216248822e-05,-8.0936848216145148e-06, +-2.7169277547271402e-03, 8.3976670848053860e-04, 4.3158705482387427e-04,-2.6651346421184481e-04,-9.4824183941417950e-05, 5.3972832084429263e-05, 2.6235969227349755e-05,-5.4829312232298847e-06, + 9.0907572572655471e-02, 7.4381959686861787e-02, 5.0335594561639913e-02, 2.8622328267189100e-02, 1.3907176767035619e-02, 5.8651299211308246e-03, 2.1769169247739628e-03, 7.1968991711963775e-04, +-1.6525612885793683e-02,-1.0522372454883355e-02,-3.4094137265817392e-03, 8.9702755467693102e-04, 2.0722635301211045e-03, 1.6437232955802544e-03, 9.1759145573545387e-04, 4.1040531002576111e-04, + 6.0032404309103282e-03, 2.7408923418976352e-03,-2.6131872256544408e-04,-1.1740542774284738e-03,-7.6040500827566056e-04,-2.0128089694223215e-04, 6.2037539930842687e-05, 1.0056418524105116e-04, +-3.2623480890126930e-03,-9.1402467997115538e-04, 6.5324309286741403e-04, 6.2754339160004888e-04, 1.2678038667287661e-04,-1.1051908503897207e-04,-1.0078646954361461e-04,-3.6939292763139936e-05, + 2.3483234090415379e-03, 2.6207071221186705e-04,-6.4232692989584688e-04,-2.7513613084379911e-04, 9.0728295683271720e-05, 1.1317209559376257e-04, 2.9887272653167534e-05,-1.0983125059762499e-05, +-2.0862526968296706e-03, 9.2485804204747615e-05, 5.8207353627431424e-04, 5.1697901278877149e-05,-1.5013763406175878e-04,-5.5629812472365860e-05, 1.6432011819466156e-05, 1.8399269275699755e-05, + 2.1787385010344183e-03,-3.9985434563176160e-04,-5.1406047382508897e-04, 1.1196925194625253e-04, 1.4220902770105648e-04,-3.6516511087247733e-06,-3.2200011042873610e-05,-8.3015323688516651e-06, +-2.5785928466661801e-03, 7.8339353009317504e-04, 4.2130028674013581e-04,-2.5101858204211556e-04,-9.4473610785346889e-05, 5.0728475858546651e-05, 2.6044577717157435e-05,-4.9134044146730113e-06, + 9.0251316099908691e-02, 7.3963247780974281e-02, 5.0199015857503859e-02, 2.8657276790447300e-02, 1.3989460346108330e-02, 5.9307166613904389e-03, 2.2136691411814660e-03, 7.3618618569385808e-04, +-1.6288068318934409e-02,-1.0413465176002154e-02,-3.4193506708457694e-03, 8.5056448911625254e-04, 2.0419497059740461e-03, 1.6355848456668740e-03, 9.1999264868004469e-04, 4.1439821080333601e-04, + 5.8746031429322554e-03, 2.7045419557935046e-03,-2.3569670608534045e-04,-1.1491720874935560e-03,-7.5526279655189262e-04,-2.0561171639864708e-04, 5.8030162829539713e-05, 9.9078022399738588e-05, +-3.1700611871387507e-03,-9.0347204553964671e-04, 6.2801023590660873e-04, 6.1658047257018571e-04, 1.3029091522217498e-04,-1.0603673867246423e-04,-9.9578173721363752e-05,-3.7363987412070810e-05, + 2.2665891415991042e-03, 2.6545847376446905e-04,-6.1945077058035594e-04,-2.7298127705468198e-04, 8.4835551102094037e-05, 1.1094451447089082e-04, 3.0519070342957516e-05,-1.0253846449693003e-05, +-2.0011306678346351e-03, 7.7104059714995033e-05, 5.6184539385333433e-04, 5.5979833150011764e-05,-1.4452472175368003e-04,-5.5736134691962156e-05, 1.5164788247618943e-05, 1.8063424402604358e-05, + 2.0782347275496299e-03,-3.6958401975765049e-04,-4.9741587007732927e-04, 1.0222549464217147e-04, 1.3844012832481739e-04,-1.6852179701002499e-06,-3.1162698811737593e-05,-8.4870717633981739e-06, +-2.4478187473072803e-03, 7.3071834888930763e-04, 4.1091755895957194e-04,-2.3629507991827407e-04,-9.3942807356130209e-05, 4.7614713311342192e-05, 2.5814944183707693e-05,-4.3674704133808398e-06, + 8.9604459475753281e-02, 7.3548863198842948e-02, 5.0062059906482860e-02, 2.8690386580130661e-02, 1.4070535522806391e-02, 5.9959744465719594e-03, 2.2505142123598748e-03, 7.5284097691633392e-04, +-1.6055596276910333e-02,-1.0306003435936614e-02,-3.4282826788672796e-03, 8.0508796425135878e-04, 2.0118443164583236e-03, 1.6272767250817858e-03, 9.2223451978213277e-04, 4.1833133305453174e-04, + 5.7495928409737190e-03, 2.6686162243883173e-03,-2.1106591695655135e-04,-1.1247266457897222e-03,-7.4998481841228302e-04,-2.0976502499229360e-04, 5.4071609592670116e-05, 9.7575451593685109e-05, +-3.0809766165854017e-03,-8.9279588870144538e-04, 6.0367641923804493e-04, 6.0570707085846702e-04, 1.3357018417668775e-04,-1.0164355996274225e-04,-9.8345608730975194e-05,-3.7759781513853092e-05, + 2.1881807278839563e-03, 2.6825462933167488e-04,-5.9737053220354280e-04,-2.7066278594119767e-04, 7.9164314003329634e-05, 1.0871422073525022e-04, 3.1101006394557883e-05,-9.5381443050584176e-06, +-1.9199260985522815e-03, 6.2891925160615358e-05, 5.4227471237149418e-04, 5.9883594427296281e-05,-1.3906209623538958e-04,-5.5766256336705180e-05, 1.3938863934372305e-05, 1.7720588476006450e-05, + 1.9828180237128970e-03,-3.4135081643037971e-04,-4.8118778565087026e-04, 9.3055798740264341e-05, 1.3469577357157393e-04, 1.5922928482208192e-07,-3.0135280756540455e-05,-8.6512400774921548e-06, +-2.3241688401432767e-03, 6.8149830056743184e-04, 4.0048093832287701e-04,-2.2231012197830937e-04,-9.3249180084333067e-05, 4.4628696471416733e-05, 2.5550411153962565e-05,-3.8447908877842294e-06, + 8.8966802666977859e-02, 7.3138748459894432e-02, 4.9924766122550250e-02, 2.8721696749440442e-02, 1.4150410740684920e-02, 6.0608966309058637e-03, 2.2874458047481730e-03, 7.6965188682645764e-04, +-1.5828054207083428e-02,-1.0199970155868321e-02,-3.4362486889282159e-03, 7.6058058347247548e-04, 1.9819526095696451e-03, 1.6188059629044672e-03, 9.2431904088416481e-04, 4.2220404343565462e-04, + 5.6280840512151070e-03, 2.6331196275550346e-03,-1.8739102333562713e-04,-1.1007142446876278e-03,-7.4458014863495190e-04,-2.1374439079962951e-04, 5.0162811537095633e-05, 9.6057617911289497e-05, +-2.9949644236600724e-03,-8.8201895937375040e-04, 5.8021032754506437e-04, 5.9492943546667228e-04, 1.3662693388510091e-04,-9.7339597741478274e-05,-9.7090736107768754e-05,-3.8127223494455035e-05, + 2.1129454642863218e-03, 2.7050436985043584e-04,-5.7606025001456123e-04,-2.6819533287015851e-04, 7.3708594243709923e-05, 1.0648416617592300e-04, 3.1634724499302988e-05,-8.8362814182226432e-06, +-1.8424410944358860e-03, 4.9770618235297299e-05, 5.2334479823264049e-04, 6.3431565288895090e-05,-1.3374864986604536e-04,-5.5724955429162324e-05, 1.2753816049003130e-05, 1.7371597833084361e-05, + 1.8922117126711833e-03,-3.1502111755883226e-04,-4.6537761176518452e-04, 8.4431262601639210e-05, 1.3098214808935298e-04, 1.8867415167797772e-06,-2.9119088952340316e-05,-8.7949601190481838e-06, +-2.2072328302300158e-03, 6.3550661393910364e-04, 3.9002792230263513e-04,-2.0903186873565940e-04,-9.2408952757080126e-05, 4.1767459095285952e-05, 2.5254144972905038e-05,-3.3449916513917718e-06, + 8.8338151243467694e-02, 7.2732846770054024e-02, 4.9787172390082131e-02, 2.8751245718744670e-02, 1.4229094646051620e-02, 6.1254768469311341e-03, 2.3244576643833411e-03, 7.8661648704006601e-04, +-1.5605304473413670e-02,-1.0095348095510034e-02,-3.4432862508137138e-03, 7.1702510332002575e-04, 1.9522794772410847e-03, 1.6101794454832421e-03, 9.2624821952952581e-04, 4.2601575396508944e-04, + 5.5099563779036353e-03, 2.5980557704963353e-03,-1.6463792539828494e-04,-1.0771309381024262e-03,-7.3905751716371636e-04,-2.1755338153937138e-04, 4.6304622828557225e-05, 9.4525644302505263e-05, +-2.9119006074073001e-03,-8.7116226146064695e-04, 5.5758167073536344e-04, 5.8425324598103759e-04, 1.3946966604076510e-04,-9.3124786537650316e-05,-9.5815451991533506e-05,-3.8466871632282804e-05, + 2.0407383459466531e-03, 2.7224983948178922e-04,-5.5549462773099969e-04,-2.6559272078544466e-04, 6.8462450763223632e-05, 1.0425711546988890e-04, 3.2121850402927235e-05,-8.1484878622096392e-06, +-1.7684885064648639e-03, 3.7666524013095287e-05, 5.0503893105244865e-04, 6.6644995051144028e-05,-1.2858304029570521e-04,-5.5616810357736037e-05, 1.1609170965062457e-05, 1.7017252206752807e-05, + 1.8061550304779592e-03,-2.9047007213308415e-04,-4.4998532441652410e-04, 7.6324238088073843e-05, 1.2730481011969364e-04, 3.5022489315404687e-06,-2.8115332249612193e-05,-8.9191390795308447e-06, +-2.0966251026110433e-03, 5.9253153268138781e-04, 3.7959183841613473e-04,-1.9642948562675921e-04,-9.1437232674138351e-05, 3.9027938077622719e-05, 2.4929141482883492e-05,-2.8676667277744149e-06, + 8.7718316185540116e-02, 7.2331102027523006e-02, 4.9649315118422750e-02, 2.8779071221889021e-02, 1.4306596073997630e-02, 6.1897089997874953e-03, 2.3615436182673750e-03, 8.0373232654611256e-04, +-1.5387214158017110e-02,-9.9921198867278099e-03,-3.4494315742801332e-03, 6.7440444257651708e-04, 1.9228294689460999e-03, 1.6014039165390863e-03, 9.2802409592860659e-04, 4.2976592113022649e-04, + 5.3950942712892996e-03, 2.5634274512020185e-03,-1.4277371486508088e-04,-1.0539725635845170e-03,-7.3342531861259985e-04,-2.2119556014798289e-04, 4.2497823082632063e-05, 9.2980631210524815e-05, +-2.8316668200872811e-03,-8.6024517068230611e-04, 5.3576115719517826e-04, 5.7368364657799662e-04, 1.4210664582615744e-04,-8.8998953903581359e-05,-9.4521587883726209e-05,-3.8779292778504798e-05, + 1.9714216494049752e-03, 2.7353033544999798e-04,-5.3564903752130271e-04,-2.6286792445083030e-04, 6.3420000484295830e-05, 1.0203565406980227e-04, 3.2563989970570682e-05,-7.4749624420856125e-06, +-1.6978913139549772e-03, 2.6510856004125264e-05, 4.8734041703080372e-04, 6.9544051504155348e-05,-1.2356371464588580e-04,-5.5446204774811071e-05, 1.0504409054368889e-05, 1.6658315374787123e-05, + 1.7244021699591024e-03,-2.6758101596858179e-04,-4.3500964372666039e-04, 6.8708290282825778e-05, 1.2366873488394868e-04, 5.0105576017914690e-06,-2.7125102979396320e-05,-9.0246673395344663e-06, +-1.9919831859276844e-03, 5.5237531013717562e-04, 3.6920221150892312e-04,-1.8447314623199526e-04,-9.0348073868364194e-05, 3.6406992993059940e-05, 2.4578231766627670e-05,-2.4123821607391096e-06, + 8.7107113699036232e-02, 7.1933458827264055e-02, 4.9511229294542831e-02, 2.8805210312853921e-02, 1.4382924034964859e-02, 6.2535872615152796e-03, 2.3986975756150161e-03, 8.2099693346733451e-04, +-1.5173654871772177e-02,-9.8902680645567564e-03,-3.4547195759248514e-03, 6.3270169050149566e-04, 1.8936068049231515e-03, 1.5924859774405740e-03, 9.2964874002829335e-04, 4.3345404498066438e-04, + 5.2833868072154205e-03, 2.5292367233494643e-03,-1.2176663559695412e-04,-1.0312347630846311e-03,-7.2769162167772333e-04,-2.2467448064189066e-04, 3.8743119933867787e-05, 9.1423656253500959e-05, +-2.7541500838659562e-03,-8.4928554467562684e-04, 5.1472046708596136e-04, 5.6322527829866600e-04, 1.4454590439461469e-04,-8.4961827429510259e-05,-9.3210911478239887e-05,-3.9065061134922136e-05, + 1.9048645391903294e-03, 2.7438249477761568e-04,-5.1649951797701254e-04,-2.6003313275061704e-04, 5.8575426277286690e-05, 9.9822195893477011e-05, 3.2962727438123234e-05,-6.8158741194058271e-06, +-1.6304820444127137e-03, 1.6239339634485715e-05, 4.7023263623768857e-04, 7.2147868633204074e-05,-1.1868893200340703e-04,-5.5217332619370391e-05, 9.4389692176476340e-06, 1.6295515853623769e-05, + 1.6467213840471993e-03,-2.4624493028026456e-04,-4.2044817920397184e-04, 6.1558157181001283e-05, 1.2007835549629196e-04, 6.4163467365386384e-06,-2.6149383428482710e-05,-9.1124174215930338e-06, +-1.8929663143274638e-03, 5.1485327216001643e-04, 3.5888510140046678e-04,-1.7313403084196524e-04,-8.9154537451103269e-05, 3.3901423891694409e-05, 2.4204087926027371e-05,-1.9786795806857776e-06, + 8.6504365037813724e-02, 7.1539862464294626e-02, 4.9372948533854613e-02, 2.8829699372724869e-02, 1.4458087701834869e-02, 6.3171060653695191e-03, 2.4359135289863040e-03, 8.3840781678440562e-04, +-1.4964502573519098e-02,-9.7897750957869761e-03,-3.4591839245018408e-03, 5.9190011426131853e-04, 1.8646153890259157e-03, 1.5834320876388598e-03, 9.3112424868353879e-04, 4.3707966820964088e-04, + 5.1747274777321217e-03, 2.4954849549460503e-03,-1.0158604525615849e-04,-1.0089130024615841e-03,-7.2186417844374092e-04,-2.2799368425424063e-04, 3.5041151570356938e-05, 8.9855773954024580e-05, +-2.6792425227860715e-03,-8.3829982587278209e-04, 4.9443222575762814e-04, 5.5288230966966424e-04, 1.4679524165290322e-04,-8.1013041454537833e-05,-9.1885127558608606e-05,-3.9324757088243922e-05, + 1.8409426969132894e-03, 2.7484046878251036e-04,-4.9802277030494243e-04,-2.5709978911473607e-04, 5.3922984058870960e-05, 9.7618990810252785e-05, 3.3319623839767493e-05,-6.1713634081369832e-06, +-1.5661022281307790e-03, 6.7919166519578127e-06, 4.5369908434910497e-04, 7.4474592731972735e-05,-1.1395678432639099e-04,-5.4934203234529174e-05, 8.4122531605831138e-06, 1.5929547631330636e-05, + 1.5728941447827368e-03,-2.2635993646281417e-04,-4.0629756204913820e-04, 5.4849709516848827e-05, 1.1653760152141821e-04, 7.7241666283058824e-06,-2.5189052082726236e-05,-9.1832430810983290e-06, +-1.7992540812455510e-03, 4.7979294335763435e-04, 3.4866341317412185e-04,-1.6238432095424052e-04,-8.7868749164871015e-05, 3.1507987472669899e-05, 2.3809228867506776e-05,-1.5660795360534364e-06, + 8.5909896333307978e-02, 7.1150258935883129e-02, 4.9234505129244509e-02, 2.8852574116944550e-02, 1.4532096397524270e-02, 6.3802601001544234e-03, 2.4731855553080028e-03, 8.5596246802314133e-04, +-1.4759637397424849e-02,-9.6906234052841350e-03,-3.4628570847245257e-03, 5.5198316560267635e-04, 1.8358588212035436e-03, 1.5742485652518821e-03, 9.3245274292957665e-04, 4.4064237522556111e-04, + 5.0690139921407140e-03, 2.4621728829928354e-03,-8.2202378027522449e-05,-9.8700258979687655e-04,-7.1595043357353073e-04,-2.3115669583413873e-04, 3.1392489231209567e-05, 8.8278015514119189e-05, +-2.6068411091478786e-03,-8.2730313763094564e-04, 4.7486997734653080e-04, 5.4265846574306370e-04, 1.4886222931150851e-04,-7.7152143482260940e-05,-9.0545878954747887e-05,-3.9558966099601139e-05, + 1.7795379715169330e-03, 2.7493608614600660e-04,-4.8019615295307084e-04,-2.5407863013083133e-04, 4.9457009084152577e-05, 9.5428131921265966e-05, 3.3636215601611449e-05,-5.5415437405676672e-06, +-1.5046018853709263e-03,-1.8875309424095082e-06, 4.3772340933297468e-04, 7.6541426913316748e-05,-1.0936521585270764e-04,-5.4600646554863101e-05, 7.4236294248210269e-06, 1.5561070934326662e-05, + 1.5027143544285167e-03,-2.0783082462591610e-04,-3.9255356556194842e-04, 4.8559910884982317e-05, 1.1304993528370225e-04, 8.9384372171710994e-06,-2.4244889639351181e-05,-9.2379785259166652e-06, +-1.7105451790544329e-03, 4.4703323239412266e-04, 3.3855718224257137e-04,-1.5219719024941607e-04,-8.6501954214170601e-05, 2.9223411744865641e-05, 2.3396026071782717e-05,-1.1740846003511328e-06, + 8.5323538430841478e-02, 7.0764594942735071e-02, 4.9095930098383249e-02, 2.8873869602817639e-02, 1.4604959583072060e-02, 6.4430443045840934e-03, 2.5105078167879250e-03, 8.7365836290439819e-04, +-1.4558943488106407e-02,-9.5927954001990834e-03,-3.4657703595986356e-03, 5.1293448681635767e-04, 1.8073404096158319e-03, 1.5649415877875298e-03, 9.3363636535325574e-04, 4.4414179121540537e-04, + 4.9661480879073239e-03, 2.4293006644311912e-03,-6.3587108391183547e-05,-9.6549869257815473e-04,-7.0995753337104524e-04,-2.3416702049673969e-04, 2.7797639664668651e-05, 8.6691388633564634e-05, +-2.5368474234761327e-03,-8.1630937405620580e-04, 4.5600815861676722e-04, 5.3255705562705018e-04, 1.5075421417145446e-04,-7.3378600309370709e-05,-8.9194747552782941e-05,-3.9768277648069794e-05, + 1.7205380494199269e-03, 2.7469900530867309e-04,-4.6299767486301951e-04,-2.5097972240760457e-04, 4.5171921490917444e-05, 9.3251562631241136e-05, 3.3914013291805035e-05,-4.9265028019653665e-06, +-1.4458390441112537e-03,-9.8514387440438739e-06, 4.2228944354192601e-04, 7.8364674032549051e-05,-1.0491204109916329e-04,-5.4220318339839548e-05, 6.4724371830941443e-06, 1.5190713022898915e-05, + 1.4359876053672098e-03,-1.9056861359842333e-04,-3.7921121462001416e-04, 4.2666778285897346e-05, 1.0961838603594089e-04, 1.0063447212816680e-05,-2.3317584789151447e-05,-9.2774377559759685e-06, +-1.6265562189656331e-03, 4.1642367230748379e-04, 3.2858383615218321e-04,-1.4254679253108006e-04,-8.5064569457310582e-05, 2.7044409282164753e-05, 2.2966709326464393e-05,-8.0218226445535280e-07, + 8.4745126732380077e-02, 7.0382817889250396e-02, 4.8957253229371382e-02, 2.8893620237240760e-02, 1.4676686846204380e-02, 6.5054538616747502e-03, 2.5478745617260302e-03, 8.9149296295637590e-04, +-1.4362308843129681e-02,-9.4962734922094533e-03,-3.4679539313267685e-03, 4.7473791603519153e-04, 1.7790631823885964e-03, 1.5555171929959848e-03, 9.3467727756190323e-04, 4.4757758120168704e-04, + 4.8660353509202281e-03, 2.3968679236150477e-03,-4.5712715935898075e-05,-9.4439635381032274e-04,-7.0389233470851981e-04,-2.3702814051285745e-04, 2.4257047544844331e-05, 8.5096877369447601e-05, +-2.4691674273051804e-03,-8.0533128393223716e-04, 4.3782207309572352e-04, 5.2258099857578372e-04, 1.5247832161901110e-04,-6.9691803875645555e-05,-8.7833255351845230e-05,-3.9953284226981938e-05, + 1.6638361433729432e-03, 2.7415685689432612e-04,-4.4640598752314814e-04,-2.4781249775246731e-04, 4.1062231150422988e-05, 9.1091083510553195e-05, 3.4154500517787778e-05,-4.3263038328336743e-06, +-1.3896792864786171e-03,-1.7148800785443848e-05, 4.0738123162939823e-04, 7.9959778042788397e-05,-1.0059496153454555e-04,-5.3796705432476686e-05, 5.5579898078647952e-06, 1.4819069010720383e-05, + 1.3725304856931732e-03,-1.7449014028782971e-04,-3.6626488511790273e-04, 3.7149343207213374e-05, 1.0624558209107557e-04, 1.1103353721064055e-05,-2.2407739770927676e-05,-9.3024140140967349e-06, +-1.5470206259810030e-03, 3.8782371210695232e-04, 3.1875843492709888e-04,-1.3340824706284279e-04,-8.3566233042834046e-05, 2.4967689172555199e-05, 2.2523372403828228e-05,-4.4984762456828741e-07, + 8.4174501045447520e-02, 7.0004875882928336e-02, 4.8818503124776598e-02, 2.8911859784631559e-02, 1.4747287890362330e-02, 6.5674841931734791e-03, 2.5852801252262492e-03, 9.0946371708909416e-04, +-1.4169625162519184e-02,-9.4010401179280972e-03,-3.4694369008263296e-03, 4.3737749190831191e-04, 1.7510298990147388e-03, 1.5459812798418980e-03, 9.3557765774794589e-04, 4.5094944909460349e-04, + 4.7685850445910866e-03, 2.3648737965374835e-03,-2.8552651199922376e-05,-9.2369050711117381e-04,-6.9776141380999005e-04,-2.3974351242722798e-04, 2.0771097845408907e-05, 8.3495442034777542e-05, +-2.4037112480536030e-03,-7.9438054914040298e-04, 4.2028786554821154e-04, 5.1273284870549858e-04, 1.5404145930100841e-04,-6.6091076843453531e-05,-8.6462865562326227e-05,-4.0114580391573346e-05, + 1.6093306989132001e-03, 2.7333537682134299e-04,-4.3040037598107364e-04,-2.4458578672711739e-04, 3.7122541877294529e-05, 8.8948358946279427e-05, 3.4359132962192798e-05,-3.7409868981574354e-06, +-1.3359953220918571e-03,-2.3825394504325362e-05, 3.9298305467334041e-04, 8.1341363807968417e-05,-9.6411581008080347e-05,-5.3333131022676757e-05, 4.6795782216975534e-06, 1.4446702704600289e-05, + 1.3121699275875317e-03,-1.5951767641073338e-04,-3.5370839419028951e-04, 3.1987613333131547e-05, 1.0293378102124589e-04, 1.2062182321747991e-05,-2.1515875698917439e-05,-9.3136793411511604e-06, +-1.4716876039982652e-03, 3.6110205614638428e-04, 3.0909389162587511e-04,-1.2475762168825797e-04,-8.2015851583327421e-05, 2.2989967761226990e-05, 2.2067978663719733e-05,-1.1654587315268143e-07, + 8.3611505437925074e-02, 6.9630717732990510e-02, 4.8679707244117118e-02, 2.8928621375033020e-02, 1.4816772524178810e-02, 6.6291309540281070e-03, 2.6227189298127229e-03, 9.2756806313088478e-04, +-1.3980787704934564e-02,-9.3070777576040806e-03,-3.4702473259011074e-03, 4.0083745769077875e-04, 1.7232430614070350e-03, 1.5363396095873817e-03, 9.3633969834764925e-04, 4.5425713674085476e-04, + 4.6737099473304830e-03, 2.3333169720251550e-03,-1.2081302526057748e-05,-9.0337599084437605e-04,-6.9157107488481014e-04,-2.4231656439455736e-04, 1.7340118168525766e-05, 8.1888019134244549e-05, +-2.3403929753053280e-03,-7.8346785793236592e-04, 4.0338249682949419e-04, 5.0301481839903125e-04, 1.5545032095700003e-04,-6.2575677915705928e-05,-8.5084983739882117e-05,-4.0252761856833649e-05, + 1.5569251173729621e-03, 2.7225853071691946e-04,-4.1496074896302189e-04,-2.4130785063953370e-04, 3.3347555044955016e-05, 8.6824923583497517e-05, 3.4529337548184337e-05,-3.1705701225081618e-06, +-1.2846665866560426e-03,-2.9923990901280088e-05, 3.7907945086606946e-04, 8.2523275395355781e-05,-9.2359420005026920e-05,-5.2832759900417417e-05, 3.8364740397716580e-06, 1.4074147459635561e-05, + 1.2547425957547625e-03,-1.4557857074002110e-04,-3.4153508198936800e-04, 2.7162534972944303e-05, 9.9684898013842029e-05, 1.2943827556189721e-05,-2.0642437669391319e-05,-9.3119842261801039e-06, +-1.4003211664947836e-03, 3.3613604799869661e-04, 2.9960117467712615e-04,-1.1657191410333513e-04,-8.0421644939094718e-05, 2.1107978266797755e-05, 2.1602366573535748e-05, 1.9826539413298408e-07, + 8.3055988098476669e-02, 6.9260292948288033e-02, 4.8540891944844768e-02, 2.8943937512370441e-02, 1.4885150651390769e-02, 6.6903900269025072e-03, 2.6601854859542909e-03, 9.4580342932679595e-04, +-1.3795695150188636e-02,-9.2143689522326336e-03,-3.4704122581072847e-03, 3.6510226478632390e-04, 1.6957049246085956e-03, 1.5265978069774547e-03, 9.3696560379206420e-04, 4.5750042297062229e-04, + 4.5813261979560024e-03, 2.3021957300982327e-03, 3.7260360860251300e-06,-8.8344756134167690e-04,-6.8532735860497677e-04,-2.4475069372333069e-04, 1.3964381027865283e-05, 8.0275521335046625e-05, +-2.2791304678577698e-03,-7.7260297338888170e-04, 3.8708371914826186e-04, 4.9342880046141522e-04, 1.5671139038460336e-04,-5.9144806900095854e-05,-8.3700958950531262e-05,-4.0368424643990588e-05, + 1.5065274944688881e-03, 2.7094863020179973e-04,-4.0006762822696545e-04,-2.3798641203524396e-04, 2.9732072653750155e-05, 8.4722188556443970e-05, 3.4666511726799779e-05,-2.6150508908647657e-06, +-1.2355788642670882e-03,-3.5484550863480713e-05, 3.6565523308653900e-04, 8.3518612882973168e-05,-8.8435928804723036e-05,-5.2298603681030383e-05, 3.0279325118625651e-06, 1.3701907046931393e-05, + 1.2000943134036074e-03,-1.3260491516785603e-04,-3.2973788570214740e-04, 2.2655956265701802e-05, 9.6500532485472004e-05, 1.3752053776263133e-05,-1.9787799647067379e-05,-9.2980573459891699e-06, +-1.3326992285714635e-03, 3.1281109583429354e-04, 2.9028949339442606e-04,-1.0882903157492381e-04,-7.8791188713902793e-05, 1.9318479364187390e-05, 2.1128255126733120e-05, 4.9513404997961381e-07, + 8.2507801202351211e-02, 6.8893551734554553e-02, 4.8402082521878637e-02, 2.8957840082839529e-02, 1.4952432261172890e-02, 6.7512575167411708e-03, 2.6976743925007990e-03, 9.6416723579886008e-04, +-1.3614249467796657e-02,-9.1228963191850657e-03,-3.4699577783530999e-03, 3.3015657577867979e-04, 1.6684175071675494e-03, 1.5167613615196703e-03, 9.3745758834835836e-04, 4.6067912264403748e-04, + 4.4913531486115918e-03, 2.2715079776841141e-03, 1.8893196146281370e-05,-8.6389990526283713e-04,-6.7903605042165258e-04,-2.4704926461713425e-04, 1.0644106084432663e-05, 7.8658837470921283e-05, +-2.2198451709274777e-03,-7.6179479738272939e-04, 3.7137005176966201e-04, 4.8397638908458487e-04, 1.5783094551753934e-04,-5.5797609528471812e-05,-8.2312084961844710e-05,-4.0462164274370426e-05, + 1.4580503735447483e-03, 2.6942644158667816e-04,-3.8570213727200288e-04,-2.3462868374470725e-04, 2.6270999893125116e-05, 8.2641447511801674e-05, 3.4772022877889028e-05,-2.0744070144390123e-06, +-1.1886239319580702e-03,-4.0544408586430636e-05, 3.5269550365984981e-04, 8.4339767709920382e-05,-8.4638499606438521e-05,-5.1733525990623521e-05, 2.2531952736292032e-06, 1.3330456529852793e-05, + 1.1480795233716396e-03,-1.2053323295969288e-04,-3.1830940646846985e-04, 1.8450591226336092e-05, 9.3381993038278959e-05, 1.4490496318767394e-05,-1.8952269137842401e-05,-9.2726053860087166e-06, +-1.2686127563313325e-03, 2.9102013643792619e-04, 2.8116646802039437e-04,-1.0150776940523519e-04,-7.7131454538369919e-05, 1.7618262805263547e-05, 2.0647249154038046e-05, 7.7461147372181837e-07, + 8.1966800782327279e-02, 6.8530444991061687e-02, 4.8263303245739582e-02, 2.8970360363406299e-02, 1.5018627418879880e-02, 6.8117297453867843e-03, 2.7351803370348590e-03, 9.8265689596823184e-04, +-1.3436355791265592e-02,-9.0326425664595394e-03,-3.4689090312711238e-03, 2.9598526698488073e-04, 1.6413826011822449e-03, 1.5068356288503570e-03, 9.3781787404962789e-04, 4.6379308569845408e-04, + 4.4037132248060523e-03, 2.2412512818569263e-03, 3.3443164878236252e-05,-8.4472765113979375e-04,-6.7270268871654393e-04,-2.4921560610408500e-04, 7.3794623343198746e-06, 7.7038832577491952e-05, +-2.1624619429491260e-03,-7.5105143033608488e-04, 3.5622075718065810e-04, 4.7465889967815563e-04, 1.5881506259658837e-04,-5.2533182039260517e-05,-8.0919601456017304e-05,-4.0534575009167432e-05, + 1.4114105126130411e-03, 2.6771128747348161e-04,-3.7184598950819873e-04,-2.3124139654553740e-04, 2.2959347238558296e-05, 8.0583882425336697e-05, 3.4847207817576136e-05,-1.5485978613878103e-06, +-1.1436992251395595e-03,-4.5138442941267066e-05, 3.4018566657026893e-04, 8.4998456606914146e-05,-8.0964477689165641e-05,-5.1140247598223217e-05, 1.5114929149089080e-06, 1.2960243146058871e-05, + 1.0985607821982924e-03,-1.0930418772507345e-04,-3.0724196978262728e-04, 1.4529984672249306e-05, 9.0330320848781243e-05, 1.5162662965825509e-05,-1.8136091650826387e-05,-9.2363129367254146e-06, +-1.2078649699233659e-03, 2.7066313526941940e-04, 2.7223828549594747e-04,-9.4587788379786009e-05,-7.5448848235656261e-05, 1.6004160155897026e-05, 2.0160844515278323e-05, 1.0372507494080083e-06, + 8.1432846604576489e-02, 6.8170924306730316e-02, 4.8124577399333679e-02, 2.8981529030399911e-02, 1.5083746257183960e-02, 6.8718032462540407e-03, 2.7726980961425211e-03, 1.0012698179392560e-03, +-1.3261922297846174e-02,-8.9435905056490378e-03,-3.4672902584016035e-03, 2.6257343056249743e-04, 1.6146017820238001e-03, 1.4968258321800439e-03, 9.3804868871125114e-04, 4.6684219619771961e-04, + 4.3183317921971359e-03, 2.2114229007659109e-03, 4.7398114479486799e-05,-8.2592538014958448e-04,-6.6633257278488804e-04,-2.5125301014490694e-04, 4.1705702475411995e-06, 7.5416347957144676e-05, +-2.1069088914312251e-03,-7.4038022704720776e-04, 3.4161581773712690e-04, 4.6547738762085707e-04, 1.5966962041567996e-04,-4.9350575531383273e-05,-7.9524695260574217e-05,-4.0586249133769035e-05, + 1.3665286643840173e-03, 2.6582114172821734e-04,-3.5848147598349579e-04,-2.2783082549598558e-04, 1.9792232120599112e-05, 7.8550569214560955e-05, 3.4893372404829379e-05,-1.0375654521088188e-06, +-1.1007075226558000e-03,-4.9299237589208768e-05, 3.2811143737719139e-04, 8.5505754143401172e-05,-7.7411171666281052e-05,-5.0521351484381700e-05, 8.0204737383247405e-07, 1.2591687192135790e-05, + 1.0514082850665912e-03,-9.8862311711263643e-05,-2.9652767992683422e-04, 1.0878478066091691e-05, 8.7346311572025071e-05, 1.5771935658162577e-05,-1.7339454955473988e-05,-9.1898424588797819e-06, +-1.1502705967778549e-03, 2.5164662011557121e-04, 2.6350984208198377e-04,-8.8049591422149166e-05,-7.3749245954782882e-05, 1.4473048717044825e-05, 1.9670433165998370e-05, 1.2836050139355091e-06, + 8.0905802049231326e-02, 6.7814941955747471e-02, 4.7985927313431563e-02, 2.8991376168181499e-02, 1.5147798967594909e-02, 6.9314747590626894e-03, 2.8102225356062978e-03, 1.0200034058455579e-03, +-1.3090860093483855e-02,-8.8557230637159867e-03,-3.4651248302236745e-03, 2.2990637620054835e-04, 1.5880764177428081e-03, 1.4867370638111579e-03, 9.3815226403178237e-04, 4.6982637138461274e-04, + 4.2351370297678687e-03, 2.1820198124055858e-03, 6.0779430457608748e-05,-8.0748763615766123e-04,-6.5993077064747669e-04,-2.5316472991072751e-04, 1.0175038573896969e-06, 7.3792201271640238e-05, +-2.0531172173622828e-03,-7.2978784884455733e-04, 3.2753591281002890e-04, 4.5643266598379263e-04, 1.6040030462700092e-04,-4.6248800097731160e-05,-7.8128501592996123e-05,-4.0617776285135607e-05, + 1.3233293685177255e-03, 2.6377271826381567e-04,-3.4559145275757624e-04,-2.2440281499263686e-04, 1.6764880200389602e-05, 7.6542483150188233e-05, 3.4911791240508719e-05,-5.4123551922777795e-07, +-1.0595566502539099e-03,-5.3057230596291347e-05, 3.1645885106752042e-04, 8.5872123925326835e-05,-7.3975862891456959e-05,-4.9879287837006388e-05, 1.2407416460935729e-07, 1.2225182908486706e-05, + 1.0064994196576184e-03,-8.9155752109998300e-05,-2.8615846895084084e-04, 7.4811763084922249e-06, 8.4430535837709777e-05, 1.6321572430676511e-05,-1.6562493138657928e-05,-9.1338343121009922e-06, +-1.0956551717676167e-03, 2.3388324602864385e-04, 2.5498487389193688e-04,-8.1874499665875565e-05,-7.2038028350226277e-05, 1.3021856692650880e-05, 1.9177308092454248e-05, 1.5142259478950039e-06, + 8.0385533995455463e-02, 6.7462450892735018e-02, 4.7847374400888709e-02, 2.8999931277872721e-02, 1.5210795792350290e-02, 6.9907412246327369e-03, 2.8477486105239090e-03, 1.0388550611583280e-03, +-1.2923083102720445e-02,-8.7690232936573978e-03,-3.4624352770710673e-03, 1.9796963242260310e-04, 1.5618076781668839e-03, 1.4765742867213450e-03, 9.3813083377645382e-04, 4.7274556073750558e-04, + 4.1540598090630473e-03, 2.1530387413698721e-03, 7.3607739061669775e-05,-7.8940893507198394e-04,-6.5350212668942407e-04,-2.5495397822196853e-04,-2.0797072002531024e-06, 7.2167186660818464e-05, +-2.0010210676931752e-03,-7.1928031230774313e-04, 3.1396239644308874e-04, 4.4752532227588582e-04, 1.6101261208967092e-04,-4.3226828746089545e-05,-7.6732105315599350e-05,-4.0629742820925071e-05, + 1.2817407553854321e-03, 2.6158155403874391e-04,-3.3315932800065455e-04,-2.2096280260617871e-04, 1.3872626285117468e-05, 7.4560504069249412e-05, 3.4903707452290679e-05,-5.9518532141446788e-08, +-1.0201592013466881e-03,-5.6440854244036261e-05, 3.0521426805244493e-04, 8.6107448483108162e-05,-7.0655814071613878e-05,-4.9216378965673828e-05,-5.2321555302095677e-07, 1.1861099361767919e-05, + 9.6371834710265187e-04,-8.0136034169896452e-05,-2.7612614066019456e-04, 4.3239154984460064e-06, 8.1583358416509818e-05, 1.6814709540565183e-05,-1.5805290467107315e-05,-9.0689068409792200e-06, +-1.0438543812725483e-03, 2.1729138943065069e-04, 2.4666607629130356e-04,-7.6044628114809492e-05,-7.0320112894664270e-05, 1.1647567666698924e-05, 1.8682668109917821e-05, 1.7296624004278589e-06, + 7.9871912710823098e-02, 6.7113404747511915e-02, 4.7708939189651238e-02, 2.9007223286129129e-02, 1.5272747016663400e-02, 7.0495997797440594e-03, 2.8852713653559430e-03, 1.0578221839569551e-03, +-1.2758507963311183e-02,-8.6834743841367260e-03,-3.4592433189689978e-03, 1.6674894752905997e-04, 1.5357965436962467e-03, 1.4663423362061816e-03, 9.3798663204121453e-04, 4.7559974503227215e-04, + 4.0750335791744571e-03, 2.1244761837203334e-03, 8.5902933831742950e-05,-7.7168377354648945e-04,-6.4705126912434135e-04,-2.5662392613995258e-04,-5.1210756979072191e-06, 7.0542074885705103e-05, +-1.9505573954541238e-03,-7.0886303477435257e-04, 3.0087727552849679e-04, 4.3875573426047001e-04, 1.6151185524815011e-04,-4.0283601115424696e-05,-7.5336542197460471e-05,-4.0622731228845485e-05, + 1.2416943606797712e-03, 2.5926208664197583e-04,-3.2116904888195583e-04,-2.1751584174931418e-04, 1.1110914914600590e-05, 7.2605421393241766e-05, 3.4870332559424582e-05, 4.0768931356655833e-07, +-9.8243227403779537e-04,-5.9476665670022641e-05, 2.9436437848915763e-04, 8.6221057893962045e-05,-6.7448277140272572e-05,-4.8534824126919004e-05,-1.1406130552386941e-06, 1.1499781322973818e-05, + 9.2295560836777276e-04,-7.1757840016470727e-05,-2.6642241002078945e-04, 1.3932316640925910e-06, 7.8804956133745135e-05, 1.7254363760301274e-05,-1.5067885060199564e-05,-8.9956565138932617e-06, +-9.9471344838424351e-04, 2.0179476945853534e-04, 2.3855521301265672e-04,-7.0542861025147980e-05,-6.8599984416203283e-05, 1.0347224449474022e-05, 1.8187622519011472e-05, 1.9304591414243155e-06, + 7.9364811744822683e-02, 6.6767757819491166e-02, 4.7570641354588800e-02, 2.9013280553944500e-02, 1.5333662961317111e-02, 7.1080477520629060e-03, 2.9227859339056909e-03, 1.0769021741622699e-03, +-1.2597053925331517e-02,-8.5990596681577436e-03,-3.4555698944256363e-03, 1.3623029020333119e-04, 1.5100438138042800e-03, 1.4560459215752480e-03, 9.3772189159533432e-04, 4.7838893541038039e-04, + 3.9979942571737731e-03, 2.0963284300968138e-03, 9.7684201284537441e-05,-7.5430663706901521e-04,-6.4058261728321727e-04,-2.5817770170312015e-04,-8.1066548780919876e-06, 6.8917613494475210e-05, +-1.9016658270769593e-03,-6.9854087684919773e-04, 2.8826318851277904e-04, 4.3012408488626429e-04, 1.6190316652858825e-04,-3.7418026995483323e-05,-7.3942800180169132e-05,-4.0597319574919551e-05, + 1.2031249502277616e-03, 2.5682772683206404e-04,-3.0960508832069956e-04,-2.1406662322159429e-04, 8.4753006455940349e-06, 7.0677938955658465e-05, 3.4812846411143225e-05, 8.6050514179251237e-07, +-9.4629722339569758e-04,-6.2189468969943266e-05, 2.8389620512056860e-04, 8.6221757167348229e-05,-6.4350500435381223e-05,-4.7836704256128506e-05,-1.7289102783356536e-06, 1.1141550138808554e-05, + 8.8410775442575437e-04,-6.3978802081576846e-05,-2.5703893840813696e-04,-1.3236695073223987e-06, 7.6095334589686817e-05, 1.7643434815499412e-05,-1.4350272380519049e-05,-8.9146581088795747e-06, +-9.4808655650733121e-04, 1.8732209461807034e-04, 2.3065321587111278e-04,-6.5352827187772401e-05,-6.6881723917663769e-05, 9.1179323358932941e-06, 1.7693195621352851e-05, 2.1171557318169449e-06, + 7.8864107826310495e-02, 6.6425465071747777e-02, 4.7432499748196397e-02, 2.9018130885473011e-02, 1.5393553975592120e-02, 7.1660826551371926e-03, 2.9602875392342148e-03, 1.0960924327326500e-03, +-1.2438642754562718e-02,-8.5157626308466905e-03,-3.4514351882134753e-03, 1.0639984980665568e-04, 1.4845501152498785e-03, 1.4456896278960693e-03, 9.3733884230053207e-04, 4.8111317245405801e-04, + 3.9228801237160271e-03, 2.0685915871834683e-03, 1.0897004575879205e-04,-7.3727200746964304e-04,-6.3410038872688192e-04,-2.5961838880038000e-04,-1.1036536565545759e-05, 6.7294527009728470e-05, +-1.8542885365325588e-03,-6.8831818210559801e-04, 2.7610338463280947e-04, 4.2163037637947857e-04, 1.6219150274016282e-04,-3.4628989656682214e-05,-7.2551820644775839e-05,-4.0554080989204592e-05, + 1.1659703544269608e-03, 2.5429092634995140e-04,-2.9845243164736157e-04,-2.1061949568532433e-04, 5.9614480636708482e-06, 6.8778679641423948e-05, 3.4732397193658503e-05, 1.2990584761949172e-06, +-9.1167942807700937e-04,-6.4602429305872185e-05, 2.7379710477614755e-04, 8.6117852444267005e-05,-6.1359735234135015e-05,-4.7123986597759838e-05,-2.2888981796655668e-06, 1.0786704594975890e-05, + 8.4707699877113718e-04,-5.6759310202365886e-05,-2.4796736503193624e-04,-3.8389419597094918e-06, 7.3454343766164886e-05, 1.7984707938789980e-05,-1.3652408545082727e-05,-8.8264649430105393e-06, +-9.0383630897350313e-04, 1.7380673310478742e-04, 2.2296027577516420e-04,-6.0458875187597520e-05,-6.5169035782263558e-05, 7.9568618394216599e-06, 1.7200331085980122e-05, 2.2902855074645586e-06, + 7.8369680764746236e-02, 6.6086482124791998e-02, 4.7294532430204567e-02, 2.9021801536857381e-02, 1.5452430430517781e-02, 7.2237021834623896e-03, 2.9977714935136559e-03, 1.1153903628232770e-03, +-1.2283198639954238e-02,-8.4335669164068844e-03,-3.4468586581733393e-03, 7.7244036383306708e-05, 1.4593159100090500e-03, 1.4352779177804146e-03, 9.3683970960459651e-04, 4.8377252526934271e-04, + 3.8496317235473532e-03, 2.0412615976399132e-03, 1.1977831344056958e-04,-7.2057436988099506e-04,-6.2760860618290561e-04,-2.6094902617379394e-04,-1.3910849330143766e-05, 6.5673517135611818e-05, +-1.8083701259074400e-03,-6.7819881416374930e-04, 2.6438170368679867e-04, 4.1327444353672166e-04, 1.6238164947257789e-04,-3.1915348998514314e-05,-7.1164499677047079e-05,-4.0493583187636122e-05, + 1.1301713117436907e-03, 2.5166324131913509e-04,-2.8769656323026537e-04,-2.0717848511519202e-04, 3.5651315445682041e-06, 6.6908189844024036e-05, 3.4630101499774865e-05, 1.7234903549013608e-06, +-8.7850807042455558e-04,-6.6737179558081790e-05, 2.6405476868880424e-04, 8.5917176041974412e-05,-5.8473241682417962e-05,-4.6398529232979474e-05,-2.8213652268168875e-06, 1.0435521769257148e-05, + 8.1177089086647376e-04,-5.0062331457567227e-05,-2.3919933488685230e-04,-6.1641275652971425e-06, 7.0881692571640216e-05, 1.8280856526343918e-05,-1.2974213466496715e-05,-8.7316091396509852e-06, +-8.6183322232404101e-04, 1.6118640515515697e-04, 2.1547592576464712e-04,-5.5846048773845145e-05,-6.3465273419358988e-05, 6.8612509335852452e-06, 1.6709896172689530e-05, 2.4503746666884545e-06, + 7.7881413355052123e-02, 6.5750765250080001e-02, 4.7156756696136233e-02, 2.9024319225051769e-02, 1.5510302712434899e-02, 7.2809042076196614e-03, 3.0352331978217750e-03, 1.1347933709088980e-03, +-1.2130648104972122e-02,-8.3524563343051472e-03,-3.4418590610731728e-03, 4.8749480397985989e-05, 1.4343415029323646e-03, 1.4248151332080785e-03, 9.3622671310747549e-04, 4.8636709057780060e-04, + 3.7781917706669749e-03, 2.0143342585989925e-03, 1.3012621558990568e-04,-7.0420821918228019e-04,-6.2111110430654933e-04,-2.6217260654383531e-04,-1.6729756700315846e-05, 6.4055262983361903e-05, +-1.7638575120679824e-03,-6.6818619131673034e-04, 2.5308255634032327e-04, 4.0505596625992589e-04, 1.6247822547896072e-04,-2.9275944522950297e-05,-6.9781689328874812e-05,-4.0416388028578372e-05, + 1.0956713207512520e-03, 2.4895539152095176e-04,-2.7732345311105990e-04,-2.0374731326895266e-04, 1.2822347904783927e-06, 6.5066943743091640e-05, 3.4507044456740169e-05, 2.1339524790354368e-06, +-8.4671592923030029e-04,-6.8613920011240993e-05, 2.5465722175806903e-04, 8.5627110387343213e-05,-5.5688294163850877e-05,-4.5662085498288643e-05,-3.3270960096787878e-06, 1.0088257873409786e-05, + 7.7810200921905924e-04,-4.3853241893479722e-05,-2.3072652353015952e-04,-8.3101834417998431e-06, 6.8376962392509717e-05, 1.8534444873077086e-05,-1.2315573826926087e-05,-8.6306019307323989e-06, +-8.2195525111253894e-04, 1.4940289594639312e-04, 2.0819911670768773e-04,-5.1500062418262966e-05,-6.1773463437155709e-05, 5.8284068542858292e-06, 1.6222685805644219e-05, 2.5979414576765490e-06, + 7.7399191285943136e-02, 6.5418271363291744e-02, 4.7019189104847862e-02, 2.9025710136629291e-02, 1.5567181216859460e-02, 7.3376867694876233e-03, 3.0726681418805370e-03, 1.1542988678704389e-03, +-1.1980919922651392e-02,-8.2724148647454615e-03,-3.4364544775535924e-03, 2.0903032225197404e-05, 1.4096270491355707e-03, 1.4143054973833327e-03, 9.3550206519783319e-04, 4.8889699181760304e-04, + 3.7085050579059309e-03, 1.9878052388259361e-03, 1.4003035099052590e-04,-6.8816806595641087e-04,-6.1461153626696480e-04,-2.6329207585016430e-04,-1.9493455426816469e-05, 6.2440421313925240e-05, +-1.7206998190799948e-03,-6.5828331886360865e-04, 2.4219090496600213e-04, 3.9697448137122784e-04, 1.6248568703624650e-04,-2.6709598140355908e-05,-6.8404198873453463e-05,-4.0323051102782901e-05, + 1.0624165002163862e-03, 2.4617731581427852e-04,-2.6731954368870887e-04,-2.0032941522222895e-04,-8.9124983812074771e-07, 6.3255347407675154e-05, 3.4364279907175331e-05, 2.5306063947116026e-06, +-8.1623918440210759e-04,-7.0251511534622402e-05, 2.4559282088108293e-04, 8.5254610876713303e-05,-5.3002186145272582e-05,-4.4916308293816225e-05,-3.8068699680190077e-06, 9.7451490822500281e-06, + 7.4598767286748518e-04,-3.8099669345358181e-05,-2.2254065896890391e-04,-1.0287508296404958e-05, 6.5939619705025028e-05, 1.8747930972500139e-05,-1.1676345892530775e-05,-8.5239339894360011e-06, +-7.8408734221284339e-04, 1.3840178765525061e-04, 2.0112828625291765e-04,-4.7407277144539552e-05,-6.0096328407593819e-05, 4.8557074974944516e-06, 1.5739426500911454e-05, 2.7334954576898542e-06, + 7.6922903051584113e-02, 6.5088958017403012e-02, 4.6881845505090419e-02, 2.9025999936564240e-02, 1.5623076342636610e-02, 7.3940480775289124e-03, 3.1100719037415289e-03, 1.1739042700458491e-03, +-1.1833945034181101e-02,-8.1934266634813638e-03,-3.4306623361906735e-03,-6.3082385902829552e-06, 1.3851725611302261e-03, 1.4037531166194699e-03, 9.3466796975804180e-04, 4.9136237825463569e-04, + 3.6405183706997371e-03, 1.9616700946272145e-03, 1.4950672764395788e-04,-6.7244844198844776e-04,-6.0811338015953522e-04,-2.6431033260134427e-04,-2.2202173796559421e-05, 6.0829626796320342e-05, +-1.6788482760725226e-03,-6.4849281929799693e-04, 2.3169224501385928e-04, 3.8902939374469531e-04, 1.6240833227503388e-04,-2.4215116814749562e-05,-6.7032796052196212e-05,-4.0214121355396521e-05, + 1.0303554567745257e-03, 2.4333822394972894e-04,-2.5767173648624092e-04,-1.9692795601016486e-04,-2.9592221744746152e-06, 6.1473742729476120e-05, 3.4202830638636753e-05, 2.9136227079161193e-06, +-7.8701723282479676e-04,-7.1667562682380998e-05, 2.3685025246003360e-04, 8.4806227702076122e-05,-5.0412234535889697e-05,-4.4162754278617269e-05,-4.2614602284621707e-06, 9.4064123488671734e-06, + 7.1534967014241573e-04,-3.2771346619195520e-05,-2.1463354091174033e-04,-1.2105967811141551e-05, 6.3569027804247268e-05, 1.8923669364960769e-05,-1.1056358173817324e-05,-8.4120757899389746e-06, +-7.4812101676161123e-04, 1.2813220939217389e-04, 1.9426142157737719e-04,-4.3554676691462999e-05,-5.8436308295331973e-05, 3.9406024512512695e-06, 1.5260780147678233e-05, 2.8575369385446550e-06, + 7.6452439866435531e-02, 6.4762783395577464e-02, 4.6744741061124757e-02, 2.9025213776980540e-02, 1.5677998486374928e-02, 7.4499865021526506e-03, 3.1474401494209262e-03, 1.1936070002456090e-03, +-1.1689656470858067e-02,-8.1154760660157865e-03,-3.4244994367054471e-03,-3.2897044284257299e-05, 1.3609779157012294e-03, 1.3931619822473680e-03, 9.3372662093562557e-04, 4.9376342410423560e-04, + 3.5741804048422809e-03, 1.9359242845927993e-03, 1.5857078372857793e-04,-6.5704390533166028e-04,-6.0161994524569483e-04,-2.6523022732737717e-04,-2.4856169996098111e-05, 5.9223492280501585e-05, +-1.6382561202494816e-03,-6.3881696049298696e-04, 2.2157258690954566e-04, 3.8121998678922523e-04, 1.6225030547196962e-04,-2.1791295054901256e-05,-6.5668208311652062e-05,-4.0090140738713981e-05, + 9.9943915975649468e-04, 2.4044664501619015e-04,-2.4836737903320536e-04,-1.9354584641543732e-04,-4.9254752628146695e-06, 5.9722411190349953e-05, 3.4023688657774722e-05, 3.2831803316551826e-06, +-7.5899251474030453e-04,-7.2878511119495539e-05, 2.2841852919041903e-04, 8.4288126679598076e-05,-4.7915783593851946e-05,-4.3402887951024953e-05,-4.6916325451834918e-06, 9.0722462050816336e-06, + 6.8611400362080899e-04,-2.7839974333659939e-05,-2.0699705763045840e-04,-1.3774919080191029e-05, 6.1264457700881673e-05, 1.9063914020083074e-05,-1.0455413937168685e-05,-8.2954779911690262e-06, +-7.1395397795446895e-04, 1.1854660378695733e-04, 1.8759611644887981e-04,-3.9929844075215901e-05,-5.6795580614253752e-05, 3.0806136964074918e-06, 1.4787347643500629e-05, 2.9705563131536859e-06, + 7.5987695583156156e-02, 6.4439706303902236e-02, 4.6607890277425658e-02, 2.9023376305858391e-02, 1.5731958037150780e-02, 7.5055005711536626e-03, 3.1847686324865958e-03, 1.2134044887333350e-03, +-1.1547989279253920e-02,-8.0385475912330834e-03,-3.4179819723497290e-03,-5.8875880018377513e-05, 1.3370428605383178e-03, 1.3825359725439263e-03, 9.3268020197919852e-04, 4.9610032766409960e-04, + 3.5094416880208368e-03, 1.9105631832486243e-03, 1.6723740784546897e-04,-6.4194904496675314e-04,-5.9513437802208194e-04,-2.6605456212876449e-04,-2.7455730524409642e-05, 5.7622609083542945e-05, +-1.5988785047722125e-03,-6.2925768201136604e-04, 2.1181843847392894e-04, 3.7354543231647876e-04, 1.6201560129865583e-04,-1.9436917258223486e-05,-6.4311124028497015e-05,-3.9951643894461815e-05, + 9.6962082276084646e-04, 2.3751047273658124e-04,-2.3939425188858815e-04,-1.9018575794270588e-04,-6.7936965236783345e-06, 5.8001577469341404e-05, 3.3827815504606735e-05, 3.6394657649347758e-06, +-7.3211035002426522e-04,-7.3899699742024515e-05, 2.2028698621759713e-04, 8.3706109119780487e-05,-4.5510208412334607e-05,-4.2638085613955155e-05,-5.0981443376381289e-06, 8.7428315458489294e-06, + 6.5821065028224071e-04,-2.3279092787665808e-05,-1.9962320064253864e-04,-1.5303234119287215e-05, 5.9025098235595289e-05, 1.9170821242364085e-05,-9.8732935748840582e-06,-8.1745718405832558e-06, +-6.8148974306990657e-04, 1.0960050912005360e-04, 1.8112962305589998e-04,-3.6520938592889184e-05,-5.5176079376187333e-05, 2.2733360056970141e-06, 1.4319672387968806e-05, 3.0730336558668839e-06, + 7.5528566613437542e-02, 6.4119686163988762e-02, 4.6471307022506098e-02, 2.9020511675691141e-02, 1.5784965371473149e-02, 7.5605889652291614e-03, 3.2220531935999168e-03, 1.2332941741719219e-03, +-1.1408880449448780e-02,-7.9626259445055164e-03,-3.4111255514959055e-03,-8.4257025203871017e-05, 1.3133670206280021e-03, 1.3718788546767694e-03, 9.3153088413688552e-04, 4.9837331045890455e-04, + 3.4462545049432636e-03, 1.8855820936919867e-03, 1.7552095857137611e-04,-6.2715848507837282e-04,-5.8865966812040617e-04,-2.6678609031664932e-04,-3.0001168654350888e-05, 5.6027547287928136e-05, +-1.5606724112512769e-03,-6.1981661966331483e-04, 2.0241678785839492e-04, 3.6600479982587335e-04, 1.6170806902076869e-04,-1.7150759913181219e-05,-6.2962193721372099e-05,-3.9799157864229856e-05, + 9.4085579158796205e-04, 2.3453700781848582e-04,-2.3074055582819684e-04,-1.8685013701755059e-04,-8.5674690499256778e-06, 5.6311412892782210e-05, 3.3616142603780074e-05, 3.9826724026292189e-06, +-7.0631878376947624e-04,-7.4745447841296386e-05, 2.1244527674506083e-04, 8.3065630776937280e-05,-4.3192918017440016e-05,-4.1869639222504750e-05,-5.4817438210802403e-06, 8.4183323975068510e-06, + 6.3157333592817988e-04,-1.9063962251821806e-05,-1.9250407741541701e-04,-1.6699322467591228e-05, 5.6850065461353941e-05, 1.9246452584897339e-05,-9.3097568368028796e-06,-8.0497695965031010e-06, +-6.5063729818000166e-04, 1.0125235595093707e-04, 1.7485889903413356e-04,-3.3316673303956667e-05,-5.3579512899784855e-05, 1.5164370774619719e-06, 1.3858243631715366e-05, 3.1654382943551444e-06, + 7.5074951851650015e-02, 6.3802683005459673e-02, 4.6335004551893377e-02, 2.9016643552086240e-02, 1.5837030848499439e-02, 7.6152505135734698e-03, 3.2592897600147268e-03, 1.2532735045357140e-03, +-1.1272268846190342e-02,-7.8876960203140833e-03,-3.4039452184577573e-03,-1.0905254498939920e-04, 1.2899499044130396e-03, 1.3611942866615804e-03, 9.3028082561533599e-04, 5.0058261639707386e-04, + 3.3845728258762586e-03, 1.8609762592787984e-03, 1.8343528333848421e-04,-6.1266688897075995e-04,-5.8219865404078336e-04,-2.6742751613819749e-04,-3.2492822942336089e-05, 5.4438856050897239e-05, +-1.5235965665974602e-03,-6.1049512842772284e-04, 1.9335508699057922e-04, 3.5859706523537699e-04, 1.6133141664366924e-04,-1.4931593667069209e-05,-6.1622031247887308e-05,-3.9633201826934537e-05, + 9.1310143816973740e-04, 2.3153299755562220e-04,-2.2239489922044217e-04,-1.8354121844303206e-04,-1.0250273020762362e-05, 5.4652038733525784e-05, 3.3389571648582923e-05, 4.3129998758309576e-06, +-6.8156844061411520e-04,-7.5429117646004550e-05, 2.0488336717687183e-04, 8.2371819908121216e-05,-4.0961358101959777e-05,-4.1098760116463443e-05,-5.8431692230466623e-06, 8.0988966685819725e-06, + 6.0613932296811070e-04,-1.5171451107452629e-05,-1.8563192229040091e-04,-1.7971152890581727e-05, 5.4738411329756182e-05, 1.9292777766638092e-05,-8.7645449322384826e-06,-7.9214649648789337e-06, +-6.2131077407556333e-04, 9.3463277236555608e-05, 1.6878065011307082e-04,-3.0306293045443703e-05,-5.2007380521882455e-05, 8.0765742021190819e-07, 1.3403499689598178e-05, 3.2482284648707986e-06, + 7.4626752601185675e-02, 6.3488657458338885e-02, 4.6198995530287668e-02, 2.9011795122303299e-02, 1.5888164805493162e-02, 7.6694841895512799e-03, 3.2964743450358382e-03, 1.2733399379892040e-03, +-1.1138095142846791e-02,-7.8137429044185525e-03,-3.3964554735701341e-03,-1.3327429189820966e-04, 1.2667909097256805e-03, 1.3504858193287960e-03, 9.2893217059740116e-04, 5.0272851094012162e-04, + 3.3243522384282381e-03, 1.8367408744228665e-03, 1.9099373666378724e-04,-5.9846896264574470e-04,-5.7575402871999810e-04,-2.6798149458217690e-04,-3.4931055785583599e-05, 5.2857063923778067e-05, +-1.4876113640053716e-03,-6.0129430383759576e-04, 1.8462123551791262e-04, 3.5132111909022605e-04, 1.6088921499845778e-04,-1.2778185264504223e-05,-6.0291214985694499e-05,-3.9454286862080943e-05, + 8.8631706016777589e-04, 2.2850467284774695e-04,-2.1434628559881529e-04,-1.8026103815485907e-04,-1.1845487216415208e-05, 5.3023529362515306e-05, 3.3148975014802811e-05, 4.6306534218783129e-06, +-6.5781238732002894e-04,-7.5963176524365184e-05, 1.9759153184499865e-04, 8.1629494488843834e-05,-3.8813013428791427e-05,-4.0326582634629778e-05,-6.1831480818612686e-06, 7.7846568829292649e-06, + 5.8184921079566375e-04,-1.1579931352312037e-05,-1.7899910576143842e-04,-1.9126274228868095e-05, 5.2689131737927692e-05, 1.9311677576891166e-05,-8.2373825048521035e-06,-7.7900335488975891e-06, +-5.9342914214797582e-04, 8.6196931109907681e-05, 1.6289136868319275e-04,-2.7479552961503977e-05,-5.0460988296929525e-05, 1.4481002861118364e-07, 1.2955831014010864e-05, 3.3218510285158153e-06, + 7.4183872503390438e-02, 6.3177570745364731e-02, 4.6063292052931373e-02, 2.9005989103724230e-02, 1.5938377553514509e-02, 7.7232891064496637e-03, 3.3336030474393811e-03, 1.2934909437327560e-03, +-1.1006301758025708e-02,-7.7407518756136690e-03,-3.3886702925509382e-03,-1.5693390760249462e-04, 1.2438893295016289e-03, 1.3397568982965935e-03, 9.2748704831656327e-04, 5.0481128028495494e-04, + 3.2655498824120388e-03, 1.8128710945711415e-03, 1.9820919774397351e-04,-5.8455945806126233e-04,-5.6932834493796341e-04,-2.6845063125954588e-04,-3.7316252026236706e-05, 5.1282679180278683e-05, +-1.4526787878408973e-03,-5.9221500193781308e-04, 1.7620356524772573e-04, 3.4417577427270048e-04, 1.6038490176654356e-04,-1.0689299362930257e-05,-5.8970288996480568e-05,-3.9262915737611572e-05, + 8.6046378590308426e-04, 2.2545778282266447e-04,-2.0658410145923069e-04,-1.7701144529993601e-04,-1.3356390624749031e-05, 5.1425915258733376e-05, 3.2895196201029601e-05, 4.9358432833002442e-06, +-6.3500600308041984e-04,-7.6359255161123505e-05, 1.9056034740833489e-04, 8.0843178603266276e-05,-3.6745409920370652e-05,-3.9554167614875878e-05,-6.5023966213756008e-06, 7.4757308947084515e-06, + 5.5864674791929636e-04,-8.2691809267931718e-06,-1.7259814231082452e-04,-2.0171835382763135e-05, 5.0701173958002396e-05, 1.9304946766684345e-05,-7.7279794883394871e-06,-7.6558333087247042e-06, +-5.6691592884608954e-04, 7.9419335359342272e-05, 1.5718736871044936e-04,-2.4826697631588859e-05,-4.8941463702183596e-05,-4.7422014305024892e-07, 1.2515583137495883e-05, 3.3867412425388599e-06, + 7.3746217468979067e-02, 6.2869384674239470e-02, 4.5927905666218197e-02, 2.8999247752249581e-02, 1.5987679373335138e-02, 7.7766645133091157e-03, 3.3706720508572341e-03, 1.3137240028158899e-03, +-1.0876832794739597e-02,-7.6687084071009881e-03,-3.3806031451726615e-03,-1.8004282482170231e-04, 1.2212443572808505e-03, 1.3290108659471658e-03, 9.2594757218629909e-04, 5.0683123055946791e-04, + 3.2081243876386084e-03, 1.7893620454060150e-03, 2.0509408743924450e-04,-5.7093317609180946e-04,-5.6292402056429269e-04,-2.6883748235425253e-04,-3.9648817601739875e-05, 4.9716190152808643e-05, +-1.4187623422325935e-03,-5.8325785790031589e-04, 1.6809082506807584e-04, 3.3715977324331840e-04, 1.5982178543779265e-04,-8.6637002304658503e-06,-5.7659764171787397e-05,-3.9059582721274411e-05, + 8.3550448433227756e-04, 2.2239762720150199e-04,-1.9909810428221116e-04,-1.7379411367826153e-04,-1.4786164124354410e-05, 4.9859185881214831e-05, 3.2629050292424632e-05, 5.2287841350792132e-06, +-6.1310685713077562e-04,-7.6628201945550233e-05, 1.8378068695585503e-04, 8.0017118057682801e-05,-3.4756116465309135e-05,-3.8782505778235221e-05,-6.8016191975905178e-06, 7.1722225846502878e-06, + 5.3647865518522536e-04,-5.2202924608049574e-06,-1.6642169689946545e-04,-2.1114604485350164e-05, 4.8773443503037479e-05, 1.9274296913499875e-05,-7.2360328467832765e-06,-7.5192050291439629e-06, +-5.4169894764603029e-04, 7.3098712922903123e-05, 1.5166481722393336e-04,-2.2338440755542180e-05,-4.7449769433470957e-05,-1.0514768740009916e-06, 1.2083059483474933e-05, 3.4433225828253333e-06, + 7.3313695611834873e-02, 6.2564061629831552e-02, 4.5792847387568801e-02, 2.8991592870616881e-02, 1.6036080511569080e-02, 7.8296097908336429e-03, 3.4076776231277079e-03, 1.3340366089186571e-03, +-1.0749633982003320e-02,-7.5975981675073939e-03,-3.3722670132660462e-03,-2.0261226933363657e-04, 1.1988550925015572e-03, 1.3182509634037803e-03, 9.2431583898248092e-04, 5.0878868703174056e-04, + 3.1520358144959265e-03, 1.7662088313289232e-03, 2.1166038466290636e-04,-5.5758496920806468e-04,-5.5654334364773988e-04,-2.6914455463990109e-04,-4.1929178240568150e-05, 4.8158065575870006e-05, +-1.3858269831670033e-03,-5.7442330338834343e-04, 1.6027216634382417e-04, 3.3027179483631605e-04, 1.5920304919976613e-04,-6.7001533311996254e-06,-5.6360119360071586e-05,-3.8844773414272224e-05, + 8.1140367977865983e-04, 2.1932908656189176e-04,-1.9187841079737193e-04,-1.7061055257481077e-04,-1.6137892234292117e-05, 4.8323292407417911e-05, 3.2351324445679025e-05, 5.5096945392022034e-06, +-5.9207459321676808e-04,-7.6780133833919756e-05, 1.7724371387724217e-04, 7.9155295242055884e-05,-3.2842746461502726e-05,-3.8012520998089405e-05,-7.0815078134541885e-06, 6.8742225378994534e-06, + 5.1529445938284829e-04,-2.4155879868414904e-06,-1.6046259026557654e-04,-2.1960987272667935e-05, 4.6904810459033445e-05, 1.9221359253704064e-05,-6.7612282037181396e-06,-7.3804727941912288e-06, +-5.1771004736968977e-04, 6.7205347604073229e-05, 1.4631976270723917e-04,-2.0005945435988608e-05,-4.5986716328161382e-05,-1.5889335198078478e-06, 1.1658524047017046e-05, 3.4920066154351578e-06, + 7.2886217185099300e-02, 6.2261564566344019e-02, 4.5658127724598978e-02, 2.8983045816636278e-02, 1.6083591177010949e-02, 7.8821244473799377e-03, 3.4446161156145350e-03, 1.3544262691016619e-03, +-1.0624652618755281e-02,-7.5274070215782668e-03,-3.3636744080796019e-03,-2.2465326208760683e-04, 1.1767205455940274e-03, 1.3074803325056946e-03, 9.2259392807710018e-04, 5.1068399333309184e-04, + 3.0972455971770146e-03, 1.7434065432734387e-03, 2.1791964219573107e-04,-5.4450974389277820e-04,-5.5018847735202234e-04,-2.6937430555726391e-04,-4.4157778202807063e-05, 4.6608754935706137e-05, +-1.3538390539035760e-03,-5.6571158275061316e-04, 1.5273712877797750e-04, 3.2351046063265018e-04, 1.5853175475675211e-04,-4.7974268042773739e-06,-5.5071802473626830e-05,-3.8618964606305214e-05, + 7.8812747115296279e-04, 2.1625665063473951e-04,-1.8491548549863268e-04,-1.6746211700965864e-04,-1.7414564922395016e-05, 4.6818150344459143e-05, 3.2062778391334467e-05, 5.7787964262418821e-06, +-5.7187082051822328e-04,-7.6824483916173702e-05, 1.7094087554673333e-04, 7.8261443268876047e-05,-3.1002959112753735e-05,-3.7245073459365354e-05,-7.3427416951461557e-06, 6.5818087020814768e-06, + 4.9504633660204958e-04, 1.6146077458816302e-07,-1.5471380315187718e-04,-2.2717044670421041e-05, 4.5094115310384558e-05, 1.9147687483488481e-05,-6.3032413695939815e-06,-7.2399444644950317e-06, +-4.9488487582746146e-04, 6.1711449324843574e-05, 1.4114816065945981e-04,-1.7820805074449437e-05,-4.4552975450855861e-05,-2.0884939985467615e-06, 1.1242203958014420e-05, 3.5331929082076167e-06, + 7.2463694519458610e-02, 6.1961856999460399e-02, 4.5523756693606247e-02, 2.8973627511339920e-02, 1.6130221537174451e-02, 7.9342081150254283e-03, 3.4814839624962260e-03, 1.3748905045252919e-03, +-1.0501837519998211e-02,-7.4581210305700307e-03,-3.3548373870181322e-03,-2.4617662140898749e-04, 1.1548396428796397e-03, 1.2967020177790806e-03, 9.2078390072143678e-04, 5.1251751069523229e-04, + 3.0437164894281804e-03, 1.7209502658918725e-03, 2.2388300194472717e-04,-5.3170246281041792e-04,-5.4386146473970047e-04,-2.6952914334936982e-04,-4.6335079064428394e-05, 4.5068688825313083e-05, +-1.3227662235363079e-03,-5.5712276811932765e-04, 1.4547562672577116e-04, 3.1687434093547216e-04, 1.5781084607430928e-04,-2.9542928401822240e-06,-5.3795231575496784e-05,-3.8382624150717180e-05, + 7.6564345541698027e-04, 2.1318444475773915e-04,-1.7820012941221895e-04,-1.6435001743910779e-04,-1.8619079458645114e-05, 4.5343642014597290e-05, 3.1764144952718817e-05, 6.0363146025666485e-06, +-5.5245901065924111e-04,-7.6770045893558361e-05, 1.6486389685184996e-04, 7.7339059428931041e-05,-2.9234460506182075e-05,-3.6480962703407535e-05,-7.5859869292149501e-06, 6.2950470269676708e-06, + 4.7568896476568275e-04, 2.5263069083779799e-06,-1.4916847955191468e-04,-2.3388509638813681e-05, 4.3340174306036119e-05, 1.9054760511934804e-05,-5.8617397655290130e-06,-7.0979121590382986e-06, +-4.7316265785730477e-04, 5.6591028312239815e-05, 1.3614589653197765e-04,-1.5775024851414828e-05,-4.3149089416656198e-05,-2.5519938812978486e-06, 1.0834291916170608e-05, 3.5672689861483511e-06, + 7.2046041963543750e-02, 6.1664902998481673e-02, 4.5389743837398938e-02, 2.8963358447041499e-02, 1.6175981715022800e-02, 7.9858605457150903e-03, 3.5182776800276980e-03, 1.3954268511387089e-03, +-1.0381138965062077e-02,-7.3897264523678022e-03,-3.3457675697813744e-03,-2.6719296528606926e-04, 1.1332112312818048e-03, 1.2859189684012902e-03, 9.1888779937703306e-04, 5.1428961720171532e-04, + 2.9914125126942748e-03, 1.6988350841595275e-03, 2.2956120966261158e-04,-5.1915814674491703e-04,-5.3756423340822984e-04,-2.6961142724936100e-04,-4.8461558544744604e-05, 4.3538279304072467e-05, +-1.2925774285347472e-03,-5.4865677348636178e-04, 1.3847793595424929e-04, 3.1036196036704781e-04, 1.5704315304973282e-04,-1.1695289606041340e-06,-5.2530795945075298e-05,-3.8136210858917514e-05, + 7.4392065504838545e-04, 2.1011625461094560e-04,-1.7172346912856535e-04,-1.6127532892966508e-04,-1.9754242309158308e-05, 4.3899618922259798e-05, 3.1456130577687035e-05, 6.2824762829561881e-06, +-5.3380440043743985e-04,-7.6625015680527385e-05, 1.5900477361514454e-04, 7.6391417983618048e-05,-2.7535004480548500e-05,-3.5720930565866101e-05,-7.8118961535137929e-06, 6.0139920843400329e-06, + 4.5717938475691247e-04, 4.6933979448104631e-06,-1.4381992909718466e-04,-2.3980803280298111e-05, 4.1641784381119799e-05, 1.8943985172791078e-05,-5.4363837545490073e-06,-6.9546527368127071e-06, +-4.5248598681210201e-04, 5.1819777576037236e-05, 1.3130880630692998e-04,-1.3861003829284005e-05,-4.1775482965257250e-05,-2.9812015929451746e-06, 1.0434948514476510e-05, 3.5946103206370726e-06, + 7.1633175826357490e-02, 6.1370667178462388e-02, 4.5256098242491112e-02, 2.8952258695302581e-02, 1.6220881785883930e-02, 8.0370816074866180e-03, 3.5549938657760760e-03, 1.4160328603391959e-03, +-1.0262508647895102e-02,-7.3222097413491519e-03,-3.3364761539246071e-03,-2.8771271372985893e-04, 1.1118340828542260e-03, 1.2751340401566634e-03, 9.1690764709269953e-04, 5.1600070705384838e-04, + 2.9402989065459503e-03, 1.6770560894343797e-03, 2.3496462914703075e-04,-5.0687187632112926e-04,-5.3129859998046140e-04,-2.6962346771781552e-04,-5.0537709376013464e-05, 4.2017920261234283e-05, +-1.2632428171115706e-03,-5.4031336782104245e-04, 1.3173468083404360e-04, 3.0397180310959309e-04, 1.5623139510561755e-04, 5.5808079432571487e-07,-5.1278857122313723e-05,-3.7880174412981646e-05, + 7.2292944929052815e-04, 2.0705554933988135e-04,-1.6547694609670476e-04,-1.5823899983465010e-04,-2.0822771060061894e-05, 4.2485904005147504e-05, 3.1139415881935472e-05, 6.5175106475480693e-06, +-5.1587389995064680e-04,-7.6397030307508477e-05, 1.5335576593186726e-04, 7.5421582330312696e-05,-2.5902393308033979e-05,-3.4965664005938112e-05,-8.0211083001107379e-06, 5.7386876687931315e-06, + 4.3947686964313832e-04, 6.6762409452043961e-06,-1.3866162865668302e-04,-2.4499050249817582e-05, 3.9997727673762883e-05, 1.8816698884044086e-05,-5.0268278809720900e-06,-6.8104282787144193e-06, +-4.3280062869793394e-04, 4.7374963164719704e-05, 1.2663269488487423e-04,-1.2071517646610635e-05,-4.0432472849212871e-05,-3.3778196946821001e-06, 1.0044304446607751e-05, 3.6155803531530118e-06, + 7.1225014321651597e-02, 6.1079114692358133e-02, 4.5122828555686542e-02, 2.8940347914803610e-02, 1.6264931774543349e-02, 8.0878712807736682e-03, 3.5916291978324720e-03, 1.4367060996024240e-03, +-1.0145899629293464e-02,-7.2555575480165724e-03,-3.3269739298611226e-03,-3.0774609119888982e-04, 1.0907068991325153e-03, 1.2643499973819285e-03, 9.1484544692591084e-04, 5.1765118985121704e-04, + 2.8903420812768921e-03, 1.6556083850113364e-03, 2.4010325593515954e-04,-4.9483879352301113e-04,-5.2506627445317268e-04,-2.6956752672574295e-04,-5.2564038214365436e-05, 4.0507987782542132e-05, +-1.2347336962655556e-03,-5.3209218729559945e-04, 1.2523682195556842e-04, 2.9770231780769515e-04, 1.5537818470642167e-04, 2.2297447664651558e-06,-5.0039749929993254e-05,-3.7614955295487798e-05, + 7.0264150896995618e-04, 2.0400550317745987e-04,-1.5945230618919114e-04,-1.5524185999449632e-04,-2.1827296366076543e-05, 4.1102293774639286e-05, 3.0814656201560666e-05, 6.7416484224232400e-06, +-4.9863600579249626e-04,-7.6093204313601903e-05, 1.4790939146347730e-04, 7.4432416561370679e-05,-2.4334478201122209e-05,-3.4215797831095531e-05,-8.2142483858069443e-06, 5.4691673792672520e-06, + 4.2254280147889435e-04, 8.4874633584213632e-06,-1.3368722325209567e-04,-2.4948093477664525e-05, 3.8406775655567212e-05, 1.8674172256508920e-05,-4.6327220243240121e-06,-6.6654865677551342e-06, +-4.1405533812047301e-04, 4.3235321633146306e-05, 1.2211335250886550e-04,-1.0399701827195216e-05,-3.9120277058690936e-05,-3.7434862445187411e-06, 9.6624626062292125e-06, 3.6305305488737921e-06, + 7.0821477514177431e-02, 6.0790211223191212e-02, 4.4989943000073529e-02, 2.8927645359116471e-02, 1.6308141652507609e-02, 8.1382296547866696e-03, 3.6281804340014680e-03, 1.4574441530842480e-03, +-1.0031266290986218e-02,-7.1897567184163874e-03,-3.3172712953271621e-03,-3.2730312908061179e-04, 1.0698283153145263e-03, 1.2535695148994074e-03, 9.1270318140697490e-04, 5.1924148988691026e-04, + 2.8415095725698308e-03, 1.6344870912028738e-03, 2.4498673051223966e-04,-4.8305410302272827e-04,-5.1886886440623856e-04,-2.6944581807990904e-04,-5.4541064591219707e-05, 3.9008840519360374e-05, +-1.2070224813669570e-03,-5.2399274667143717e-04, 1.1897564415527302e-04, 2.9155192215298041e-04, 1.5448603079618766e-04, 3.8466626636807677e-06,-4.8813783473698118e-05,-3.7340984735717439e-05, + 6.8302973469551984e-04, 2.0096901565263355e-04,-1.5364158953205966e-04,-1.5228462848861332e-04,-2.2770363915040383e-05, 3.9748560348932835e-05, 3.0482482153087547e-05, 6.9551214831448196e-06, +-4.8206071904288630e-04,-7.5720163775500038e-05, 1.4265841869994509e-04, 7.3426596451993249e-05,-2.2829159663825070e-05,-3.3471917317721625e-05,-8.3919273472713320e-06, 5.2054551813222743e-06, + 4.0634055526738626e-04, 1.0138869894501338e-05,-1.2889052633894917e-04,-2.5332508245631115e-05, 3.6867692910421164e-05, 1.8517611644744048e-05,-4.2537124709651171e-06,-6.5200615664768145e-06, +-3.9620168537288491e-04, 3.9380964301994625e-05, 1.1774656934937104e-04,-8.8390356651064285e-06,-3.7839023439177189e-05,-4.0797762150790384e-06, 9.2895000788979322e-06, 3.6398004778116505e-06, + 7.0422487267737033e-02, 6.0503922976243678e-02, 4.4857449390450950e-02, 2.8914169884376811e-02, 1.6350521335431540e-02, 8.1881569239706346e-03, 3.6646444109699940e-03, 1.4782446221945870e-03, +-9.9185642914933550e-03,-7.1247942933640382e-03,-3.3073782693273934e-03,-3.4639366822266510e-04, 1.0491969042751709e-03, 1.2427951799364248e-03, 9.1048281204430745e-04, 5.2077204545756292e-04, + 2.7937699981293168e-03, 1.6136873499813242e-03, 2.4962435104817875e-04,-4.7151307333183432e-04,-5.1270787907611935e-04,-2.6926050778717950e-04,-5.6469319904192835e-05, 3.7520820059608198e-05, +-1.1800826481479926e-03,-5.1601444990609954e-04, 1.1294274494525039e-04, 2.8551900716612845e-04, 1.5355734215798214e-04, 5.4100246230200577e-06,-4.7601242119331752e-05,-3.7058684671206039e-05, + 6.6406819824189303e-04, 1.9794873048693563e-04,-1.4803712060801314e-04,-1.4936792095645993e-04,-2.3654436404691695e-05, 3.8424453383699958e-05, 3.0143500199306988e-05, 7.1581624803015706e-06, +-4.6611946775495741e-04,-7.5284078144980022e-05, 1.3759586022891145e-04, 7.2406619893201912e-05,-2.1384387696123846e-05,-3.2734560731665095e-05,-8.5547419174369300e-06, 4.9475659505442807e-06, + 3.9083538960997739e-04, 1.1641495712601859e-05,-1.2426551955098232e-04,-2.5656615621453486e-05, 3.5379240575510754e-05, 1.8348161642097752e-05,-3.8894429084231173e-06,-6.3743738908151763e-06, +-3.7919389389737550e-04, 3.5793287790069066e-05, 1.1352814846315097e-04,-7.3833267143899310e-06,-3.6588757717213554e-05,-4.3882029669145641e-06, 8.9254700327985243e-06, 3.6437179209314298e-06, + 7.0027967194965943e-02, 6.0220216671285333e-02, 4.4725355148207371e-02, 2.8899939956854390e-02, 1.6392080680703091e-02, 8.2376533845395679e-03, 3.7010180434572460e-03, 1.4991051261440240e-03, +-9.8077505236806098e-03,-7.0606575074917757e-03,-3.2973045055806061e-03,-3.6502736150660978e-04, 1.0288111804208425e-03, 1.2320294940294258e-03, 9.0818627886933654e-04, 5.2224330818826498e-04, + 2.7470930161888341e-03, 1.5932043292111687e-03, 2.5402508567992947e-04,-4.6021103778745424e-04,-5.0658473329632137e-04,-2.6901371445485934e-04,-5.8349346446689553e-05, 3.6044251299956372e-05, +-1.1538886869776653e-03,-5.0815660002827105e-04, 1.0713002333206554e-04, 2.7960194119524038e-04, 1.5259443069364208e-04, 6.9210103492462101e-06,-4.6402386447884415e-05,-3.6768467723877496e-05, + 6.4573208694939429e-04, 1.9494705325709297e-04,-1.4263149862622977e-04,-1.4649225651370252e-04,-2.4481895523954035e-05, 3.7129701903563242e-05, 2.9798293219294787e-05, 7.3510044864620692e-06, +-4.5078503369230132e-04,-7.4790690024781380e-05, 1.3271496602084543e-04, 7.1374816803058890e-05,-1.9998161869045275e-05,-3.2004221749381553e-05,-8.7032745403244828e-06, 4.6955059970284076e-06, + 3.7599434366751994e-04, 1.3005656141244556e-05,-1.1980635194892265e-04,-2.5924495290722435e-05, 3.3940179476303912e-05, 1.8166907514183984e-05,-3.5395553456055541e-06,-6.2286312792398980e-06, +-3.6298868752627540e-04, 3.2454890448646971e-05, 1.0945391723098702e-04,-6.0266958437850307e-06,-3.5369450986522778e-05,-4.6702197589216020e-06, 8.5704035094843716e-06, 3.6425989987607843e-06, + 6.9637842608781197e-02, 5.9939059534842597e-02, 4.4593667315671527e-02, 2.8884973660419519e-02, 1.6432829485178942e-02, 8.2867194310865897e-03, 3.7372983233471121e-03, 1.5200233024636840e-03, +-9.6987830739386008e-03,-6.9973337881345174e-03,-3.2870593054827799e-03,-3.8321367645804266e-04, 1.0086696033889501e-03, 1.2212748749113548e-03, 9.0581550001945198e-04, 5.2365574237235937e-04, + 2.7014492858040834e-03, 1.5730332264997978e-03, 2.5819758435414704e-04,-4.4914339538374857e-04,-5.0050075130843872e-04,-2.6870750972394911e-04,-6.0181696475248539e-05, 3.4579442818707560e-05, +-1.1284160593042856e-03,-5.0041840832900546e-04, 1.0152966901552294e-04, 2.7379907364498944e-04, 1.5159951462457872e-04, 8.3807883245232248e-06,-4.5217454187270067e-05,-3.6470737189902934e-05, + 6.2799765097528012e-04, 1.9196616790459226e-04,-1.3741758816013147e-04,-1.4365806428143463e-04,-2.5255043935403860e-05, 3.5864016039047065e-05, 2.9447421080948438e-05, 7.5338806637869519e-06, +-4.3603148307068786e-04,-7.4245343019586536e-05, 1.2800921675310760e-04, 7.0333358535433228e-05,-1.8668531279096486e-05,-3.1281351783713312e-05,-8.8380933208875868e-06, 4.4492735710656635e-06, + 3.6178614005110131e-04, 1.4240993164762330e-05,-1.1550733883968228e-04,-2.6139997800727969e-05, 3.2549272970559408e-05, 1.7974877572730770e-05,-3.2036909640985846e-06,-6.0830290560084462e-06, +-3.4754514688633897e-04, 2.9349494292483253e-05, 1.0551973742515043e-04,-4.7635628616733415e-06,-3.4181006674921409e-05,-4.9272212938029949e-06, 8.2243111213543920e-06, 3.6367483192236140e-06, + 6.9252040475430737e-02, 5.9660419292515157e-02, 4.4462392569953532e-02, 2.8869288703904698e-02, 1.6472777483065311e-02, 8.3353555532692438e-03, 3.7734823188046969e-03, 1.5409968074990130e-03, +-9.5916211829155801e-03,-6.9348107540692233e-03,-3.2766516306046503e-03,-4.0096189788729752e-04, 9.8877058159746803e-04, 1.2105336583811861e-03, 9.0337237135749981e-04, 5.2500982432616820e-04, + 2.6568104288463568e-03, 1.5531692726942631e-03, 2.6215019024458230e-04,-4.3830561145899948e-04,-4.9445717044671903e-04,-2.6834391873279176e-04,-6.1966931313630919e-05, 3.3126687248806550e-05, +-1.1036411561520937e-03,-4.9279900291575611e-04, 9.6134151957723312e-05, 2.6810873845140959e-04, 1.5057472161339051e-04, 9.7905150859389886e-06,-4.4046661121377144e-05,-3.6165887042408863e-05, + 6.1084215323633758e-04, 1.8900805217020707e-04,-1.3238851005318000e-04,-1.4086568954759074e-04,-2.5976107253909052e-05, 3.4627088672123713e-05, 2.9091421215128830e-05, 7.7070239513852537e-06, +-4.2183410106613051e-04,-7.3653007793547865e-05, 1.2347231719270839e-04, 6.9284266808279866e-05,-1.7393594393840321e-05,-3.0566362215648471e-05,-8.9597520080181296e-06, 4.2088593506676735e-06, + 3.4818109327258262e-04, 1.5356518899976623e-05,-1.1136296022515962e-04,-2.6306756236456454e-05, 3.1205289522160000e-05, 1.7773045486802073e-05,-2.8814909026908813e-06,-5.9377505886260861e-06, +-3.3282457437260602e-04, 2.6461872040777835e-05, 1.0172151404327639e-04,-3.5886327045205236e-06,-3.3023267023472830e-05,-5.1605452872880094e-06, 7.8871846565701005e-06, 3.6264591442595863e-06, + 6.8870489369083354e-02, 5.9384264161345950e-02, 4.4331537236295758e-02, 2.8852902428359872e-02, 1.6511934343937770e-02, 8.3835623325692367e-03, 3.8095671733783159e-03, 1.5620233168780371e-03, +-9.4862252077374046e-03,-6.8730762141209975e-03,-3.2660901147414517e-03,-4.1828113055439667e-04, 9.6911247564952438e-04, 1.1998081001542860e-03, 9.0085876612642883e-04, 5.2630604175864042e-04, + 2.6131489936164071e-03, 1.5336077350475621e-03, 2.6589095076041437e-04,-4.2769321824935439e-04,-4.8845514469909727e-04,-2.6792492060826833e-04,-6.3705620492875018e-05, 3.1686261650503951e-05, +-1.0795412585688450e-03,-4.8529743666848348e-04, 9.0936212308997868e-05, 2.6252925731861927e-04, 1.4952209180590177e-04, 1.1151334567110495e-05,-4.2890201976054389e-05,-3.5854301946335501e-05, + 5.9424382190036151e-04, 1.8607449201820043e-04,-1.2753763258521972e-04,-1.3811539958281919e-04,-2.6647236015898507e-05, 3.3418596994087911e-05, 2.8730809189770889e-05, 7.8706667718733009e-06, +-4.0816932988216109e-04,-7.3018306441559747e-05, 1.1909818964280839e-04, 6.8229422180068736e-05,-1.6171498801972292e-05,-2.9859626534166745e-05,-9.0687900076446888e-06, 3.9742469108229689e-06, + 3.3515102344060135e-04, 1.6360656242711647e-05,-1.0736785891139104e-04,-2.6428197362849315e-05, 2.9907005029687984e-05, 1.7562332529100418e-05,-2.5725969792199015e-06,-5.7929677381941907e-06, +-3.1879036719788972e-04, 2.3777778963228108e-05, 9.8055202990766119e-05,-2.4968821536394240e-06,-3.1896019119231894e-05,-5.3714740497258263e-06, 7.5589985951616859e-06, 3.6120135721917911e-06, + 6.8493119427901608e-02, 5.9110562842248887e-02, 4.4201107300949991e-02, 2.8835831814200939e-02, 1.6550309670894301e-02, 8.4313404391257608e-03, 3.8455501050883578e-03, 1.5831005259547119e-03, +-9.3825565856527210e-03,-6.8121181656483620e-03,-3.2553830755298746e-03,-4.3518030185419818e-04, 9.4969360159820673e-04, 1.1891003776925719e-03, 8.9827653463760756e-04, 5.2754489315587935e-04, + 2.5704384200043590e-03, 1.5143439200775389e-03, 2.6942762815801045e-04,-4.1730181531677278e-04,-4.8249574814864378e-04,-2.6745244898196473e-04,-6.5398340926331585e-05, 3.0258427883198187e-05, +-1.0560944999268200e-03,-4.7791269463741230e-04, 8.5928850682941550e-05, 2.5705894272812365e-04, 1.4844358079565327e-04, 1.2464377500036664e-05,-4.1748251282083907e-05,-3.5536357284670416e-05, + 5.7818180528940773e-04, 1.8316709511710004e-04,-1.2285856290103231e-04,-1.3540738912363255e-04,-2.7270507638689061e-05, 3.2238203980487231e-05, 2.8366079282662913e-05, 8.0250407563926543e-06, +-3.9501471017230769e-04,-7.2345535287985676e-05, 1.1488096747369280e-04, 6.7170572086796388e-05,-1.5000440871543610e-05,-2.9161482389347943e-05,-9.1657324228419917e-06, 3.7454131747145200e-06, + 3.2266917488432201e-04, 1.7261276879678320e-05,-1.0351683833680924e-04,-2.6507552238952960e-05, 2.8653204916037590e-05, 1.7343609762550673e-05,-2.2766523550877041e-06,-5.6488413016620509e-06, +-3.0540789800464368e-04, 2.1283889190556194e-05, 9.4516817745308792e-05,-1.4835470962295146e-06,-3.0799000487488530e-05,-5.5612360853086983e-06, 7.2397115446007571e-06, 3.5936827326047083e-06, + 6.8119862311540991e-02, 5.8839284512499798e-02, 4.4071108423598272e-02, 2.8818093488250280e-02, 1.6587912998836420e-02, 8.4786906286415976e-03, 3.8814284055043221e-03, 1.6042261502279441e-03, +-9.2805777990411925e-03,-6.7519247929206244e-03,-3.2445385256481829e-03,-4.5166816451592401e-04, 9.3051223407570466e-04, 1.1784125920136779e-03, 8.9562750399146268e-04, 5.2872688718052585e-04, + 2.5286530061205681e-03, 1.4953731761414386e-03, 2.7276770977037890e-04,-4.0712706986146597e-04,-4.7657997829740541e-04,-2.6692839252937797e-04,-6.7045676118712835e-05, 2.8843432976010806e-05, +-1.0332798299791295e-03,-4.7064370092099656e-04, 8.1105318769317031e-05, 2.5169610073596811e-04, 1.4734106250932166e-04, 1.3730760874895796e-05,-4.0620964215455811e-05,-3.5212419195299784e-05, + 5.6263612905813293e-04, 1.8028730344083144e-04,-1.1834513869613482e-04,-1.3274178554379128e-04,-2.7847928362838189e-05, 3.1085559784547253e-05, 2.7997705052553988e-05, 8.1703764872171798e-06, +-3.8234882561730149e-04,-7.1638686218877018e-05, 1.1081498874619264e-04, 6.6109338466683107e-05,-1.3878665331876125e-05,-2.8472233557171529e-05,-9.2510901204152367e-06, 3.5223288477313362e-06, + 3.1071013939842446e-04, 1.8065736843904967e-05,-9.9804860153733581e-05,-2.6547866336529765e-05, 2.7442686007528878e-05, 1.7117700158819525e-05,-1.9933021418085964e-06,-5.5055214468689306e-06, +-2.9264440255451950e-04, 1.8967736186414127e-05, 9.1102435089377717e-05,-5.4411029648241034e-07,-2.9731904291086816e-05,-5.7310076872929068e-06, 6.9292675898728005e-06, 3.5717269954232402e-06, + 6.7750651160022712e-02, 5.8570398818294019e-02, 4.3941545949334082e-02, 2.8799703730669309e-02, 1.6624753792872669e-02, 8.5256137393611622e-03, 3.9171994388113177e-03, 1.6253979257368899e-03, +-9.1802523417286938e-03,-6.6924844653970597e-03,-3.2335641836148885e-03,-4.6775329931317625e-04, 9.1156660929211236e-04, 1.1677467694780428e-03, 8.9291347782908311e-04, 5.2985254208592881e-04, + 2.4877678763316341e-03, 1.4766908957442367e-03, 2.7591841786815847e-04,-3.9716471692628308e-04,-4.7070875927683354e-04,-2.6635459552940097e-04,-6.8648215408332485e-05, 2.7441509496685954e-05, +-1.0110769805873974e-03,-4.6348932505491970e-04, 7.6459110273766431e-05, 2.4643903356873188e-04, 1.4621633201548494e-04, 1.4951587453568022e-05,-3.9508477414713992e-05,-3.4882844617829211e-05, + 5.4758765553247768e-04, 1.7743640504163158e-04,-1.1399142015449518e-04,-1.3011865372826917e-04,-2.8381435177399661e-05, 2.9960303054535681e-05, 2.7626139906760428e-05, 8.3069032574577462e-06, +-3.7015125049084610e-04,-7.0901466633802485e-05, 1.0689478993418631e-04, 6.5047224989257140e-05,-1.2804464782644583e-05,-2.7792151822393478e-05,-9.3253598198820973e-06, 3.3049588339922819e-06, + 2.9924978385704364e-04, 1.8780909759644659e-05,-9.6227041594153020e-05,-2.6552009178974203e-05, 2.6274258209873601e-05, 1.6885380655801159e-05,-1.7221939567652027e-06,-5.3631481383560514e-06, +-2.8046887409739898e-04, 1.6817657129934545e-05, 8.7808199990626365e-05, 3.2571032997925204e-07,-2.8694384147305935e-05,-5.8819145368214506e-06, 6.6275975695586333e-06, 3.5463961888971766e-06, + 6.7385420553928710e-02, 5.8303875867374788e-02, 4.3812424920219223e-02, 2.8780678481782309e-02, 1.6660841446839679e-02, 8.5721106891196077e-03, 3.9528606408672159e-03, 1.6466136094331070e-03, +-9.0815446865539218e-03,-6.6337857359190719e-03,-3.2224674841999229e-03,-4.8344411777996935e-04, 8.9285492790779422e-04, 1.1571048635532731e-03, 8.9013623611350692e-04, 5.3092238514504376e-04, + 2.4477589506348499e-03, 1.4582925176011494e-03, 2.7888671916431263e-04,-3.8741055950125797e-04,-4.6488294494707329e-04,-2.6573285844236295e-04,-7.0206553241588024e-05, 2.6052875918424964e-05, +-9.8946643303370052e-04,-4.5644838794665779e-04, 7.1983952175392371e-05, 2.4128604203049294e-04, 1.4507110825631253e-04, 1.6127945334645257e-05,-3.8410909775735277e-05,-3.4547981349678982e-05, + 5.3301804508704273e-04, 1.7461554505235257e-04,-1.0979168213575975e-04,-1.2753800066600334e-04,-2.8872897723512759e-05, 2.8862062176913922e-05, 2.7251817664975177e-05, 8.4348488470457753e-06, +-3.5840250003469016e-04,-7.0137318113844846e-05, 1.0311509975709877e-04, 6.3985623908670446e-05,-1.1776179140869873e-05,-2.7121478779433261e-05,-9.3890242041441018e-06, 3.0932626361589949e-06, + 2.8826518192084531e-04, 1.9413217940347313e-05,-9.2778652657434443e-05,-2.6522683521839472e-05, 2.5146746000593814e-05, 1.6647384149504719e-05,-1.4629784284317915e-06,-5.2218515546582523e-06, +-2.6885196398049798e-04, 1.4822740928311504e-05, 8.4630329720469685e-05, 1.1299729547068889e-06,-2.7686058593908736e-05,-6.0150332920157803e-06, 6.3346202756949112e-06, 3.5179298275223175e-06, + 6.7024106475869483e-02, 5.8039686221735179e-02, 4.3683750086431723e-02, 2.8761033348791661e-02, 1.6696185281935502e-02, 8.6181824724619657e-03, 3.9884095182516300e-03, 1.6678709795301700e-03, +-8.9844202541343038e-03,-6.5758173388242025e-03,-3.2112555884626567e-03,-4.9874886492920836e-04, 8.7437535778410805e-04, 1.1464887565550610e-03, 8.8729753493936841e-04, 5.3193695209393234e-04, + 2.4086029153101013e-03, 1.4401735284709973e-03, 2.8167933397545055e-04,-3.7786046853529708e-04,-4.5910332188872226e-04,-2.6506493850444730e-04,-7.1721288478761346e-05, 2.4677736984318483e-05, +-9.6842938683910397e-04,-4.4951966738399659e-04, 6.7673796291770126e-05, 2.3623542773122035e-04, 1.4390703670389728e-04, 1.7260907566612799e-05,-3.7328363224042849e-05,-3.4208168110842746e-05, + 5.1890971945510738e-04, 1.7182573596547537e-04,-1.0574040660663657e-04,-1.2499977977537756e-04,-2.9324120175236684e-05, 2.7790456449317135e-05, 2.6875153118179590e-05, 8.5544393144184409e-06, +-3.4708398348963200e-04,-6.9349433884863981e-05, 9.9470833127600187e-05, 6.2925822558112347e-05,-1.0792195030866038e-05,-2.6460427555417673e-05,-9.4425520491925213e-06, 2.8871947386353224e-06, + 2.7773454960476802e-04, 1.9968661473386762e-05,-8.9455113146678377e-05,-2.6462434092492859e-05, 2.4058989748128370e-05, 1.6404401423646281e-05,-1.2153096555812323e-06,-5.0817524960587094e-06, +-2.5776588813138123e-04, 1.2972779630416991e-05, 8.1565117280537369e-05, 1.8725225999897637e-06,-2.6706515220543927e-05,-6.1313931684504225e-06, 6.0502435840017506e-06, 3.4865573468745055e-06, + 6.6666646273178629e-02, 5.7777800890397538e-02, 4.3555525917019618e-02, 2.8740783612384461e-02, 1.6730794545460771e-02, 8.6638301578315473e-03, 4.0238436473078332e-03, 1.6891678358312971e-03, +-8.8888453827810909e-03,-6.5185681879915830e-03,-3.1999353934299216e-03,-5.1367562196990429e-04, 8.5612603661651757e-04, 1.1359002613639847e-03, 8.8439910636973346e-04, 5.3289678658981947e-04, + 2.3702771947895079e-03, 1.4223294647779383e-03, 2.8430274505134544e-04,-3.6851038286205202e-04,-4.5337061228981675e-04,-2.6435255033662223e-04,-7.3193023730299235e-05, 2.3316284068999231e-05, +-9.4794773001156962e-04,-4.4270190314720545e-04, 6.3522811142598719e-05, 2.3128549514701908e-04, 1.4272569194189241e-04, 1.8351531806542272e-05,-3.6260923464834517e-05,-3.3863734616648882e-05, + 5.0524582686436417e-04, 1.6906786723841472e-04,-1.0183227531326947e-04,-1.2250389497625255e-04,-2.9736843095138233e-05, 2.6745097186226354e-05, 2.6496542581966171e-05, 8.6658988031717778e-06, +-3.3617795962594945e-04,-6.8540775159139640e-05, 9.5957085222883834e-05, 6.1869009501915219e-05,-9.8509451241815901e-06,-2.5809184457489461e-05,-9.4863983712307416e-06, 2.6867049747010482e-06, + 2.6763718446680981e-04, 2.0452845432412378e-05,-8.6251989585390572e-05,-2.6373655905925913e-05, 2.3009846870871982e-05, 1.6157083016735608e-05,-9.7884562277152288e-07,-4.9429627829072314e-06, +-2.4718433903439746e-04, 1.1258222999597174e-05, 7.8608934214799978e-05, 2.5570014383996612e-06,-2.5755314486430380e-05,-6.2319775060328100e-06, 5.7743655166225252e-06, 3.4524983448560643e-06, + 6.6312978621788338e-02, 5.7518191322271643e-02, 4.3427756610274419e-02, 2.8719944233230241e-02, 1.6764678409662771e-02, 8.7090548848263900e-03, 4.0591606731786526e-03, 1.7105020000356031e-03, +-8.7947872995166945e-03,-6.4620273748259224e-03,-3.1885135414276150e-03,-5.2823230901962240e-04, 8.3810507445421928e-04, 1.1253411231177714e-03, 8.8144265829885170e-04, 5.3380243968352429e-04, + 2.3327599246907721e-03, 1.4047559140352812e-03, 2.8676320608547268e-04,-3.5935630904694441e-04,-4.4768547673084509e-04,-2.6359736656647982e-04,-7.4622364722598034e-05, 2.1968695537252715e-05, +-9.2800401065549088e-04,-4.3599380174804206e-04, 5.9525374100473198e-05, 2.2643455352309264e-04, 1.4152858017304766e-04, 1.9400860021951316e-05,-3.5208660711102737e-05,-3.3515001657973096e-05, + 4.9201020890744882e-04, 1.6634271426319393e-04,-9.8062162685834446e-05,-1.2005020452400547e-04,-3.0112745261700198e-05, 2.5725588759741584e-05, 2.6116364443863988e-05, 8.7694493630622636e-06, +-3.2566749464425489e-04,-6.7714086417933948e-05, 9.2569125676708746e-05, 6.0816280366247737e-05,-8.9509074380013487e-06,-2.5167910545679500e-05,-9.5210045900266543e-06, 2.4917388779990429e-06, + 2.5795340822632091e-04, 2.0871005320988154e-05,-8.3164992024133689e-05,-2.6258602183659049e-05, 2.1998192853178395e-05, 1.5906041024755258e-05,-7.5324857367209244e-07,-4.8055856444509495e-06, +-2.3708240290533275e-04, 9.6701360716963577e-06, 7.5758232842333524e-05, 3.1868586608465505e-06,-2.4831993254385051e-05,-6.3177253134953122e-06, 5.5068752380855469e-06, 3.4159628286949328e-06, + 6.5963043491242573e-02, 5.7260829399094812e-02, 4.3300446103738059e-02, 2.8698529858370510e-02, 1.6797845970678210e-02, 8.7538578615230234e-03, 4.0943583088374003e-03, 1.7318713160235290e-03, +-8.7022140921477614e-03,-6.4061841661885860e-03,-3.1769964290778233e-03,-5.4242668780950937e-04, 8.2031055611036380e-04, 1.1148130208783816e-03, 8.7842987433974125e-04, 5.3465446930618687e-04, + 2.2960299259591754e-03, 1.3874485160874500e-03, 2.8906674991668272e-04,-3.5039432116077828e-04,-4.4204851687104478e-04,-2.6280101846108466e-04,-7.6009919692541453e-05, 2.0635137099281548e-05, +-9.0858140987172542e-04,-4.2939404082326972e-04, 5.5676063821830362e-05, 2.2168091862733100e-04, 1.4031714165454074e-04, 2.0409918232859906e-05,-3.4171630389884494e-05,-3.3162281188360755e-05, + 4.7918736904845570e-04, 1.6365094674724814e-04,-9.4425128974739666e-05,-1.1763852461538044e-04,-3.0453445468582569e-05, 2.4731529579267067e-05, 2.5734979703625586e-05, 8.8653107848342493e-06, +-3.1553642230120756e-04,-6.6871909714256010e-05, 8.9302392904410660e-05, 5.9768643358444828e-05,-8.0906045942159176e-06,-2.4536743135736097e-05,-9.5467987059761907e-06, 2.3022380184900672e-06, + 2.4866451258695157e-04, 2.1228030883460591e-05,-8.0189970775046166e-05,-2.6119391881820782e-05, 2.1022922122560231e-05, 1.5651850844196395e-05,-5.3818534671504931e-07,-4.6697160972998579e-06, +-2.2743648170349097e-04, 8.2001594621591511e-06, 7.3009547999337929e-05, 3.7653599054068436e-06,-2.3936068045482581e-05,-6.3895327957863168e-06, 5.2476539916442315e-06, 3.3771514649336024e-06, + 6.5616782110807889e-02, 5.7005687428456193e-02, 4.3173598083856617e-02, 2.8676554827500408e-02, 1.6830306247570159e-02, 8.7982403618663673e-03, 4.1294343341147562e-03, 1.7532736501220279e-03, +-8.6110946823516957e-03,-6.3510280022824883e-03,-3.1653902159738886e-03,-5.5626636437891563e-04, 8.0274054346689272e-04, 1.1043175692735715e-03, 8.7536241373542892e-04, 5.3545343977012697e-04, + 2.2600666800692074e-03, 1.3704029641826640e-03, 2.9121919643354359e-04,-3.4162056048595501e-04,-4.3646027803887101e-04,-2.6196509656929538e-04,-7.7356298809865952e-05, 1.9315762162358291e-05, +-8.8966371588654336e-04,-4.2290127320389922e-04, 5.1969652947948981e-05, 2.1702291436383314e-04, 1.3909275306217133e-04, 2.1379716291699863e-05,-3.3149873827000535e-05,-3.2805876417495240e-05, + 4.6676244268264414e-04, 1.6099313654035076e-04,-9.0916413611208808e-05,-1.1526863277918568e-04,-3.0760504293967788e-05, 2.3762513012741358e-05, 2.5352732506056883e-05, 8.9537004482070897e-06, +-3.0576930614229338e-04,-6.6016598053608602e-05, 8.6152488559837712e-05, 5.8727024492114603e-05,-7.2686030452584222e-06,-2.3915797233968417e-05,-9.5641954896032059e-06, 2.1181403233986789e-06, + 2.3975270808868478e-04, 2.1528488379402614e-05,-7.7322913086012401e-05,-2.5958016849474687e-05, 2.0082948800660233e-05, 1.5395052855431021e-05,-3.3332767501369945e-07,-4.5354413136429811e-06, +-2.1822421970928217e-04, 6.8404722594840440e-06, 7.0359498328088628e-05, 4.2955962701323652e-06,-2.3067038036298416e-05,-6.4482548596838415e-06, 4.9965759778664124e-06, 3.3362558319186459e-06, + 6.5274136936640040e-02, 5.6752738136905727e-02, 4.3047215995293098e-02, 2.8654033179142599e-02, 1.6862068181455220e-02, 8.8422037231247128e-03, 4.1643865947226019e-03, 1.7747068913500580e-03, +-8.5213987997343130e-03,-6.2965484944969841e-03,-3.1537008330452462e-03,-5.6975879175686500e-04, 7.8539307767744315e-04, 1.0938563201127148e-03, 8.7224191129268210e-04, 5.3619992128371013e-04, + 2.2248503052373289e-03, 1.3536150058887156e-03, 2.9322616019233352e-04,-3.3303123516113006e-04,-4.3092125172898603e-04,-2.6109115137241414e-04,-7.8662113626354487e-05, 1.8010712178573220e-05, +-8.7123529934861332e-04,-4.1651413068138367e-04, 4.8401101066474742e-05, 2.1245887425556668e-04, 1.3785672978380929e-04, 2.2311247699408955e-05,-3.2143418910912625e-05,-3.2446081910381066e-05, + 4.5472116866722965e-04, 1.5836976494282908e-04,-8.7531428785688202e-05,-1.1294027106490078e-04,-3.1035425837219115e-05, 2.2818128250915649e-05, 2.4969950666588492e-05, 9.0348331821550288e-06, +-2.9635140372440057e-04,-6.5150327910878001e-05, 8.3115172123879365e-05, 5.7692272535480622e-05,-6.4835122744503091e-06,-2.3305166904239705e-05,-9.5735966834670244e-06, 1.9393803841818872e-06, + 2.3120107581352256e-04, 2.1776641418664049e-05,-7.4559939766942192e-05,-2.5776348639218215e-05, 1.9177207343419638e-05, 1.5136154043053006e-05,-1.3835245008413188e-07,-4.4028409804845134e-06, +-2.0942443439485851e-04, 5.5837573412153386e-06, 6.7804787150876886e-05, 4.7804929353399242e-06,-2.2224387825820506e-05,-6.4947065869990608e-06, 4.7535091727707815e-06, 3.2934586767641105e-06, + 6.4935051619970305e-02, 5.6501954663150472e-02, 4.2921303049911673e-02, 2.8630978656714309e-02, 1.6893140634716849e-02, 8.8857493434088969e-03, 4.1992130012755650e-03, 1.7961689516449550e-03, +-8.4330969568198327e-03,-6.2427354232192575e-03,-3.1419339906228957e-03,-5.8291127262825176e-04, 7.6826618127222995e-04, 1.0834307639763421e-03, 8.6906997733736391e-04, 5.3689448948000731e-04, + 2.1903615336005752e-03, 1.3370804438640497e-03, 2.9509305775824151e-04,-3.2462261976885787e-04,-4.2543187800904062e-04,-2.6018069394131180e-04,-7.9927976551355875e-05, 1.6720116988595585e-05, +-8.5328108973652551e-04,-4.1023122749169708e-04, 4.4965547926063680e-05, 2.0798714280293815e-04, 1.3661032814437502e-04, 2.3205489454644667e-05,-3.1152280735390422e-05,-3.2083183692059906e-05, + 4.4304986224482843e-04, 1.5578122953023105e-04,-8.4265753240979634e-05,-1.1065314903783943e-04,-3.1279659423822130e-05, 2.1897961118949195e-05, 2.4586946187963400e-05, 9.1089211375516802e-06, +-2.8726863271459738e-04,-6.4275110942607996e-05, 8.0186355630368396e-05, 5.6665163692378378e-05,-5.7339839713569431e-06,-2.2704926572706492e-05,-9.5753912128436352e-06, 1.7658897486037117e-06, + 2.2299352177198938e-04, 2.1976470457987801e-05,-7.1897301791984570e-05,-2.5576144977281604e-05, 1.8304653072021503e-05, 1.4875629560538627e-05, 4.7058043919559608e-08,-4.2719876471396187e-06, +-2.0101705131400158e-04, 4.4231689380189372e-06, 6.5342202988810736e-05, 5.2228173933005045e-06,-2.1407589972736311e-05,-6.5296646856636376e-06, 4.5183160971000124e-06, 3.2489341704562098e-06, + 6.4599470976274193e-02, 5.6253310551338961e-02, 4.2795862235445153e-02, 2.8607404714488079e-02, 1.6923532390300870e-02, 8.9288786792545097e-03, 4.2339115283112601e-03, 1.8176577660702210e-03, +-8.3461604249352311e-03,-6.1895787356174639e-03,-3.1300951862167220e-03,-5.9573096198251713e-04, 7.5135786016855902e-04, 1.0730423317793000e-03, 8.6584819769017132e-04, 5.3753772495915720e-04, + 2.1565816893177672e-03, 1.3207951364945722e-03, 2.9682511478022582e-04,-3.1639105487118709e-04,-4.1999254783895552e-04,-2.5923519659895242e-04,-8.1154500352486714e-05, 1.5444095161068136e-05, +-8.3578655282319503e-04,-4.0405116353516598e-04, 4.1658306894890875e-05, 2.0360607672616644e-04, 1.3535474756345436e-04, 2.4063401934434442e-05,-3.0176462221839258e-05,-3.1717459357048040e-05, + 4.3173538928802904e-04, 1.5322785052402824e-04,-8.1115126273257433e-05,-1.0840694659209645e-04,-3.1494601277139034e-05, 2.1001594837041573e-05, 2.4204015768552365e-05, 9.1761736709751178e-06, +-2.7850753876400080e-04,-6.3392804943523517e-05, 7.7362098527610870e-05, 5.5646406030906673e-05,-5.0187111876585130e-06,-2.2115132271076207e-05,-9.5699554055465766e-06, 1.5975971995401320e-06, + 2.1511473382047728e-04, 2.2131691040597163e-05,-6.9331376886476269e-05,-2.5359055912021170e-05, 1.7464262606352470e-05, 1.4613924237296932e-05, 2.2321592634070566e-07,-4.1429470632568161e-06, +-1.9298304277988012e-04, 3.3523023085777455e-06, 6.2968619755502436e-05, 5.6251873071613223e-06,-2.0616107324308024e-05,-6.5538689109508793e-06, 4.2908545337349781e-06, 3.2028481646935233e-06, + 6.4267340955387026e-02, 5.6006779744434708e-02, 4.2670896323856927e-02, 2.8583324523446970e-02, 1.6953252151089719e-02, 8.9715932432660687e-03, 4.2684802133099182e-03, 1.8391712930052810e-03, +-8.2605612109523177e-03,-6.1370685434010835e-03,-3.1181897120148572e-03,-6.0822486974273712e-04, 7.3466610559008369e-04, 1.0626923963073954e-03, 8.6257813366188030e-04, 5.3813021284419339e-04, + 2.1234926675512342e-03, 1.3047549984070731e-03, 2.9842737280878122e-04,-3.0833294649786807e-04,-4.1460360530496944e-04,-2.5825609358724093e-04,-8.2342297680824440e-05, 1.4182754327570846e-05, +-8.1873766914416102e-04,-3.9797252735080768e-04, 3.8474858655327272e-05, 1.9931404609879177e-04, 1.3409113264633866e-04, 2.4885928804532407e-05,-2.9215954721517850e-05,-3.1349178183247353e-05, + 4.2076514179335335e-04, 1.5070987673963891e-04,-7.8075441936375313e-05,-1.0620131659145799e-04,-3.1681596155468765e-05, 2.0128610732066341e-05, 2.3821441301861157e-05, 9.2367972394387089e-06, +-2.7005526505371444e-04,-6.2505124099438000e-05, 7.4638602677356086e-05, 5.4636643672743561e-05,-4.3364274784757001e-06,-2.1535822819900603e-05,-9.5576532196712336e-06, 1.4344290204625223e-06, + 2.0755014095427644e-04, 2.2245770866437247e-05,-6.6858666113485160e-05,-2.5126629655862782e-05, 1.6655034210861387e-05, 1.4351454028045522e-05, 3.9042754458154367e-07,-4.0157785066731620e-06, +-1.8530437008783919e-04, 2.3651653759981217e-06, 6.0680996666542389e-05, 5.9900780134327959e-06,-1.9849395153441777e-05,-6.5680234533367785e-06, 4.0709781955385337e-06, 3.1553584487030199e-06, + 6.3938608612533504e-02, 5.5762336577679622e-02, 4.2546407879408332e-02, 2.8558750977034902e-02, 1.6982308539351509e-02, 9.0138946018221595e-03, 4.3029171557141966e-03, 1.8607075143177360e-03, +-8.1762720348538820e-03,-6.0851951205629015e-03,-3.1062226621155417e-03,-6.2039986337332487e-04, 7.1818889589853399e-04, 1.0523822737271791e-03, 8.5926132206711955e-04, 5.3867254235018388e-04, + 2.0910769142909805e-03, 1.2889560008679133e-03, 2.9990469586638592e-04,-3.0044476559131633e-04,-4.0926534977157880e-04,-2.5724478173668938e-04,-8.3491980619860911e-05, 1.2936191512945652e-05, +-8.0212091342306713e-04,-3.9199389885999597e-04, 3.5410845125989632e-05, 1.9510943537886529e-04, 1.3282057521061077e-04, 2.5673996956956723e-05,-2.8270738597794225e-05,-3.0978601249887233e-05, + 4.1012701456307117e-04, 1.4822749113630002e-04,-7.5142743442668857e-05,-1.0403588734737787e-04,-3.1841938955028010e-05, 1.9278588903614961e-05, 2.3439490366450357e-05, 9.2909953055860543e-06, +-2.6189952342677112e-04,-6.1613648577055555e-05, 7.2012207488762148e-05, 5.3636460754789505e-05,-3.6859060306871781e-06,-2.0967020956018406e-05,-9.5388364771586528e-06, 1.2763092477418697e-06, + 2.0028587484971556e-04, 2.2321945760639947e-05,-6.4475790466710678e-05,-2.4880318134284120e-05, 1.5875988057250065e-05, 1.4088607409074061e-05, 5.4899332316500941e-07,-3.8905351003995379e-06, +-1.7796392908907562e-04, 1.4561522114581263e-06, 5.8476377890396188e-05, 6.3198296812652920e-06,-1.9106903111890748e-05,-6.5727982976885718e-06, 3.8585373500386524e-06, 3.1066150036591783e-06, + 6.3613222080238868e-02, 5.5519955772148022e-02, 4.2422399266441931e-02, 2.8533696696803269e-02, 1.7010710096260911e-02, 9.0557843728403982e-03, 4.3372205159499192e-03, 1.8822644355186470e-03, +-8.0932663080908462e-03,-6.0339489011071168e-03,-3.0941989395007613e-03,-6.3226267046477894e-04, 7.0192419834076356e-04, 1.0421132250690614e-03, 8.5589927525569001e-04, 5.3916530636649021e-04, + 2.0593174069837294e-03, 1.2733941720763278e-03, 3.0126177677904705e-04,-2.9272304741225375e-04,-4.0397803795340901e-04,-2.5620262113833789e-04,-8.4604160257243841e-05, 1.1704493460811460e-05, +-7.8592323490740169e-04,-3.8611385189571998e-04, 3.2462063604131810e-05, 1.9099064434418306e-04, 1.3154411624888632e-04, 2.6428516473746256e-05,-2.7340783789244410e-05,-3.0605981558987080e-05, + 3.9980938301168172e-04, 1.4578081599600731e-04,-7.2313217755909967e-05,-1.0191026494304868e-04,-3.1976876277168143e-05, 1.8451108845250572e-05, 2.3058416706903489e-05, 9.3389682525297534e-06, +-2.5402856701567443e-04,-6.0719833496053398e-05, 6.9479385188483692e-05, 5.2646385174991183e-05,-3.0659587834920652e-06,-2.0408734403834189e-05,-9.5138451038872053e-06, 1.1231599109369965e-06, + 1.9330873351962102e-04, 2.2363234616484392e-05,-6.2179487481910350e-05,-2.4621482256207926e-05, 1.5126166414691372e-05, 1.3825746718308411e-05, 6.9920763877596093e-07,-3.7672641204558378e-06, +-1.7094549890313661e-04, 6.2001823544904368e-07, 5.6351891974779353e-05, 6.6166541437842745e-06,-1.8388077018390222e-05,-6.5688305450254456e-06, 3.6533793971209319e-06, 3.0567602576228566e-06, + 6.3291130541090382e-02, 5.5279612428391918e-02, 4.2298872656890862e-02, 2.8508174037954640e-02, 1.7038465281488009e-02, 9.0972642236012043e-03, 4.3713885144483619e-03, 1.9038400859013661e-03, +-8.0115181126984639e-03,-5.9833204767678824e-03,-3.0821232627613118e-03,-6.4381988129398257e-04, 6.8586997071472255e-04, 1.0318864576833609e-03, 8.5249348116062194e-04, 5.3960910105194169e-04, + 2.0281976359305814e-03, 1.2580655973608535e-03, 3.0250314327776896e-04,-2.8516439090959535e-04,-3.9874188591018097e-04,-2.5513093581632971e-04,-8.5679446278794482e-05, 1.0487736954188317e-05, +-7.7013203856972790e-04,-3.8033095653214723e-04, 2.9624461120815319e-05, 1.8695608893710722e-04, 1.3026274783017763e-04, 2.7150380614177744e-05,-2.6426050353410143e-05,-3.0231564160135436e-05, + 3.8980108203758067e-04, 1.4336991775611480e-04,-6.9583190371409894e-05,-9.9824035410942013e-05,-3.2087607961364580e-05, 1.7645750024952008e-05, 2.2678460704496178e-05, 9.3809133083078861e-06, +-2.4643116428146590e-04,-5.9825017324527843e-05, 6.7036736227290612e-05, 5.1666892130986588e-05,-2.4754355407474217e-06,-1.9860956895847085e-05,-9.4830073731217737e-06, 9.7490126040234371e-07, + 1.8660614695693807e-04, 2.2372453382232956e-05,-5.9966607878509798e-05,-2.4351396914003422e-05, 1.4404633767937522e-05, 1.3563209446531836e-05, 8.4135871525514957e-07,-3.6460072923172978e-06, +-1.6423369357470511e-04,-1.4814298226013204e-07, 5.4304751083000929e-05, 6.8826414048920924e-06,-1.7692360481643579e-05,-6.5567257073301544e-06, 3.4553494103579232e-06, 3.0059293356308296e-06, + 6.2972284201318965e-02, 5.5041282020177440e-02, 4.2175830037523947e-02, 2.8482195094784491e-02, 1.7065582472852479e-02, 9.1383358686292875e-03, 4.4054194306708400e-03, 1.9254325186644310e-03, +-7.9310021811415249e-03,-5.9333005947218229e-03,-3.0700001725822781e-03,-6.5507795135852712e-04, 6.7002416295689968e-04, 1.0217031266695695e-03, 8.4904540336198670e-04, 5.4000452544275134e-04, + 1.9977015864197020e-03, 1.2429664192864631e-03, 3.0363316387843229e-04,-2.7776545805850640e-04,-3.9355707096648421e-04,-2.5403101440080417e-04,-8.6718446583780866e-05, 9.2859891310278879e-06, +-7.5473516713323897e-04,-3.7464378122760759e-04, 2.6894129001049118e-05, 1.8300420202555783e-04, 1.2897741494003460e-04, 2.7840465824885397e-05,-2.5526488992190665e-05,-2.9855586278005525e-05, + 3.8009138590563139e-04, 1.4099481151722736e-04,-6.6949120276757465e-05,-9.7776766773659873e-05,-3.2175288581517009e-05, 1.6862092424844513e-05, 2.2299849838596337e-05, 9.4170244789623360e-06, +-2.3909657438840403e-04,-5.8930429733188548e-05, 6.4680984819452480e-05, 5.0698407465611241e-05,-1.9132230818626479e-06,-1.9323669140845155e-05,-9.4466401538422249e-06, 8.3145198378849830e-07, + 1.8016614465521548e-04, 2.2352228150022196e-05,-5.7834112233361157e-05,-2.4071255732624551e-05, 1.3710476877220334e-05, 1.3301309474266374e-05, 9.7572854164595994e-07,-3.5268010785898578e-06, +-1.5781391650519327e-04,-8.5292142052447275e-07, 5.2332250053795310e-05, 7.1197658481671041e-06,-1.7019196383794373e-05,-6.5370589619047897e-06, 3.2642906349285971e-06, 2.9542503097477856e-06, + 6.2656634265174024e-02, 5.4804940388312920e-02, 4.2053273216936103e-02, 2.8455771706022141e-02, 1.7092069966039489e-02, 9.1790010676317327e-03, 4.4393116021361027e-03, 1.9470398110190319e-03, +-7.8516938768611044e-03,-5.8838801552975120e-03,-3.0578340379976490e-03,-6.6604320388410215e-04, 6.5438471865464712e-04, 1.0115643362786364e-03, 8.4555648116571396e-04, 5.4035218107292816e-04, + 1.9678137215635924e-03, 1.2280928376787112e-03, 3.0465605354818275e-04,-2.7052297316937769e-04,-3.8842373355945005e-04,-2.5290411079977103e-04,-8.7721766920920456e-05, 8.0993077946306218e-06, +-7.3972088388488122e-04,-3.6905089479205859e-04, 2.4267297621675152e-05, 1.7913343408462742e-04, 1.2768901726207605e-04, 2.8499631770428045e-05,-2.4642041558788148e-05,-2.9478277442460161e-05, + 3.7066998909282263e-04, 1.3865546524488161e-04,-6.4407595087722164e-05,-9.5768010954151765e-05,-3.2241028907559389e-05, 1.6099717043903890e-05, 2.1922799137661008e-05, 9.4474924902381893e-06, +-2.3201452384794102e-04,-5.8037198939088849e-05, 6.2408974613183753e-05, 4.9741310826522619e-05,-1.3782442698947838e-06,-1.8796839744979425e-05,-9.4050491611155714e-06, 6.9272941081418661e-07, + 1.7397732490885217e-04, 2.2305007398564343e-05,-5.5779067692905720e-05,-2.3782175575098033e-05, 1.3042804778916264e-05, 1.3040338261691485e-05, 1.1025928077173218e-06,-3.4096769558335445e-06, +-1.5167231751028783e-04,-1.4986108908840939e-06, 5.0431765307272638e-05, 7.3298921518048760e-06,-1.6368028222464564e-05,-6.5103763761564625e-06, 3.0800449522299175e-06, 2.9018444440362638e-06, + 6.2344132910061877e-02, 5.4570563734568783e-02, 4.1931203832293013e-02, 2.8428915460071921e-02, 1.7117935974374870e-02, 9.2192616234916466e-03, 4.4730634234511632e-03, 1.9686600642815312e-03, +-7.7735691754930933e-03,-5.8350502096861517e-03,-3.0456290624223462e-03,-6.7672183230356106e-04, 6.3894957648578596e-04, 1.0014711412884743e-03, 8.4202812969657540e-04, 5.4065267160700869e-04, + 1.9385189658069416e-03, 1.2134411095735568e-03, 3.0557587916574865e-04,-2.6343372217128088e-04,-3.8334197901599402e-04,-2.5175144486953046e-04,-8.8690010544274864e-05, 6.9277417188110414e-06, +-7.2507785623338473e-04,-3.6355086819407720e-04, 2.1740331360905530e-05, 1.7534225380460514e-04, 1.2639841090124115e-04, 2.9128721383565062e-05,-2.3772641546917873e-05,-2.9099859620811057e-05, + 3.6152698803930752e-04, 1.3635180369021932e-04,-6.1955326355773337e-05,-9.3797305563507843e-05,-3.2285897330547168e-05, 1.5358206364134803e-05, 2.1547511620434256e-05, 9.4725047371889206e-06, +-2.2517518434908820e-04,-5.7146358580965713e-05, 6.0217664493756368e-05, 4.8795938650720894e-05,-8.6945716204809382e-07,-1.8280426085055742e-05,-9.3585292092703126e-06, 5.5864970735432493e-07, + 1.6802882576812247e-04, 2.2233073460440559e-05,-5.3798644735710121e-05,-2.3485200817424219e-05, 1.2400748737337523e-05, 1.2780565988159165e-05, 1.2222208585892224e-06,-3.2946616821421208e-06, +-1.4579575230768191e-04,-2.0892280282064853e-06, 4.8600753629431811e-05, 7.5147809234556105e-06,-1.5738301329437640e-05,-6.4771960937752610e-06, 2.9024533071000201e-06, 2.8488264372822600e-06, + 6.2034733262422717e-02, 5.4338128615688680e-02, 4.1809623355838842e-02, 2.8401637700155889e-02, 1.7143188628656311e-02, 9.2591193803163319e-03, 4.5066733453461693e-03, 1.9902914039515410e-03, +-7.6966046467340371e-03,-5.7868019576552132e-03,-3.0333892894698414e-03,-6.8711990270706527e-04, 6.2371667158871158e-04, 9.9142454835262836e-04, 8.3846174000450600e-04, 5.4090660248491034e-04, + 1.9098026890788239e-03, 1.1990075490973069e-03, 3.0639656478351684e-04,-2.5649455187217438e-04,-3.7831187926261372e-04,-2.5057420308257435e-04,-8.9623777888341244e-05, 5.7713309476892932e-06, +-7.1079513998151701e-04,-3.5814227621535440e-04, 1.9309723732101281e-05, 1.7162914862933092e-04, 1.2510641005132828e-04, 2.9728560933200168e-05,-2.2918214562552688e-05,-2.8720547351874968e-05, + 3.5265286376616261e-04, 1.3408371204291626e-04,-5.9589145040644508e-05,-9.1864175571957079e-05,-3.2310921253181102e-05, 1.4637144783283943e-05, 2.1174178726866248e-05, 9.4922452412517480e-06, +-2.1856915172324635e-04,-5.6258854147958392e-05, 5.8104124514636772e-05, 4.7862586981291667e-05,-3.8585412141984871e-07,-1.7774375138257402e-05,-9.3073644662150249e-06, 4.2912805909133311e-07, + 1.6231029757528796e-04, 2.2138553249967456e-05,-5.1890113985045130e-05,-2.3181307401544395e-05, 1.1783462147406477e-05, 1.2522242646949276e-05, 1.3348756649915566e-06,-3.1817775550854095e-06, +-1.4017174432532051e-04,-2.6285300482348865e-06, 4.6836750844105474e-05, 7.6760940636144710e-06,-1.5129463966454388e-05,-6.4380094899509377e-06, 2.7313561039390422e-06, 2.7953046616606726e-06, + 6.1728389374320521e-02, 5.4107611937491841e-02, 4.1688533101175367e-02, 2.8373949529358879e-02, 1.7167835977038061e-02, 9.2985762215388196e-03, 4.5401398737137293e-03, 2.0119319797760448e-03, +-7.6207774368286796e-03,-5.7391267452680875e-03,-3.0211186085633071e-03,-6.9724335626197148e-04, 6.0868393686522998e-04, 9.8142551732233359e-04, 8.3485867918359647e-04, 5.4111458057862693e-04, + 1.8816506915605921e-03, 1.1847885272829898e-03, 3.0712189669888923e-04,-2.4970236919931443e-04,-3.7333347446925414e-04,-2.4937353919254012e-04,-9.0523666261720396e-05, 4.6301070901608914e-06, +-6.9686216427760229e-04,-3.5282369896353304e-04, 1.6972092694718085e-05, 1.6799262523069317e-04, 1.2381378860703651e-04, 3.0299960109213503e-05,-2.2078678778596103e-05,-2.8340547881719102e-05, + 3.4403846531406925e-04, 1.3185103933414434e-04,-5.7305997141715410e-05,-8.9968134871793140e-05,-3.2317088443832061e-05, 1.3936119014750674e-05, 2.0802980738845897e-05, 9.5068946146423658e-06, +-2.1218742597992491e-04,-5.5375548990598198e-05, 5.6065531952297267e-05, 4.6941514128868219e-05, 7.3539064563262141e-08,-1.7278624268031121e-05,-9.2518287087689285e-06, 3.0407884478271191e-07, + 1.5681187698932673e-04, 2.2023428298821406e-05,-5.0050843071215619e-05,-2.2871406683847526e-05, 1.1190120399360877e-05, 1.2265599092595006e-05, 1.4408138091760247e-06,-3.0710426598428577e-06, +-1.3478844869050532e-04,-3.1200313498562409e-06, 4.5137370380435670e-05, 7.8153998815327622e-06,-1.4540968318518108e-05,-6.3932822878804129e-06, 2.5665935705678241e-06, 2.7413813969294979e-06, + 6.1425056200721417e-02, 5.3878990949067090e-02, 4.1567934229320751e-02, 2.8345861815577699e-02, 1.7191885984966460e-02, 9.3376340680717783e-03, 4.5734615686532512e-03, 2.0335799657999949e-03, +-7.5460652516543270e-03,-5.6920160626127841e-03,-3.0088207603472944e-03,-7.0709801160225710e-04, 5.9384930421906013e-04, 9.7147496254202173e-04, 8.3122029050295126e-04, 5.4127721386063293e-04, + 1.8540491890415428e-03, 1.1707804718298128e-03, 3.0775552834082622e-04,-2.4305414042140598e-04,-3.6840677463005123e-04,-2.4815057489538470e-04,-9.1390269558600488e-05, 3.5040936088471131e-06, +-6.8326871721173001e-04,-3.4759372325541453e-04, 1.4724176138255325e-05, 1.6443120992173081e-04, 1.2252128172310150e-04, 3.0843712122488435e-05,-2.1253945372967092e-05,-2.7960061300592505e-05, + 3.3567499395631547e-04, 1.2965360161034141e-04,-5.5102939487382667e-05,-8.8108687734991952e-05,-3.2305348356505341e-05, 1.3254718457302927e-05, 2.0434087190719638e-05, 9.5166300313235343e-06, +-2.0602139234597407e-04,-5.4497229949824702e-05, 5.4099167490524066e-05, 4.6032943179539186e-05, 5.0966406167721336e-07,-1.6793101969867371e-05,-9.1921855781748461e-06, 1.8341580003033516e-07, + 1.5152416239614937e-04, 2.1889544161516052e-05,-4.8278293562730441e-05,-2.2556349076927607e-05, 1.0619920701524994e-05, 1.2010848046170734e-05, 1.5402854844062401e-06,-2.9624711083887541e-06, +-1.2963461823463330e-04,-3.5670190712865573e-06, 4.3500301781180300e-05, 7.9341779509145568e-06,-1.3972271376731299e-05,-6.3434556448923339e-06, 2.4080060939247707e-06, 2.6871530607008650e-06, + 6.1124689577437212e-02, 5.3652243237057022e-02, 4.1447827754555661e-02, 2.8317385196375069e-02, 1.7215346535163791e-02, 9.3762948765127082e-03, 4.6066370435207714e-03, 2.0552335604038991e-03, +-7.4724463403801900e-03,-5.6454615415408443e-03,-2.9964993419078073e-03,-7.1668956718619337e-04, 5.7921070573218811e-04, 9.6157375411852659e-04, 8.2754789354873206e-04, 5.4139511108371868e-04, + 1.8269847988393456e-03, 1.1569798668089101e-03, 3.0830098497975364e-04,-2.3654689035590231e-04,-3.6353176108242587e-04,-2.4690640048640540e-04,-9.2224177987409658e-05, 2.3933061035708242e-06, +-6.7000493203043555e-04,-3.4245094387595917e-04, 1.2562827530269061e-05, 1.6094344901441051e-04, 1.2122958732068852e-04, 3.1360593819442916e-05,-2.0443918950547013e-05,-2.7579280680917447e-05, + 3.2755398815447639e-04, 1.2749118488599337e-04,-5.2977135672006430e-05,-8.6285330175330346e-05,-3.2276613414593331e-05, 1.2592535535117131e-05, 2.0067657269795887e-05, 9.5216252043521285e-06, +-2.0006280326848302e-04,-5.3624612615838863e-05, 5.2202411521205580e-05, 4.5137064364702829e-05, 9.2343085617825431e-07,-1.6317728576407253e-05,-9.1286888358599119e-06, 6.7052171703078846e-08, + 1.4643819065264415e-04, 2.1738619207148244e-05,-4.6570017948719432e-05,-2.2236927509227152e-05, 1.0072081874574528e-05, 1.1758185055110145e-05, 1.6335345084351445e-06,-2.8560732697629082e-06, +-1.2469957144549591e-04,-3.9725676220798137e-06, 4.1923309126042443e-05, 8.0338237452471262e-06,-1.3422835736947625e-05,-6.2889471984298264e-06, 2.2554345255895106e-06, 2.6327104348039217e-06, + 6.0827246199711013e-02, 5.3427346720032187e-02, 4.1328214550064218e-02, 2.8288530083740101e-02, 1.7238225427657811e-02, 9.4145606373994151e-03, 4.6396649639846377e-03, 2.0768909863288212e-03, +-7.3998994796788259e-03,-5.5994549534190419e-03,-2.9841578118072823e-03,-7.2602360362240478e-04, 5.6476607478190763e-04, 9.5172271916393707e-04, 8.2384278437676577e-04, 5.4146888147204881e-04, + 1.8004445262597840e-03, 1.1433832523212450e-03, 3.0876166826622259e-04,-2.3017770156248305e-04,-3.5870838796745586e-04,-2.4564207551210689e-04,-9.3025977816153186e-05, 1.2977525893124141e-06, +-6.5706127393853897e-04,-3.3739396472383539e-04, 1.0485011724785604e-05, 1.5752790912374655e-04, 1.1993936754407068e-04, 3.1851365808997952e-05,-1.9648497949035628e-05,-2.7198392216131659e-05, + 3.1966730921470358e-04, 1.2536354789417946e-04,-5.0925852140071835e-05,-8.4497551216512336e-05,-3.2231760261851124e-05, 1.1949166011560188e-05, 1.9703840206040712e-05, 9.5220503694082340e-06, +-1.9430376132052412e-04,-5.2758346249326166e-05, 5.0372740567836226e-05, 4.4254037292566625e-05, 1.3157186164901904e-06,-1.5852416927288494e-05,-9.0615826171777301e-06,-4.5099137139150089e-08, + 1.4154541507119795e-04, 2.1572252854375610e-05,-4.4923656692026715e-05,-2.1913880696928134e-05, 9.5458441094902550e-06, 1.1507789416323455e-05, 1.7207983461234977e-06,-2.7518559902919228e-06, +-1.1997316221682234e-04,-4.3395522919941073e-06, 4.0404229415620081e-05, 8.1156530343396888e-06,-1.2892130299056393e-05,-6.2301520868514317e-06, 2.1087204666378312e-06, 2.5781388843962555e-06, + 6.0532683601424143e-02, 5.3204279642955557e-02, 4.1209095353377308e-02, 2.8259306668756212e-02, 1.7260530379855091e-02, 9.4524333735145783e-03, 4.6725440470874943e-03, 2.0985504906892200e-03, +-7.3284039584685864e-03,-5.5539882068959684e-03,-2.9717994949413559e-03,-7.3510558596303135e-04, 5.5051334710021216e-04, 9.4192264301273289e-04, 8.2010623567496752e-04, 5.4149913442324204e-04, + 1.7744157515726180e-03, 1.1299872241122026e-03, 3.0914086060514993e-04,-2.2394371352599989e-04,-3.5393658363226329e-04,-2.4435862941719964e-04,-9.3796251133498919e-05, 2.1743376856506787e-07, +-6.4442852746041546e-04,-3.3242139985123010e-04, 8.4878009241312179e-06, 1.5418317742405655e-04, 1.1865125016670799e-04, 3.2316772602444186e-05,-1.8867575029827419e-05,-2.6817575359956880e-05, + 3.1200712760918537e-04, 1.2327042464717908e-04,-4.8946454410189342e-05,-8.2744834075595760e-05,-3.2171630976880527e-05, 1.1324209275244488e-05, 1.9342775652517186e-05, 9.5180722736306458e-06, +-1.8873670296200629e-04,-5.1899018384243522e-05, 4.8607723823703520e-05, 4.3383993055868603e-05, 1.6873765406404638e-06,-1.5397072999726261e-05,-8.9911016858339974e-06,-1.5312543019498147e-07, + 1.3683768457776275e-04, 2.1391933279377112e-05,-4.3336935343879768e-05,-2.1587896251058258e-05, 9.0404687065643254e-06, 1.1259825053198838e-05, 1.8023081466245786e-06,-2.6498228068640790e-06, +-1.1544575129838564e-04,-4.6706619827093727e-06, 3.8940970904995659e-05, 8.1809060788608287e-06,-1.2379630899701974e-05,-6.1674439247834658e-06, 1.9677065203865356e-06, 2.5235185760619682e-06, + 6.0240960134902807e-02, 5.2983020571735408e-02, 4.1090470771624962e-02, 2.8229724926178201e-02, 1.7282269026655368e-02, 9.4899151382386322e-03, 4.7052730603150206e-03, 2.1202103449741430e-03, +-7.2579395631673996e-03,-5.5090533456845017e-03,-2.9594275872238812e-03,-7.4394086596443754e-04, 5.3645046177862657e-04, 9.3217427041290997e-04, 8.1633949693504012e-04, 5.4148647922122118e-04, + 1.7488862174828979e-03, 1.1167884331461150e-03, 3.0944172937141801e-04,-2.1784212182943911e-04,-3.4921625197787098e-04,-2.4305706218533064e-04,-9.4535575625347167e-05,-8.4765670185565564e-07, +-6.3209778433678289e-04,-3.2753187440420382e-04, 6.5683707893645260e-06, 1.5090786185840627e-04, 1.1736582995071435e-04, 3.2757542763381723e-05,-1.8101037453496950e-05,-2.6437002966120101e-05, + 3.0456590993257907e-04, 1.2121152681818587e-04,-4.7036403436002313e-05,-8.1026657262556141e-05,-3.2097034256210608e-05, 1.0717268603217372e-05, 1.8984594054839229e-05, 9.5098541700752366e-06, +-1.8335438311439320e-04,-5.1047159131327718e-05, 4.6905019805742975e-05, 4.2527036215006235e-05, 2.0392246968619760e-06,-1.4951596507946251e-05,-8.9174716848522379e-06,-2.5711408998312850e-07, + 1.3230722398306549e-04, 2.1199044630358638e-05,-4.1807661729270325e-05,-2.1259613614338117e-05, 8.5552377831706545e-06, 1.1014441360236837e-05, 1.8782887865784363e-06,-2.5499741498617310e-06, +-1.1110817935270685e-04,-4.9684111221836978e-06, 3.7531511412810907e-05, 8.2307516064626359e-06,-1.1884820856078243e-05,-6.1011757570255746e-06, 1.8322365297591718e-06, 2.4689246869158063e-06, + 5.9952034951305071e-02, 5.2763548387867003e-02, 4.0972341286604701e-02, 2.8199794618919340e-02, 1.7303448920605230e-02, 9.5270080139496661e-03, 4.7378508206716097e-03, 2.1418688450370832e-03, +-7.1884865634380679e-03,-5.4646425463621834e-03,-2.9470451601062916e-03,-7.5253468431434045e-04, 5.2257536221984868e-04, 9.2247830669177008e-04, 8.1254379463281939e-04, 5.4143152475962788e-04, + 1.7238440170758845e-03, 1.1037835851452999e-03, 3.0966733097281384e-04,-2.1187017731987110e-04,-3.4454727375301663e-04,-2.4173834497393746e-04,-9.5244524366048925e-05,-1.8975319496076799e-06, +-6.2006043193058458e-04,-3.2272402547146254e-04, 4.7239966933835219e-06, 1.4770059130649610e-04, 1.1608366995866421e-04, 3.3174389068357763e-05,-1.7348767440941726e-05,-2.6056841428133020e-05, + 2.9733640645912204e-04, 1.1918654595685670e-04,-4.5193252098070893e-05,-7.9342495604380764e-05,-3.2008746562244976e-05, 1.0127951399612297e-05, 1.8629417011189069e-05, 9.4975558169383365e-06, +-1.7814986050226534e-04,-5.0203245202529945e-05, 4.5262373118185120e-05, 4.1683246669638966e-05, 2.3720548489714750e-06,-1.4515881467256886e-05,-8.8409093868627508e-06,-3.5715245735774644e-07, + 1.2794661529973541e-04, 2.0994873780564911e-05,-4.0333723197413720e-05,-2.0929626848147359e-05, 8.0894539668364614e-06, 1.0771774005773329e-05, 1.9489589249361704e-06,-2.4523075390045076e-06, +-1.0695174151917050e-04,-5.2351508122622517e-06, 3.6173896600751265e-05, 8.2662906017337457e-06,-1.1407191451694549e-05,-6.0316809708824808e-06, 1.7021557874952468e-06, 2.4144276113318870e-06, + 5.9665867981567852e-02, 5.2545842283161538e-02, 4.0854707259672308e-02, 2.8169525302450149e-02, 1.7324077532088651e-02, 9.5637141104695025e-03, 4.7702761937635186e-03, 2.1635243110750212e-03, +-7.1200256984063140e-03,-5.4207481161907198e-03,-2.9346551649376065e-03,-7.6089217282564875e-04, 5.0888599703891729e-04, 9.1283541889634889e-04, 8.0872033241664865e-04, 5.4133487927558949e-04, + 1.6992775822155942e-03, 1.0909694400968780e-03, 3.0982061476592928e-04,-2.0602518526822988e-04,-3.3992950779678953e-04,-2.4040342074230551e-04,-9.5923665623785619e-05,-2.9322116312344333e-06, +-6.0830814211871621e-04,-3.1799650284772708e-04, 2.9520501118840111e-06, 1.4456001571260554e-04, 1.1480530282073986e-04, 3.3568008676245392e-05,-1.6610642520250850e-05,-2.5677250818986259e-05, + 2.9031163927098914e-04, 1.1719515554941103e-04,-4.3414641823411531e-05,-7.7691821195661044e-05,-3.1907513239445523e-05, 9.5558694130449878e-06, 1.8277357622140737e-05, 9.4813334814550184e-06, +-1.7311648372157811e-04,-4.9367703674689010e-05, 4.3677611325779321e-05, 4.0852681420230092e-05, 2.6866312708433898e-06,-1.4089816727988915e-05,-8.7616229414903493e-06,-4.5332771880449699e-07, + 1.2374878004688908e-04, 2.0780616651349186e-05,-3.8913083943516870e-05,-2.0598487268699875e-05, 7.6424400670428095e-06, 1.0531945701195720e-05, 2.0145310646007361e-06,-2.3568177706655247e-06, +-1.0296816339553990e-04,-5.4730792647307382e-06, 3.4866238242836620e-05, 8.2885599026456798e-06,-1.0946242352467352e-05,-5.9592741809394965e-06, 1.5773112286696992e-06, 2.3600931614096791e-06, + 5.9382419917896750e-02, 5.2329881754562109e-02, 4.0737568936461313e-02, 2.8138926329110029e-02, 1.7344162249552729e-02, 9.6000355635548502e-03, 4.8025480928896181e-03, 2.1851750875970070e-03, +-7.0525381633346415e-03,-5.3773624909556547e-03,-2.9222604371704486e-03,-7.6901835659648130e-04, 4.9538032091553386e-04, 9.0324623690890907e-04, 8.0487029130331660e-04, 5.4119715009355541e-04, + 1.6751756723789868e-03, 1.0783428117304757e-03, 3.0990442683029784e-04,-2.0030450452483434e-04,-3.3536279223124265e-04,-2.3905320487276646e-04,-9.6573562679597982e-05,-3.9517216820914502e-06, +-5.9683286064851106e-04,-3.1334796971728158e-04, 1.2499951469918712e-06, 1.4148480617710903e-04, 1.1353123195755711e-04, 3.3939083306057285e-05,-1.5886535859728094e-05,-2.5298385030706910e-05, + 2.8348489093122948e-04, 1.1523701293243916e-04,-4.1698299327639084e-05,-7.6074104281222740e-05,-3.1794049597699050e-05, 9.0006389329806152e-06, 1.7928520830604659e-05, 9.4613399483222825e-06, +-1.6824787799879032e-04,-4.8540915507122064e-05, 4.2148641931881109e-05, 4.0035376227835106e-05, 2.9836915465892888e-06,-1.3673286478877642e-05,-8.6798121201323762e-06,-5.4572680131754910e-07, + 1.1970696249166826e-04, 2.0557384128779363e-05,-3.7543782398028868e-05,-2.0266705944692181e-05, 7.2135387330720675e-06, 1.0295066934527842e-05, 2.0752116214793984e-06,-2.2634970969063838e-06, +-9.9149578362888894e-05,-5.6842515635758567e-06, 3.3606712482725301e-05, 8.2985356215781345e-06,-1.0501481967086456e-05,-5.8842520805063211e-06, 1.4575516038146302e-06, 2.3059827616073972e-06, + 5.9101652195779578e-02, 5.2115646599045572e-02, 4.0620926451437167e-02, 2.8108006852333289e-02, 1.7363710379766601e-02, 9.6359745334326612e-03, 4.8346654781402073e-03, 2.2068195433826939e-03, +-6.9860055967340060e-03,-5.3344782328276011e-03,-2.9098637004189645e-03,-7.7691815613644549e-04, 4.8205629539967154e-04, 8.9371135453772399e-04, 8.0099482988093326e-04, 5.4101894337907916e-04, + 1.6515273639064049e-03, 1.0659005669702900e-03, 3.0992151360605645e-04,-1.9470554667186976e-04,-3.3084694560602283e-04,-2.3768858578463695e-04,-9.7194773659402592e-05,-4.9560940719282779e-06, +-5.8562679693611487e-04,-3.0877710326411741e-04,-3.8461482106225435e-07, 1.3847365501388090e-04, 1.1226193276039353e-04, 3.4288279422225152e-05,-1.5176316587621995e-05,-2.4920391913361016e-05, + 2.7684969367199747e-04, 1.1331176107137096e-04,-4.0042033476256171e-05,-7.4488814074111286e-05,-3.1669041964099145e-05, 8.4618809665235392e-06, 1.7583003752223827e-05, 9.4377245319492457e-06, +-1.6353793260062650e-04,-4.7723218831542598e-05, 4.0673449460337785e-05, 3.9231347176230558e-05, 3.2639473570072057e-06,-1.3266170721719245e-05,-8.5956685581633675e-06,-6.3443627386577947e-07, + 1.1581471376908390e-04, 2.0326207604892290e-05,-3.6223928687216492e-05,-1.9934756060653106e-05, 6.8021120981401256e-06, 1.0061236670451594e-05, 2.1312010006729103e-06,-2.1723353975798821e-06, +-9.5488506164191606e-05,-5.8705888066753186e-06, 3.2393558092781542e-05, 8.2971363936403958e-06,-1.0072427752623953e-05,-5.8068942618390400e-06, 1.3427276331463508e-06, 2.2521536394228955e-06, + 5.8823526976507237e-02, 5.1903116908609583e-02, 4.0504779832292080e-02, 2.8076775830790709e-02, 1.7382729148111509e-02, 9.6715332033785219e-03, 4.8666273555040048e-03, 2.2284560714312231e-03, +-6.9204100678976546e-03,-5.2920880282457880e-03,-2.8974675703738254e-03,-7.8459638945895319e-04, 4.6891188967242842e-04, 8.8423133058343831e-04, 7.9709508451827893e-04, 5.4080086390221856e-04, + 1.6283220396518666e-03, 1.0536396253640196e-03, 3.0987452540013824e-04,-1.8922577517415566e-04,-3.2638176799671960e-04,-2.3631042554054594e-04,-9.7787851378574307e-05,-5.9453665659602419e-06, +-5.7468241428784705e-04,-3.0428259521330530e-04,-1.9541403590238034e-06, 1.3552527577608944e-04, 1.1099785373012489e-04, 3.4616248426451050e-05,-1.4479850098733182e-05,-2.4543413413590272e-05, + 2.7039981907454175e-04, 1.1141903021134043e-04,-3.8443732260644669e-05,-7.2935419512742557e-05,-3.1533148703834563e-05, 7.9392213970239843e-06, 1.7240895995931215e-05, 9.4106330927032782e-06, +-1.5898078886320132e-04,-4.6914912026922956e-05, 3.9250092637535310e-05, 3.8440592141703663e-05, 3.5280852520734238e-06,-1.2868345719168123e-05,-8.5093759935414563e-06,-7.1954225595936574e-07, + 1.1206587683627837e-04, 2.0088044164212721e-05,-3.4951702163282296e-05,-1.9603075153003719e-05, 6.4075414113681337e-06, 9.8305430190879767e-06, 2.1826936776395871e-06,-2.0833203441979729e-06, +-9.1977832672065647e-05,-6.0338866609747963e-06, 3.1225074737165153e-05, 8.2852264609502403e-06,-9.6586064687653556e-06,-5.7274640079354143e-06, 1.2326921458328789e-06, 2.1986590092483972e-06, + 5.8548007130184918e-02, 5.1692273065343797e-02, 4.0389129004185911e-02, 2.8045242032448060e-02, 1.7401225698900610e-02, 9.7067137783373360e-03, 4.8984327759836752e-03, 2.2500830889008250e-03, +-6.8557340648411208e-03,-5.2501846858248880e-03,-2.8850745585795590e-03,-7.9205777413946313e-04, 4.5594508126371378e-04, 8.7480668988130887e-04, 7.9317216958015458e-04, 5.4054351481041662e-04, + 1.6055493790162328e-03, 1.0415569584914753e-03, 3.0976601976592582e-04,-1.8386270452965426e-04,-3.2196704205830355e-04,-2.3491956044499108e-04,-9.8353343198556839e-05,-6.9195824914944706e-06, +-5.6399242052475752e-04,-2.9986315230878064e-04,-3.4608590871282015e-06, 1.3263840325316331e-04, 1.0973941757568440e-04, 3.4923626855640276e-05,-1.3796998348397619e-05,-2.4167585712393294e-05, + 2.6412926821597687e-04, 1.0955843940910936e-04,-3.6901359884486081e-05,-7.1413389961541454e-05,-3.1387001210033893e-05, 7.4322911250902885e-06, 1.6902279975096745e-05, 9.3802080566221813e-06, +-1.5457082880686752e-04,-4.6116256593441119e-05, 3.7876701671204952e-05, 3.7663092176742335e-05, 3.7767674077322964e-06,-1.2479684415962017e-05,-8.4211105022585135e-06,-8.0113033249337992e-07, + 1.0845457221342640e-04, 1.9843781438621920e-05,-3.3725349002535998e-05,-1.9272067227521762e-05, 6.0292266619520649e-06, 9.6030638727902350e-06, 2.2298782850873015e-06,-1.9964375568425199e-06, +-8.8610790774804477e-05,-6.1758233691704558e-06, 3.0099621241471708e-05, 8.2636186046932288e-06,-9.2595543893004958e-06,-5.6462090527644045e-06, 1.1273002025160657e-06, 2.1455482515363699e-06, + 5.8275056219217837e-02, 5.1483095736584300e-02, 4.0273973793838708e-02, 2.8013414038543100e-02, 1.7419207095726620e-02, 9.7415184835850949e-03, 4.9300808347200794e-03, 2.2716990370395258e-03, +-6.7919604826335370e-03,-5.2087611342858803e-03,-2.8726870760791279e-03,-7.9930692933987552e-04, 4.4315385672869662e-04, 8.6543792431977538e-04, 7.8922717764817046e-04, 5.4024749741059730e-04, + 1.5831993483476567e-03, 1.0296495893552830e-03, 3.0959846476085080e-04,-1.7861389942049532e-04,-3.1760253403543274e-04,-2.3351680163500221e-04,-9.8891790894875672e-05,-7.8787905100720151e-06, +-5.5354975899237369e-04,-2.9551749673216356e-04,-4.9069686710348200e-06, 1.2981179344061266e-04, 1.0848702227354471e-04, 3.5211036585327892e-05,-1.3127620134394897e-05,-2.3793039361981875e-05, + 2.5803226226021013e-04, 1.0772959795401579e-04,-3.5412953957463010e-05,-6.9922195857602041e-05,-3.1231204863645822e-05, 6.9407261929770335e-06, 1.6567231209632914e-05, 9.3465884382509252e-06, +-1.5030266430619433e-04,-4.5327479838921087e-05, 3.6551475624508111e-05, 3.6898812810891711e-05, 4.0106323674766004e-06,-1.2100056834834454e-05,-8.3310407307391689e-06,-8.7928547440605470e-07, + 1.0497518446727325e-04, 1.9594242153195054e-05,-3.2543179873541521e-05,-1.8942104761830178e-05, 5.6665861957894628e-06, 9.3788675123751805e-06, 2.2729377053661602e-06,-1.9116707546369618e-06, +-8.5380942314078193e-05,-6.2979672464649877e-06, 2.9015613877721435e-05, 8.2330769279063624e-06,-8.8748174719499954e-06,-5.5633623113620652e-06, 1.0264092016947896e-06, 2.0928670877708775e-06, + 5.8004638482256198e-02, 5.1275565870150329e-02, 4.0159313933479997e-02, 2.7981300247482101e-02, 1.7436680321835561e-02, 9.7759495634310491e-03, 4.9615706701254146e-03, 2.2933023811073298e-03, +-6.7290726121058686e-03,-5.1678104204116032e-03,-2.8603074369306022e-03,-8.0634837779892596e-04, 4.3053621228484468e-04, 8.5612549383533992e-04, 7.8526117974670861e-04, 5.3991341096023713e-04, + 1.5612621916942654e-03, 1.0179145917559125e-03, 3.0937424208660538e-04,-1.7347697386570649e-04,-3.1328799473140064e-04,-2.3210293566220590e-04,-9.9403730536423967e-05,-8.8230443949744927e-06, +-5.4334759993835292e-04,-2.9124436646675383e-04,-6.2945897036642681e-06, 1.2704422348487987e-04, 1.0724104208986116e-04, 3.5479085037156181e-05,-1.2471571366503491e-05,-2.3419899421875561e-05, + 2.5210323347159909e-04, 1.0593210668486002e-04,-3.3976622792109348e-05,-6.8461309306529602e-05,-3.1066339964827791e-05, 6.4641678946878963e-06, 1.6235818618027196e-05, 9.3099098669957605e-06, +-1.4617112678673907e-04,-4.4548777389066553e-05, 3.5272679882135600e-05, 3.6147705272866859e-05, 4.2302957700856881e-06,-1.1729330450685694e-05,-8.2393281228658347e-06,-9.5409196617162812e-07, + 1.0162234939767252e-04, 1.9340188381577259e-05,-3.1403567674042102e-05,-1.8613530597616923e-05, 5.3190563230297509e-06, 9.1580131882523695e-06, 2.3120491638415600e-06,-1.8290018974056104e-06, +-8.2282161016095269e-05,-6.4017836983811523e-06, 2.7971524668102855e-05, 8.1943194933301649e-06,-8.5039514840526219e-06,-5.4791425884161775e-06, 9.2987897828728219e-07, 2.0406577461782247e-06, + 5.7736718818584429e-02, 5.1069664689662182e-02, 4.0045149064659898e-02, 2.7948908878657641e-02, 1.7453652280525530e-02, 9.8100092799590574e-03, 4.9929014630255633e-03, 2.3148916102901959e-03, +-6.6670541289222465e-03,-5.1273257070274456e-03,-2.8479378616004386e-03,-8.1318654778881130e-04, 4.1809015441067465e-04, 8.4686982738467302e-04, 7.8127522557333833e-04, 5.3954185246728745e-04, + 1.5397284218948010e-03, 1.0063490896530716e-03, 3.0909565011617325e-04,-1.6844959037670541e-04,-3.0902316043643905e-04,-2.3067872506709101e-04,-9.9889692374949832e-05,-9.7524028142978924e-06, +-5.3337933224172941e-04,-2.8704251561068907e-04,-7.6257684809678621e-06, 1.2433449160567162e-04, 1.0600182856507497e-04, 3.5728365391464272e-05,-1.1828705325252586e-05,-2.3048285593553377e-05, + 2.4633681663104035e-04, 1.0416555920946736e-04,-3.2590542799904794e-05,-6.7030204631757869e-05,-3.0892962633962982e-05, 6.0022628697956612e-06, 1.5908104801707356e-05, 9.2703046155478240e-06, +-1.4217125742157298e-04,-4.3780315532390442e-05, 3.4038643704637026e-05, 3.5409707640962686e-05, 4.4363510586237395e-06,-1.1367370538847550e-05,-8.1461271457374535e-06,-1.0256333373329171e-06, + 9.8390941889182546e-05, 1.9082325528290804e-05,-3.0304945333015592e-05,-1.8286659734047538e-05, 4.9860909268888153e-06, 8.9405516678197302e-06, 2.3473843307823979e-06,-1.7484113238433447e-06, +-7.9308616360891735e-05,-6.4886417872403491e-06, 2.6965879703903395e-05, 8.1480208352630351e-06,-8.1465221043434248e-06,-5.3937552478980522e-06, 8.3757187998798430e-07, 1.9889591284120916e-06, + 5.7471262772940672e-02, 5.0865373689939743e-02, 3.9931478741926971e-02, 2.7916247976188580e-02, 1.7470129795568331e-02, 9.8436999118075505e-03, 5.0240724358116672e-03, 2.3364652376062041e-03, +-6.6058890830009293e-03,-5.0873002710082119e-03,-2.8355804802379231e-03,-8.1982577503797449e-04, 4.0581370040856587e-04, 8.3767132389350740e-04, 7.7727034373361974e-04, 5.3913341649860797e-04, + 1.5185888119927174e-03, 9.9495025651595397e-04, 3.0876490681185347e-04,-1.6352945911624062e-04,-3.0480775381793931e-04,-2.2924490894400316e-04,-1.0035020074505808e-04,-1.0666929119242802e-05, +-5.2363855547676343e-04,-2.8291071464381259e-04,-8.9024796752162449e-06, 1.2168141699678395e-04, 1.0476971146405287e-04, 3.5959456802180892e-05,-1.1198872908689514e-05,-2.2678312354266145e-05, + 2.4072784083295083e-04, 1.0242954303474729e-04,-3.1252955984238431e-05,-6.5628358878132130e-05,-3.0711605686492847e-05, 5.5546631858306752e-06, 1.5584146318937386e-05, 9.2279016317167498e-06, +-1.3829829779820355e-04,-4.3022233413255964e-05, 3.2847757871258072e-05, 3.4684745921176892e-05, 4.6293701772289435e-06,-1.1014040505725213e-05,-8.0515855083988243e-06,-1.0939923010742932e-06, + 9.5276064384947583e-05, 1.8821306061360163e-05,-2.9245803683854325e-05,-1.7961781017935465e-05, 4.6671610623356668e-06, 8.7265257635208285e-06, 2.3791094205625676e-06,-1.6698778797593725e-06, +-7.6454758323587420e-05,-6.5598203889471846e-06, 2.5997257497637113e-05, 8.0948143319039929e-06,-7.8021049794620800e-06,-5.3073928694250340e-06, 7.4935284273046068e-07, 1.9378069639050880e-06, + 5.7208236520752492e-02, 5.0662674632479539e-02, 3.9818302436377351e-02, 2.7883325412584030e-02, 1.7486119611653288e-02, 9.8770237529868243e-03, 5.0550828516012251e-03, 2.3580217998042212e-03, +-6.5455618882729535e-03,-5.0477275013104742e-03,-2.8232373358351159e-03,-8.2627030462043005e-04, 3.9370487893229320e-04, 8.2853035318352156e-04, 7.7324754197958308e-04, 5.3868869499679997e-04, + 1.4978343869624794e-03, 9.8371531466274597e-04, 3.0838415253866798e-04,-1.5871433706188070e-04,-3.0064148477275008e-04,-2.2780220349816118e-04,-1.0078577397352702e-04,-1.1566691137834210e-05, +-5.1411907229973342e-04,-2.7884775064947426e-04,-1.0126628910697992e-05, 1.1908383970830977e-04, 1.0354499969071358e-04, 3.6172924615896412e-05,-1.0581922869073478e-05,-2.2310089089249739e-05, + 2.3527132165025917e-04, 1.0072364060909780e-04,-2.9962167524105857e-05,-6.4255252275344021e-05,-3.0522779478189002e-05, 5.1210264058424045e-06, 1.5263993951429659e-05, 9.1828265719678786e-06, +-1.3454768104116137e-04,-4.2274645075081983e-05, 3.1698472402538569e-05, 3.3972735063190653e-05, 4.8099042479485534e-06,-1.0669202195148502e-05,-7.9558443792119982e-06,-1.1592506963839100e-06, + 9.2273035966079387e-05, 1.8557732996387239e-05,-2.8224689394656971e-05,-1.7639158748989237e-05, 4.3617545606092342e-06, 8.5159708282822084e-06, 2.4073852987828912e-06,-1.5933790432091051e-06, +-7.3715302969692148e-05,-6.6165139374654261e-06, 2.5064287343818325e-05, 8.0352944716272397e-06,-7.4702857666698901e-06,-5.2202358650327975e-06, 6.6508944485014921e-07, 1.8872339653333784e-06, + 5.6947606853775687e-02, 5.0461549541010738e-02, 3.9705619539079529e-02, 2.7850148892332189e-02, 1.7501628394851119e-02, 9.9099831117330749e-03, 5.0859320134087694e-03, 2.3795598572554028e-03, +-6.4860573127649493e-03,-5.0086008970324919e-03,-2.8109103872759195e-03,-8.3252429281175169e-04, 3.8176173048156195e-04, 8.1944725687676211e-04, 7.6920780745171318e-04, 5.3820827710516269e-04, + 1.4774564157324574e-03, 9.7264153459356278e-04, 3.0795545277587186e-04,-1.5400202717417836e-04,-2.9652405124413930e-04,-2.2635130259329945e-04,-1.0119692429812004e-04,-1.2451760973846023e-05, +-5.0481488113889462e-04,-2.7485242749882911e-04,-1.1300055242953716e-05, 1.1654062051004384e-04, 1.0232798217044923e-04, 3.6369320592443397e-05,-9.9777020385506411e-06,-2.1943720222732815e-05, + 2.2996245364006551e-04, 9.9047430290561783e-05,-2.8716543450551624e-05,-6.2910368659624454e-05,-3.0326972725738967e-05, 4.7010156458240880e-06, 1.4947692961283772e-05, 9.1352018376314571e-06, +-1.3091502334950373e-04,-4.1537641377574361e-05, 3.0589294371001670e-05, 3.3273579908965776e-05, 4.9784842358081511e-06,-1.0332716178641562e-05,-7.8590385967941775e-06,-1.2214894361335545e-06, + 8.9377381971929369e-05, 1.8292163175074232e-05,-2.7240202976651949e-05,-1.7319034186646117e-05, 4.0693756244868822e-06, 8.3089152330302618e-06, 2.4323675871953885e-06,-1.5188910412859041e-06, +-7.1085218796855133e-05,-6.6598378355324096e-06, 2.4165647734693972e-05, 7.9700189820735000e-06,-7.1506601335350107e-06,-5.1324530834296487e-06, 5.8465195966463033e-07, 1.8372699740231779e-06, + 5.6689341166123723e-02, 5.0261980697127583e-02, 3.9593429364379630e-02, 2.7816725955415782e-02, 1.7516662733097248e-02, 9.9425803093981645e-03, 5.1166192633263054e-03, 2.4010779938378512e-03, +-6.4273604689961406e-03,-4.9699140654999238e-03,-2.7986015122791266e-03,-8.3859180891179830e-04, 3.6998230786430136e-04, 8.1042234927856949e-04, 7.6515210692399815e-04, 5.3769274900060610e-04, + 1.4574464034962167e-03, 9.6172623431512588e-04, 3.0748080073207847e-04,-1.4939037757108367e-04,-2.9245514000367305e-04,-2.2489287829079727e-04,-1.0158415779510125e-04,-1.3322214810960109e-05, +-4.9572016918109085e-04,-2.7092356599500136e-04,-1.2424533548678304e-05, 1.1405064073987555e-04, 1.0111892869941514e-04, 3.6549183128163382e-05,-9.3860555450144646e-06,-2.1579305347364063e-05, + 2.2479660318608949e-04, 9.7400487235518895e-05,-2.7514508405396918e-05,-6.1593195861071886e-05,-3.0124653299379680e-05, 4.2942996197447013e-06, 1.4635283340201531e-05, 9.0851466128461094e-06, +-1.2739611595057059e-04,-4.0811291777087015e-05, 2.9518785782961354e-05, 3.2587176087684823e-05, 5.1356215943170112e-06,-1.0004442024807357e-05,-7.7612968780176094e-06,-1.2807884591207279e-06, + 8.6584824173483580e-05, 1.8025110315537722e-05,-2.6290996841185268e-05,-1.7001626983948811e-05, 3.7895444308721554e-06, 8.1053808160327567e-06, 2.4542067731953606e-06,-1.4463889625206655e-06, +-6.8559713857945865e-05,-6.6908334851667069e-06, 2.3300064777031070e-05, 7.8995108696534993e-06,-6.8428337481645395e-06,-5.0442023802570352e-06, 5.0791339284709194e-07, 1.7879421033088780e-06, + 5.6433407440674939e-02, 5.0063950635998333e-02, 3.9481731153090852e-02, 2.7783063980755189e-02, 1.7531229136692840e-02, 9.9748176793741927e-03, 5.1471439817135870e-03, 2.4225748168147502e-03, +-6.3694568046766056e-03,-4.9316607203794549e-03,-2.7863125102384062e-03,-8.4447683703463283e-04, 3.5836467662846150e-04, 8.0145591823905377e-04, 7.6108138705167569e-04, 5.3714269373427662e-04, + 1.4377960842971507e-03, 9.5096677866164919e-04, 3.0696211986584428e-04,-1.4487728070842034e-04,-2.8843442739993506e-04,-2.2342758137974816e-04,-1.0194797431519430e-04,-1.4178132722066842e-05, +-4.8682930563550154e-04,-2.6706000398536950e-04,-1.3501776826236819e-05, 1.1161280213667645e-04, 9.9918090762999277e-05, 3.6713037480580772e-05,-8.8068270181100919e-06,-2.1216939352101564e-05, + 2.1976930165013204e-04, 9.5782384222711114e-05,-2.6354543485905123e-05,-6.0303226054778353e-05,-2.9916268990820425e-05, 3.9005526745406675e-06, 1.4326800050323454e-05, 9.0327769043862159e-06, +-1.2398691742742093e-04,-4.0095645996603854e-05, 2.8485561542122557e-05, 3.1913410851778770e-05, 5.2818088967748616e-06,-9.6842385520098862e-06,-7.6627420212505678e-06,-1.3372266866364090e-06, + 8.3891271430817073e-05, 1.7757047882211914e-05,-2.5375773429696837e-05,-1.6687136535569182e-05, 3.5217967306768747e-06, 7.9053833116799683e-06, 2.4730483198264004e-06,-1.3758468633005517e-06, +-6.6134223548605165e-05,-6.7104730250707817e-06, 2.2466310661240095e-05, 7.8242603403716089e-06,-6.5464222399965279e-06,-4.9556311687397156e-06, 4.3474951301790350e-07, 1.7392748759878211e-06, + 5.6179774235846122e-02, 4.9867442142148721e-02, 3.9370524075571262e-02, 2.7749170189580591e-02, 1.7545334038822490e-02, 1.0006697566052230e-02, 5.1775055863983819e-03, 2.4440489567062718e-03, +-6.3123320936974009e-03,-4.8938346798191729e-03,-2.7740451049634157e-03,-8.5018327786576947e-04, 3.4690691546456626e-04, 7.9254822599347449e-04, 7.5699657462140885e-04, 5.3655869107973068e-04, + 1.4184974138782280e-03, 9.4036057861109600e-04, 3.0640126631628455e-04,-1.4046067256737074e-04,-2.8446158007520018e-04,-2.2195604189790327e-04,-1.0228886742764259e-04,-1.5019598483657502e-05, +-4.7813683526713203e-04,-2.6326059644083029e-04,-1.4533438412268570e-05, 1.0922602665994972e-04, 9.8725702324200235e-05, 3.6861395994098147e-05,-8.2398587856668068e-06,-2.0856712548483242e-05, + 2.1487623882630175e-04, 9.4192692410273915e-05,-2.5235184168093724e-05,-5.9039956079950407e-05,-2.9702248256390279e-05, 3.5194548156291532e-06, 1.4022273256836514e-05, 8.9782055831872564e-06, +-1.2068354641602783e-04,-3.9390735580235815e-05, 2.7488287484233052e-05, 3.1252163861401510e-05, 5.4175204517618527e-06,-9.3719640648048180e-06,-7.5634911048299208e-06,-1.3908819833029126e-06, + 8.1292810835792016e-05, 1.7488411764381909e-05,-2.4493283399486472e-05,-1.6375743252866288e-05, 3.2656834506361410e-06, 7.7089327584257040e-06, 2.4890327762184359e-06,-1.3072378686071732e-06, +-6.3804399071410101e-05,-6.7196637521088870e-06, 2.1663202153519462e-05, 7.7447266248784534e-06,-6.2610511416735443e-06,-4.8668769483810384e-06, 3.6503887534341128e-07, 1.6912903562540171e-06, + 5.5928410672720710e-02, 4.9672438245319528e-02, 3.9259807234694022e-02, 2.7715051648734518e-02, 1.7558983796087582e-02, 1.0038222323814129e-02, 5.2077035318867414e-03, 2.4654990671555540e-03, +-6.2559724274011824e-03,-4.8564298646166099e-03,-2.7618009473255045e-03,-8.5571495038703690e-04, 3.3560711658005282e-04, 7.8369950998208489e-04, 7.5289857680353994e-04, 5.3594131738840837e-04, + 1.3995425627845726e-03, 9.2990509059921300e-04, 3.0580003124663826e-04,-1.3613853184957767e-04,-2.8053625565091088e-04,-2.2047886964376637e-04,-1.0260732437189632e-04,-1.5846699395212233e-05, +-4.6963747218535957e-04,-2.5952421550659664e-04,-1.5521114116699600e-05, 1.0688925629761642e-04, 9.7541980582339482e-05, 3.6994758326863426e-05,-7.6849920611101439e-06,-2.0498710795212313e-05, + 2.1011325667876293e-04, 9.2630982033677046e-05,-2.4155018307369213e-05,-5.7802887729150823e-05,-2.9483000935141398e-05, 3.1506917226853517e-06, 1.3721728553009711e-05, 8.9215424273169740e-06, +-1.1748227464508589e-04,-3.8696575345668884e-05, 2.6525678483349542e-05, 3.0603307920197510e-05, 5.5432129014551199e-06,-9.0674765733806901e-06,-7.4636556816765632e-06,-1.4418311216792027e-06, + 7.8785699299417010e-05, 1.7219602786206616e-05,-2.3642323869498591e-05,-1.6067609769359067e-05, 3.0207703000878333e-06, 7.5160338840367106e-06, 2.5022958899812889e-06,-1.2405342679949140e-06, +-6.1566096513210387e-05,-6.7192522660666730e-06, 2.0889599122365796e-05, 7.6613397110527197e-06,-5.9863558175603565e-06,-4.7780678076433561e-06, 2.9866283526916226e-07, 1.6440082778364214e-06, + 5.5679286422520763e-02, 4.9478922216396742e-02, 3.9149579668713387e-02, 2.7680715273905990e-02, 1.7572184689053930e-02, 1.0069394316056831e-02, 5.2377373085834324e-03, 2.4869238247890529e-03, +-6.2003642061240205e-03,-4.8194402964142347e-03,-2.7495816178111018e-03,-8.6107559356943600e-04, 3.2446338604697270e-04, 7.7490998364955488e-04, 7.4878828140613387e-04, 5.3529114545223817e-04, + 1.3809239097097858e-03, 9.1959781583215994e-04, 3.0516014310374637e-04,-1.3190887917990880e-04,-2.7665810338363595e-04,-2.1899665467940341e-04,-1.0290382601667260e-04,-1.6659526103538153e-05, +-4.6132609387762591e-04,-2.5584975052640041e-04,-1.6466344278827643e-05, 1.0460145286229384e-04, 9.6367126704007943e-05, 3.7113611677747483e-05,-7.1420671218802996e-06,-2.0143015621021837e-05, + 2.0547634335122550e-04, 9.1096823047973345e-05,-2.3112684214356225e-05,-5.6591528008072582e-05,-2.9258918944239859e-05, 2.7939547575941436e-06, 1.3425187177213537e-05, 8.8628941663826629e-06, +-1.1437952030325215e-04,-3.8013164740468998e-05, 2.5596496628702013e-05, 2.9966709662354283e-05, 5.6593258059821259e-06,-8.7706339992230591e-06,-7.3633419687332689e-06,-1.4901497508598356e-06, + 7.6366355562783149e-05, 1.6950989058519623e-05,-2.2821736727477042e-05,-1.5762882075206492e-05, 2.7866373777180774e-06, 7.3266864735422434e-06, 2.5129687186288683e-06,-1.1757076059335268e-06, +-5.9415366504263529e-05,-6.7100283559099359e-06, 2.0144403105760999e-05, 7.5745019792695180e-06,-5.7219813702863823e-06,-4.6893229098728252e-06, 2.3550555827257579e-07, 1.5974461659972538e-06, + 5.5432371694412223e-02, 4.9286877563413489e-02, 3.9039840354030797e-02, 2.7646167832797750e-02, 1.7584942922813020e-02, 1.0100215914248169e-02, 5.2676064420225637e-03, 2.5083219290715241e-03, +-6.1454941309987340e-03,-4.7828600959222145e-03,-2.7373886289867519e-03,-8.6626886803425548e-04, 3.1347384412385229e-04, 7.6617983722460092e-04, 7.4466655713048904e-04, 5.3460874437319134e-04, + 1.3626340350765195e-03, 9.0943629959813581e-04, 3.0448326979731289e-04,-1.2776977631786526e-04,-2.7282676479207640e-04,-2.1750996782440141e-04,-1.0317884682587786e-04,-1.7458172432024965e-05, +-4.5319773547838373e-04,-2.5223610804108744e-04,-1.7370615748777654e-05, 1.0236159777838425e-04, 9.5201326526135502e-05, 3.7218431013887878e-05,-6.6109234795516241e-06,-1.9789704345642550e-05, + 2.0096162743729628e-04, 8.9589785715774451e-05,-2.2106868800626786e-05,-5.5405389370068681e-05,-2.9030376950249238e-05, 2.4489409636910129e-06, 1.3132666222923120e-05, 8.8023645268989883e-06, +-1.1137184172152183e-04,-3.7340489103760224e-05, 2.4699549464895358e-05, 2.9342230198229068e-05, 5.7662822100470542e-06,-8.4812943649371487e-06,-7.2626510328893509e-06,-1.5359123680989224e-06, + 7.4031352617761606e-05, 1.6682908173183189e-05,-2.2030406987462009e-05,-1.5461690593247027e-05, 2.5628787864230036e-06, 7.1408857152007092e-06, 2.5211777431727853e-06,-1.1127287684100932e-06, +-5.7348444444578417e-05,-6.6927286255706599e-06, 1.9426555900787069e-05, 7.4845897622907392e-06,-5.4675825416435096e-06,-4.6007529523687334e-06, 1.7545401931441526e-07, 1.5516194571581049e-06, + 5.5187637223632437e-02, 4.9096288027622260e-02, 3.8930588207863472e-02, 2.7611415948227400e-02, 1.7597264627555311e-02, 1.0130689497013521e-02, 5.2973104921084421e-03, 2.5296921021559292e-03, +-6.0913491960101762e-03,-4.7466834811691339e-03,-2.7252234278781276e-03,-8.7129835768287936e-04, 3.0263662555326740e-04, 7.5750923847986082e-04, 7.4053425382791457e-04, 5.3389467943955110e-04, + 1.3446657148410424e-03, 8.9941813058032338e-04, 3.0377102080074610e-04,-1.2371932537730821e-04,-2.6904187425684663e-04,-2.1601936114042227e-04,-1.0343285483129742e-04,-1.8242735214667703e-05, +-4.4524758426071898e-04,-2.4868221176614527e-04,-1.8235363795001628e-05, 1.0016869185942989e-04, 9.4044751233363923e-05, 3.7309679297511597e-05,-6.0914000414108519e-06,-1.9438850199031090e-05, + 1.9656537249457371e-04, 8.8109441149237860e-05,-2.1136305795798557e-05,-5.4243989923936919e-05,-2.8797733019444204e-05, 2.1153530587024477e-06, 1.2844178840784082e-05, 8.7400542789634813e-06, +-1.0845593134533585e-04,-3.6678520848245667e-05, 2.3833688301131552e-05, 2.8729725714626565e-05, 5.8644891969736031e-06,-8.1993159725675861e-06,-7.1616789711718465e-06,-1.5791922943515943e-06, + 7.1777410497090178e-05, 1.6415669267221420e-05,-2.1267261211653881e-05,-1.5164151187299556e-05, 2.3491022469895437e-06, 6.9586225323709443e-06, 2.5270449791821022e-06,-1.0515680636445799e-06, +-5.5361741229868758e-05,-6.6680399092939477e-06, 1.8735038206162717e-05, 7.3919548091562026e-06,-5.2228235900277103e-06,-4.5124606132763688e-06, 1.1839800148817542e-07, 1.5065416113327276e-06, + 5.4945054259931167e-02, 4.8907137579636842e-02, 3.8821822090820128e-02, 2.7576466101164251e-02, 1.7609155859155311e-02, 1.0160817449252390e-02, 5.3268490523667080e-03, 2.5510330887285218e-03, +-6.0379166802943252e-03,-4.7109047657797054e-03,-2.7130873982668391e-03,-8.7616757129544559e-04, 2.9194987983568316e-04, 7.4889833347277328e-04, 7.3639220275744516e-04, 5.3314951200871593e-04, + 1.3270119145146198e-03, 8.8954094017037154e-04, 3.0302494917768940e-04,-1.1975566805566659e-04,-2.6530305959322938e-04,-2.1452536840703808e-04,-1.0366631161147196e-04,-1.9013314134814531e-05, +-4.3747097434424821e-04,-2.4518700254703876e-04,-1.9061973942940741e-05, 9.8021755078545264e-05, 9.2897558009023064e-05, 3.7387807712949123e-05,-5.5833352643688291e-06,-1.9090522438680447e-05, + 1.9228397179720945e-04, 8.6655361803662215e-05,-2.0199774028747612e-05,-5.3106853620363830e-05,-2.8561329244697884e-05, 1.7928994196783624e-06, 1.2559734434132802e-05, 8.6760612837102025e-06, +-1.0562860999354724e-04,-3.6027220557090806e-05, 2.2997806577994204e-05, 2.8129048039644638e-05, 5.9543384243574982e-06,-7.9245575668322369e-06,-7.0605170876680653e-06,-1.6200616525761342e-06, + 6.9601389436456431e-05, 1.6149554944571196e-05,-2.0531265977043745e-05,-1.4870366120871410e-05, 2.1449287227999856e-06, 6.7798838937212460e-06, 2.5306880900506525e-06,-9.9219529931109021e-07, +-5.3451834491885234e-05,-6.6366024504482171e-06, 1.8068868282349378e-05, 7.2969256865955114e-06,-4.9873781688976977e-06,-4.4245409706027147e-06, 6.4230084345489943e-08, 1.4622242223098143e-06, + 5.4704594556314497e-02, 4.8719410415642331e-02, 3.8713540809385917e-02, 2.7541324633702551e-02, 1.7620622599766909e-02, 1.0190602161284380e-02, 5.3562217492058349e-03, 2.5723436558493821e-03, +-5.9851841406721659e-03,-4.6755183572802228e-03,-2.7009818629074520e-03,-8.8087994409892859e-04, 2.8141177148110000e-04, 7.4034724726739810e-04, 7.3224121684431574e-04, 5.3237379939638074e-04, + 1.3096657833919431e-03, 8.7980240178453300e-04, 3.0224655353600560e-04,-1.1587698487220788e-04,-2.6160994259873593e-04,-2.1302850558818046e-04,-1.0387967227669620e-04,-1.9770011568583557e-05, +-4.2986338160741011e-04,-2.4174943829654823e-04,-1.9851783745517091e-05, 9.5919826331218323e-05, 9.1759890662098829e-05, 3.7453255892375305e-05,-5.0865673009320862e-06,-1.8744786465036984e-05, + 1.8811394331086188e-04, 8.5227121930400159e-05,-1.9296095774371221e-05,-5.1993510415240606e-05,-2.8321492352459965e-05, 1.4812940626157510e-06, 1.2279338847008466e-05, 8.6104805416838025e-06, +-1.0288682138046172e-04,-3.5386538009693677e-05, 2.2190838297386927e-05, 2.7540045167675817e-05, 6.0362066471395563e-06,-7.6568784880929350e-06,-6.9592520648945347e-06,-1.6585913493588306e-06, + 6.7500283370768054e-05, 1.5884823081131052e-05,-1.9821426400658911e-05,-1.4580424956144532e-05, 1.9499920451091747e-06, 6.6046531104866238e-06, 2.5322204976584252e-06,-9.3457985466625525e-07, +-5.1615460289636999e-05,-6.5990128913143103e-06, 1.7427100659424614e-05, 7.1998090959245277e-06,-4.7609291864586194e-06,-4.3370819094414938e-06, 1.2845631592032983e-08, 1.4186771216880830e-06, + 5.4466230358082998e-02, 4.8533090953672697e-02, 3.8605743118320671e-02, 2.7505997751972960e-02, 1.7631670758428440e-02, 1.0220046028023511e-02, 5.3854282411889397e-03, 2.5936225927886240e-03, +-5.9331394044103009e-03,-4.6405187554312555e-03,-2.6889080856678169e-03,-8.8543883930499584e-04, 2.7102048023926878e-04, 7.3185608463792809e-04, 7.2808209093886377e-04, 5.3156809477188484e-04, + 1.2926206489790454e-03, 8.7020023018261061e-04, 3.0143727991231717e-04,-1.1208149441591488e-04,-2.5796213957597354e-04,-2.1152927128978937e-04,-1.0407338545957430e-04,-2.0512932432875360e-05, +-4.2242041879643477e-04,-2.3836849391471737e-04,-2.0606084488821862e-05, 9.3861963192065943e-05, 9.0631880230128376e-05, 3.7506452140942690e-05,-4.6009341380306035e-06,-1.8401703934896954e-05, + 1.8405192488171740e-04, 8.3824297990024531e-05,-1.8424135161825530e-05,-5.0903496412916243e-05,-2.8078534288686466e-05, 1.1802566156444229e-06, 1.2002994545828874e-05, 8.5434042417152963e-06, +-1.0022762689169287e-04,-3.4756413137335747e-05, 2.1411756510085596e-05, 2.6962561750027324e-05, 6.1104562249705937e-06,-7.3961388127770672e-06,-6.8579661315309036e-06,-1.6948510589598346e-06, + 6.5471213754357121e-05, 1.5621708513495186e-05,-1.9136784715003502e-05,-1.4294405402864587e-05, 1.7639385457209569e-06, 6.4329101160195712e-06, 2.5317514938861923e-06,-8.7869074938504080e-07, +-4.9849505240861935e-05,-6.5558270720451476e-06, 1.6808824878682824e-05, 7.1008911225607772e-06,-4.5431686603165669e-06,-4.2501645076630316e-06,-3.5857228469104007e-08, 1.3759084803463074e-06, + 5.4229934392155031e-02, 4.8348163829953987e-02, 3.8498427722972572e-02, 2.7470491528992721e-02, 1.7642306171676579e-02, 1.0249151448180440e-02, 5.4144682183159768e-03, 2.6148687108585571e-03, +-5.8817705622010441e-03,-4.6059005505872663e-03,-2.6768672735953403e-03,-8.8984754961786081e-04, 2.6077420130931825e-04, 7.2342493075399153e-04, 7.2391560207575763e-04, 5.3073294705954050e-04, + 1.2758700116137778e-03, 8.6073218079002521e-04, 3.0059852358971717e-04,-1.0836745260338863e-04,-2.5435926183170552e-04,-2.1002814720843361e-04,-1.0424789331108593e-04,-2.1242184037847012e-05, +-4.1513783082375256e-04,-2.3504316119228792e-04,-2.1326122835740229e-05, 9.1847241666578557e-05, 8.9513645558847449e-05, 3.7547813660702425e-05,-4.1262737285702812e-06,-1.8061332872917417e-05, + 1.8009466963146465e-04, 8.2446469027210235e-05,-1.7582796641227813e-05,-4.9836353991125829e-05,-2.7832752784422295e-05, 8.8951228682626583e-07, 1.1730700794246638e-05, 8.4749218105354901e-06, +-9.7648200604254410e-05,-3.4136776910873891e-05, 2.0659571857436411e-05, 2.6396439553786885e-05, 6.1774356143809642e-06,-7.1421994828836887e-06,-6.7567372254230971e-06,-1.7289092103026921e-06, + 6.3511423693380519e-05, 1.5360424614413361e-05,-1.8476418889513839e-05,-1.4012374120953586e-05, 1.5864266968111577e-06, 6.2646317300988011e-06, 2.5293863508522521e-06,-8.2449670795708404e-07, +-4.8150999078967158e-05,-6.5075626429624132e-06, 1.6213164262707032e-05, 7.0004384236254594e-06,-4.3337975671800835e-06,-4.1638634038106829e-06,-8.1977625860465895e-08, 1.3339249049630965e-06, + 5.3995679856666520e-02, 4.8164613895313332e-02, 3.8391593281511018e-02, 2.7434811907456391e-02, 1.7652534604168171e-02, 1.0277920823491660e-02, 5.4433414013162961e-03, 2.6360808432420021e-03, +-5.8310659613531879e-03,-4.5716584220838186e-03,-2.6648605789118471e-03,-8.9410929871271833e-04, 2.5067114553003686e-04, 7.1505385184821545e-04, 7.1974250973324064e-04, 5.2986890084578183e-04, + 1.2594075392693693e-03, 8.5139604902485788e-04, 2.9973163085068866e-04,-1.0473315194662355e-04,-2.5080091615334749e-04,-2.0852559857097652e-04,-1.0440363150172015e-04,-2.1957875943830240e-05, +-4.0801149024451144e-04,-2.3177244870127567e-04,-2.2013102408719614e-05, 8.9874755937862993e-05, 8.8405293859861173e-05, 3.7577746773062126e-05,-3.6624241161776089e-06,-1.7723727781086704e-05, + 1.7623904154323577e-04, 8.1093217013958796e-05,-1.6771023509072861e-05,-4.8791631907393586e-05,-2.7584431902443110e-05, 6.0879182714152576e-07, 1.1462453821621138e-05, 8.4051199627862850e-06, +-9.5145824529276979e-05,-3.3527552172262116e-05, 1.9933331170220235e-05, 2.5841517887823438e-05, 6.2374798475690328e-06,-6.8949224255495916e-06,-6.6556391522093569e-06,-1.7608329763632453e-06, + 6.1618272357014863e-05, 1.5101164775983280e-05,-1.7839441306431021e-05,-1.3734387473403892e-05, 1.4171267550471663e-06, 6.0997919096031398e-06, 2.5252264300677977e-06,-7.7196622042640766e-07, +-4.6517107581031582e-05,-6.4547015279323414e-06, 1.5639274732781999e-05, 6.8986993449604073e-06,-4.1325256823360396e-06,-4.0782471499992651e-06,-1.2561197509595236e-07, 1.2927315306557769e-06, + 5.3763440410839233e-02, 4.7982426211651143e-02, 3.8285238407080813e-02, 2.7398964702467929e-02, 1.7662361749309231e-02, 1.0306356557975120e-02, 5.4720475409515638e-03, 2.6572578448170220e-03, +-5.7810141991880906e-03,-4.5377871366508588e-03,-2.6528891009395955e-03,-8.9822724268516507e-04, 2.4070953955158264e-04, 7.0674289586629066e-04, 7.1556355609227271e-04, 5.2897649629194288e-04, + 1.2432270625372319e-03, 8.4218966962843183e-04, 2.9883790066815262e-04,-1.0117692083089994e-04,-2.4728670526371672e-04,-2.0702207456524077e-04,-1.0454102922755385e-04,-2.2660119822567534e-05, +-4.0103739290880003e-04,-2.2855538167058616e-04,-2.2668185315319832e-05, 8.7943618109412959e-05, 8.7306921247071867e-05, 3.7596647139431083e-05,-3.2092235531705661e-06,-1.7388939746240288e-05, + 1.7248201123821387e-04, 7.9764127157439598e-05,-1.5987796487266862e-05,-4.7768885389080391e-05,-2.7333842565426626e-05, 3.3783148932673253e-07, 1.1198246984932450e-05, 8.3340827515293958e-06, +-9.2717884080774273e-05,-3.2928654402879549e-05, 1.9232116116794468e-05, 2.5297634000007955e-05, 6.2909109976835253e-06,-6.6541706636484077e-06,-6.5547417390350536e-06,-1.7906882661726889e-06, + 5.9789229677894724e-05, 1.4844103787151107e-05,-1.7224997477941516e-05,-1.3460492236991168e-05, 1.2557204114042280e-06, 5.9383619867581628e-06, 2.5193692894120331e-06,-7.2106759896695307e-07, +-4.4945125890743614e-05,-6.3976922131472077e-06, 1.5086343650607258e-05, 6.7959049815329351e-06,-3.9390714129791008e-06,-3.9933785509860413e-06,-1.6685400265970171e-07, 1.2523321086379508e-06, + 5.3533190165108858e-02, 4.7801586048476917e-02, 3.8179361669880729e-02, 2.7362955604215301e-02, 1.7671793229890681e-02, 1.0334461057211419e-02, 5.5005864173290567e-03, 2.6783985919782540e-03, +-5.7316041166319415e-03,-4.5042815468534780e-03,-2.6409538879607758e-03,-9.0220447147174379e-04, 2.3088762598912765e-04, 6.9849209310019270e-04, 7.1137946629527306e-04, 5.2805626905251188e-04, + 1.2273225697784634e-03, 8.3311091600231368e-04, 2.9791858633633830e-04,-9.7697122803372827e-05,-2.4381622825424000e-04,-2.0551800876225852e-04,-1.0466050922075467e-04,-2.3349029322742134e-05, +-3.9421165377614975e-04,-2.2539100185193367e-04,-2.3292493617436483e-05, 8.6052957945094975e-05, 8.6218613251486234e-05, 3.7604899980828686e-05,-2.7665106125334906e-06,-1.7057016545448411e-05, + 1.6882065192421608e-04, 7.8458788181592773e-05,-1.5232132356280008e-05,-4.6767676208861334e-05,-2.7081243064316979e-05, 7.6372981192240853e-08, 1.0938070925366816e-05, 8.2618916187683981e-06, +-9.0361863742623307e-05,-3.2339992444374088e-05, 1.8555041903600321e-05, 2.4764623447988773e-05, 6.3380386277076297e-06,-6.4198084147726052e-06,-6.4541109854797206e-06,-1.8185397184011225e-06, + 5.8021871298249220e-05, 1.4589399132566535e-05,-1.6632264812556695e-05,-1.3190726273469991e-05, 1.1019004520803774e-06, 5.7803108898325889e-06, 2.5119087918302217e-06,-6.7176903238387488e-07, +-4.3432472165682685e-05,-6.3369519081879262e-06, 1.4553588701501314e-05, 6.6922701835630518e-06,-3.7531616348267121e-06,-3.9093149797068416e-06,-2.0579478319111311e-07, 1.2127290930853405e-06, + 5.3304903671505852e-02, 4.7622078879506299e-02, 3.8073961599169058e-02, 2.7326790180588909e-02, 1.7680834598729600e-02, 1.0362236727650050e-02, 5.5289578392252814e-03, 2.6995019824551012e-03, +-5.6828247919995523e-03,-4.4711365895583124e-03,-2.6290559390131918e-03,-9.0604401024239889e-04, 2.2120366355994278e-04, 6.9030145680446832e-04, 7.0719094870441181e-04, 5.2710875019866500e-04, + 1.2116882024412398e-03, 8.2415769954966717e-04, 2.9697489704442765e-04,-9.4292155871858983e-05,-2.4038908099852649e-04,-2.0401381952936067e-04,-1.0476248776460681e-04,-2.4024719939647271e-05, +-3.8753050289157265e-04,-2.2227836737296887e-04,-2.3887110747676163e-05, 8.4201922606027115e-05, 8.5140445316944332e-05, 3.7602880294790374e-05,-2.3341242933697267e-06,-1.6728002749484776e-05, + 1.6525213551860378e-04, 7.7176792577327209e-05,-1.4503082637895116e-05,-4.5787572745348714e-05,-2.6826879550493192e-05,-1.7583658347188747e-07, 1.0681913718165791e-05, 8.1886254464632906e-06, +-8.8075342941276572e-05,-3.1761469163056030e-05, 1.7901256021616776e-05, 2.4242320443111844e-05, 6.3791602284093854e-06,-6.1917011841164048e-06,-6.3538092085956594e-06,-1.8444506977109733e-06, + 5.6313873778220542e-05, 1.4337192197041690e-05,-1.6060451420972081e-05,-1.2925119160470722e-05, 9.5537042179787492e-07, 5.6256053559775845e-06, 2.5029352094667943e-06,-6.2403863575591586e-07, +-4.1976681581178852e-05,-6.2728685516162322e-06, 1.4040256803506324e-05, 6.5879945067957591e-06,-3.5745315175750927e-06,-3.8261086863602991e-06,-2.4252277211494049e-07, 1.1739237210695231e-06, + 5.3078555914281171e-02, 4.7443890379319537e-02, 3.7969036685198521e-02, 2.7290473879744939e-02, 1.7689491339315869e-02, 1.0389685975939981e-02, 5.5571616434199134e-03, 2.7205669351269392e-03, +-5.6346655349616345e-03,-4.4383472844267968e-03,-2.6171962056237424e-03,-9.0974882076507585e-04, 2.1165592720409285e-04, 6.8217098379627465e-04, 7.0299869515919912e-04, 5.2613446614695148e-04, + 1.1963182505348377e-03, 8.1532796902375731e-04, 2.9600799939397821e-04,-9.0960451814189099e-05,-2.3700485654619614e-04,-2.0250991043485112e-04,-1.0484737471255995e-04,-2.4687308888980491e-05, +-3.8099028151108039e-04,-2.1921655258282601e-04,-2.4453082872988763e-05, 8.2389676385210550e-05, 8.4072483276083679e-05, 3.7590953070638358e-05,-1.9119041206685258e-06,-1.6401939824189156e-05, + 1.6177372892825438e-04, 7.5917736830473370e-05,-1.3799732329015322e-05,-4.4828150030157919e-05,-2.6570986510079902e-05,-4.1904473823769524e-07, 1.0429761017168993e-05, 8.1143606074948202e-06, +-8.5855992097781013e-05,-3.1192982073732126e-05, 1.7269937043109921e-05, 2.3730558169105694e-05, 6.4145616420998863e-06,-5.9697158478882650e-06,-6.2538951846276419e-06,-1.8684832926672561e-06, + 5.4663010024048887e-05, 1.4087609403211734e-05,-1.5508794971139357e-05,-1.2663692783715793e-05, 8.1584429534249623e-07, 5.4742101299549541e-06, 2.4925353280122279e-06,-5.7784449775015244e-07, +-4.0575400620837154e-05,-6.2058027092883439e-06, 1.3545623062194576e-05, 6.4832631077089237e-06,-3.4029243492412068e-06,-3.7438070895198769e-06,-2.7712384374463858e-07, 1.1359160907197893e-06, + 5.2854122300769753e-02, 4.7267006420079152e-02, 3.7864585381082887e-02, 2.7254012032614610e-02, 1.7697768866463182e-02, 1.0416811208283890e-02, 5.5851976940400538e-03, 2.7415923898356171e-03, +-5.5871158806906004e-03,-4.4059087324339816e-03,-2.6053755934824577e-03,-9.1332180274298486e-04, 2.0224270818991821e-04, 6.7410065503940332e-04, 6.9880338123322772e-04, 5.2513393859292051e-04, + 1.1812071482566189e-03, 8.0661970988214326e-04, 2.9501901886307396e-04,-8.7700475498115075e-05,-2.3366314549824290e-04,-2.0100667064404360e-04,-1.0491557351116133e-04,-2.5336914984622400e-05, +-3.7458743837447562e-04,-2.1620464788788766e-04,-2.4991420209085659e-05, 8.0615400440436533e-05, 8.3014783807945321e-05, 3.7569473502390663e-05,-1.4996902393477952e-06,-1.6078866229835458e-05, + 1.5838279048658796e-04, 7.4681221623672023e-05,-1.3121198681807496e-05,-4.3888989782647346e-05,-2.6313787221978716e-05,-6.5349372024158550e-07, 1.0181596193616702e-05, 8.0391710167683351e-06, +-8.3701568862915937e-05,-3.0634423916014364e-05, 1.6660293461687899e-05, 2.3229169077884869e-05, 6.4445174740012387e-06,-5.7537207295941756e-06,-6.1544242862375607e-06,-1.8906983156831959e-06, + 5.3067144946901573e-05, 1.3840763269500985e-05,-1.4976561581362725e-05,-1.2406461894875063e-05, 6.8304615528415996e-07, 5.3260881525560686e-06, 2.4807925487492969e-06,-5.3315472443621341e-07, +-3.9226381677400589e-05,-6.1360893414422780e-06, 1.3068989752238081e-05, 6.3782475915962728e-06,-3.2380913571419270e-06,-3.6624530553818341e-06,-3.0968132995830312e-07, 1.0987052349695041e-06, + 5.2631578652484447e-02, 4.7091413068306720e-02, 3.7760606104598068e-02, 2.7217409855360381e-02, 1.7705672526964120e-02, 1.0443614829815420e-02, 5.6130658819146771e-03, 2.7625773071953338e-03, +-5.5401655841777267e-03,-4.3738161144131898e-03,-2.5935949640591566e-03,-9.1676579512457029e-04, 1.9296231420461510e-04, 6.6609043621264005e-04, 6.9460566648992667e-04, 5.2410768444958707e-04, + 1.1663494697645369e-03, 7.9803094364784338e-04, 2.9400904121913837e-04,-8.4510724212431007e-05,-2.3036353636406848e-04,-1.9950447530694596e-04,-1.0496748122662287e-04,-2.5973658520389359e-05, +-3.6831852611669347e-04,-2.1324175958023885e-04,-2.5503098287459568e-05, 7.8878292526879753e-05, 8.1967394876906926e-05, 3.7538787199666013e-05,-1.0973235029464699e-06,-1.5758817518386687e-05, + 1.5507676653645462e-04, 7.3466852016367999e-05,-1.2466630028508123e-05,-4.2969680434701328e-05,-2.6055494198479252e-05,-8.7942052995185395e-07, 9.9374004698148769e-06, 7.9631281821360038e-06, +-8.1609914520086623e-05,-3.0085683189888540e-05, 1.6071562574234528e-05, 2.2737985166209705e-05, 6.4692914886387464e-06,-5.5435856676396907e-06,-6.0554486163348074e-06,-1.9111553043188174e-06, + 5.1524231330198083e-05, 1.3596753399349349e-05,-1.4463044750464123e-05,-1.2153434640887052e-05, 5.5670988098796012e-07, 5.1812007353837714e-06, 2.4677869904832792e-06,-4.8993748099133112e-07, +-3.7927477930848737e-05,-6.0640394562594045e-06, 1.2609685325671632e-05, 6.2731068226812623e-06,-3.0797915350578871e-06,-3.5820851583074557e-06,-3.4027606391687085e-07, 1.0622891937300948e-06, + 5.2410901196434337e-02, 4.6917096581717208e-02, 3.7657097239919488e-02, 2.7180672451780370e-02, 1.7713207600248349e-02, 1.0470099243998899e-02, 5.6407661239393407e-03, 2.7835206684002139e-03, +-5.4938046147171293e-03,-4.3420646896261059e-03,-2.5818551361643793e-03,-9.2008357738724775e-04, 1.8381306943120526e-04, 6.5814027826271819e-04, 6.9040619473719009e-04, 5.2305621579052091e-04, + 1.1517399250910235e-03, 7.8955972727747653e-04, 2.9297911388158826e-04,-8.1389727008226043e-05,-2.2710561590180521e-04,-1.9800368593733941e-04,-1.0500348857488584e-04,-2.6597661155592462e-05, +-3.6218019781354693e-04,-2.1032700965940994e-04,-2.5989059175533259e-05, 7.7177566727875183e-05, 8.0930356155182846e-05, 3.7499230395672051e-05,-7.0464555689751492e-07,-1.5441826428803033e-05, + 1.5185318815413699e-04, 7.2274237604538793e-05,-1.1835204651505619e-05,-4.2069817142999241e-05,-2.5796309611864963e-05,-1.0970569925330411e-06, 9.6971530470829844e-06, 7.8863012554413052e-06, +-7.9578950549598197e-05,-2.9546644654163538e-05, 1.5503009407521593e-05, 2.2256838228431143e-05, 6.4891369969024986e-06,-5.3391820780875867e-06,-5.9570171368606086e-06,-1.9299125246725595e-06, + 5.0032305895434659e-05, 1.3355667409311868e-05,-1.3967564332128323e-05,-1.1904613055549032e-05, 4.3657883901823850e-07, 5.0395077293011179e-06, 2.4535955875349596e-06,-4.4816102949530695e-07, +-3.6676638486122791e-05,-5.9899416655858646e-06, 1.2167063462523652e-05, 6.1679876783616022e-06,-2.9277914585394087e-06,-3.5027379365464861e-06,-3.6898642066268603e-07, 1.0266650803343030e-06, + 5.2192066556660352e-02, 4.6744043406110020e-02, 3.7554057139298130e-02, 2.7143804815662149e-02, 1.7720379299043951e-02, 1.0496266852050910e-02, 5.6682983624510479e-03, 2.8044214750296520e-03, +-5.4480231505503324e-03,-4.3106497943578154e-03,-2.5701568874568342e-03,-9.2327787079498139e-04, 1.7479331461195402e-04, 6.5025011794236573e-04, 6.8620559428072322e-04, 5.2198003979746872e-04, + 1.1373733561925170e-03, 7.8120415253648190e-04, 2.9193024723671909e-04,-7.8336044051116735e-05,-2.2388896944174253e-04,-1.9650465078381037e-04,-1.0502397995484046e-04,-2.7209045804408921e-05, +-3.5616920365603511e-04,-2.0745953564783024e-04,-2.6450212652796379e-05, 7.5512453185857755e-05, 7.9903699428018226e-05, 3.7451130153105339e-05,-3.2149891698452090e-07,-1.5127922980223913e-05, + 1.4870966800820487e-04, 7.1102992660620963e-05,-1.1226129694821069e-05,-4.1189001792474360e-05,-2.5536425704800703e-05,-1.3066298223613420e-06, 9.4608312290664190e-06, 7.8087570831951945e-06, +-7.7606675347583902e-05,-2.9017189787766723e-05, 1.4953925683584843e-05, 2.1785560091950645e-05, 6.5042972290557980e-06,-5.1403830094209309e-06,-5.8591757945896262e-06,-1.9470269757764652e-06, + 4.8589485559817179e-05, 1.3117581794295317e-05,-1.3489465543521147e-05,-1.1659993525239543e-05, 3.2240558435508173e-07, 4.9009676801246797e-06, 2.4382921879003305e-06,-4.0779376511527682e-07, +-3.5471903765521865e-05,-5.9140636367036892e-06, 1.1740502146095547e-05, 6.0630257690762414e-06,-2.7818651066145006e-06,-3.4244421301994626e-06,-3.9588836290485800e-07, 9.9182914704688575e-07, + 5.1975051745981528e-02, 4.6572240172315649e-02, 3.7451484124677248e-02, 2.7106811833086289e-02, 1.7727192770040659e-02, 1.0522120052382960e-02, 5.6956625646131546e-03, 2.8252787488516661e-03, +-5.4028115736658791e-03,-4.2795668405369788e-03,-2.5585009558992122e-03,-9.2635133962994803e-04, 1.6590140709933643e-04, 6.4241987833360548e-04, 6.8200447817603170e-04, 5.2087965871228754e-04, + 1.1232447331289003e-03, 7.7296234538221098e-04, 2.9086341590645179e-04,-7.5348265984379308e-05,-2.2071318119397696e-04,-1.9500770519243534e-04,-1.0502933348467431e-04,-2.7807936528889080e-05, +-3.5028238774668929e-04,-2.0463849040160977e-04,-2.6887437344194946e-05, 7.3882197833443253e-05, 7.8887448982899855e-05, 3.7394804567168912e-05, 5.2272957225417871e-08,-1.4817134563224981e-05, + 1.4564389734507952e-04, 6.9952736256583366e-05,-1.0638640116383018e-05,-4.0326842990726886e-05,-2.5276025186275679e-05,-1.5083606891823855e-06, 9.2284105397314001e-06, 7.7305602572516284e-06, +-7.5691161088496157e-05,-2.8497197219145537e-05, 1.4423628824580233e-05, 2.1323982834405206e-05, 6.5150056964068483e-06,-4.9470631919985235e-06,-5.7619676423723940e-06,-1.9625543957995003e-06, + 4.7193963869350620e-05, 1.2882562739366976e-05,-1.3028118011595326e-05,-1.1419567225924049e-05, 2.1395156777406206e-07, 4.7655379763439666e-06, 2.4219476483271907e-06,-3.6880424891570903e-07, +-3.4311401129983644e-05,-5.8366534573136550e-06, 1.1329402771787688e-05, 5.9583461168255168e-06,-2.6417936813269913e-06,-3.3472249100863798e-06,-4.2105548558458770e-07, 9.5777684589459272e-07, + 5.1759834157946973e-02, 4.6401673693197303e-02, 3.7349376489252142e-02, 2.7069698284681702e-02, 1.7733653094555261e-02, 1.0547661240064980e-02, 5.7228587218104516e-03, 2.8460915316244162e-03, +-5.3581604647496700e-03,-4.2488113143802145e-03,-2.5468880411641942e-03,-9.2930659239920735e-04, 1.5713572089492631e-04, 6.3464946935674720e-04, 6.7780344447884028e-04, 5.1975556979314474e-04, + 1.1093491503694555e-03, 7.6483246535419529e-04, 2.8977955997258392e-04,-7.2425013302632093e-05,-2.1757783454082554e-04,-1.9351317196150420e-04,-1.0501992104095599e-04,-2.8394458435656569e-05, +-3.4451668501526023e-04,-2.0186304191598754e-04,-2.7301581812484992e-05, 7.2286062124696330e-05, 7.7881621983264503e-05, 3.7330562966062056e-05, 4.1682559336974170e-07,-1.4509486028907821e-05, + 1.4265364309927269e-04, 6.8823092369244145e-05,-1.0071997679092233e-05,-3.9482956053895894e-05,-2.5015281613364996e-05,-1.7024662863765198e-06, 8.9998648369393061e-06, 7.6517731649394881e-06, +-7.3830550730028547e-05,-2.7986543122214736e-05, 1.3911460994452355e-05, 2.0871938983790655e-05, 6.5214865414243105e-06,-4.7590990813679480e-06,-5.6654329572225910e-06,-1.9765492690151521e-06, + 4.5844007607813810e-05, 1.2650666875173456e-05,-1.2582914853063858e-05,-1.1183320533925754e-05, 1.1098685061156353e-07, 4.6331749871666766e-06, 2.4046299286599945e-06,-3.3116123921668882e-07, +-3.3193340732640350e-05,-5.7579409079447575e-06, 1.0933189282777788e-05, 5.8540637972478523e-06,-2.5073654283748556e-06,-3.2711100939832418e-06,-4.4455906339205322e-07, 9.2450288834572348e-07, + 5.1546391558986243e-02, 4.6232330960705892e-02, 3.7247732498974097e-02, 2.7032468847832631e-02, 1.7739765289197979e-02, 1.0572892806308720e-02, 5.7498868490540736e-03, 2.8668588848960409e-03, +-5.3140605982803513e-03,-4.2183787750610796e-03,-2.5353188059921636e-03,-9.3214618301631566e-04, 1.4849464667692283e-04, 6.2693878826530942e-04, 6.7360307649397353e-04, 5.1860826527469961e-04, + 1.0956818232192717e-03, 7.5681270497285347e-04, 2.8867958615794252e-04,-6.9564935736369940e-05,-2.1448251231455780e-04,-1.9202136168817714e-04,-1.0499610830053087e-04,-2.8968737576011861e-05, +-3.3886911824641819e-04,-1.9913237312780131e-04,-2.7693465610623103e-05, 7.0723322767169403e-05, 7.6886228827183841e-05, 3.7258706108543138e-05, 7.7231344198117687e-07,-1.4204999776200435e-05, + 1.3973674511861688e-04, 6.7713689971913188e-05,-9.5254899801957817e-06,-3.8656962984759971e-05,-2.4754359759251253e-05,-1.8891584005607497e-06, 8.7751664209308079e-06, 7.5724560392736224e-06, +-7.2023055146703689e-05,-2.7485101585838081e-05, 1.3416788178105076e-05, 2.0429261702246778e-05, 6.5239548768241850e-06,-4.5763688967730156e-06,-5.5696093538884346e-06,-1.9890648346762663e-06, + 4.4537953560865608e-05, 1.2421941989006904e-05,-1.2153271791092244e-05,-1.0951235410587925e-05, 1.3289825967151731e-08, 4.5038341932084987e-06, 2.3864041828598221e-06,-2.9483371933446847e-07, +-3.2116011571858708e-05,-5.6781386627798638e-06, 1.0551307340342250e-05, 5.7502845435296219e-06,-2.3783754566681746e-06,-3.1961183543907995e-06,-4.6646809640522903e-07, 8.9200129971651940e-07, + 5.1334702080753733e-02, 4.6064199142988177e-02, 3.7146550394001707e-02, 2.6995128098839451e-02, 1.7745534306540089e-02, 1.0597817137970790e-02, 5.7767469843964820e-03, 2.8875798898030020e-03, +-5.2705029377655560e-03,-4.1882648534024638e-03,-2.5237938775027613e-03,-9.3487261195866755e-04, 1.3997659181677266e-04, 6.1928772012733065e-04, 6.6940394302242214e-04, 5.1743823233228780e-04, + 1.0822380843630922e-03, 7.4890128914543780e-04, 2.8756436896657488e-04,-6.6766711647217071e-05,-2.1142679706099670e-04,-1.9053257310747645e-04,-1.0495825478472993e-04,-2.9530900849611104e-05, +-3.3333679521765436e-04,-1.9644568171335716e-04,-2.8063880296729979e-05, 6.9193271455179623e-05, 7.5901273491413317e-05, 3.7179526378988903e-05, 1.1188898161040443e-06,-1.3903695836926604e-05, + 1.3689111350429720e-04, 6.6624163109652403e-05,-8.9984295155051168e-06,-3.7848492444399149e-05,-2.4493415967450762e-05,-2.0686439831988266e-06, 8.5542861389303563e-06, 7.4926670083511214e-06, +-7.0266950394644800e-05,-2.6992744951890080e-05, 1.2938999292726590e-05, 1.9995784956353664e-05, 6.5226171126073491e-06,-4.3987526534985977e-06,-5.4745318959099802e-06,-2.0001530961226640e-06, + 4.3274205442754720e-05, 1.2196427682159540e-05,-1.1738626299670425e-05,-1.0723289766552355e-05,-7.9353050616052335e-08, 4.3774703069146767e-06, 2.3673328502291928e-06,-2.5979092478909181e-07, +-3.1077777760595179e-05,-5.5974434010215834e-06, 1.0183223512602829e-05, 5.6471053234844288e-06,-2.2546255640101733e-06,-3.1222674116151409e-06,-4.8684936038577592e-07, 8.6026547402362328e-07, + 5.1124744212660132e-02, 4.5897265581546408e-02, 3.7045828390099858e-02, 2.6957680515033191e-02, 1.7750965035781639e-02, 1.0622436617074640e-02, 5.8034391883561784e-03, 2.9082536468670339e-03, +-5.2274786311137245e-03,-4.1584652505931227e-03,-2.5123138484613797e-03,-9.3748832740088786e-04, 1.3157998038569249e-04, 6.1169613829311145e-04, 6.6520659860667356e-04, 5.1624595304985152e-04, + 1.0690133805206017e-03, 7.4109647458096145e-04, 2.8643475178359752e-04,-6.4029047433593247e-05,-2.0841027128991400e-04,-1.8904709342324746e-04,-1.0490671390608669e-04,-3.0081075911431708e-05, +-3.2791690593964029e-04,-1.9380217988502926e-04,-2.8413590411368857e-05, 6.7695214603755605e-05, 7.4926753862068426e-05, 3.7093307979057437e-05, 1.4567068353554043e-06,-1.3605591959074718e-05, + 1.3411472605461103e-04, 6.5554150964236611e-05,-8.4901527803894902e-06,-3.7057179716017446e-05,-2.4232598494256251e-05,-2.2411252224688427e-06, 8.3371934847077952e-06, 7.4124621447190620e-06, +-6.8560575090374418e-05,-2.6509344132959264e-05, 1.2477505336473671e-05, 1.9571343670561237e-05, 6.5176712746546964e-06,-4.2261321923524741e-06,-5.3802332017677661e-06,-2.0098648316725256e-06, + 4.2051230957415154e-05, 1.1974155993816908e-05,-1.1338436787320636e-05,-1.0499457797984123e-05,-1.6714752793441095e-07, 4.2540373889585549e-06, 2.3474757420891107e-06,-2.2600236686745231e-07, +-3.0077074963598246e-05,-5.5160368662256139e-06, 9.8284245060569252e-06, 5.5446148731699016e-06,-2.1359240550815573e-06,-3.0495722241528632e-06,-5.0576745242148272e-07, 8.2928822304689513e-07, + 5.0916496794586950e-02, 4.5731517788449007e-02, 3.6945564679989502e-02, 2.6920130476845380e-02, 1.7756062303419501e-02, 1.0646753620350930e-02, 5.8299635433522474e-03, 2.9288792757909319e-03, +-5.1849790061379436e-03,-4.1289757369270194e-03,-2.5008792785026698e-03,-9.3999572632445100e-04, 1.2330325315118573e-04, 6.0416390485006945e-04, 6.6101158377406856e-04, 5.1503190439151350e-04, + 1.0560032692109242e-03, 7.3339654921259195e-04, 2.8529154793719130e-04,-6.1350676947444227e-05,-2.0543251771201423e-04,-1.8756519863185673e-04,-1.0484183301706770e-04,-3.0619391082038565e-05, +-3.2260671999833224e-04,-1.9120109418415635e-04,-2.8743334420621043e-05, 6.6228473085089498e-05, 7.3962662051007503e-05, 3.7000327117086055e-05, 1.7859153735745982e-06,-1.3310703688035786e-05, + 1.3140562581417589e-04, 6.4503297904298251e-05,-8.0000194019877997e-06,-3.6282666664779949e-05,-2.3972047837031028e-05,-2.4067996174055977e-06, 8.1238566945996969e-06, 7.3318955140922991e-06, +-6.6902327909877641e-05,-2.6034768900898154e-05, 1.2031738564839133e-05, 1.9155773871338876e-05, 6.5093073096812777e-06,-4.0583912023723074e-06,-5.2867435488910420e-06,-2.0182496059300022e-06, + 4.0867559008979487e-05, 1.1755151974165028e-05,-1.0952181802395069e-05,-1.0279710309447089e-05,-2.5029181262639305e-07, 4.1334889528323200e-06, 2.3268901292184373e-06,-1.9343785539192629e-07, +-2.9112407034814459e-05,-5.4340868394352458e-06, 9.4864164063928284e-06, 5.4428942154912638e-06,-2.0220855733321349e-06,-2.9780451608160786e-06,-5.2328484235301919e-07, 7.9906182545963662e-07, + 5.0709939009778222e-02, 4.5566943443591162e-02, 3.6845757434649053e-02, 2.6882482269834029e-02, 1.7760830873914960e-02, 1.0670770518796020e-02, 5.8563201531486066e-03, 2.9494559152532310e-03, +-5.1429955661870599e-03,-4.0997921505657176e-03,-2.4894906953121729e-03,-9.4239715560446094e-04, 1.1514486756461842e-04, 5.9669087106456464e-04, 6.5681942527821922e-04, 5.1379655817672832e-04, + 1.0432034156213424e-03, 7.2579983162858247e-04, 2.8413554172320929e-04,-5.8730360920973990e-05,-2.0249311946406515e-04,-1.8608715383798216e-04,-1.0476395346095116e-04,-3.1145975261102563e-05, +-3.1740358399275992e-04,-1.8864166527266218e-04,-2.9053825624360675e-05, 6.4792381965740747e-05, 7.3008984700308844e-05, 3.6900852193797384e-05, 2.1066650105195484e-06,-1.3019044445893518e-05, + 1.2876191872009774e-04, 6.3471253525501756e-05,-7.5274113052597595e-06,-3.5524601690290271e-05,-2.3711897052314413e-05,-2.5658600515554320e-06, 7.9142428388288888e-06, 7.2510192236843328e-06, +-6.5290665194595986e-05,-2.5568888155642350e-05, 1.1601151701286301e-05, 1.8748912815284996e-05, 6.4977073835434977e-06,-3.8954152419535428e-06,-5.1940909729475248e-06,-2.0253557822758914e-06, + 3.9721777038953636e-05, 1.1539434224967888e-05,-1.0579359274372244e-05,-1.0064015009851727e-05,-3.2897682227991277e-07, 4.0157780674110286e-06, 2.3056308246665633e-06,-1.6206751873544040e-07, +-2.8182342813985748e-05,-5.3517480615648385e-06, 9.1567239584483640e-06, 5.3420171366751007e-06,-1.9129309224258387e-06,-2.9076961731746816e-06,-5.3946191902671025e-07, 7.6957807142964675e-07, + 5.0505050377904127e-02, 4.5403530392004572e-02, 3.6746404804569387e-02, 2.6844740086666499e-02, 1.7765275450360760e-02, 1.0694489677247629e-02, 5.8825091423078263e-03, 2.9699827227019971e-03, +-5.1015199858995552e-03,-4.0709103963236029e-03,-2.4781485957676569e-03,-9.4469491307347386e-04, 1.0710329773970170e-04, 5.8927687781152975e-04, 6.5263063633830883e-04, 5.1254038105876020e-04, + 1.0306095895759523e-03, 7.1830467051198004e-04, 2.8296748939413141e-04,-5.6166886404263863e-05,-1.9959166032150689e-04,-1.8461321356349689e-04,-1.0467341062442423e-04,-3.1660957843988077e-05, +-3.1230491906397229e-04,-1.8612314772390836e-04,-2.9345753031897700e-05, 6.3386290246601973e-05, 7.2065703273224658e-05, 3.6795143985853272e-05, 2.4191039868166940e-06,-1.2730625608823035e-05, + 1.2618177134006393e-04, 6.2457672681319151e-05,-7.0717319097044680e-06,-3.4782639675572609e-05,-2.3452272060371964e-05,-2.7184948688511418e-06, 7.7083179095954904e-06, 7.1698834699602379e-06, +-6.3724098658744777e-05,-2.5111570174434153e-05, 1.1185217176888563e-05, 1.8350599108343860e-05, 6.4830461663112816e-06,-3.7370917533567561e-06,-5.1023013652405049e-06,-2.0312305358222924e-06, + 3.8612528484310624e-05, 1.1327015406111603e-05,-1.0219485781655909e-05,-9.8523367946423152e-06,-4.0338642557887546e-07, 3.9008574479125176e-06, 2.2837502674792294e-06,-1.3186182295324935e-07, +-2.7285513078199021e-05,-5.2691630991120019e-06, 8.8388898673151623e-06, 5.2420506450304260e-06,-1.8082869009774214e-06,-2.8385329500051541e-06,-5.5435704234058619e-07, 7.4082830705501378e-07, + 5.0301810748292569e-02, 4.5241266641215250e-02, 3.6647504920963997e-02, 2.6806908029060321e-02, 1.7769400675146870e-02, 1.0717913453977639e-02, 5.9085306556545146e-03, 2.9904588741477859e-03, +-5.0605441070773194e-03,-4.0423264444750667e-03,-2.4668534470417003e-03,-9.4689124856325510e-04, 9.9177034423070937e-05, 5.8192175599158097e-04, 6.4844571687628066e-04, 5.1126383450649827e-04, + 1.0182176626022527e-03, 7.1090944408816036e-04, 2.8178812011372045e-04,-5.3659066212861537e-05,-1.9672772490030596e-04,-1.8314362204857745e-04,-1.0457053399205198e-04,-3.2164468641461249e-05, +-3.0730821851409230e-04,-1.8364480981159588e-04,-2.9619782206173194e-05, 6.2009560604281186e-05, 7.1132794334268916e-05, 3.6683455825500935e-05, 2.7233791626909439e-06,-1.2445456582562618e-05, + 1.2366340870249642e-04, 6.1462215502782993e-05,-6.6324053558964525e-06,-3.4056441930201744e-05,-2.3193291940421198e-05,-2.8648879484563655e-06, 7.5060469046219260e-06, 7.0885365859346162e-06, +-6.2201193199713426e-05,-2.4662682839215153e-05, 1.0783426398888605e-05, 1.7960672811719723e-05, 6.4654911111891101e-06,-3.5833100764867650e-06,-5.0113985653293016e-06,-2.0359198674401984e-06, + 3.7538510360498273e-05, 1.1117902705236414e-05,-9.8720958475428335e-06,-9.6446380058022584e-06,-4.7369768180632514e-07, 3.7886795459385596e-06, 2.2612986014060724e-06,-1.0279158823376804e-07, +-2.6420607655261857e-05,-5.1864631500988790e-06, 8.5324741261560442e-06, 5.1430553958231441e-06,-1.7079861285843673e-06,-2.7705610732653953e-06,-5.6802658925261222e-07, 7.1280347417731542e-07, + 5.0100200293323120e-02, 4.5080140358648553e-02, 3.6549055896935780e-02, 2.6768990109682721e-02, 1.7773211130625251e-02, 1.0741044200301230e-02, 5.9343848577481321e-03, 3.0108835639559690e-03, +-5.0200599346745672e-03,-4.0140363295836645e-03,-2.4556056876667218e-03,-9.4898836492438715e-04, 9.1364584956642181e-05, 5.7462532693650092e-04, 6.4426515375180359e-04, 5.0996737478938145e-04, + 1.0060236050909027e-03, 7.0361255958099455e-04, 2.8059813687862341e-04,-5.1205738386126678e-05,-1.9390089884720261e-04,-1.8167861354613437e-04,-1.0445564720221309e-04,-3.2656637802333998e-05, +-3.0241104550990817e-04,-1.8120593329827811e-04,-2.9876556077901577e-05, 6.0661569135706656e-05, 7.0210229816627202e-05, 3.6566033778016952e-05, 3.0196359796635377e-06,-1.2163544876015000e-05, + 1.2120511221163006e-04, 6.0484547409707677e-05,-6.2088757599856743e-06,-3.3345676131020360e-05,-2.2935069212970380e-05,-3.0052187815517495e-06, 7.3073939077208281e-06, 7.0070250878004894e-06, +-6.0720564801922382e-05,-2.4222093845821440e-05, 1.0395289045256532e-05, 1.7578975540757713e-05, 6.4452027205436938e-06,-3.4339614564961534e-06,-4.9214044519290649e-06,-2.0394686180553240e-06, + 3.6498470956100942e-05, 1.0912098275351666e-05,-9.5367412591304807e-06,-9.4408786810513740e-06,-5.4008106714923975e-07, 3.6791966284183427e-06, 2.2383237545933582e-06,-7.4828004762086185e-08, +-2.5586372680749276e-05,-5.1037687960716726e-06, 8.2370533606403227e-06, 5.0450861030530305e-06,-1.6118668864189579e-06,-2.7037841564352563e-06,-5.8052500557986177e-07, 6.8549415043825093e-07, + 4.9900199501979332e-02, 4.4920139869080659e-02, 3.6451055828601892e-02, 2.6730990254009861e-02, 1.7776711339772641e-02, 1.0763884260202090e-02, 5.9600719323651607e-03, 3.0312560046385001e-03, +-4.9800596328986729e-03,-3.9860361493529520e-03,-2.4444057285637061e-03,-9.5098841902468631e-04, 8.3664473232901437e-05, 5.6738740280283355e-04, 6.4008942099499661e-04, 5.0865145296538367e-04, + 9.9402348354572095e-04, 6.9641245267759028e-04, 2.7939821740771351e-04,-4.8805765655244139e-05,-1.9111076902007671e-04,-1.8021841260878931e-04,-1.0432906810463609e-04,-3.3137595739032627e-05, +-2.9761103086813068e-04,-1.7880581322387429e-04,-3.0116695729823857e-05, 5.9341705104220386e-05, 6.9297977279529692e-05, 3.6443116815316578e-05, 3.3080184257157494e-06,-1.1884896173026369e-05, + 1.1880521764425639e-04, 5.9524339114614829e-05,-5.8006064971936251e-06,-3.2650016257270792e-05,-2.2677710113589201e-05,-3.1396625469581316e-06, 7.1123221651084764e-06, 6.9253937211316715e-06, +-5.9280878529641560e-05,-2.3789670897991782e-05, 1.0020332388677081e-05, 1.7205350550708269e-05, 6.4223348064921081e-06,-3.2889390509777902e-06,-4.8323390292490221e-06,-2.0419204840019593e-06, + 3.5491207631649778e-05, 1.0709599647229317e-05,-9.2129904174488334e-06,-9.2410167804226004e-06,-6.0270070116498345e-07, 3.5723608561565547e-06, 2.2148715143351408e-06,-4.7942645906023290e-08, +-2.4781607984420461e-05,-5.0211907149786139e-06, 7.9522202080870008e-06, 4.9481919151359673e-06,-1.5197729478247531e-06,-2.6382039852305615e-06,-5.9190485159689726e-07, 6.5889058461177399e-07, + 4.9701789173554743e-02, 4.4761253652135707e-02, 3.6353502796178279e-02, 2.6692912302146501e-02, 1.7779905766851688e-02, 1.0786435969973010e-02, 5.9855920819905468e-03, 3.0515754266452659e-03, +-4.9405355214190358e-03,-3.9583220634986094e-03,-2.4332539540360895e-03,-9.5289352272627525e-04, 7.6075239642873355e-05, 5.6020778695441836e-04, 6.3591898003675495e-04, 5.0731651487190927e-04, + 9.8221345792042641e-04, 6.8930758700153777e-04, 2.7818901500088061e-04,-4.6458034921835478e-05,-1.8835692365765214e-04,-1.7876323436942781e-04,-1.0419110881907225e-04,-3.3607473056020197e-05, +-2.9290587091888864e-04,-1.7644375769414189e-04,-3.0340801153366803e-05, 5.8049370689268817e-05, 6.8396000153820926e-05, 3.6314936987364723e-05, 3.5886690030177720e-06,-1.1609514402225971e-05, + 1.1646211322474675e-04, 5.8581266618934477e-05,-5.4070795107286667e-06,-3.1969142524242630e-05,-2.2421314854498831e-05,-3.2683901885273385e-06, 6.9207941591827325e-06, 6.8436855061673237e-06, +-5.7880846605812278e-05,-2.3365281884504668e-05, 9.6581006437568796e-06, 1.6839642817073872e-05, 6.3970347389869216e-06,-3.1481379312360944e-06,-4.7442205121052533e-06,-2.0433180321681671e-06, + 3.4515564721307610e-05, 1.0510400111738496e-05,-8.9004277073144247e-06,-9.0450084046141110e-06,-6.6171455986303079e-07, 3.4681243514454663e-06, 2.1909856034441966e-06,-2.2107481619536943e-08, +-2.4005164609569114e-05,-4.9388303428455771e-06, 7.6775827092413576e-06, 4.8524167815576256e-06,-1.4315534247179816e-06,-2.5738206404136457e-06,-6.0221685441834732e-07, 6.3298273351840371e-07, + 4.9504950411508472e-02, 4.4603470339827388e-02, 3.6256394865025042e-02, 2.6654760010607060e-02, 1.7782798818069649e-02, 1.0808701657871719e-02, 6.0109455273182778e-03, 3.0718410781551239e-03, +-4.9014800716810844e-03,-3.9308902926412023e-03,-2.4221507227298530e-03,-9.5470574384224488e-04, 6.8595441017775538e-05, 5.5308627433354497e-04, 6.3175427993681331e-04, 5.0596300111949112e-04, + 9.7058977903988208e-04, 6.8229645359427216e-04, 2.7697115936802484e-04,-4.4161456746106024e-05,-1.8563895254013717e-04,-1.7731328481447616e-04,-1.0404207579545123e-04,-3.4066400480921126e-05, +-2.8829332544560993e-04,-1.7411908766896164e-04,-3.0549451977979561e-05, 5.6783980738038281e-05, 6.7504257978269954e-05, 3.6181719589622248e-05, 3.8617286990431595e-06,-1.1337401805238262e-05, + 1.1417423777664829e-04, 5.7655011201771962e-05,-5.0277946467821238e-06,-3.1302741312446696e-05,-2.2165977878240583e-05,-3.3915684909305475e-06, 6.7327716779618929e-06, 6.7619417828986390e-06, +-5.6519226574876325e-05,-2.2948795040743951e-05, 9.3081543400228920e-06, 1.6481699104831168e-05, 6.3694436888584124e-06,-3.0114550839268672e-06,-4.6570654060613404e-06,-2.0437027165849064e-06, + 3.3570431534132374e-05, 1.0314489075800439e-05,-8.5986528934217721e-06,-8.8528079940451225e-06,-7.1727468889282056e-07, 3.3664392664654145e-06, 2.1667077507032215e-06, 2.7051115999220987e-09, +-2.3255942458331937e-05,-4.8567804933708294e-06, 7.4127637273148750e-06, 4.7577997889256089e-06,-1.3470626048686700e-06,-2.5106326246694850e-06,-6.1150995224230276e-07, 6.0776029265536748e-07, + 4.9309664617466178e-02, 4.4446778714144680e-02, 3.6159730086654109e-02, 2.6616537054058819e-02, 1.7785394842234809e-02, 1.0830683643791240e-02, 6.0361325067610858e-03, 3.0920522248667620e-03, +-4.8628859033214983e-03,-3.9037371172198840e-03,-2.4110963685609402e-03,-9.5642710707288456e-04, 6.1223650564243975e-05, 5.4602265182153789e-04, 6.2759575760928162e-04, 5.0459134708819931e-04, + 9.5914878610161430e-04, 6.7537757040542473e-04, 2.7574525742925585e-04,-4.1914964845093244e-05,-1.8295644714022709e-04,-1.7586876105090977e-04,-1.0388226987492603e-04,-3.4514508798393420e-05, +-2.8377121569618958e-04,-1.7183113675204947e-04,-3.0743208174141892e-05, 5.5544962520358835e-05, 6.6622706625235782e-05, 3.6043683328119627e-05, 4.1273369599865886e-06,-1.1068559002948561e-05, + 1.1194007894414011e-04, 5.6745259403891691e-05,-4.6622690144625993e-06,-3.0650505094856341e-05,-2.1911788100565399e-05,-3.5093601566561360e-06, 6.5482158821732446e-06, 6.6802022551188898e-06, +-5.5194819540248423e-05,-2.2540079098820055e-05, 8.9700697191054724e-06, 1.6131368031192143e-05, 6.3396968602647288e-06,-2.8787894078700024e-06,-4.5708885863351367e-06,-2.0431148945923606e-06, + 3.2654740441428368e-05, 1.0121852398140897e-05,-8.3072805399182090e-06,-8.6643685171385242e-06,-7.6952740632933371e-07, 3.2672578427166231e-06, 2.1420777625377107e-06, 2.6522340268863312e-08, +-2.2532888043287473e-05,-4.7751259442769132e-06, 7.1574003888914535e-06, 4.6643754821282437e-06,-1.2661597997785531e-06,-2.4486369751184784e-06,-6.1983134421603508e-07, 5.8321272863165999e-07, + 4.9115913485362560e-02, 4.4291167704680411e-02, 3.6063506499700367e-02, 2.6578247027027969e-02, 1.7787698131410019e-02, 1.0852384238944440e-02, 6.0611532759690728e-03, 3.1122081497894330e-03, +-4.8247457806821492e-03,-3.8768588764259773e-03,-2.4000912016114220e-03,-9.5805959492208798e-04, 5.3958457793767955e-05, 5.3901669858869884e-04, 6.2344383804574868e-04, 5.0320198292664632e-04, + 9.4788690425617189e-04, 6.6854948179097956e-04, 2.7451189408777849e-04,-3.9717515600654063e-05,-1.8030900076541879e-04,-1.7442985156657781e-04,-1.0371198635200120e-04,-3.4951928786611935e-05, +-2.7933742246519233e-04,-1.6957925098040334e-04,-3.0922610731779073e-05, 5.4331755486605531e-05, 6.5751298517029307e-05, 3.5901040481204998e-05, 4.3856316669434620e-06,-1.0802985060053467e-05, + 1.0975817148478899e-04, 5.5851703004153200e-05,-4.3100363684189485e-06,-3.0012132361922675e-05,-2.1658829144535184e-05,-3.6219238824043346e-06, 6.3670873689685173e-06, 6.5985050339143665e-06, +-5.3906468480635790e-05,-2.2139003421502833e-05, 8.6434381529266248e-06, 1.5788500121437307e-05, 6.3079237156782531e-06,-2.7500417093106488e-06,-4.4857033733550901e-06,-2.0415938436257404e-06, + 3.1767465059132957e-05, 9.9324726965753220e-06,-8.0259394486653737e-06,-8.4796416469383234e-06,-8.1861350021203303e-07, 3.1705324673343511e-06, 2.1171335917209305e-06, 4.9370985233719681e-08, +-2.1834992362557635e-05,-4.6939439759745851e-06, 6.9111435391325093e-06, 4.5721741688177158e-06,-1.1887091943525820e-06,-2.3878293719465857e-06,-6.2722653782538101e-07, 5.5932930870407422e-07, + 4.8923678995721233e-02, 4.4136626386302127e-02, 3.5967722130857589e-02, 2.6539893445569441e-02, 1.7789712921563439e-02, 1.0873805745562499e-02, 6.0860081073572311e-03, 3.1323081530337288e-03, +-4.7870526094191054e-03,-3.8502519671566593e-03,-2.3891355089950758e-03,-9.5960514859422599e-04, 4.6798468446591218e-05, 5.3206818643391704e-04, 6.1929893453593031e-04, 5.0179533355346065e-04, + 9.3680064226244614e-04, 6.6181075802024042e-04, 2.7327163297587642e-04,-3.7568087577040214e-05,-1.7769620869184882e-04,-1.7299673648404993e-04,-1.0353151503764363e-04,-3.5378791156244439e-05, +-2.7498988424220572e-04,-1.6736278861550742e-04,-3.1088182314004359e-05, 5.3143811028502213e-05, 6.4889982833136539e-05, 3.5753997058131202e-05, 4.6367491147197333e-06,-1.0540677547992583e-05, + 1.0762709562669830e-04, 5.4974038992102616e-05,-3.9706465150972877e-06,-2.9387327544140345e-05,-2.1407179565951552e-05,-3.7294144350401911e-06, 6.1893462324217404e-06, 6.5168866806825648e-06, +-5.2653056634595680e-05,-2.1745438126601380e-05, 8.3278655854541294e-06, 1.5452947857126335e-05, 6.2742481935335162e-06,-2.6251146954350193e-06,-4.4015216051496788e-06,-2.0391777787123754e-06, + 3.0907618507994300e-05, 9.7463296387055728e-06,-7.7542721218188822e-06,-8.2985779241982714e-06,-8.6466842116348929e-07, 3.0762157260504289e-06, 2.0919114033345443e-06, 7.1277394865562227e-08, +-2.1161288869288728e-05,-4.6133048839200620e-06, 6.6736572227821487e-06, 4.4812222027538994e-06,-1.1145796973410593e-06,-2.3282042429422635e-06,-6.3373939407596650e-07, 5.3609912722771110e-07, + 4.8732943410068313e-02, 4.3983143976864612e-02, 3.5872374995780408e-02, 2.6501479748901428e-02, 1.7791443393216099e-02, 1.0894950456606611e-02, 6.1106972896417472e-03, 3.1523515516024428e-03, +-4.7497994332037011e-03,-3.8239128429882405e-03,-2.3782295556937019e-03,-9.6106566887205550e-04, 3.9742304410429752e-05, 5.2517688011438635e-04, 6.1516144888569633e-04, 5.0037181866118170e-04, + 9.2588659021546060e-04, 6.5515999479120578e-04, 2.7202501717517227e-04,-3.5465681047856714e-05,-1.7511766829001753e-04,-1.7156958780835662e-04,-1.0334114032303559e-04,-3.5795226491991102e-05, +-2.7072659542425482e-04,-1.6518111993593741e-04,-3.1240427887403954e-05, 5.1980592242920518e-05, 6.4038705708549756e-05, 3.5602752954874695e-05, 4.8808239927219488e-06,-1.0281632605999179e-05, + 1.0554547548831741e-04, 5.4111969536249838e-05,-3.6436647412186999e-06,-2.8775800932636638e-05,-2.1156913070099142e-05,-3.8319827276855618e-06, 6.0149521216821998e-06, 6.4353822490945006e-06, +-5.1433505952067576e-05,-2.1359254200956505e-05, 8.0229719961366566e-06, 1.5124565717771972e-05, 6.2387889179908801e-06,-2.5039129650783033e-06,-4.3183537080246514e-06,-2.0359038695393370e-06, + 3.0074251751111071e-05, 9.5634002143584185e-06,-7.4919342458560748e-06,-8.1211269091471882e-06,-9.0782246846906206e-07, 2.9842604506970754e-06, 2.0664456405442532e-06, 9.2267477979112090e-08, +-2.0510851536752652e-05,-4.5332724612254448e-06, 6.4446181861111297e-06, 4.3915422503694071e-06,-1.0436447963202017e-06,-2.2697548597043292e-06,-6.3941217515685037e-07, 5.1351113307280998e-07, + 4.8543689265476468e-02, 4.3830709834962733e-02, 3.5777463099953333e-02, 2.6463009301004810e-02, 1.7792893672085999e-02, 1.0915820655492780e-02, 6.1352211273849634e-03, 3.1723376791816531e-03, +-4.7129794305137349e-03,-3.7978380131683531e-03,-2.3673735853653524e-03,-9.6244301697566773e-04, 3.2788603634349711e-05, 5.1834253766538073e-04, 6.1103177163259435e-04, 4.9893185272241458e-04, + 9.1514141734538174e-04, 6.4859581275353989e-04, 2.7077256991261045e-04,-3.3409317532711799e-05,-1.7257297914276829e-04,-1.7014856966835211e-04,-1.0314114124419544e-04,-3.6201365196464786e-05, +-2.6654560459184184e-04,-1.6303362703000575e-04,-3.1379835330821548e-05, 5.0841573699391538e-05, 6.3197410423589657e-05, 3.5447502106623560e-05, 5.1179893683980381e-06,-1.0025845000640084e-05, + 1.0351197756183609e-04, 5.3265201945510782e-05,-3.3286712615458253e-06,-2.8177268599120970e-05,-2.0908098720180329e-05,-3.9297758949566035e-06, 5.8438642958527909e-06, 6.3540253266903829e-06, +-5.0246775616325309e-05,-2.0980323599262640e-05, 7.7283908802775587e-06, 1.4803210218355431e-05, 6.2016594011506752e-06,-2.3863429982965681e-06,-4.2362087637687094e-06,-2.0318082584198817e-06, + 2.9266452017062669e-05, 9.3836589806725758e-06,-7.2385941889693582e-06,-7.9472373261503771e-06,-9.4820096982413352e-07, 2.8946197640366697e-06, 2.0407690869442032e-06, 1.1236669904295853e-07, +-1.9882793036390094e-05,-4.4539044342979248e-06, 6.2237153855481629e-06, 4.3031535481211471e-06,-9.7578241733343971e-07,-2.2124734301689830e-06,-6.4428558867337800e-07, 4.9155415307910367e-07, + 4.8355899369235240e-02, 4.3679313457724599e-02, 3.5682984439527887e-02, 2.6424485392188869e-02, 1.7794067829728841e-02, 1.0936418615829150e-02, 6.1595799405488993e-03, 3.1922658859320761e-03, +-4.6765859115106417e-03,-3.7720240416275960e-03,-2.3565678211247276e-03,-9.6373901540329487e-04, 2.5936020037961582e-05, 5.1156491071063098e-04, 6.0691028225874979e-04, 4.9747584499819624e-04, + 9.0456186988304571e-04, 6.4211685704089732e-04, 2.6951479523171229e-04,-3.1398039342752987e-05,-1.7006174315574202e-04,-1.6873383855223949e-04,-1.0293179154712213e-04,-3.6597337436445514e-05, +-2.6244501284214839e-04,-1.6091970359207396e-04,-3.1506876021005132e-05, 4.9726241210205663e-05, 6.2366037585496529e-05, 3.5288432637562865e-05, 5.3483766726178644e-06,-9.7733081836341802e-06, + 1.0152530925007443e-04, 5.2433448630687752e-05,-3.0252606897010600e-06,-2.7591452313209843e-05,-2.0660801137870204e-05,-4.0229373681819724e-06, 5.6760416766081327e-06, 6.2728480755789965e-06, +-4.9091860619386677e-05,-2.0608519340463656e-05, 7.4437687540502584e-06, 1.4488739938840701e-05, 6.1629682385647350e-06,-2.2723131436091380e-06,-4.1550945750726608e-06,-2.0269260780567292e-06, + 2.8483341278923021e-05, 9.2070783033682705e-06,-6.9939325269313006e-06,-7.7768571936393134e-06,-9.8592445664061096e-07, 2.8072471201898390e-06, 2.0149129282994349e-06, 1.3160007353870500e-07, +-1.9276262975554750e-05,-4.3752528950147979e-06, 6.0106495320950212e-06, 4.2160721354455499e-06,-9.1087478487139535e-07,-2.1563511850449703e-06,-6.4839883322943720e-07, 4.7021691559202491e-07, + 4.8169556793644888e-02, 4.3528944478643652e-02, 3.5588937002129381e-02, 2.6385911240623731e-02, 1.7794969884175019e-02, 1.0956746601165650e-02, 6.1837740640572729e-03, 3.2121355382808080e-03, +-4.6406123150012357e-03,-3.7464675460091024e-03,-2.3458124662976837e-03,-9.6495544875398534e-04, 1.9183223416444073e-05, 5.0484374476332528e-04, 6.0279734940115424e-04, 4.9600419954848145e-04, + 8.9414476899213335e-04, 6.3572179681023466e-04, 2.6825217864165146e-04,-2.9430909135625283e-05,-1.6758356466081237e-04,-1.6732554353703929e-04,-1.0271335975351402e-04,-3.6983273091440285e-05, +-2.5842297218189869e-04,-1.5883875471842264e-04,-3.1622005398932742e-05, 4.8634091604440269e-05, 6.1544525302179297e-05, 3.5125727007480557e-05, 5.5721156871818870e-06,-9.5240143480279662e-06, + 9.9584217463476047e-05, 5.1616427058501262e-05,-2.7330415257721625e-06,-2.7018079459880419e-05,-2.0415080696049981e-05,-4.1116069498453044e-06, 5.5114428981017742e-06, 6.1918812723986287e-06, +-4.7967790404974785e-05,-2.0243715587857357e-05, 7.1687646732444189e-06, 1.4181015551092361e-05, 6.1228192973001826e-06,-2.1617336039400821e-06,-4.0750177282772685e-06,-2.0212914694667049e-06, + 2.7724074817117427e-05, 9.0336285683620410e-06,-6.7576415777319456e-06,-7.6099339498160773e-06,-1.0211088323369574e-06, 2.7220963418343824e-06, 1.9889068121305433e-06, 1.4999216426369342e-07, +-1.8690446248755388e-05,-4.2973646811441962e-06, 5.8051326351871160e-06, 4.1303110837384109e-06,-8.4880828878441966e-07,-2.1013784590072487e-06,-6.5178964283422408e-07, 4.4948807247583476e-07, + 4.7984644870929898e-02, 4.3379592665449267e-02, 3.5495318767633552e-02, 2.6347289993840051e-02, 1.7795603800562481e-02, 1.0976806864755370e-02, 6.2078038473658411e-03, 3.2319460187135319e-03, +-4.6050522054806309e-03,-3.7211651967169329e-03,-2.3351077051498165e-03,-9.6609406453282767e-04, 1.2528899341637117e-05, 4.9817877951803362e-04, 5.9869333105930841e-04, 4.9451731524460547e-04, + 8.8388700876369797e-04, 6.2940932479017830e-04, 2.6698518774334688e-04,-2.7507009479015194e-05,-1.6513805051287519e-04,-1.6592382651221219e-04,-1.0248610922696682e-04,-3.7359301704408140e-05, +-2.5447768397351966e-04,-1.5679019670671447e-04,-3.1725663514684655e-05, 4.7564632504520880e-05, 6.0732809348750549e-05, 3.4959562155287017e-05, 5.7893345343414126e-06,-9.2779544828757455e-06, + 9.7687487266805194e-05, 5.0813859705751497e-05,-2.4516356652886024e-06,-2.6456882954385417e-05,-2.0170993704915152e-05,-4.1959208871232670e-06, 5.3500263542425793e-06, 6.1111543477278263e-06, +-4.6873627561053698e-05,-1.9885787727008836e-05, 6.9030497749579504e-06, 1.3879899837881644e-05, 6.0813118990087073e-06,-2.0545164218876682e-06,-3.9959836533691033e-06,-2.0149376003736889e-06, + 2.6987839834044862e-05, 8.8632783899629034e-06,-6.5294249630324995e-06,-7.4464145634661188e-06,-1.0538655387766813e-06, 2.6391216559630241e-06, 1.9627789046043472e-06, 1.6756707917772149e-07, +-1.8124561444081958e-05,-4.2202817539696158e-06, 5.6068875809379898e-06, 4.0458807000083733e-06,-7.8947334722880245e-07,-2.0475447710773262e-06,-6.5449432844879364e-07, 4.2935621831732932e-07, + 4.7801147188269208e-02, 4.3231247918014873e-02, 3.5402127708915022e-02, 2.6308624730196978e-02, 1.7795973491765999e-02, 1.0996601649327579e-02, 6.2316696540410050e-03, 3.2516967255672440e-03, +-4.5698992702543351e-03,-3.6961137159817886e-03,-2.3244537035908910e-03,-9.6715657393854279e-04, 5.9717490590895095e-06, 4.9156974913387719e-04, 5.9459857480023953e-04, 4.9301558578370786e-04, + 8.7378555427254645e-04, 6.2317815683641652e-04, 2.6571427283504992e-04,-2.5625442423787750e-05,-1.6272481017962114e-04,-1.6452882239779678e-04,-1.0225029823953042e-04,-3.7725552434674349e-05, +-2.5060739743612993e-04,-1.5477345685553445e-04,-3.1818275554755960e-05, 4.6517382107597057e-05, 5.9930823325828376e-05, 3.4790109640043312e-05, 6.0001596680303403e-06,-9.0351184262886026e-06, + 9.5833940580595481e-05, 5.0025474006987168e-05,-2.1806779228995891e-06,-2.5907601159161968e-05,-1.9928592589094510e-05,-4.2760119457411367e-06, 5.1917502439880945e-06, 6.0306954245866313e-06, +-4.5808466573608314e-05,-1.9534612428721732e-05, 6.6463068301972772e-06, 1.3585257712722425e-05, 6.0385409929441160e-06,-1.9505754616719532e-06,-3.9179966826296640e-06,-2.0078966832531610e-06, + 2.6273854144886582e-05, 8.6959947909838129e-06,-6.3089971740525145e-06,-7.2862456466698121e-06,-1.0843017104407904e-06, 2.5582777224849166e-06, 1.9365559477985990e-06, 1.8434846901035184e-07, +-1.7577859353902767e-05,-4.1440415253899615e-06, 5.4156477024441535e-06, 3.9627887375382832e-06,-7.3276428669861651e-07,-1.9948388920678583e-06,-6.5654782333844803e-07, 4.0980991067287051e-07, + 4.7619047582940180e-02, 4.3083900266303612e-02, 3.5309361792567717e-02, 2.6269918460318960e-02, 1.7796082819021751e-02, 1.1016133186871750e-02, 6.2553718613465757e-03, 3.2713870728236080e-03, +-4.5351473166365674e-03,-3.6713098769450767e-03,-2.3138506098548950e-03,-9.6814465263465183e-04,-4.8951061790841743e-07, 4.8501638250899627e-04, 5.9051341796079009e-04, 4.9149939970498076e-04, + 8.6383743969149079e-04, 6.1702703149629085e-04, 2.6443986749607323e-04,-2.3785329084822235e-05,-1.6034345582582779e-04,-1.6314065935670551e-04,-1.0200618003857137e-04,-3.8082154012939601e-05, +-2.4681040819519995e-04,-1.5278797326841181e-04,-3.1900252348450231e-05, 4.5491868968380598e-05, 5.9138498812181503e-05, 3.4617535778472150e-05, 6.2047158669705708e-06,-8.7954949169637207e-06, + 9.4022434926788136e-05, 4.9251002304378361e-05,-1.9198155778861437e-06,-2.5369977796469837e-05,-1.9687926060416708e-05,-4.3520094818602450e-06, 5.0365726139591859e-06, 5.9505313562885577e-06, +-4.4771432622409775e-05,-1.9190067714039746e-05, 6.3982298217555869e-06, 1.3296956228566230e-05, 5.9945973276188663e-06,-1.8498263925332484e-06,-3.8410601060469988e-06,-2.0001999937360566e-06, + 2.5581364908370029e-05, 8.5317433877402136e-06,-6.0960831702317496e-06,-7.1293735463173403e-06,-1.1125203329967913e-06, 2.4795196654252790e-06, 1.9102633128660845e-06, 2.0035952645350944e-07, +-1.7049621520629815e-05,-4.0686771984380382e-06, 5.2311563975374307e-06, 3.8810405687912808e-06,-6.7857920679687135e-07,-1.9432489188605017e-06,-6.5798372227175815e-07, 3.9083768694275756e-07, + 4.7438330137573127e-02, 4.2937539868349743e-02, 3.5217018979598842e-02, 2.6231174128502101e-02, 1.7795935592548100e-02, 1.1035403698432570e-02, 6.2789108598385809e-03, 3.2910164899030031e-03, +-4.5007902692233842e-03,-3.6467505027594771e-03,-2.3032985551576859e-03,-9.6905994150368185e-04,-6.8561474179593129e-06, 4.7851840354670196e-04, 5.8643818784729924e-04, 4.8996914040768270e-04, + 8.5403976646390711e-04, 6.1095470957989173e-04, 2.6316238915168565e-04,-2.1985809231303034e-05,-1.5799360239106486e-04,-1.6175945900179304e-04,-1.0175400291391533e-04,-3.8429234698295664e-05, +-2.4308505688401538e-04,-1.5083319465746567e-04,-3.1971990858510797e-05, 4.4487631787131247e-05, 5.8355765509489598e-05, 3.4442001780082490e-05, 6.4031262293900992e-06,-8.5590716442500729e-06, + 9.2251862226549715e-05, 4.8490181790453355e-05,-1.6687079321967219e-06,-2.4843761863927535e-05,-1.9449039281829881e-05,-4.4240395142835285e-06, 4.8844513991287041e-06, 5.8706877635660367e-06, +-4.3761680436096360e-05,-1.8852033003067935e-05, 6.1585235300215460e-06, 1.3014864589083295e-05, 5.9495676121490164e-06,-1.7521866688416690e-06,-3.7651762253393904e-06,-1.9918778889263768e-06, + 2.4909647433028425e-05, 8.3704885443835125e-06,-5.8904179777987443e-06,-6.9757444407031943e-06,-1.1386203885795910e-06, 2.4028030969060998e-06, 1.8839250533751865e-06, 2.1562298556701947e-07, +-1.6539158888644912e-05,-3.9942180519065338e-06, 5.0531667311302337e-06, 3.8006393710296803e-06,-6.2681986456288403e-07,-1.8927623353285397e-06,-6.5883432411320674e-07, 3.7242808145895319e-07, + 4.7258979175513097e-02, 4.2792157008275850e-02, 3.5125097226096483e-02, 2.6192394614090370e-02, 1.7795535572161458e-02, 1.1054415393915201e-02, 6.3022870529679609e-03, 3.3105844214592959e-03, +-4.4668221672372471e-03,-3.6224324657071622e-03,-2.2927976543319212e-03,-9.6990404738533237e-04,-1.3129413723961952e-05, 4.7207553141343991e-04, 5.8237320193252166e-04, 4.8842518617082335e-04, + 8.4438970153008497e-04, 6.0495997374013233e-04, 2.6188223961785655e-04,-2.0226040884897606e-05,-1.5567486766205241e-04,-1.6038533659750175e-04,-1.0149401026510603e-04,-3.8766922237238374e-05, +-2.3942972778995264e-04,-1.4890858015153299e-04,-3.2033874652742157e-05, 4.3504219199949027e-05, 5.7582551381263610e-05, 3.4263663879238293e-05, 6.5955121692845499e-06,-8.3258352966966373e-06, + 9.0521147638419647e-05, 4.7742754453054017e-05,-1.4270258879016298e-06,-2.4328707547545034e-05,-1.9211974026153884e-05,-4.4922247954178085e-06, 4.7353444613733971e-06, 5.7911890708996710e-06, +-4.2778393185365630e-05,-1.8520389165515221e-05, 5.9269031405962179e-06, 1.2738854152070686e-05, 5.9035346742350869e-06,-1.6575755102666488e-06,-3.6903464056971786e-06,-1.9829598256711531e-06, + 2.4258004019850408e-05, 8.2121935307908246e-06,-5.6917463155598943e-06,-6.8253044208236862e-06,-1.1626970012406983e-06, 2.3280841409023182e-06, 1.8575639563665659e-06, 2.3016112185981683e-07, +-1.6045810489059584e-05,-3.9206897345472847e-06, 4.8814410753820123e-06, 3.7215862848747609e-06,-5.7739155195742985e-07,-1.8433660743572361e-06,-6.5913067187174826e-07, 3.5456964113505480e-07, + 4.7080979256286959e-02, 4.2647742094345173e-02, 3.5033594483873068e-02, 2.6153582732823030e-02, 1.7794886467888019e-02, 1.1073170471900980e-02, 6.3255008566911446e-03, 3.3300903271754651e-03, +-4.4332371619417860e-03,-3.5983526863341414e-03,-2.2823480064411844e-03,-9.7067854379856086e-04,-1.9310546688352387e-05, 4.6568748078874150e-04, 5.7831876804994350e-04, 4.8686791017446334e-04, + 8.3488447560764456e-04, 5.9904162805942329e-04, 2.6059980562839150e-04,-1.8505199926719318e-05,-1.5338687233948487e-04,-1.5901840125620527e-04,-1.0122644066889026e-04,-3.9095343824568918e-05, +-2.3584284754822127e-04,-1.4701359910461410e-04,-3.2086274360653761e-05, 4.2541189573467192e-05, 5.6818782785273352e-05, 3.4082673464317466e-05, 6.7819934143353324e-06,-8.0957716092262775e-06, + 8.8829248443607171e-05, 4.7008467014771169e-05,-1.1944515371115636e-06,-2.3824574136448322e-05,-1.8976768828000452e-05,-4.5566848813739426e-06, 4.5892096257662723e-06, 5.7120585422450590e-06, +-4.1820781428836002e-05,-1.8195018558309824e-05, 5.7030938611510405e-06, 1.2468798433114535e-05, 5.8565776110378973e-06,-1.5659138809355700e-06,-3.6165711251915222e-06,-1.9734743790499179e-06, + 2.3625762870526178e-05, 8.0568206561318501e-06,-5.4998222246062498e-06,-6.6779995720281486e-06,-1.1848415746178660e-06, 2.2553194540301475e-06, 1.8312015914251494e-06, 2.4399575337997968e-07, +-1.5568942214394326e-05,-3.8481145156939579e-06, 4.7157507438421011e-06, 3.6438805759866895e-06,-5.3020298293345110e-07,-1.7950465744427322e-06,-6.5890259159124608e-07, 3.3725093940397441e-07, + 4.6904315171172307e-02, 4.2504285657047960e-02, 3.4942508701083737e-02, 2.6114741238153140e-02, 1.7793991940570429e-02, 1.1091671119472670e-02, 6.3485526990883110e-03, 3.3495336815600901e-03, +-4.4000295141243470e-03,-3.5745081326013714e-03,-2.2719496953726645e-03,-9.7138497164843407e-04,-2.5400768350884728e-05, 4.5935396210751260e-04, 5.7427518458527758e-04, 4.8529768052252460e-04, + 8.2552138152297561e-04, 5.9319849764481302e-04, 2.5931545934305533e-04,-1.6822479711784723e-05,-1.5112924009980116e-04,-1.5765875612958156e-04,-1.0095152794660468e-04,-3.9414626066187864e-05, +-2.3232288387816259e-04,-1.4514773090845099e-04,-3.2129548112200934e-05, 4.1598110801779200e-05, 5.6064384600351523e-05, 3.3899177204251214e-05, 6.9626880050043324e-06,-7.8688654088027992e-06, + 8.7175152969711596e-05, 4.6287070874262838e-05,-9.7067777011194506e-07,-2.3331125935378734e-05,-1.8743459130532320e-05,-4.6175362013617980e-06, 4.4460047152947214e-06, 5.6333183158281538e-06, +-4.0888082095448758e-05,-1.7875805064433603e-05, 5.4868305585898414e-06, 1.2204573102169434e-05, 5.8087719362741075e-06,-1.4771244678103172e-06,-3.5438500227850071e-06,-1.9634492604439987e-06, + 2.3012277031015155e-05, 7.9043314050105788e-06,-5.3144087230616232e-06,-6.5337760420457264e-06,-1.2051419285378686e-06, 2.1844662445976351e-06, 1.8048583589411690e-06, 2.5714824169193658e-07, +-1.5107945626004576e-05,-3.7765115433799419e-06, 4.5558756598384192e-06, 3.5675197729976772e-06,-4.8516617648376777e-07,-1.7477898345105743e-06,-6.5817873129275633e-07, 3.2046059027763180e-07, + 4.6728971938865688e-02, 4.2361778347221650e-02, 3.4851837822822272e-02, 2.6075872822538360e-02, 1.7792855602470081e-02, 1.1109919512049510e-02, 6.3714430199892664e-03, 3.3689139737447882e-03, +-4.3671935916440377e-03,-3.5508958190515749e-03,-2.2616027904105926e-03,-9.7202483991734243e-04,-3.1401285758857894e-05, 4.5307468179467056e-04, 5.7024274066539392e-04, 4.8371486026706559e-04, + 8.1629777259246278e-04, 5.8742942822983396e-04, 2.5802955883955699e-04,-1.5177090692258723e-05,-1.4890159765181059e-04,-1.5630649859484563e-04,-1.0066950123174140e-04,-3.9724894943645383e-05, +-2.2886834436262882e-04,-1.4331046480597508e-04,-3.2164041962978637e-05, 4.0674560108177108e-05, 5.5319280347003577e-05, 3.3713317172163690e-05, 7.1377122952343474e-06,-7.6451006588321526e-06, + 8.5557879556653741e-05, 4.5578322043113059e-05,-7.5540789450513450e-07,-2.2848132179737339e-05,-1.8512077425500596e-05,-4.6748921261251469e-06, 4.3056875833161979e-06, 5.5549894384447145e-06, +-3.9979557513540682e-05,-1.7562634120565236e-05, 5.2778574039079554e-06, 1.1946055981806226e-05, 5.7601897199922534e-06,-1.3911316582026530e-06,-3.4721819439037276e-06,-1.9529113359737106e-06, + 2.2416923392975445e-05, 7.7546865519903133e-06,-5.1352774630503153e-06,-6.3925801115643856e-06,-1.2236824270798495e-06, 2.1154822887970987e-06, 1.7785535361320436e-06, 2.6963949412374880e-07, +-1.4662236840985132e-05,-3.7058970630320420e-06, 4.4016040169078089e-06, 3.4924998119257654e-06,-4.4219635095037803e-07,-1.7015814632159156e-06,-6.5698659831290234e-07, 3.0418726020925773e-07, + 4.6554934801247852e-02, 4.2220210934203972e-02, 3.4761579791693677e-02, 2.6036980118704100e-02, 1.7791481017864191e-02, 1.1127917813231299e-02, 6.3941722706068157e-03, 3.3882307072826421e-03, +-4.3347238670438798e-03,-3.5275128059922417e-03,-2.2513073467896258e-03,-9.7259962634155955e-04,-3.7313291089424022e-05, 4.4684934249250401e-04, 5.6622171634443733e-04, 4.8211980743393572e-04, + 8.0721106105163809e-04, 5.8173328578453153e-04, 2.5674244858779355e-04,-1.3568260047950882e-05,-1.4670357478876680e-04,-1.5496172043618549e-04,-1.0038058503731629e-04,-4.0026275780486961e-05, +-2.2547777526710656e-04,-1.4150129970878984e-04,-3.2190090302751471e-05, 3.9770123849138512e-05, 5.4583392302907799e-05, 3.3525230966391698e-05, 7.3071809541992461e-06,-7.4244605020956867e-06, + 8.3976475558316722e-05, 4.4881981084586678e-05,-5.4835527128135615e-07,-2.2375366948656114e-05,-1.8282653388628628e-05,-4.7288630355067472e-06, 4.1682161445454006e-06, 5.4770918988085316e-06, +-3.9094494473730044e-05,-1.7255392746002007e-05, 5.0759275359223609e-06, 1.1693127038890603e-05, 5.7108997250554972e-06,-1.3078615168451377e-06,-3.4015649846516133e-06,-1.9418866444436367e-06, + 2.1839101727728037e-05, 7.6078462787068987e-06,-4.9622084109888020e-06,-6.2543582520350218e-06,-1.2405441060180832e-06, 2.0483259456967565e-06, 1.7523053221765146e-06, 2.8148996578976367e-07, +-1.4231255449021138e-05,-3.6362846434567546e-06, 4.2527319712505490e-06, 3.4188151581723449e-06,-4.0121181394372837e-07,-1.6564067272450592e-06,-6.5535259642967726e-07, 2.8841968021077471e-07, + 4.6382189219242947e-02, 4.2079574304018437e-02, 3.4671732548365822e-02, 2.5998065700880282e-02, 1.7789871703638369e-02, 1.1145668174651600e-02, 6.4167409131775438e-03, 3.4074833999476971e-03, +-4.3026149152245105e-03,-3.5043561986935756e-03,-2.2410634062302801e-03,-9.7311077807300458e-04,-4.3137961774020184e-05, 4.4067764328086304e-04, 5.6221238278733945e-04, 4.8051287504973514e-04, + 7.9825871653093489e-04, 5.7610895613188556e-04, 2.5545445990904705e-04,-1.1995231325126910e-05,-1.4453480443572456e-04,-1.5362450802141437e-04,-1.0008499932323762e-04,-4.0318893210239133e-05, +-2.2214976039904933e-04,-1.3971974401554260e-04,-3.2208016251368971e-05, 3.8884397322875897e-05, 5.3856641612660172e-05, 3.3335051828864515e-05, 7.4712069693791454e-06,-7.2069273024635944e-06, + 8.2430016383506729e-05, 4.4197813048280188e-05,-3.4924296112254054e-07,-2.1912609080513930e-05,-1.8055214008679487e-05,-4.7795563852667260e-06, 4.0335484041548514e-06, 5.3996446603563228e-06, +-3.8232203335226541e-05,-1.6953969561192974e-05, 4.8808027321262597e-06, 1.1445668377930277e-05, 5.6609675366362264e-06,-1.2272417618667587e-06,-3.3319965340860903e-06,-1.9304004154833620e-06, + 2.1278233774033567e-05, 7.4637702708682998e-06,-4.7949895298452833e-06,-6.1190571860840374e-06,-1.2558047919265253e-06, 1.9829561690180855e-06, 1.7261308818103913e-06, 2.9271966252851143e-07, +-1.3814463503165267e-05,-3.5676853660872997e-06, 4.1090633265421810e-06, 3.3464589350494729e-06,-3.6213386354522157e-07,-1.6122505934517473e-06,-6.5330206244053805e-07, 2.7314665641917450e-07, + 4.6210720868769747e-02, 4.1939859457591662e-02, 3.4582294032099233e-02, 2.5959132086011590e-02, 1.7788031129873628e-02, 1.1163172735839451e-02, 6.4391494206098620e-03, 3.4266715835355442e-03, +-4.2708614111780854e-03,-3.4814231466022624e-03,-2.2308709974556140e-03,-9.7355971232698790e-04,-4.8876460624337065e-05, 4.3455927989030294e-04, 5.5821500245056312e-04, 4.7889441117003433e-04, + 7.8943826457582300e-04, 5.7055534457249157e-04, 2.5416591141851595e-04,-1.0457264082182078e-05,-1.4239492269304478e-04,-1.5229494247378535e-04,-9.9782959563481707e-05,-4.0602871146089769e-05, +-2.1888292000333143e-04,-1.3796531543487330e-04,-3.2218132038828583e-05, 3.8016984579806190e-05, 5.3138948393305328e-05, 3.3142908760502263e-05, 7.6299016507631981e-06,-6.9924826852292395e-06, + 8.0917604568458133e-05, 4.3525587407877101e-05,-1.5780338723703127e-07,-2.1459642085986823e-05,-1.7829783713112427e-05,-4.8270767722199151e-06, 3.9016424851144086e-06, 5.3226656932259027e-06, +-3.7392017160581032e-05,-1.6658254809882411e-05, 4.6922530987957805e-06, 1.1203564226820994e-05, 5.6104556903294432e-06,-1.1492017418596929e-06,-3.2634733144019605e-06,-1.9184770874648948e-06, + 2.0733762350698621e-05, 7.3224178222192554e-06,-4.6334164866561493e-06,-5.9866239328631202e-06,-1.2695392238866088e-06, 1.9193325205174615e-06, 1.7000463864471590e-06, 3.0334814425011683e-07, +-1.3411344528479365e-05,-3.5001080297571483e-06, 3.9704092558259795e-06, 3.2754230249324229e-06,-3.2488667932063237e-07,-1.5690977751311063e-06,-6.5085929930442136e-07, 2.5835707947156101e-07, + 4.6040515636782582e-02, 4.1801057509001767e-02, 3.4493262181257242e-02, 2.5920181734942250e-02, 1.7785962720428889e-02, 1.1180433624089591e-02, 6.4613982761392522e-03, 3.4457948036650619e-03, +-4.2394581277808152e-03,-3.4587108425694138e-03,-2.2207301366911833e-03,-9.7394781701549624e-04,-5.4529935960338088e-05, 4.2849394490858742e-04, 5.5422982926020721e-04, 4.7726475890876637e-04, + 7.8074728521140141e-04, 5.6507137551502001e-04, 2.5287710945411969e-04,-8.9536335437755132e-06,-1.4028356887511167e-04,-1.5097309983953718e-04,-9.9474676813061924e-05,-4.0878332752124517e-05, +-2.1567590969638140e-04,-1.3623754080847308e-04,-3.2220739374377004e-05, 3.7167498238334411e-05, 5.2430231833690779e-05, 3.2948926634634472e-05, 7.7833746359777067e-06,-6.7811075762076956e-06, + 7.9438368887908319e-05, 4.2865077993427950e-05, 2.6221993988420861e-08,-2.1016254065244110e-05,-1.7606384486300776e-05,-4.8715259996962812e-06, 3.7724566543571374e-06, 5.2461720055000517e-06, +-3.6573290894480369e-05,-1.6368140368132899e-05, 4.5100567642362956e-06, 1.0966700927638704e-05, 5.5594237908054595e-06,-1.0736724098819965e-06,-3.1959914204861628e-06,-1.9061403250951954e-06, + 2.0205150526347470e-05, 7.1837479127969738e-06,-4.4772923549062332e-06,-5.8570058625057442e-06,-1.2818191617893675e-06, 1.8574151763465711e-06, 1.6740670562585976e-06, 3.1339452802344067e-07, +-1.3021402613550496e-05,-3.4335593072853060e-06, 3.8365880025215768e-06, 3.2056981893805772e-06,-2.8939723468731245e-07,-1.5269327646552304e-06,-6.4804761362448119e-07, 2.4403993484215322e-07, + 4.5871559617398777e-02, 4.1663159683757299e-02, 3.4404634933795877e-02, 2.5881217053575701e-02, 1.7783669853517901e-02, 1.1197452954340740e-02, 6.4834879729905480e-03, 3.4648526195813641e-03, +-4.2083999336414782e-03,-3.4362165220937907e-03,-2.2106408281475365e-03,-9.7427645136724181e-04,-6.0099521739399170e-05, 4.2248132798042119e-04, 5.5025710878745145e-04, 4.7562425646873385e-04, + 7.7218341154768749e-04, 5.5965599211494060e-04, 2.5158834848967512e-04,-7.4836302613591303e-06,-1.3820038554580760e-04,-1.4965905125062919e-04,-9.9160357774861867e-05,-4.1145400416094243e-05, +-2.1252741943274690e-04,-1.3453595593926137e-04,-3.2216129800514363e-05, 3.6335559302186986e-05, 5.1730410290409538e-05, 3.2753226307155622e-05, 7.9317338966745677e-06,-6.5727822396450245e-06, + 7.7991463493485528e-05, 4.2216062928002846e-05, 2.0308300612200683e-07,-2.0582237622173407e-05,-1.7385035985462200e-05,-4.9130031406015232e-06, 3.6459493468191674e-06, 5.1701796739051584e-06, +-3.5775400565482682e-05,-1.6083519759426333e-05, 4.3339995917750896e-06, 1.0734966918818725e-05, 5.5079286308287295e-06,-1.0005862999799313e-06,-3.1295463565324778e-06,-1.8934130373043509e-06, + 1.9691880806056348e-05, 7.0477192987821670e-06,-4.3264273442543884e-06,-5.7301507332986991e-06,-1.2927135002314812e-06, 1.7971649377025477e-06, 1.6482071979932439e-06, 3.2287749262040420e-07, +-1.2644161507274181e-05,-3.3680439262663098e-06, 3.7074246237880362e-06, 3.1372741570574006e-06,-2.5559519362208066e-07,-1.4857398752659971e-06,-6.4488934610415801e-07, 2.3018430983621515e-07, + 4.5703839108111911e-02, 4.1526157317106412e-02, 3.4316410227735378e-02, 2.5842240394009810e-02, 1.7781155862281229e-02, 1.1214232829061799e-02, 6.5054190140472288e-03, 3.4838446039599739e-03, +-4.1776817910054997e-03,-3.4139374625788629e-03,-2.2006030644869251e-03,-9.7454694653394819e-04,-6.5586337686981966e-05, 4.1652111600088380e-04, 5.4629707842128016e-04, 4.7397323717319594e-04, + 7.6374432842663681e-04, 5.5430815591907961e-04, 2.5029991153501093e-04,-6.0465597815806838e-06,-1.3614501854983732e-04,-1.4835286308335921e-04,-9.8840204866074404e-05,-4.1404195723716624e-05, +-2.0943617250755719e-04,-1.3286010542019346e-04,-3.2204585036327494e-05, 3.5520796982392610e-05, 5.1039401378379667e-05, 3.2555924724665306e-05, 8.0750857455996598e-06,-6.3674863148167402e-06, + 7.6576067087363734e-05, 4.1578324560122743e-05, 3.7302105768566990e-07,-2.0157389781744584e-05,-1.7165755650280009e-05,-4.9516046005292828e-06, 3.5220791885753150e-06, 5.0947038735782640e-06, +-3.4997742527240991e-05,-1.5804288159211051e-05, 4.1638748973166785e-06, 1.0508252720592725e-05, 5.4560243025439250e-06,-9.2987750128418612e-07,-3.0641330722774576e-06,-1.8803173944567801e-06, + 1.9193454368029940e-05, 6.9142905816751738e-06,-4.1806385286454648e-06,-5.6060067345747629e-06,-1.3022883718828180e-06, 1.7385432357437207e-06, 1.6224802439003365e-06, 3.3181528225150388e-07, +-1.2279163786354766e-05,-3.3035648114288371e-06, 3.5827507205706768e-06, 3.0701397240793824e-06,-2.2341282362612028e-07,-1.4455032717448182e-06,-6.4140590619088623e-07, 2.1677940233472880e-07, + 4.5537340606086933e-02, 4.1390041852375117e-02, 3.4228586001612882e-02, 2.5803254055647921e-02, 1.7778424035352808e-02, 1.1230775338145611e-02, 6.5271919115275174e-03, 3.5027703427123009e-03, +-4.1472987537118158e-03,-3.3918709826042184e-03,-2.1906168272740820e-03,-9.7476060618365695e-04,-7.0991489428393062e-05, 4.1061299330249351e-04, 5.4234996753861880e-04, 4.7231202949842097e-04, + 7.5542777110759740e-04, 5.4902684651755851e-04, 2.4901207052220034e-04,-4.6417423214598335e-06,-1.3411711704073583e-04,-1.4705459711251647e-04,-9.8514416284472021e-05,-4.1654839434352451e-05, +-2.0640092459003889e-04,-1.3120954246689256e-04,-3.2186377308052823e-05, 3.4722848521982370e-05, 5.0357122057577850e-05, 3.2357135029742733e-05, 8.2135348448131025e-06,-6.1651988515848695e-06, + 7.5191382123146336e-05, 4.0951649398177724e-05, 5.3626943448521704e-07,-1.9741511906817668e-05,-1.6948558809061945e-05,-4.9874241791274730e-06, 3.4008050180609227e-06, 5.0197589074253290e-06, +-3.4239732724968613e-05,-1.5530342400805468e-05, 3.9994831806952717e-06, 1.0286450916418793e-05, 5.4037623065166089e-06,-8.6148163332199863e-07,-2.9997459967368872e-06,-1.8668748459679105e-06, + 1.8709390324163144e-05, 6.7834202796127772e-06,-4.0397495911661833e-06,-5.4845225209684722e-06,-1.3106072510649225e-06, 1.6815121380639735e-06, 1.5968987873747823e-06, 3.4022571177455417e-07, +-1.1925970044550367e-05,-3.2401232323358516e-06, 3.4624041904302113e-06, 3.0042828384315811e-06,-1.9278490377441306e-07,-1.4062070045254207e-06,-6.3761780192818837e-07, 2.0381452647802032e-07, + 4.5372050804536802e-02, 4.1254804839334643e-02, 3.4141160194917558e-02, 2.5764260286286759e-02, 1.7775477617421442e-02, 1.1247082558810080e-02, 6.5488071866672782e-03, 3.5216294347924200e-03, +-4.1172459652021598e-03,-3.3700144412106697e-03,-2.1806820874116437e-03,-9.7491870708127024e-04,-7.6316068621726241e-05, 4.0475664183636274e-04, 5.3841599767175379e-04, 4.7064095710721947e-04, + 7.4723152399149007e-04, 5.4381106120218736e-04, 2.4772508667861358e-04,-3.2685124504204868e-06,-1.3211633350530345e-04,-1.4576431066164533e-04,-9.8183186074160479e-05,-4.1897451458159914e-05, +-2.0342046278930270e-04,-1.2958382875261499e-04,-3.2161769667990914e-05, 3.3941359023938623e-05, 4.9683488715313598e-05, 3.2156966664238058e-05, 8.3471842143919027e-06,-5.9658983446182458e-06, + 7.3836634036687711e-05, 4.0335828044186833e-05, 6.9305358130809325e-07,-1.9334409615755528e-05,-1.6733458780097514e-05,-5.0205531312453856e-06, 3.2820859066158376e-06, 4.9453582344050173e-06, +-3.3500805992500878e-05,-1.5261580977752203e-05, 3.8406318669133254e-06, 1.0069456133403273e-05, 5.3511916557365083e-06,-7.9533581973575511e-07,-2.9363790717417759e-06,-1.8531061369453086e-06, + 1.8239225014748675e-05, 6.6550668915274596e-06,-3.9035905779722433e-06,-5.3656472443052721e-06,-1.3177310518549173e-06, 1.6260343513931994e-06, 1.5714746196624152e-06, 3.4812617059990194e-07, +-1.1584158123221215e-05,-3.1777189385927303e-06, 3.3462289880000643e-06, 2.9396906812572151e-06,-1.6364863928453695e-07,-1.3678350369659355e-06,-6.3354467331176054e-07, 1.9127912080749878e-07, + 4.5207956589177048e-02, 4.1120437932597183e-02, 3.4054130748508729e-02, 2.5725261283180919e-02, 1.7772319809786639e-02, 1.1263156555506450e-02, 6.5702653694095104e-03, 3.5404214920052189e-03, +-4.0875186565798652e-03,-3.3483652371990164e-03,-2.1707988055613067e-03,-9.7502249965624246e-04,-8.1561153091536803e-05, 3.9895174134720914e-04, 5.3449538267319983e-04, 4.6896033888333723e-04, + 7.3915341938084883e-04, 5.3865981463152362e-04, 2.4643921088795444e-04,-1.9262187794814780e-06,-1.3014232378501031e-04,-1.4448205674888958e-04,-9.7846704191152504e-05,-4.2132150834525706e-05, +-2.0049360474932521e-04,-1.2798253424593775e-04,-3.2131016303033868e-05, 3.3175981282884627e-05, 4.9018417244746550e-05, 3.1955525469619899e-05, 8.4761352423050036e-06,-5.7695627666664231e-06, + 7.2511070503387455e-05, 3.9730655127473443e-05, 8.4359137438954040e-07,-1.8935892701472545e-05,-1.6520466969231212e-05,-5.0510802262051038e-06, 3.1658811770068765e-06, 4.8715144975342129e-06, +-3.2780415375914011e-05,-1.4997904043417932e-05, 3.6871350557163108e-06, 9.8571650223645128e-06, 5.2983589762405796e-06,-7.3137866325987786e-07,-2.8740257827369636e-06,-1.8390313254685114e-06, + 1.7782511332496080e-05, 6.5291889552574683e-06,-3.7719976596647757e-06,-5.2493305834914777e-06,-1.3237182236673953e-06, 1.5720732255127068e-06, 1.5462187629032063e-06, 3.5553362851079542e-07, +-1.1253322377238611e-05,-3.1163502842019589e-06, 3.2340748916728768e-06, 2.8763497443966337e-06,-1.3594357704397990e-07,-1.3303712746870468e-06,-6.2920532039152856e-07, 1.7916275253900264e-07, + 4.5045045034757557e-02, 4.0986932890039060e-02, 3.3967495605017280e-02, 2.5686259194085341e-02, 1.7768953770909399e-02, 1.1278999379834490e-02, 6.5915669981004453e-03, 3.5591461388159431e-03, +-4.0581121447184967e-03,-3.3269208084416926e-03,-2.1609669325504469e-03,-9.7507320855828167e-04,-8.6727806963417947e-05, 3.9319796954275128e-04, 5.3058832887790345e-04, 4.6727048896670446e-04, + 7.3119133627680410e-04, 5.3357213850189610e-04, 2.4515468403880068e-04,-6.1422365672000705e-07,-1.2819474709428985e-04,-1.4320788422908482e-04,-9.7505156568408150e-05,-4.2359055711851099e-05, +-1.9761919777490800e-04,-1.2640523705042763e-04,-3.2094362832074208e-05, 3.2426375619468950e-05, 4.8361823119589381e-05, 3.1752913785275898e-05, 8.6004876947568719e-06,-5.5761696006156243e-06, + 7.1213960724480368e-05, 3.9135929237408846e-05, 9.8809338358452065e-07,-1.8545775050592539e-05,-1.6309592963561013e-05,-5.0790918065042492e-06, 3.0521504211928226e-06, 4.7982395509601277e-06, +-3.2078031487071522e-05,-1.4739213406859044e-05, 3.5388132810234934e-06, 9.6494762358081829e-06, 5.2453086041286354e-06,-6.6955021991830850e-07,-2.8126791890624073e-06,-1.8246697991270142e-06, + 1.7338818080212478e-05, 6.4057450985175331e-06,-3.6448129022822015e-06,-5.1355227701531804e-06,-1.3286248437240597e-06, 1.5195927550336481e-06, 1.5211415034163343e-06, 3.6246464065680309e-07, +-1.0933072981694945e-05,-3.0560143399681753e-06, 3.1257972795973071e-06, 2.8142459013327743e-06,-1.0961152354754916e-07,-1.2937995912265838e-06,-6.2461773304714117e-07, 1.6745512326478201e-07, + 4.4883303401668642e-02, 4.0854281571251649e-02, 3.3881252709231008e-02, 2.5647256118275421e-02, 1.7765382616957408e-02, 1.1294613070464220e-02, 6.6127126191920143e-03, 3.5778030121611550e-03, +-4.0290218304169928e-03,-3.3056786312080991e-03,-2.1511864097650962e-03,-9.7507203320075855e-04,-9.1817080799323075e-05, 3.8749500225751868e-04, 5.2669503526286358e-04, 4.6557171678945301e-04, + 7.2334319920889373e-04, 5.2854708122570399e-04, 2.4387173736140121e-04, 6.6809713038988670e-07,-1.2627326603572588e-04,-1.4194183793201270e-04,-9.7158725180457154e-05,-4.2578283328580796e-05, +-1.9479611798318974e-04,-1.2485152324847194e-04,-3.2052046592885689e-05, 3.1692209718367259e-05, 4.7713621464780986e-05, 3.1549230544615224e-05, 8.7203397272154733e-06,-5.3856958704970250e-06, + 6.9944594734717806e-05, 3.8551452858818239e-05, 1.1267631245172682e-06,-1.8163874564014848e-05,-1.6100844620720408e-05,-5.1046718457790635e-06, 2.9408535169546947e-06, 4.7255444863977698e-06, +-3.1393141875899567e-05,-1.4485412530900795e-05, 3.3954932806011216e-06, 9.4462904055391588e-06, 5.1920826779476625e-06,-6.0979197257310648e-07,-2.7523319531000791e-06,-1.8100402913578318e-06, + 1.6907729344998773e-05, 6.2846940926683534e-06,-3.5218840496379447e-06,-5.0241746121685857e-06,-1.3325047046930962e-06, 1.4685575790401828e-06, 1.4962524242582745e-06, 3.6893535269263546e-07, +-1.0623035252330419e-05,-2.9967070107607261e-06, 3.0212569194041350e-06, 2.7533644739276975e-06,-8.4596467915062397e-08,-1.2581038497598040e-06,-6.1979912094369409e-07, 1.5614607436597205e-07, + 4.4722719132620090e-02, 4.0722475936018562e-02, 3.3795400008464871e-02, 2.5608254107545879e-02, 1.7761609422344900e-02, 1.1309999653064290e-02, 6.6337027869506912e-03, 3.5963917612611630e-03, +-4.0002431966015273e-03,-3.2846362195019518e-03,-2.1414571695299173e-03,-9.7502014829242006e-04,-9.6830011733238519e-05, 3.8184251361104114e-04, 5.2281569360422293e-04, 4.6386432711266598e-04, + 7.1560697709957544e-04, 5.2358370761483152e-04, 2.4259059275368445e-04, 1.9213546463193619e-06,-1.2437754661281418e-04,-1.4068395879657342e-04,-9.6807588107691530e-05,-4.2789949995423147e-05, +-1.9202326948474392e-04,-1.2332098674585007e-04,-3.2004296919960218e-05, 3.0973158469365861e-05, 4.7073727124193106e-05, 3.1344571368371605e-05, 8.8357878963528759e-06,-5.1981181715442257e-06, + 6.8702282738893842e-05, 3.7977032304295299e-05, 1.2597973032397021e-06,-1.7790013078381322e-05,-1.5894228155379606e-05,-5.1279020048186257e-06, 2.8319506428332827e-06, 4.6534396591559313e-06, +-3.0725250434598543e-05,-1.4236406522504218e-05, 3.2570077714496261e-06, 9.2475101195528473e-06, 5.1387212289775607e-06,-5.5204680608122340e-07,-2.6929763670502238e-06,-1.7951608981166407e-06, + 1.6488843912094325e-05, 6.1659948919377876e-06,-3.4030643087196047e-06,-4.9152375152301158e-06,-1.3354094014436420e-06, 1.4189329826799924e-06, 1.4715604344883910e-06, 3.7496150729463155e-07, +-1.0322849020156538e-05,-2.9384231270527492e-06, 2.9203197563566503e-06, 2.6936902963824901e-06,-6.0844503836413361e-08,-1.2232679281607075e-06,-6.1476593855436213e-07, 1.4522558941697682e-07, + 4.4563279849391652e-02, 4.0591508042819482e-02, 3.3709935452915840e-02, 2.5569255167188519e-02, 1.7757637220267020e-02, 1.1325161140236351e-02, 6.6545380631725642e-03, 3.6149120474339171e-03, +-3.9717718065721691e-03,-3.2637911244117052e-03,-2.1317791354749371e-03,-9.7491870435771968e-04,-1.0176762360748423e-04, 3.7624017616096593e-04, 5.1895048863170694e-04, 4.6214862006383828e-04, + 7.0798068216046395e-04, 5.1868109857102418e-04, 2.4131146309562318e-04, 3.1461470927557139e-06,-1.2250725823985449e-04,-1.3943428400161866e-04,-9.6451919599963617e-05,-4.2994171078822036e-05, +-1.8929958358943977e-04,-1.2181322912045408e-04,-3.1951335411560078e-05, 3.0268903811165939e-05, 4.6442054724624450e-05, 3.1139028656250104e-05, 8.9469271721585262e-06,-5.0134126990451728e-06, + 6.7486354468985696e-05, 3.7412477649600767e-05, 1.3873860500780054e-06,-1.7424016287763430e-05,-1.5689748221745085e-05,-5.1488616875161594e-06, 2.7254022927787371e-06, 4.5819347131036482e-06, +-3.0073876819384929e-05,-1.3992102126553532e-05, 3.1231952371042448e-06, 9.0530398967996697e-06, 5.0852622674523603e-06,-4.9625898085229522e-07,-2.6346043799611546e-06,-1.7800490934518099e-06, + 1.6081774692831397e-05, 6.0496066781613864e-06,-3.2882121496458559e-06,-4.8086634994965020e-06,-1.3373884137926715e-06, 1.3706848951700112e-06, 1.4470738000168131e-06, 3.8055844907978897e-07, +-1.0032168014670010e-05,-2.8811565469814920e-06, 2.8228567212125093e-06, 2.6352077703381802e-06,-3.8303755333544933e-08,-1.1892757377938729e-06,-6.0953391427999854e-07, 1.3468379957990666e-07, + 4.4404973349651898e-02, 4.0461370047359523e-02, 3.3624856996003698e-02, 2.5530261256949321e-02, 1.7753469003228810e-02, 1.1340099531455610e-02, 6.6752190169045104e-03, 3.6333635439104290e-03, +-3.9436033022923755e-03,-3.2431409334730890e-03,-2.1221522228902986e-03,-9.7476882824556327e-04,-1.0663092710933020e-04, 3.7068766105085443e-04, 5.1509959818061765e-04, 4.6042489117494858e-04, + 7.0046236881928653e-04, 5.1383835078209822e-04, 2.4003455255372508e-04, 4.3430600872466701e-06,-1.2066207374933431e-04,-1.3819284709294040e-04,-9.6091890139866410e-05,-4.3191060985492522e-05, +-1.8662401803718831e-04,-1.2032785947318602e-04,-3.1893376188537801e-05, 2.9579134579015896e-05, 4.5818518736477046e-05, 3.0932691676043136e-05, 9.0538509509363932e-06,-4.8315552763698082e-06, + 6.6296158564002291e-05, 3.6857602668431385e-05, 1.5097131466729289e-06,-1.7065713667545213e-05,-1.5487407992446017e-05,-5.1676280953155378e-06, 2.6211692891920811e-06, 4.5110386053544230e-06, +-2.9438555895570906e-05,-1.3752407715982002e-05, 2.9938997201724983e-06, 8.8627861632930302e-06, 5.0317418650284012e-06,-4.4237410714606192e-07,-2.5772076226084094e-06,-1.7647217455400722e-06, + 1.5686148179588905e-05, 5.9354888975733651e-06,-3.1771911085894818e-06,-4.7044052174885881e-06,-1.3384891853126441e-06, 1.3237798880089299e-06, 1.4228001717117265e-06, 3.8574113099222782e-07, +-9.7506592820155396e-06,-2.8249002434367183e-06, 2.7287435371256752e-06, 2.5779009222001565e-06,-1.6924306899544832e-08,-1.1561112422173719e-06,-6.0411807594255930e-07, 1.2451098606192136e-07, + 4.4247787603845630e-02, 4.0332054201123818e-02, 3.3540162594697720e-02, 2.5491274291965540e-02, 1.7749107723568601e-02, 1.1354816813017090e-02, 6.6957462241714356e-03, 3.6517459356517228e-03, +-3.9157334027218119e-03,-3.2226832700434638e-03,-2.1125763390688682e-03,-9.7457162362731692e-04,-1.1142091990775510e-04, 3.6518463815305748e-04, 5.1126319334122636e-04, 4.5869343142114711e-04, + 6.9305013267834809e-04, 5.0905457642361467e-04, 2.3876005687509250e-04, 5.5126669362277588e-06,-1.1884166939713157e-04,-1.3695967810682270e-04,-9.5727666505351385e-05,-4.3380733148115224e-05, +-1.8399555625473341e-04,-1.1886449428077033e-04,-3.1830626143909967e-05, 2.8903546354736698e-05, 4.5203033531664622e-05, 3.0725646650662150e-05, 9.1566510686019362e-06,-4.6525213819008851e-06, + 6.5131061973963081e-05, 3.6312224766585891e-05, 1.6269562444438486e-06,-1.6714938398318330e-05,-1.5287209234747117e-05,-5.1842762806680854e-06, 2.5192127952955047e-06, 4.4407596300811798e-06, +-2.8818837207377190e-05,-1.3517233278968966e-05, 2.8689706231995108e-06, 8.6766572260816268e-06, 4.9781942351233674e-06,-3.9033911951032848e-07,-2.5207774317139857e-06,-1.7491951320440345e-06, + 1.5301603928408223e-05, 5.8236012919762437e-06,-3.0698695991381218e-06,-4.6024159674970552e-06,-1.3387572010372714e-06, 1.2781851727224123e-06, 1.3987466131470462e-06, 3.9052412004219129e-07, +-9.4780026364319796e-06,-2.7696463819322509e-06, 2.6378605354303866e-06, 2.5217534529879909e-06, 3.3418669954759689e-09,-1.1237584751136921e-06,-5.9853277648321447e-07, 1.1469758347545787e-07, + 4.4091710752146421e-02, 4.0203552849957080e-02, 3.3455850209829760e-02, 2.5452296143682940e-02, 1.7744556293976071e-02, 1.1369314957987641e-02, 6.7161202677093980e-03, 3.6700589191673459e-03, +-3.8881579021893403e-03,-3.2024157926884358e-03,-2.1030513836371653e-03,-9.7432817148385836e-04,-1.1613858679052069e-04, 3.5973077620660675e-04, 5.0744143860577667e-04, 4.5695452725997340e-04, + 6.8574210950090447e-04, 5.0432890286721248e-04, 2.3748816367147600e-04, 6.6555289019186231e-06,-1.1704572486530146e-04,-1.3573480369005617e-04,-9.5359411831972489e-05,-4.3563300012017009e-05, +-1.8141320663369199e-04,-1.1742275725259369e-04,-3.1763285183439825e-05, 2.8241841319970250e-05, 4.4595513438345201e-05, 3.0517976842934157e-05, 9.2554178147066389e-06,-4.4762861751812517e-06, + 6.3990449381098294e-05, 3.5776164919069819e-05, 1.7392870743844953e-06,-1.6371527290961487e-05,-1.5089152383395003e-05,-5.1988791993009008e-06, 2.4194943261653775e-06, 4.3711054420210128e-06, +-2.8214284462028475e-05,-1.3286490409114059e-05, 2.7482625186665423e-06, 8.4945632466148407e-06, 4.9246518100227301e-06,-3.4010225160662143e-07,-2.4653048724467864e-06,-1.7334849557864686e-06, + 1.4927794052914416e-05, 5.7139039342155967e-06,-2.9661207343432621e-06,-4.5026497043161912e-06,-1.3382360624198127e-06, 1.2338685984641607e-06, 1.3749196262817858e-06, 3.9492160416601363e-07, +-9.2138901186988191e-06,-2.7153864061396329e-06, 2.5500924854397860e-06, 2.4667487825006149e-06, 2.2540970759372621e-08,-1.0922015579558288e-06,-5.9279171705508889e-07, 1.0523418095737028e-07, + 4.3936731101473933e-02, 4.0075858432667262e-02, 3.3371917806394667e-02, 2.5413328640753959e-02, 1.7739817588004719e-02, 1.1383595926163210e-02, 6.7363417367046000e-03, 3.6883022023354571e-03, +-3.8608726688066711e-03,-3.1823361945795062e-03,-2.0935772488753848e-03,-9.7403953058211937e-04,-1.2078489980117679e-04, 3.5432574295053525e-04, 5.0363449201289764e-04, 4.5520846067110708e-04, + 6.7853647422716490e-04, 4.9966047239369260e-04, 2.3621905269431047e-04, 7.7721954634248167e-06,-1.1527392326280106e-04,-1.3451824721676234e-04,-9.4987285674362140e-05,-4.3738873022958593e-05, +-1.7887600183347230e-04,-1.1600227918843065e-04,-3.1691546458778515e-05, 2.7593728112536211e-05, 4.3995872792788564e-05, 3.0309762638564331e-05, 9.3502399465710456e-06,-4.3028245219483102e-06, + 6.2873722645041645e-05, 3.5249247604754219e-05, 1.8468716509279791e-06,-1.6035320713276396e-05,-1.4893236610236732e-05,-5.2115077618944148e-06, 2.3219757594095563e-06, 4.3020830789903320e-06, +-2.7624475040287426e-05,-1.3060092289121688e-05, 2.6316349630078717e-06, 8.3164162149673983e-06, 4.8711453143947704e-06,-2.9161301035343240e-07,-2.4107807608275693e-06,-1.7176063594471730e-06, + 1.4564382751165738e-05, 5.6063572510311279e-06,-2.8658221496761080e-06,-4.4050610511670135e-06,-1.3369675579389445e-06, 1.1907986473541993e-06, 1.3513251778851997e-06, 3.9894739779683671e-07, +-8.9580255001346098e-06,-2.6621111004266212e-06, 2.4653284193883513e-06, 2.4128700967692848e-06, 4.0717450394827121e-08,-1.0614247130254289e-06,-5.8690797260034938e-07, 9.6111525531611541e-08, + 4.3782837122573359e-02, 3.9948963479653127e-02, 3.3288363353837870e-02, 2.5374373569916758e-02, 1.7734894440578911e-02, 1.1397661664031460e-02, 6.7564112265380994e-03, 3.7064755042245140e-03, +-3.8338736429202325e-03,-3.1624422029034316e-03,-2.0841538200265623e-03,-9.7370673794115042e-04,-1.2536081837620852e-04, 3.4896920525246192e-04, 4.9984250528962125e-04, 4.5345550919658742e-04, + 6.7143144001680088e-04, 4.9504844191231284e-04, 2.3495289610049944e-04, 8.8632045719331913e-06,-1.1352595112404609e-04,-1.3331002890185423e-04,-9.4611444067245628e-05,-4.3907562615872766e-05, +-1.7638299810448805e-04,-1.1460269783971293e-04,-3.1615596592414361e-05, 2.6958921685968807e-05, 4.3404025988319617e-05, 3.0101081626972029e-05, 9.4412047039967885e-06,-4.1321110183760654e-06, + 6.1780300264775115e-05, 3.4731300743274011e-05, 1.9498704681104656e-06,-1.5706162517963752e-05,-1.4699459890682352e-05,-5.2222308846466863e-06, 2.2266193447108816e-06, 4.2336989840165565e-06, +-2.7048999521501105e-05,-1.2837953676275330e-05, 2.5189523184208890e-06, 8.1421299239068934e-06, 4.8177038356725256e-06,-2.4482215036662874e-07,-2.3571956846927451e-06,-1.7015739404118239e-06, + 1.4211045845225775e-05, 5.5009220480555540e-06,-2.7688558345868849e-06,-4.3096053099136410e-06,-1.3349917308064781e-06, 1.1489444294762797e-06, 1.3279687243017806e-06, 4.0261494825031643e-07, +-8.7101237971702211e-06,-2.6098106560382186e-06, 2.3834614678609224e-06, 2.3601003917727027e-06, 5.7914053887237530e-08,-1.0314122756782531e-06,-5.8089401548563492e-07, 8.7320523774615450e-08, + 4.3630017447156867e-02, 3.9822860611555523e-02, 3.3205184826330808e-02, 2.5335432676856218e-02, 1.7729789648495399e-02, 1.1411514104739401e-02, 6.7763293385361151e-03, 3.7245785549165781e-03, +-3.8071568356013441e-03,-3.1427315782826953e-03,-2.0747809755948671e-03,-9.7333080928850221e-04,-1.2986728948185741e-04, 3.4366082923275275e-04, 4.9606562399099642e-04, 4.5169594598143663e-04, + 6.6442525731864877e-04, 4.9049198268566940e-04, 2.3368985870868752e-04, 9.9290829010692484e-06,-1.1180149840594759e-04,-1.3211016591123536e-04,-9.4232039585875459e-05,-4.4069478204524361e-05, +-1.7393327463297937e-04,-1.1322365777366146e-04,-3.1535615893778213e-05, 2.6337143170683929e-05, 4.2819887522403156e-05, 2.9892008679872580e-05, 9.5283978244075523e-06,-3.9641200144760366e-06, + 6.0709616859317903e-05, 3.4222155633482866e-05, 2.0484386867239824e-06,-1.5383899969501359e-05,-1.4507819068836642e-05,-5.2311155381942984e-06, 2.1333877123542343e-06, 4.1659590269400285e-06, +-2.6487461225835037e-05,-1.2619990889227575e-05, 2.4100835849683490e-06, 7.9716199387621282e-06, 4.7643548945058732e-06,-1.9968164999277407e-07,-2.3045400231685106e-06,-1.6854017655132240e-06, + 1.3867470336607461e-05, 5.3975595372614628e-06,-2.6751079774021031e-06,-4.2162384626294797e-06,-1.3323469494964688e-06, 1.1082756803126197e-06, 1.3048552340493405e-06, 4.0593734256364530e-07, +-8.4699107993459976e-06,-2.5584747433270450e-06, 2.3043887147290004e-06, 2.3084225011734533e-06, 7.4171899612599944e-08,-1.0021487115113742e-06,-5.7476173560155315e-07, 7.8852242151448619e-08, + 4.3478260865103542e-02, 3.9697542537930973e-02, 3.3122380203034617e-02, 2.5296507667046358e-02, 1.7724505970919440e-02, 1.1425155168065920e-02, 6.7960966797259341e-03, 3.7426110953322589e-03, +-3.7807183271725692e-03,-3.1232021142067121e-03,-2.0654585876344125e-03,-9.7291273950612933e-04,-1.3430524775110211e-04, 3.3840028038433466e-04, 4.9230398763724578e-04, 4.4993003981471215e-04, + 6.5751621296585711e-04, 4.8599028005958094e-04, 2.3243009824804994e-04, 1.0970346090751447e-05,-1.1010025848254724e-04,-1.3091867246906518e-04,-9.3849221405784781e-05,-4.4224728172137376e-05, +-1.7152593290627616e-04,-1.1186481023892862e-04,-3.1451778569766703e-05, 2.5728119739814386e-05, 4.2243372040067219e-05, 2.9682616028388380e-05, 9.6119035581422607e-06,-3.7988256365700712e-06, + 5.9661122667347549e-05, 3.3721646890325430e-05, 2.1427263180838874e-06,-1.5068383675390275e-05,-1.4318309917711727e-05,-5.2382267966438699e-06, 2.0422438814223390e-06, 4.0988685252725345e-06, +-2.5939475777022120e-05,-1.2406121789153655e-05, 2.3049022328121210e-06, 7.8048035730195253e-06, 4.7111245082916767e-06,-1.5614468517654821e-07,-2.2528039662650684e-06,-1.6691033851241523e-06, + 1.3533353987868465e-05, 5.2962313520210297e-06,-2.5844688046618685e-06,-4.1249171827905155e-06,-1.3290699676033036e-06, 1.0687627528009095e-06, 1.2819892118859642e-06, 4.0892731345144430e-07, +-8.2371226358474348e-06,-2.5080925591727875e-06, 2.2280110357959713e-06, 2.2578191421621128e-06, 8.9530526808024258e-08,-9.7361862250097624e-07,-5.6852246488861284e-07, 7.0697909214089963e-08, + 4.3327556321718808e-02, 3.9573002055948457e-02, 3.3039947468352683e-02, 2.5257600206575581e-02, 1.7719046129875279e-02, 1.1438586760399020e-02, 6.8157138625971883e-03, 3.7605728770572912e-03, +-3.7545542657703504e-03,-3.1038516364737326e-03,-2.0561865220279502e-03,-9.7245350306712774e-04,-1.3867561562001113e-04, 3.3318722368820726e-04, 4.8855772984859359e-04, 4.4815805517089231e-04, + 6.5070262929661782e-04, 4.8154253319831596e-04, 2.3117376559818065e-04, 1.1987498986571442e-05,-1.0842192813859716e-04,-1.2973555996170674e-04,-9.3463135362017503e-05,-4.4373419862868001e-05, +-1.6916009609830186e-04,-1.1052581303398962e-04,-3.1364252926911409e-05, 2.5131584476307603e-05, 4.1674394376125162e-05, 2.9472973337607580e-05, 9.6918046843008540e-06,-3.6362018090145852e-06, + 5.8634283064312232e-05, 3.3229612383281403e-05, 2.2328783991001188e-06,-1.4759467515769545e-05,-1.4130927199095349e-05,-5.2436278842956806e-06, 1.9531512666640216e-06, 4.0324322646820799e-06, +-2.5404670681030829e-05,-1.2196265762443912e-05, 2.2032860447507172e-06, 7.6415998587579691e-06, 4.6580372563668404e-06,-1.1416560620364839e-07,-2.2019775322793698e-06,-1.6526918474690513e-06, + 1.3208404918586917e-05, 5.1968995652674474e-06,-2.4968324344735008e-06,-4.0355988359408953e-06,-1.3251959892542143e-06, 1.0303766142180106e-06, 1.2593747192405045e-06, 4.1159724643227265e-07, +-8.0115053533194700e-06,-2.4586528820541422e-06, 2.1542329590159427e-06, 2.2082729415927012e-06, 1.0402795895715566e-07,-9.4580676247510563e-07,-5.6218699536866043e-07, 6.2848914916064797e-08, + 4.3177892915049823e-02, 3.9449232049108218e-02, 3.2957884612172049e-02, 2.5218711922954499e-02, 1.7713412810731511e-02, 1.1451810774717550e-02, 6.8351815048685611e-03, 3.7784636621708031e-03, +-3.7286608659416048e-03,-3.0846780026435802e-03,-2.0469646387560603e-03,-9.7195405446275779e-04,-1.4297930346420656e-04, 3.2802132372507925e-04, 4.8482697847766418e-04, 4.4638025225160688e-04, + 6.4398286329802462e-04, 4.7714795482567190e-04, 2.2992100502097356e-04, 1.2981035873471094e-05,-1.0676620756086395e-04,-1.2856083703917449e-04,-9.3073924007531562e-05,-4.4515659574175946e-05, +-1.6683490847235272e-04,-1.0920633037901466e-04,-3.1273201566622128e-05, 2.4547276243595314e-05, 4.1112869593976385e-05, 2.9263147780128217e-05, 9.7681825264332093e-06,-3.4762222749889270e-06, + 5.7628578093338063e-05, 3.2745893177149008e-05, 2.3190351611734479e-06,-1.4457008575589721e-05,-1.3945664718973904e-05,-5.2473802229935650e-06, 1.8660736855550081e-06, 3.9666545185863366e-06, +-2.4882684916189055e-05,-1.1990343705254022e-05, 2.1051169643323246e-06, 7.4819295195361112e-06, 4.6051163392709373e-06,-7.3699911691842138e-08,-2.1520505861593953e-06,-1.6361797118921928e-06, + 1.2892341210935033e-05, 5.0995267094125536e-06,-2.4120967347122670e-06,-3.9482414838102941e-06,-1.3207587259725779e-06, 9.9308883709168912e-07, 1.2370153974365951e-06, 4.1395918524130999e-07, +-7.7928145015224797e-06,-2.4101441289090544e-06, 2.0829625281911120e-06, 2.1597664683778495e-06, 1.1770075377449668e-07,-9.1869804120471810e-07,-5.5576560364895630e-07, 5.5296813383745741e-08, + 4.3029259893256337e-02, 3.9326225485981497e-02, 3.2876189630094151e-02, 2.5179844405906569e-02, 1.7707608662680559e-02, 1.1464829090577390e-02, 6.8545002292596247e-03, 3.7962832230752212e-03, +-3.7030344072748397e-03,-3.0656791014999490e-03,-2.0377927921576104e-03,-9.7141532862018640e-04,-1.4721720973464442e-04, 3.2290224478265933e-04, 4.8111185573967465e-04, 4.4459688702762562e-04, + 6.3735530577489069e-04, 4.7280577096992914e-04, 2.2867195438551892e-04, 1.3951440704270930e-05,-1.0513280032840546e-04,-1.2739450971312974e-04,-9.2681726671264234e-05,-4.4651552549936080e-05, +-1.6454953480496155e-04,-1.0790603278795297e-04,-3.1178781574984696e-05, 2.3974939559005485e-05, 4.0558713023009342e-05, 2.9053204106801320e-05, 9.8411169690849334e-06,-3.3188606167206946e-06, + 5.6643502017008577e-05, 3.2270333469642661e-05, 2.4013321952068008e-06,-1.4160867077993589e-05,-1.3762515381895060e-05,-5.2495434768416586e-06, 1.7809753635122246e-06, 3.9015390677150857e-06, +-2.4373168547365916e-05,-1.1788278000501935e-05, 2.0102809458541115e-06, 7.3257149434278987e-06, 4.5523836378747670e-06,-3.4704225740337540e-08,-2.1030128548233286e-06,-1.6195790629858678e-06, + 1.2584890546863981e-05, 5.0040757819493717e-06,-2.3301631799981467e-06,-3.8628038878476986e-06,-1.3157904550958887e-06, 9.5687159487068886e-07, 1.2149144859507826e-06, 4.1602483959308180e-07, +-7.5808147649146093e-06,-2.3625543863268090e-06, 2.0141111600692764e-06, 2.1122822649365564e-06, 1.3058405764729447e-07,-8.9227753666839322e-07,-5.4926806699880512e-07, 4.8033320694112968e-08, + 4.2881646652036212e-02, 3.9203975418972789e-02, 3.2794860523655579e-02, 2.5140999208142771e-02, 1.7701636299213071e-02, 1.1477643574101800e-02, 6.8736706632679797e-03, 3.8140313423278929e-03, +-3.6776712330634231e-03,-3.0468528525236654e-03,-2.0286708311808010e-03,-9.7083824131148633e-04,-1.5139022109306177e-04, 3.1782965095940134e-04, 4.7741247834017734e-04, 4.4280821128115473e-04, + 6.3081838053975769e-04, 4.6851522071532370e-04, 2.2742674538444316e-04, 1.4899187323679213e-05,-1.0352141340126469e-04,-1.2623658145251450e-04,-9.2286679515216465e-05,-4.4781202974450754e-05, +-1.6230315982443400e-04,-1.0662459694577573e-04,-3.1081144704106143e-05, 2.3414324468930880e-05, 4.0011840293725166e-05, 2.8843204716367035e-05, 9.9106864739670586e-06,-3.1640902746803352e-06, + 5.5678562878658266e-05, 3.1802780534893641e-05, 2.4799006071543751e-06,-1.3870906317133417e-05,-1.3581471242885308e-05,-5.2501755970553820e-06, 1.6978209395283155e-06, 3.8370892185587890e-06, +-2.3875782343764625e-05,-1.1589992503904634e-05, 1.9186678165230311e-06, 7.1728801528365454e-06, 4.4998597702396886e-06, 2.8637263956875539e-09,-2.0548539435606828e-06,-1.6029015232897251e-06, + 1.2285789839859991e-05, 4.9105102669984464e-06,-2.2509367263829575e-06,-3.7792455056182819e-06,-1.3103220765369533e-06, 9.2169765449834375e-07, 1.1930748432026865e-06, 4.1780559066363845e-07, +-7.3752795728615447e-06,-2.3158714713004211e-06, 1.9475935298113669e-06, 2.0658028648616125e-06, 1.4271165987235242e-07,-8.6653050208640264e-07,-5.4270368461533792e-07, 4.1050316803297878e-08, + 4.2735042732103087e-02, 3.9082474983101759e-02, 3.2713895300538538e-02, 2.5102177846119469e-02, 1.7695498298586711e-02, 1.1490256077975840e-02, 6.8926934389513111e-03, 3.8317078124743839e-03, +-3.6525677490013286e-03,-3.0281972053750397e-03,-2.0195985996261517e-03,-9.7022368955340665e-04,-1.5549921254703544e-04, 3.1280320626428902e-04, 4.7372895760066855e-04, 4.4101447264828769e-04, + 6.2437054362628891e-04, 4.6427555595716236e-04, 2.2618550374409185e-04, 1.5824739686750005e-05,-1.0193175710765140e-04,-1.2508705327621321e-04,-9.1888915591149486e-05,-4.4904713967077858e-05, +-1.6009498766912655e-04,-1.0536170558567148e-04,-3.0980437549176908e-05, 2.2865186427774279e-05, 3.9472167370532951e-05, 2.8633209723017404e-05, 9.9769680967783884e-06,-3.0118845663321378e-06, + 5.4733282083455070e-05, 3.1343084663178027e-05, 2.5548671715728741e-06,-1.3586992594259839e-05,-1.3402523556512493e-05,-5.2493328654414888e-06, 1.6165754704354165e-06, 3.7733078218633293e-06, +-2.3390197420277044e-05,-1.1395412520977754e-05, 1.8301711371424342e-06, 7.0233507783553595e-06, 4.4475641449295153e-06, 3.9045141809673843e-08,-2.0075633504050807e-06,-1.5861582667993359e-06, + 1.1994784899299290e-05, 4.8187941389803619e-06,-2.1743256785203203e-06,-3.6975264939060220e-06,-1.3043831646550924e-06, 8.8754036930097090e-07, 1.1714989645022107e-06, 4.1931249853910425e-07, +-7.1759907603189282e-06,-2.2700829582274791e-06, 1.8833274377688524e-06, 2.0203108233086892e-06, 1.5411603919739995e-07,-8.4144237259753439e-07,-5.3608129484224494e-07, 3.4339843667994258e-08, + 4.2589437816716411e-02, 3.8961717394806902e-02, 3.2633291974772577e-02, 2.5063381800781111e-02, 1.7689197204289790e-02, 1.1502668441444800e-02, 6.9115691927145867e-03, 3.8493124358835091e-03, +-3.6277204219095083e-03,-3.0097101393863832e-03,-2.0105759363811468e-03,-9.6957255199869863e-04,-1.5954504758440916e-04, 3.0782257471306113e-04, 4.7006139958182674e-04, 4.3921591466173629e-04, + 6.1801028252312512e-04, 4.6008604116244949e-04, 2.2494834942737418e-04, 1.6728552072830518e-05,-1.0036354512997844e-04,-1.2394592384315983e-04,-9.1488564896402037e-05,-4.5022187577740643e-05, +-1.5792424136067563e-04,-1.0411704736982500e-04,-3.0876801718696036e-05, 2.2327286178913579e-05, 3.8939610582814331e-05, 2.8423277022404875e-05, 1.0040037503852541e-05,-2.8622167038781907e-06, + 5.3807193990850627e-05, 3.0891099103802435e-05, 2.6263544781141777e-06,-1.3308995153889405e-05,-1.3225662824183367e-05,-5.2470699372060668e-06, 1.5372044351691452e-06, 3.7101972900765699e-06, +-2.2916094887048192e-05,-1.1204464788109442e-05, 1.7446880710731532e-06, 6.8770540306907012e-06, 4.3955150128958156e-06, 7.3880163578616233e-08,-1.9611304807614849e-06,-1.5693600312374396e-06, + 1.1711630098938751e-05, 4.7288918731421467e-06,-2.1002415679025097e-06,-3.6176077071474553e-06,-1.2980020194896061e-06, 8.5437367095867170e-07, 1.1501890009776098e-06, 4.2055630786661068e-07, +-6.9827382257966041e-06,-2.2251762187642366e-06, 1.8212336928708954e-06, 1.9757887383380333e-06, 1.6482841128999923e-07,-8.1699877019343285e-07,-5.2940929476081707e-07, 2.7894106426499762e-08, + 4.2444821729260757e-02, 3.8841695950768078e-02, 3.2553048566925938e-02, 2.5024612518286769e-02, 1.7682735525499170e-02, 1.1514882490316260e-02, 6.9302985651019770e-03, 3.8668450245840221e-03, +-3.6031257784926787e-03,-2.9913896630638717e-03,-2.0016026756466444e-03,-9.6888568931898650e-04,-1.6352857830712747e-04, 3.0288742042080402e-04, 4.6640990520461709e-04, 4.3741277679366138e-04, + 6.1173611542880701e-04, 4.5594595313521585e-04, 2.2371539682970384e-04, 1.7611069294923157e-05,-9.8816494489753124e-05,-1.2281318953970722e-04,-9.1085754429197580e-05,-4.5133724783019019e-05, +-1.5579016229359116e-04,-1.0289031677247762e-04,-3.0770373998663614e-05, 2.1800389637948135e-05, 3.8414086654326064e-05, 2.8213462355711669e-05, 1.0099968989245545e-05,-2.7150598115314501e-06, + 5.2899845521113542e-05, 3.0446680008838165e-05, 2.6944810724414466e-06,-1.3036786120617646e-05,-1.3050878839842631e-05,-5.2434398823386134e-06, 1.4596737379505993e-06, 3.6477596147191770e-06, +-2.2453165512275377e-05,-1.1017077453506021e-05, 1.6621192587232331e-06, 6.7339186717539056e-06, 4.3437295182688925e-06, 1.0740790311047215e-07,-1.9155446603350184e-06,-1.5525171308764250e-06, + 1.1436088058769356e-05, 4.6407684552297180e-06,-2.0285990370732990e-06,-3.5394506932902959e-06,-1.2912057179835614e-06, 8.2217206319265079e-07, 1.1291467759140844e-06, 4.2154745503191641e-07, +-6.7953196035396380e-06,-2.1811384603554654e-06, 1.7612360031910089e-06, 1.9322192671254185e-06, 1.7487877829490268e-07,-7.9318551177749635e-07,-5.2269565557721368e-07, 2.1705471416662054e-08, + 4.2301184430875230e-02, 3.8722404026749577e-02, 3.2473163104289028e-02, 2.4985871410722060e-02, 1.7676115737533141e-02, 1.1526900036965850e-02, 6.9488822005936944e-03, 3.8843054001030781e-03, +-3.5787804041256532e-03,-2.9732338135984859e-03,-1.9926786471559585e-03,-9.6816394457925614e-04,-1.6745064556453193e-04, 2.9799740769122923e-04, 4.6277457036912519e-04, 4.3560529449868492e-04, + 6.0554659052716731e-04, 4.5185458078596252e-04, 2.2248675496901052e-04, 1.8472726904112920e-05,-9.7290325531121196e-05,-1.2168884456467550e-04,-9.0680608243112119e-05,-4.5239425482989639e-05, +-1.5369200974120478e-04,-1.0168121396423311e-04,-3.0661286512157746e-05, 2.1284267779108052e-05, 3.7895512730351654e-05, 2.8003819372468335e-05, 1.0156835491652088e-05,-2.5703869419520286e-06, + 5.2010795776971674e-05, 3.0009686375726360e-05, 2.7593615939293308e-06,-1.2770240438403286e-05,-1.2878160732710112e-05,-5.2384942268619025e-06, 1.3839497115129759e-06, 3.5859963829348989e-06, +-2.2001109401245314e-05,-1.0833180054116249e-05, 1.5823686933192418e-06, 6.5938749885386494e-06, 4.2922237451631498e-06, 1.3966646372802028e-07,-1.8707951484842933e-06,-1.5356394684393583e-06, + 1.1167929347129065e-05, 4.5543893825806392e-06,-1.9593157218425528e-06,-3.4630176941657459e-06,-1.2840201592970725e-06, 7.9091061217288798e-07, 1.1083738025837250e-06, 4.2229607396991266e-07, +-6.6135399645484259e-06,-2.1379567480993196e-06, 1.7032608583753613e-06, 1.8895851509206105e-06, 1.8429596865278994e-07,-7.6998861044407091e-07,-5.1594794175090059e-07, 1.5766466726236871e-08, + 4.2158516018130289e-02, 3.8603835076462471e-02, 3.2393633621048731e-02, 2.4947159856796061e-02, 1.7669340282298940e-02, 1.1538722880346609e-02, 6.9673207474074718e-03, 3.9016933933063739e-03, +-3.5546809416678177e-03,-2.9552406563865541e-03,-1.9838036763861061e-03,-9.6740814360435357e-04,-1.7131207908590781e-04, 2.9315220110243817e-04, 4.5915548607131876e-04, 4.3379369925699955e-04, + 5.9944028528126359e-04, 4.4781122490654413e-04, 2.2126252766887220e-04, 1.9313951389789401e-05,-9.5784761903561417e-05,-1.2057288101167697e-04,-9.0273247501039826e-05,-4.5339388498657975e-05, +-1.5162906037471946e-04,-1.0048944470020813e-04,-3.0549666872380907e-05, 2.0778696523406439e-05, 3.7383806403647279e-05, 2.7794399691309142e-05, 1.0210708611757704e-05,-2.4281710921598669e-06, + 5.1139615674511332e-05, 2.9579979993714375e-05, 2.8211069063415155e-06,-1.2509235809485526e-05,-1.2707497009183784e-05,-5.2322829923289046e-06, 1.3099991192219743e-06, 3.5249087938494978e-06, +-2.1559635680796956e-05,-1.0652703497982920e-05, 1.5053436054529207e-06, 6.4568547640982996e-06, 4.2410127647852689e-06, 1.7069296227553431e-07,-1.8268711497625087e-06,-1.5187365473505938e-06, + 1.0906932182814037e-05, 4.4697206746858815e-06,-1.8923121461871090e-06,-3.3882716390268945e-06,-1.2764701128107278e-06, 7.6056494002912846e-07, 1.0878712991624355e-06, 4.2281200318528764e-07, +-6.4372115081281550e-06,-2.0956180445392755e-06, 1.6472374326453251e-06, 1.8478692261977177e-06, 1.9310768437051278e-07,-7.4739428267267634e-07,-5.0917332512614443e-07, 1.0069780039499508e-08, + 4.2016806720751677e-02, 3.8485982630445628e-02, 3.2314458158454469e-02, 2.4908479202523599e-02, 1.7662411568734711e-02, 1.1550352806001529e-02, 6.9856148573047300e-03, 3.9190088442400614e-03, +-3.5308240903060492e-03,-2.9374082845587540e-03,-1.9749775847620575e-03,-9.6661909533756613e-04,-1.7511369761226414e-04, 2.8835146558955568e-04, 4.5555273851754716e-04, 4.3197821861756802e-04, + 5.9341580574729519e-04, 4.4381519794869928e-04, 2.2004281373601622e-04, 2.0135160375390603e-05,-9.4299530543567628e-05,-1.1946528894919554e-04,-8.9863790528292489e-05,-4.5433711570058515e-05, +-1.4960060779859591e-04,-9.9314720208923402e-05,-3.0435638331302139e-05, 2.0283456629434848e-05, 3.6878885738632594e-05, 2.7585252959414348e-05, 1.0261658629401495e-05,-2.2883852186919492e-06, + 5.0285887589672507e-05, 2.9157425388523349e-05, 2.8798242253936866e-06,-1.2253652635059996e-05,-1.2538875592542469e-05,-5.2248547349078102e-06, 1.2377891571863877e-06, 3.4644976742181214e-06, +-2.1128462201149158e-05,-1.0475580041703390e-05, 1.4309543489796575e-06, 6.3227912502044510e-06, 4.1901106797892426e-06, 2.0052355130835347e-07,-1.7837618256417732e-06,-1.5018174832641478e-06, + 1.0652882159445768e-05, 4.3867288739734415e-06,-1.8275116155383430e-06,-3.3151761407621737e-06,-1.2685792623048459e-06, 7.3111121642760775e-07, 1.0676402044880107e-06, 4.2310479183048397e-07, +-6.2661532854723268e-06,-2.0541092311837474e-06, 1.5930974806704154e-06, 1.8070544413572576e-06, 2.0134054220366185e-07,-7.2538895139089556e-07,-5.0237860130500813e-07, 4.6082580834600821e-09, + 4.1876046899390097e-02, 3.8368840294965879e-02, 3.2235634764976581e-02, 2.4869830761893589e-02, 1.7655331973246671e-02, 1.1561791586079510e-02, 7.0037651854012208e-03, 3.9362516019743323e-03, +-3.5072066044242178e-03,-2.9197348185181285e-03,-1.9662001898540782e-03,-9.6579759219124137e-04,-1.7885630902756897e-04, 2.8359486652418733e-04, 4.5196640923703991e-04, 4.3015907624140322e-04, + 5.8747178590608934e-04, 4.3986582380733724e-04, 2.1882770713208205e-04, 2.0936762809454211e-05,-9.2834361655100858e-05,-1.1836605649833329e-04,-8.9452352865120976e-05,-4.5522491354924293e-05, +-1.4760596209875210e-04,-9.8156757083919441e-05,-3.0319319923474626e-05, 1.9798333587094751e-05, 3.6380669293562020e-05, 2.7376426910494196e-05, 1.0309754520930990e-05,-2.1510022522033543e-06, + 4.9449205014832659e-05, 2.8741889768685666e-05, 2.9356172421636967e-06,-1.2003373957977008e-05,-1.2372283860134247e-05,-5.2162565838218287e-06, 1.1672874558029870e-06, 3.4047634937190416e-06, +-2.0707315246146994e-05,-1.0301743268965647e-05, 1.3591142905243661e-06, 6.1916191416847372e-06, 4.1395306655767825e-06, 2.2919344147152767e-07,-1.7414563055643473e-06,-1.4848910154983837e-06, + 1.0405571977181347e-05, 4.3053810472662274e-06,-1.7648401130997832e-06,-3.2436954939875621e-06,-1.2603702462327173e-06, 7.0252614893736587e-07, 1.0476811932828459e-06, 4.2318370594228085e-07, +-6.1001909299151192e-06,-2.0134171302723009e-06, 1.5407752356137370e-06, 1.7671238762403882e-06, 2.0902010942567093e-07,-7.0395924634341239e-07,-4.9557020595821808e-07,-6.2509426673169831e-10, + 4.1736227043435270e-02, 3.8252401750935833e-02, 3.2157161496456317e-02, 2.4831215817523331e-02, 1.7648103840140528e-02, 1.1573040979354300e-02, 7.0217723899821550e-03, 3.9534215244487929e-03, +-3.4838252924994373e-03,-2.9022184054865313e-03,-1.9574713055679864e-03,-9.6494441039032125e-04,-1.8254071048888140e-04, 2.7888206979075243e-04, 4.4839657519225688e-04, 4.2833649194485169e-04, + 5.8160688701290597e-04, 4.3596243760806157e-04, 2.1761729713918113e-04, 2.1719159153252006e-05,-9.1388988689732216e-05,-1.1727516990810388e-04,-8.9039047318527961e-05,-4.5605823427911463e-05, +-1.4564444940484440e-04,-9.7015277177638852e-05,-3.0200826604005298e-05, 1.9323117512264355e-05, 3.5889076142230950e-05, 2.7167967420846725e-05, 1.0355063976681542e-05,-2.0159951114921028e-06, + 4.8629172227205545e-05, 2.8333242973353854e-05, 2.9885862403083688e-06,-1.1758285404134655e-05,-1.2207708680754166e-05,-5.2065342780063621e-06, 1.0984620805981232e-06, 3.3457063798746631e-06, +-2.0295929253851691e-05,-1.0131128070746426e-05, 1.2897397065523810e-06, 6.0632745466930041e-06, 4.0892850133574527e-06, 2.5673692162617250e-07,-1.6999436966685491e-06,-1.4679655184583679e-06, + 1.0164801183105264e-05, 4.2256447904974505e-06,-1.7042262068351496e-06,-3.1737946648234394e-06,-1.2518647028126882e-06, 6.7478697717164293e-07, 1.0279946890184306e-06, 4.2305773527162369e-07, +-5.9391563926078139e-06,-1.9735285340191288e-06, 1.4902073241400663e-06, 1.7280607460011250e-06, 2.1617095020873900e-07,-6.8309201171281179e-07,-4.8875422671602888e-07,-5.6371166069309333e-09, + 4.1597337768873928e-02, 3.8136660752850389e-02, 3.2079036416249040e-02, 2.4792635621299210e-02, 1.7640729482048159e-02, 1.1584102731246510e-02, 7.0396371323217270e-03, 3.9705184783195204e-03, +-3.4606770160235389e-03,-2.8848572190597194e-03,-1.9487907423293600e-03,-9.6406031030782033e-04,-1.8616768855600485e-04, 2.7421274185995825e-04, 4.4484330888717397e-04, 4.2651068174295870e-04, + 5.7581979696381957e-04, 4.3210438549896651e-04, 2.1641166852078009e-04, 2.2482741563234748e-05,-8.9963148325271748e-05,-1.1619261362877468e-04,-8.8623984013292420e-05,-4.5683802280445667e-05, +-1.4371541146485306e-04,-9.5890007497173298e-05,-3.0080269383252613e-05, 1.8857603045515717e-05, 3.5404025892945701e-05, 2.6959918564582562e-05, 1.0397653418233355e-05,-1.8833367168003047e-06, + 4.7825403967679766e-05, 2.7931357420053868e-05, 3.0388282116927158e-06,-1.1518275128083578e-05,-1.2045136447948403e-05,-5.1957322032981422e-06, 1.0312815332968965e-06, 3.2873261322295626e-06, +-1.9894046547625898e-05,-9.9636706230321354e-06, 1.2227496794786851e-06, 5.9376949628385119e-06, 4.0393851669678457e-06, 2.8318738148353888e-07,-1.6592130943878130e-06,-1.4510490121353403e-06, + 9.9303759245937626e-06, 4.1474882268092925e-06,-1.6456009509884322e-06,-3.1054392905088783e-06,-1.2430833048820967e-06, 6.4787146110849306e-07, 1.0085808793073401e-06, 4.2273559855138685e-07, +-5.7828876977844701e-06,-1.9344302192703264e-06, 1.4413326674068224e-06, 1.6898484230097806e-06, 2.2281665416064707e-07,-6.6277430188726064e-07,-4.8193642111421199e-07,-1.0434492420850819e-08, + 4.1459369816190611e-02, 3.8021611127740509e-02, 3.2001257595359642e-02, 2.4754091395004330e-02, 1.7633211180348812e-02, 1.1594978573848501e-02, 7.0573600765068967e-03, 3.9875423388078960e-03, +-3.4377586884501016e-03,-2.8676494587705492e-03,-1.9401583072608392e-03,-9.6314603679373625e-04,-1.8973801931994327e-04, 2.6958654985926624e-04, 4.4130667847358616e-04, 4.2468185789276604e-04, + 5.7010922967955235e-04, 4.2829102444662259e-04, 2.1521090167637763e-04, 2.3227894070551982e-05,-8.8556580444347098e-05,-1.1511837038273890e-04,-8.8207270442435405e-05,-4.5756521320992763e-05, +-1.4181820523292976e-04,-9.4780680102520074e-05,-2.9957755455397374e-05, 1.8401589251125807e-05, 3.4925438707515257e-05, 2.6752322666707281e-05, 1.0437588016021341e-05,-1.7530000027425995e-06, + 4.7037525130409687e-05, 2.7536108054611905e-05, 3.0864369650648234e-06,-1.1283233756287391e-05,-1.1884553114399744e-05,-5.1838934272796179e-06, 9.6571475175138997e-07, 3.2296222365018947e-06, +-1.9501417075797783e-05,-9.7993083677654610e-06, 1.1580660030075051e-06, 5.8148192473724622e-06, 3.9898417631166706e-06, 3.0857733078049219e-07,-1.6192535908409628e-06,-1.4341491732343816e-06, + 9.7021087080323216e-06, 4.0708800111712039e-06,-1.5888978016902130e-06,-3.0385956671597200e-06,-1.2340458027397476e-06, 6.2175787563201469e-07, 9.8943972715190754e-07, 4.2222575060117822e-07, +-5.6312286968611177e-06,-1.8961089762872385e-06, 1.3940924058628625e-06, 1.6524704362983445e-06, 2.2897988157543588e-07,-6.4299338933995040e-07,-4.7512222653649707e-07,-1.5023752689424458e-08, + 4.1322314048309557e-02, 3.7907246774144157e-02, 3.1923823112571338e-02, 2.4715584330932849e-02, 1.7625551185585391e-02, 1.1605670225952000e-02, 7.0749418892653926e-03, 4.0044929895511599e-03, +-3.4150672741653995e-03,-2.8505933496600841e-03,-1.9315738043539643e-03,-9.6220231949634139e-04,-1.9325246853079195e-04, 2.6500316164066416e-04, 4.3778674785538516e-04, 4.2285022893660731e-04, + 5.6447392450531542e-04, 4.2452172203564153e-04, 2.1401507279212575e-04, 2.3954992755618456e-05,-8.7169028111657430e-05,-1.1405242123354133e-04,-8.7789011516905494e-05,-4.5824072875871760e-05, +-1.3995220246967388e-04,-9.3687032005785893e-05,-2.9833388324498043e-05, 1.7954879520059767e-05, 3.4453235317742665e-05, 2.6545220355384951e-05, 1.0474931706724692e-05,-1.6249579305933857e-06, + 4.6265170463887992e-05, 2.7147372299562574e-05, 3.1315032342195417e-06,-1.1053054334705977e-05,-1.1725944222502239e-05,-5.1710597345611815e-06, 9.0173111005653920e-07, 3.1725938780896986e-06, +-1.9117798164325418e-05,-9.6379799887868832e-06, 1.0956130847819026e-06, 5.6945875936559303e-06, 3.9406646656544815e-06, 3.3293842072736736e-07,-1.5800542839595547e-06,-1.4172733455259511e-06, + 9.4798181755385349e-06, 3.9957893238663456e-06,-1.5340525241030983e-06,-2.9732307483754113e-06,-1.2247710569588643e-06, 5.9642499968309434e-07, 9.7057098439667385e-07, 4.2153638813241431e-07, +-5.4840288516721893e-06,-1.8585516147555664e-06, 1.3484298046243899e-06, 1.6159104912118752e-06, 2.3468239083817862e-07,-6.2373676135711968e-07,-4.6831677554856109e-07,-1.9411276801929088e-08, + 4.1186161448577771e-02, 3.7793561661094578e-02, 3.1846731054567583e-02, 2.4677115592491791e-02, 1.7617751717875441e-02, 1.1616179393078361e-02, 7.0923832397978412e-03, 4.0213703224546418e-03, +-3.3925997874831929e-03,-2.8336871418569373e-03,-1.9230370346346760e-03,-9.6122987317686162e-04,-1.9671179172444514e-04, 2.6046224584566277e-04, 4.3428357679082489e-04, 4.2101599974541347e-04, + 5.5891264562625553e-04, 4.2079585627275568e-04, 2.1282425398578414e-04, 2.4664405919460459e-05,-8.5800237551014041e-05,-1.1299474565268792e-04,-8.7369309614527169e-05,-4.5886548190629474e-05, +-1.3811678935349986e-04,-9.2608805073481071e-05,-2.9707267925005578e-05, 1.7517281473867572e-05, 3.3987337041503171e-05, 2.6338650612484912e-05, 1.0509747210639951e-05,-1.4991834999163935e-06, + 4.5507984280018787e-05, 2.6765030005644066e-05, 3.1741147799336931e-06,-1.0827632275153864e-05,-1.1569294935070409e-05,-5.1572716605434985e-06, 8.3930041824425824e-07, 3.1162399549855862e-06, +-1.8742954274374721e-05,-9.4796253923486748e-06, 1.0353178572316160e-06, 5.5769415036566422e-06, 3.8918630013667482e-06, 3.5630146364472696e-07,-1.5416042858105578e-06,-1.4004285497218676e-06, + 9.2633288820260465e-06, 3.9221858723781781e-06,-1.4810031119771010e-06,-2.9093121354906649e-06,-1.2152770754945033e-06, 5.7185210835258159e-07, 9.5197420379634922e-07, 4.2067545523410769e-07, +-5.3411430096478684e-06,-1.8217449863542298e-06, 1.3042901796339737e-06, 1.5801524729321912e-06, 2.3994507547230891e-07,-6.0499212241571089e-07,-4.6152490866140735e-07,-2.3603293430679891e-08, + 4.1050903118787452e-02, 3.7680549827124953e-02, 3.1769979516047313e-02, 2.4638686314790260e-02, 1.7609814967317290e-02, 1.1626507767511479e-02, 7.1096847996139729e-03, 4.0381742375458227e-03, +-3.3703532916624993e-03,-2.8169291101642624e-03,-1.9145477963231766e-03,-9.6022939801724758e-04,-2.0011673434857519e-04, 2.5596347196763826e-04, 4.3079722099292287e-04, 4.1917937156186243e-04, + 5.5342418149823686e-04, 4.1711281539464490e-04, 2.1163851344712303e-04, 2.5356494250986200e-05,-8.4449958121513556e-05,-1.1194532158448724e-04,-8.6948264628394659e-05,-4.5944037431716492e-05, +-1.3631136610359196e-04,-9.1545745930483944e-05,-2.9579490738673340e-05, 1.7088606871201637e-05, 3.3527665797236733e-05, 2.6132650822856734e-05, 1.0542096049245511e-05,-1.3756497599545263e-06, + 4.4765620173108013e-05, 2.6388963403504398e-05, 3.2143564892007418e-06,-1.0606865303640650e-05,-1.1414590064004486e-05,-5.1425685245243052e-06, 7.7839292132823890e-07, 3.0605590907657915e-06, +-1.8376656769603615e-05,-9.3241856863345683e-06, 9.7710969001662867e-07, 5.4618237624384043e-06, 3.8434451932062502e-06, 3.7869645251948755e-07,-1.5038927299271077e-06,-1.3836214939387417e-06, + 9.0524710832690469e-06, 3.8500398898111159e-06,-1.4296897070874135e-06,-2.8468080705991346e-06,-1.2055810473894665e-06, 5.4801896443220392e-07, 9.3364874973831792e-07, 4.1965065022761332e-07, +-5.2024311934579309e-06,-1.7856760001130428e-06, 1.2616208206523793e-06, 1.5451804547676910e-06, 2.4478799625218674e-07,-5.8674739520651522e-07,-4.5475118526243201e-07,-2.7605884013907188e-08, + 4.0916530277237628e-02, 3.7568205379289628e-02, 3.1693566599834258e-02, 2.4600297605216689e-02, 1.7601743094390981e-02, 1.1636657028332980e-02, 7.1268472423727603e-03, 4.0549046428300338e-03, +-3.3483248979480004e-03,-2.8003175536542510e-03,-1.9061058849883933e-03,-9.5920157992145094e-04,-2.0346803188746321e-04, 2.5150651041169758e-04, 4.2732773222786419e-04, 4.1734054204352073e-04, + 5.4800734429374942e-04, 4.1347199767932229e-04, 2.1045791557382232e-04, 2.6031610990732003e-05,-8.3117942293349642e-05,-1.1090412550898222e-04,-8.6525974014415674e-05,-4.5996629688731683e-05, +-1.3453534661442713e-04,-9.0497605865524292e-05,-2.9450149907654172e-05, 1.6668671516134904e-05, 3.3074144117573739e-05, 2.5927256822323835e-05, 1.0572038562491436e-05,-1.2543298202776957e-06, + 4.4037740748902835e-05, 2.6019057055612469e-05, 3.2523104711253936e-06,-1.0390653409373128e-05,-1.1261814098000539e-05,-5.1269884620677153e-06, 7.1897929843157461e-07, 3.0055496467512222e-06, +-1.8018683693290366e-05,-9.1716031585612612e-06, 9.2092030549571779e-07, 5.3491784124265603e-06, 3.7954189926859734e-06, 4.0015258030287477e-07,-1.4669087788275547e-06,-1.3668585831508360e-06, + 8.8470805347291051e-06, 3.7793221311282843e-06,-1.3800545214642865e-06,-2.7856874285364107e-06,-1.1956993758836830e-06, 5.2490580973935595e-07, 9.1559380957843145e-07, 4.1846943106188980e-07, +-5.0677584036008208e-06,-1.7503316338614404e-06, 1.2203709167937541e-06, 1.5109787045467550e-06, 2.4923041305603163e-07,-5.6899072082552200e-07,-4.4799989605001881e-07,-3.1424983814654659e-08, + 4.0783034256833453e-02, 3.7456522492201348e-02, 3.1617490416979928e-02, 2.4561950544003990e-02, 1.7593538230354491e-02, 1.1646628841459910e-02, 7.1438712437265194e-03, 4.0715614541479324e-03, +-3.3265117646321049e-03,-2.7838507952702499e-03,-1.8977110936969944e-03,-9.5814709081002911e-04,-2.0676640998610121e-04, 2.4709103255205096e-04, 4.2387515841155621e-04, 4.1549970530587246e-04, + 5.4266096936185504e-04, 4.0987281126155222e-04, 2.0928252110287687e-04, 2.6690102090687904e-05,-8.1803945622772282e-05,-1.0987113250306635e-04,-8.6102532838216756e-05,-4.6044412977044944e-05, +-1.3278815810030282e-04,-8.9464140739015964e-05,-2.9319335343843224e-05, 1.6257295168960871e-05, 3.2626695161374485e-05, 2.5722502944597084e-05, 1.0599633926085004e-05,-1.1351968610234832e-06, + 4.3324017361286854e-05, 2.5655197809686217e-05, 3.2880561496133603e-06,-1.0178898795536833e-05,-1.1110951228171274e-05,-5.1105684570168645e-06, 6.6103066163946948e-07, 2.9512097339045103e-06, +-1.7668819551600637e-05,-9.0218212561816926e-06, 8.6668369693902818e-07, 5.2389507292732601e-06, 3.7477915095899791e-06, 4.2069825965145112e-07,-1.4306416312371322e-06,-1.3501459285741542e-06, + 8.6469982954189440e-06, 3.7100038702741667e-06,-1.3320417618477494e-06,-2.7259197108194029e-06,-1.1856477078843906e-06, 5.0249335494192180e-07, 8.9780840492094970e-07, 4.1713902082552538e-07, +-4.9369944251447773e-06,-1.7156989463663516e-06, 1.1804914834657746e-06, 1.4775316940935728e-06, 2.5329081137683489e-07,-5.5171045584158130e-07,-4.4127507604170284e-07,-3.5066383209530875e-08, + 4.0650406503222838e-02, 3.7345495407084268e-02, 3.1541749086860818e-02, 2.4523646184783119e-02, 1.7585202477634648e-02, 1.1656424859684581e-02, 7.1607574811687657e-03, 4.0881445950346658e-03, +-3.3049110961385700e-03,-2.7675271814361149e-03,-1.8893632131572399e-03,-9.5706658890868518e-04,-2.1001258457293767e-04, 2.4271671078685865e-04, 4.2043954370432277e-04, 4.1365705196521035e-04, + 5.3738391470245506e-04, 4.0631467395176512e-04, 2.0811238723758303e-04, 2.7332306371046508e-05,-8.0507726727112035e-05,-1.0884631629947246e-04,-8.5678033821428570e-05,-4.6087474240788778e-05, +-1.3106924075068993e-04,-8.8445110892558087e-05,-2.9187133834249066e-05, 1.5854301458139329e-05, 3.2185242725648003e-05, 2.5518422066369602e-05, 1.0624940168939634e-05,-1.0182241427450912e-06, + 4.2624129858131847e-05, 2.5297274752828736e-05, 3.3216703521094281e-06,-9.9715058295900703e-06,-1.0961985374047412e-05,-5.0933443716534369e-06, 6.0451855406051887e-07, 2.8975372245522364e-06, +-1.7326855105303111e-05,-8.8747845653785017e-06, 8.1433605126802536e-07, 5.1310871953241613e-06, 3.7005692433110272e-06, 4.4036114021035059e-07,-1.3950805277570547e-06,-1.3334893573082320e-06, + 8.4520705399246092e-06, 3.6420568977894814e-06,-1.2855975602249297e-06,-2.6674750343172779e-06,-1.1754409674945388e-06, 4.8076277342717743e-07, 8.8029140007278406e-07, 4.1566641430027109e-07, +-4.8100136421351278e-06,-1.6817650912978983e-06, 1.1419352987503555e-06, 1.4448240985097144e-06, 2.5698693747973615e-07,-5.3489517679408558e-07,-4.3458051232932543e-07,-3.8535731509253624e-08, + 4.0518638572968967e-02, 3.7235118430842262e-02, 3.1466340737269859e-02, 2.4485385555125139e-02, 1.7576737910213480e-02, 1.1666046722716599e-02, 7.1775066338858702e-03, 4.1046539965807587e-03, +-3.2835201421267043e-03,-2.7513450816726986e-03,-1.8810620318578733e-03,-9.5596071903035484e-04,-2.1320726198197429e-04, 2.3838321859090926e-04, 4.1702092860373876e-04, 4.1181276918144348e-04, + 5.3217506045400570e-04, 4.0279701305854848e-04, 2.0694756777058084e-04, 2.7958555672995267e-05,-7.9229047258789326e-05,-1.0782964934431282e-04,-8.5252567387157239e-05,-4.6125899356301396e-05, +-1.2937804739545722e-04,-8.7440281060159348e-05,-2.9053629143364272e-05, 1.5459517795088336e-05, 3.1749711255502320e-05, 2.5315045651868269e-05, 1.0648014190235193e-05,-9.0338501565369181e-07, + 4.1937766335297874e-05, 2.4945179166097430e-05, 3.3532273963535306e-06,-9.7683809962431286e-06,-1.0814900206647352e-05,-5.0753509774207459e-06, 5.4941494835202160e-07, 2.8445297633976935e-06, +-1.6992587169200444e-05,-8.7304387900957865e-06, 7.6381567233956565e-07, 5.0255354765961553e-06, 3.6537581097499918e-06, 4.5916812804577979e-07,-1.3602147576397621e-06,-1.3168944209854099e-06, + 8.2621483791046572e-06, 3.5754535152553490e-06,-1.2406699024201873e-06,-2.6103241257363465e-06,-1.1650933823484897e-06, 4.5969569040071006e-07, 8.6304151313028591e-07, 4.1405838277330709e-07, +-4.6866948638493081e-06,-1.6485173238339215e-06, 1.1046568330805192e-06, 1.4128408062142721e-06, 2.6033582113273016e-07,-5.1853367521532220e-07,-4.2791975760586975e-07,-4.1838537312315391e-08, + 4.0387722131758723e-02, 3.7125385935142897e-02, 3.1391263504502762e-02, 2.4447169657072321e-02, 1.7568146574009520e-02, 1.1675496057226949e-02, 7.1941193826123816e-03, 4.1210895972947220e-03, +-3.2623361966158254e-03,-2.7353028882214844e-03,-1.8728073362022091e-03,-9.5483011285141250e-04,-2.1635113907351664e-04, 2.3409023056594931e-04, 4.1361935003567628e-04, 4.0996704070071430e-04, + 5.2703330839434098e-04, 3.9931926521473687e-04, 2.0578811320276762e-04, 2.8569175008456285e-05,-7.7967671879361521e-05,-1.0682110285263347e-04,-8.4826221704853509e-05,-4.6159773135859413e-05, +-1.2771404317960412e-04,-8.6449420281444790e-05,-2.8918902111799117e-05, 1.5072775290237534e-05, 3.1320025853879047e-05, 2.5112403795730874e-05, 1.0668911776636831e-05,-7.9065292856529055e-07, + 4.1264622898159325e-05, 2.4598804480377345e-05, 3.3827991733637188e-06,-9.5694328502205587e-06,-1.0669679171700768e-05,-5.0566219839839472e-06, 4.9569224447303190e-07, 2.7921847784868641e-06, +-1.6665818417781981e-05,-8.5887307320817570e-06, 7.1506290865488507e-07, 4.9222443978331425e-06, 3.6073634693894377e-06, 4.7714540292343384e-07,-1.3260336640496194e-06,-1.3003664048622928e-06, + 8.0770876857002238e-06, 3.5101665319243532e-06,-1.1972085627877026e-06,-2.5544383116156560e-06,-1.1546185131727999e-06, 4.3927417549924545e-07, 8.4605732431920037e-07, 4.1232148017420138e-07, +-4.5669211537758706e-06,-1.6159430118827472e-06, 1.0686121885880505e-06, 1.3815669200364693e-06, 2.6335380550986706e-07,-5.0261495913095427e-07,-4.2129613861036327e-07,-4.4980171839942972e-08, + 4.0257648952645053e-02, 3.7016292355515630e-02, 3.1316515533438380e-02, 2.4408999467657979e-02, 1.7559430487254311e-02, 1.1684774476893979e-02, 7.2105964094899156e-03, 4.1374513429673380e-03, +-3.2413565971294231e-03,-2.7193990156750281e-03,-1.8645989106373384e-03,-9.5367538918192732e-04,-2.1944490335410946e-04, 2.2983742248884262e-04, 4.1023484144356477e-04, 4.0812004689788454e-04, + 5.2195758145439503e-04, 3.9588087620699491e-04, 2.0463407085817087e-04, 2.9164482706433995e-05,-7.6723368232945659e-05,-1.0582064686240252e-04,-8.4399082734468828e-05,-4.6189179331808600e-05, +-1.2607670524740012e-04,-8.5472301816749338e-05,-2.8783030751512500e-05, 1.4693908671098858e-05, 3.0896112290026029e-05, 2.4910525264989683e-05, 1.0687687619309177e-05,-6.8000143732316792e-07, + 4.0604403430650777e-05, 2.4258046233274300e-05, 3.4104552274720812e-06,-9.3745719703036280e-06,-1.0526305511210047e-05,-5.0371900680819392e-06, 4.4332326751204864e-07, 2.7404994916166542e-06, +-1.6346357197376477e-05,-8.4496082714093189e-06, 6.6802008365546237e-07, 4.8211639185287792e-06, 3.5613901532518014e-06, 4.9431843617485305e-07,-1.2925266496024377e-06,-1.2839103362419913e-06, + 7.8967489259671579e-06, 3.4461692613874679e-06,-1.1551650411019227e-06,-2.4997895093896946e-06,-1.1440292804752032e-06, 4.1948073370190884e-07, 8.2933728524514381e-07, 4.1046204818533420e-07, +-4.4505796645796900e-06,-1.5840296467996973e-06, 1.0337590400230931e-06, 1.3509877600744687e-06, 2.6605657280306600e-07,-4.8712825105692279e-07,-4.1471276682139057e-07,-4.7965870375890484e-08, + 4.0128410914324057e-02, 3.6907832190465367e-02, 3.1242094977614921e-02, 2.4370875939416049e-02, 1.7550591640864321e-02, 1.1693883582451440e-02, 7.2269383979296654e-03, 4.1537391865376647e-03, +-3.2205787238586900e-03,-2.7036319006140674e-03,-1.8564365377791471e-03,-9.5249715423004547e-04,-2.2248923309527852e-04, 2.2562447135761332e-04, 4.0686743287589658e-04, 4.0627196481885994e-04, + 5.1694682324462254e-04, 3.9248130080840604e-04, 2.0348548499549276e-04, 2.9744790555966236e-05,-7.5495906919400874e-05,-1.0482825028679633e-04,-8.3971234269919720e-05,-4.6214200641015780e-05, +-1.2446552243621650e-04,-8.4508703063203370e-05,-2.8646090338550615e-05, 1.4322756202444450e-05, 3.0477897007165689e-05, 2.4709437539839724e-05, 1.0704395330851386e-05,-5.7140421283456862e-07, + 3.9956819373013132e-05, 2.3922802025430795e-05, 3.4362628347359320e-06,-9.1837109148714642e-06,-1.0384762283946086e-05,-5.0170869015727463e-06, 3.9228126524064349e-07, 2.6894709284752433e-06, +-1.6034017347582337e-05,-8.3130203446024640e-06, 6.2263142651350869e-07, 4.7222451103605292e-06, 3.5158424875739096e-06, 5.1071200809214911e-07,-1.2596831814029339e-06,-1.2675309928460132e-06, + 7.7209970029798733e-06, 3.3834355130840240e-06,-1.1144924981381771e-06,-2.4463502203839340e-06,-1.1333379895847029e-06, 4.0029829640348231e-07, 8.1287972745145715e-07, 4.0848622162011904e-07, +-4.3375614898958493e-06,-1.5527648441828508e-06, 1.0000565711414264e-06, 1.3210888699905994e-06, 2.6845916741600017e-07,-4.7206298578664334e-07,-4.0817254823901662e-07,-5.0800734454694983e-08, + 3.9999999999444473e-02, 3.6800000000599950e-02, 3.1167999999300491e-02, 2.4332800000879749e-02, 1.7541631998807820e-02, 1.1702824961738120e-02, 7.2431460324782681e-03, 4.1699530879607209e-03, +-3.1999999988445230e-03,-2.6880000012514671e-03,-1.8483199985326604e-03,-9.5129600186078661e-04,-2.2548479745119684e-04, 2.2145105543539684e-04, 4.0351715107202202e-04, 4.0442296822268409e-04, + 5.1199999759305587e-04, 3.8912000261485252e-04, 2.0234239691560140e-04, 3.0310403946105379e-05,-7.4285061467265628e-05,-1.0384388096483795e-04,-8.3542757981932029e-05,-4.6234918709589501e-05, +-1.2287999497820334e-04,-8.3558405473433003e-05,-2.8508153501997170e-05, 1.3959159607857719e-05, 3.0065307129513605e-05, 2.4509166853208826e-05, 1.0719087462227853e-05,-4.6483504877909440e-07, + 3.9321589504770342e-05, 2.3592971479367112e-05, 3.4602870773385999e-06,-8.9967641775630168e-06,-1.0245032385349716e-05,-4.9963431785783597e-06, 3.4253990529517057e-07, 2.6390959285746690e-06, +-1.5728618025403229e-05,-8.1789169262179318e-06, 5.7884300787043490e-07, 4.6254401333654367e-06, 3.4707243183337318e-06, 5.2635022448949146e-07,-1.2274927954065147e-06,-1.2512329111976145e-06, + 7.5497010991852975e-06, 3.3219395896638128e-06,-1.0751456983383457e-06,-2.3940935195159752e-06,-1.1225563565660426e-06, 3.8171021362228766e-07, 7.9668286991064146e-07, 4.0639993414235258e-07, +-4.2277615095214847e-06,-1.5221363554942777e-06, 9.6746542249428585e-07, 1.2918560164760884e-06, 2.7057602212688019e-07,-4.5740881029195716e-07,-4.0167819139293423e-07,-5.3489734926887851e-08, + 3.9872408292949753e-02, 3.6692790407771993e-02, 3.1094228769559341e-02, 2.4294772557070469e-02, 1.7532553498467371e-02, 1.1711600189749391e-02, 7.2592199986871936e-03, 4.1860930140768613e-03, +-3.1796178851777601e-03,-2.6725017970825118e-03,-1.8402490722082623e-03,-9.5007251384940025e-04,-2.2843225657527902e-04, 2.1731685429242885e-04, 4.0018401954622015e-04, 4.0257322762349886e-04, + 5.0711608809524827e-04, 3.8579645388441691e-04, 2.0120484506561749e-04, 3.0861622002842761e-05,-7.3090608306438363e-05,-1.0286750571052652e-04,-8.3113733460138221e-05,-4.6251414137976924e-05, +-1.2131963421083136e-04,-8.2621194475589177e-05,-2.8369290310145050e-05, 1.3602963993028526e-05, 2.9658270468520410e-05, 2.4309738229342782e-05, 1.0731815519446098e-05,-3.6026786879645627e-07, + 3.8698439735242185e-05, 2.3268456198548699e-05, 3.4825909157264914e-06,-8.8136481439361709e-06,-1.0107098566428406e-05,-4.9749886421356361e-06, 2.9407327243709600e-07, 2.5893711546159970e-06, +-1.5429983536693485e-05,-8.0472490096503113e-06, 5.3660267733128596e-07, 4.5307022127170071e-06, 3.4260390346036429e-06, 5.4125653327023145e-07,-1.1959451009372375e-06,-1.2350203943418203e-06, + 7.3827345270431742e-06, 3.2616562823066743e-06,-1.0370809535612068e-06,-2.3429930455158032e-06,-1.1116955326903998e-06, 3.6370024558384027e-07, 7.8074482703174878e-07, 4.0420892305003440e-07, +-4.1210782447364999e-06,-1.4921320756664208e-06, 9.3594763917439469e-07, 1.2632751895950575e-06, 2.7242098222995421e-07,-4.4315558206215906e-07,-3.9523221665841937e-07,-5.6037713455924411e-08, + 3.9745627980451753e-02, 3.6586198094234169e-02, 3.1020779468313220e-02, 2.4256794489976110e-02, 1.7523358050997421e-02, 1.1720210828690189e-02, 7.2751609829853261e-03, 4.2021589384827812e-03, +-3.1594298862175837e-03,-2.6571357885414384e-03,-1.8322235366338840e-03,-9.4882726012906343e-04,-2.3133226173571025e-04, 2.1322154884608792e-04, 3.9686805867010511e-04, 4.0072291033225235e-04, + 5.0229409767614530e-04, 3.8251013537965450e-04, 2.0007286513987069e-04, 3.1398737722707331e-05,-7.1912326740491311e-05,-1.0189909036044434e-04,-8.2684238254544047e-05,-4.6263766486289207e-05, +-1.1978396229649080e-04,-8.1696859394358979e-05,-2.8229568354384501e-05, 1.3254017771242213e-05, 2.9256715528114378e-05, 2.4111175521378817e-05, 1.0742629980183241e-05,-2.5767673339334375e-07, + 3.8087102902131819e-05, 2.2949159725939052e-05, 3.5032352593862350e-06,-8.6342810499130692e-06,-9.9709434512407165e-06,-4.9530521103177883e-06, 2.4685586554902940e-07, 2.5402931017031292e-06, +-1.5137943176192767e-05,-7.9179685856376245e-06, 4.9586000104154511e-07, 4.4379856175124748e-06, 3.3817895899916924e-06, 5.5545374096238732e-07,-1.1650297847786313e-06,-1.2188975196399297e-06, + 7.2199745905551427e-06, 3.2025608609343997e-06,-1.0002560647891101e-06,-2.2930229942137027e-06,-1.1007661261181550e-06, 3.4625255370003770e-07, 7.6506361618592493e-07, 4.0191873444433284e-07, +-4.0174137296207430e-06,-1.4627400406087587e-06, 9.0546661263464861e-07, 1.2353326086651383e-06, 2.7400732518986364e-07,-4.2929336583414913e-07,-3.8883696516203601e-07,-5.8449384824481105e-08, + 3.9619651346635337e-02, 3.6480217801808802e-02, 3.0947650284398699e-02, 2.4218866659020111e-02, 1.7514047541677541e-02, 1.1728658428029771e-02, 7.2909696725549193e-03, 4.2181508414042583e-03, +-3.1394335448265351e-03,-2.6419004966645593e-03,-1.8242431682631115e-03,-9.4756079903350263e-04,-2.3418545542984101e-04, 2.0916482139906808e-04, 3.9356928575342252e-04, 3.9887218049820036e-04, + 4.9753304816197580e-04, 3.7926053621364008e-04, 1.9894649017718636e-04, 3.1922038103688591e-05,-7.0749998918900067e-05,-1.0093859981985626e-04,-8.2254347916360139e-05,-4.6272054279893711e-05, +-1.1827251194833572e-04,-8.0785193374857244e-05,-2.8089052829517150e-05, 1.2912172590019805e-05, 2.8860571509508180e-05, 2.3913501447796155e-05, 1.0751580310329866e-05,-1.5703584649704756e-07, + 3.7487318573478472e-05, 2.2634987505733910e-05, 3.5222790335861313e-06,-8.4585829400939107e-06,-9.8365495540570686e-06,-4.9305615014761459e-06, 2.0086259438533445e-07, 2.4918581062726816e-06, +-1.4852331067744562e-05,-7.7910286255169997e-06, 4.5656620465108777e-07, 4.3472456378839279e-06, 3.3379785243063613e-06, 5.6896402838766107e-07,-1.1347366147659581e-06,-1.2028681464229407e-06, + 7.0613024422275620e-06, 3.1446290727028713e-06,-9.6463027212753114e-07,-2.2441581077155415e-06,-1.0897782250314705e-06, 3.2935169278834412e-07, 7.4963716440944907e-07, 3.9953472847279317e-07, +-3.9166733695246907e-06,-1.4339484400453714e-06, 8.7598703657935481e-07, 1.2080147196429021e-06, 2.7534778426253209e-07,-4.1581243267022217e-07,-3.8249460625255543e-07,-6.0729339673875351e-08, + 3.9494470773693328e-02, 3.6374844331070258e-02, 3.0874839415619831e-02, 2.4180989901520539e-02, 1.7504623830260930e-02, 1.1736944524557790e-02, 7.3066467552107116e-03, 4.2340687095704871e-03, +-3.1196264426230705e-03,-2.6267944627592632e-03,-1.8163077422794077e-03,-9.4627367753436636e-04,-2.3699247149747485e-04, 2.0514635567574734e-04, 3.9028771512314691e-04, 3.9702119915018420e-04, + 4.9283197986380728e-04, 3.7604715369863456e-04, 1.9782575065508236e-04, 3.2431804273206060e-05,-6.9603409809050523e-05,-9.9985998107428520e-05,-8.1824136038087460e-05,-4.6276355015301487e-05, +-1.1678482616517272e-04,-7.9885993307310561e-05,-2.7947806611704901e-05, 1.2577283259514645e-05, 2.8469768315237368e-05, 2.3716737627994209e-05, 1.0758714980265810e-05,-5.8319561576268759e-08, + 3.6898832857862156e-05, 2.2325846844449729e-05, 3.5397792444894589e-06,-8.2864756272525352e-06,-9.7038992954562975e-06,-4.9075438591049668e-06, 1.5606877642122049e-07, 2.4440623545623355e-06, +-1.4572986013412427e-05,-7.6663830621693724e-06, 4.1867411693891191e-07, 4.2584385632015625e-06, 3.2946079838413007e-06, 5.8180896649095194e-07,-1.1050554435514863e-06,-1.1869359231250011e-06, + 6.9066029512430547e-06, 3.0878371356578380e-06,-9.3016420388572357e-07,-2.1963736651755712e-06,-1.0787414188122996e-06, 3.1298260240882871e-07, 7.3446331563384824e-07, 3.9706208385020209e-07, +-3.8187658155852167e-06,-1.4057456211673021e-06, 8.4747485904351621e-07, 1.1813081956175186e-06, 2.7645456896139507e-07,-4.0270325697777490e-07,-3.7620714629504929e-07,-6.2882046010751391e-08, + 3.9370078739790981e-02, 3.6270072540540432e-02, 3.0802345068797161e-02, 2.4143165033139988e-02, 1.7495088751318420e-02, 1.1745070642441889e-02, 7.3221929192821382e-03, 4.2499125360900948e-03, +-3.1000061992505490e-03,-2.6118162480786647e-03,-1.8084170326969941e-03,-9.4496643147353940e-04,-2.3975393523293156e-04, 2.0116583685673983e-04, 3.8702335820109315e-04, 3.9517012423765253e-04, + 4.8818995117188430e-04, 3.7286949319715245e-04, 1.9671067458140431e-04, 3.2928311613152485e-05,-6.8472347168230447e-05,-9.9041248398385197e-05,-8.1393674293092633e-05,-4.6276745166230629e-05, +-1.1532045797473184e-04,-7.8999059752254855e-05,-2.7805890334651838e-05, 1.2249207682746249e-05, 2.8084236552750882e-05, 2.3520904616593553e-05, 1.0764081481252200e-05, 3.8497612443460659e-08, + 3.6321398222476987e-05, 2.2021646870909686e-05, 3.5557910433976444e-06,-8.1178826531679627e-06,-9.5729750178672414e-06,-4.8840253755692260e-06, 1.1245013310668850e-07, 2.3969018910567657e-06, +-1.4299751351567300e-05,-7.5439867678189285e-06, 3.8213811306545256e-07, 4.1715216615571015e-06, 3.2516797411430213e-06, 5.9400953096049237e-07,-1.0759762112619190e-06,-1.1711042947586243e-06, + 6.7557645837483720e-06, 3.0321617260067973e-06,-8.9681982325876354e-07,-2.1496454753044669e-06,-1.0676648188062585e-06, 2.9713059977983424e-07, 7.1953983606596400e-07, 3.9450580335095135e-07, +-3.7236028577415747e-06,-1.3781200802631822e-06, 8.1989722847880240e-07, 1.1551999403042777e-06, 2.7733938521529239e-07,-3.8995651592851687e-07,-3.6997643436322056e-07,-6.4911852796904437e-08, + 3.9246467817559132e-02, 3.6165897345897771e-02, 3.0730165459812379e-02, 2.4105392848326190e-02, 1.7485444114578211e-02, 1.1753038293286630e-02, 7.3376088534986986e-03, 4.2656823203287833e-03, +-3.0805704716613605e-03,-2.5969644335031433e-03,-1.8005708124575540e-03,-9.4363958579048168e-04,-2.4247046349622214e-04, 1.9722295161184698e-04, 3.8377622357986009e-04, 3.9331911067146379e-04, + 4.8360603815821718e-04, 3.6972706797765414e-04, 1.9560128758200779e-04, 3.3411829882260251e-05,-6.7356601515187998e-05,-9.8104313066569733e-05,-8.0963032474373319e-05,-4.6273300189974111e-05, +-1.1387897018056304e-04,-7.8124196870243252e-05,-2.7663362461589994e-05, 1.1927806787064235e-05, 2.7703907536987145e-05, 2.3326021937280660e-05, 1.0767726341355077e-05, 1.3344100574839242e-07, + 3.5754773310319788e-05, 2.1722298502328913e-05, 3.5703677857312335e-06,-7.9527292494672935e-06,-9.4437589998026757e-06,-4.8600314160928252e-06, 6.9982786638978140e-08, 2.3503726263192802e-06, +-1.4032474807990875e-05,-7.4237955417348288e-06, 3.4691406551995679e-07, 4.0864531577505796e-06, 3.2091952133211983e-06, 6.0558611798559749e-07,-1.0474889491252850e-06,-1.1553765095084353e-06, + 6.6086792662560461e-06, 2.9775799827511756e-06,-8.6456038756354090e-07,-2.1039498649156277e-06,-1.0565570776622754e-06, 2.8178137036479175e-07, 7.0486442153717265e-07, 3.9187071780778799e-07, +-3.6310992835048705e-06,-1.3510604857081875e-06, 7.9322246171463464e-07, 1.1296770830099528e-06, 2.7801345456910304e-07,-3.7756308482736825e-07,-3.6380417177999834e-07,-6.6822990753645559e-08, + 3.9123630672616087e-02, 3.6062313719197991e-02, 3.0658298813649409e-02, 2.4067674120743589e-02, 1.7475691705260900e-02, 1.1760848976193670e-02, 7.3528952468782331e-03, 4.2813780677885827e-03, +-3.0613169534180959e-03,-2.5822376192263588e-03,-1.7927688535240606e-03,-9.4229365474475871e-04,-2.4514266482282207e-04, 1.9331738813122869e-04, 3.8054631709731265e-04, 3.9146831036440503e-04, + 4.7907933419173709e-04, 3.6661939907095325e-04, 1.9449761298666194e-04, 3.3882623335691709e-05,-6.6255966101943652e-05,-9.7175153724886381e-05,-8.0532278532835164e-05,-4.6266094533915629e-05, +-1.1245993512078384e-04,-7.7261212349266281e-05,-2.7520279356865583e-05, 1.1612944457481321e-05, 2.7328713292869750e-05, 2.3132108115183725e-05, 1.0769695141548414e-05, 2.2653578237698203e-07, + 3.5198722771517560e-05, 2.1427714404427952e-05, 3.5835610916478611e-06,-7.7909423002124307e-06,-9.3162334699982038e-06,-4.8355865412165229e-06, 2.8643255970142329e-08, 2.3044703448618604e-06, +-1.3771008367089608e-05,-7.3057660861568582e-06, 3.1295928999586112e-07, 4.0031922137768263e-06, 3.1671554803390548e-06, 6.1655855811014474e-07,-1.0195837816059973e-06,-1.1397556258045366e-06, + 6.4652422809327497e-06, 2.9240694904575636e-06,-8.3335039619250898e-07,-2.0592636721562834e-06,-1.0454264085992740e-06, 2.6692096116797262e-07, 6.9043470222362134e-07, 3.8916149139860564e-07, +-3.5411727904751862e-06,-1.3245556609416530e-06, 7.6741998908176434e-07, 1.1047269831599087e-06, 2.7848753273424399e-07,-3.6551403659112187e-07,-3.5769191708530785e-07,-6.8619575940797994e-08, + 3.9001560062116858e-02, 3.5959316688107992e-02, 3.0586743364431700e-02, 2.4030009603696261e-02, 1.7465833284410349e-02, 1.1768504177823160e-02, 7.3680527886182366e-03, 4.2969997899887516e-03, +-3.0422433740088656e-03,-2.5676344244479066e-03,-1.7850109269707468e-03,-9.4092914213390541e-04,-2.4777113953247665e-04, 1.8944883615512782e-04, 3.7733364190947315e-04, 3.8961787227144960e-04, + 4.7460894956095900e-04, 3.6354601513112050e-04, 1.9339967191124097e-04, 3.4340950842170191e-05,-6.5170236885299165e-05,-9.6253731264722768e-05,-8.0101478614787462e-05,-4.6255201642285914e-05, +-1.1106293442983851e-04,-7.6409917336640182e-05,-2.7376695353490652e-05, 1.1304487471047847e-05, 2.6958586556973262e-05, 2.2939180708793624e-05, 1.0770032531376851e-05, 3.1780693536944614e-07, + 3.4653017093198325e-05, 2.1137808957700249e-05, 3.5954209014632853e-06,-7.6324503042734065e-06,-9.1903806205110935e-06,-4.8107145294184038e-06,-1.1591546734705853e-08, 2.2591907125006131e-06, +-1.3515208135498076e-05,-7.1898559923252852e-06, 2.8023249905277156e-07, 3.9216989074656179e-06, 3.1255613022682441e-06, 6.2694613096715845e-07,-9.9225092934268898e-07,-1.1242445186743633e-06, + 6.3253521431727907e-06, 2.8716082798611079e-06,-8.0315555150351493e-07,-2.0155642351468617e-06,-1.0342806039684369e-06, 2.5253577224057660e-07, 6.7624824896441274e-07, 3.8638262573217686e-07, +-3.4537438633116828e-06,-1.2985945998058542e-06, 7.4246032235984114e-07, 1.0803372250919629e-06, 2.7877192848126327e-07,-3.5380063824564097e-07,-3.5164109407451295e-07,-7.0305611119080510e-08, + 3.8880248833329731e-02, 3.5856901335151681e-02, 3.0515497355456091e-02, 2.3992400030541990e-02, 1.7455870589220161e-02, 1.1776005372456350e-02, 7.3830821679899978e-03, 4.3125475043482627e-03, +-3.0233474981780500e-03,-2.5531534870710457e-03,-1.7772968030702260e-03,-9.3954654150643288e-04,-2.5035647983686141e-04, 1.8561698700190338e-04, 3.7413819856199799e-04, 3.8776794242975123e-04, + 4.7019401110700437e-04, 3.6050645229821193e-04, 1.9230748333794786e-04, 3.4787065998129587e-05,-6.4099212498273559e-05,-9.5340005893932402e-05,-7.9670697098945789e-05,-4.6240693963089485e-05, +-1.0968755880879245e-04,-7.5570126370578562e-05,-2.7232662819785331e-05, 1.1002305433406032e-05, 2.6593460778590929e-05, 2.2747256340746729e-05, 1.0768782244698029e-05, 4.0727928213649800e-07, + 3.4117432438213885e-05, 2.0852498221124197e-05, 3.6059955315975240e-06,-7.4771833398334999e-06,-9.0661826188845099e-06,-4.7854383988246574e-06,-5.0744320126039393e-08, 2.2145292836300915e-06, +-1.3264934217089688e-05,-7.0760237206545533e-06, 2.4869375295205576e-07, 3.8419342140127193e-06, 3.0844131351670336e-06, 6.3676757926294932e-07,-9.6548071122298410e-07,-1.1088458862879322e-06, + 6.1889104964351345e-06, 2.8201748169260279e-06,-7.7394271280624561e-07,-1.9728293855092478e-06,-1.0231270515708532e-06, 2.3861254878225644e-07, 6.6230257826622799e-07, 3.8353846457368228e-07, +-3.3687356795091066e-06,-1.2731664599851469e-06, 7.1831500827110813e-07, 1.0564956219803693e-06, 2.7887651844577442e-07,-3.4241434771470173e-07,-3.4565299790397304e-07,-7.1884988479216375e-08, + 3.8759689922238751e-02, 3.5755062796967552e-02, 3.0444559039223041e-02, 2.3954846115098141e-02, 1.7445805333355820e-02, 1.1783354022059199e-02, 7.3979840742355672e-03, 4.3280212340698629e-03, +-3.0046271252711990e-03,-2.5387934634059431e-03,-1.7696262513771342e-03,-9.3814633637065437e-04,-2.5289926994597964e-04, 1.8182153359466366e-04, 3.7095998506014340e-04, 3.8591866399834748e-04, + 4.6583366186525588e-04, 3.5750025406412062e-04, 1.9122106419236420e-04, 3.5221217239894253e-05,-6.3042694221720227e-05,-9.4433937173667089e-05,-7.9239996632726913e-05,-4.6222642955215333e-05, +-1.0833340780113526e-04,-7.4741657314125894e-05,-2.7088232222779399e-05, 1.0706270715850272e-05, 2.6233270120747064e-05, 2.2556350727761401e-05, 1.0765987115149233e-05, 4.9497746014565272e-07, + 3.3591750487009368e-05, 2.0571699898561216e-05, 3.6153317266392050e-06,-7.3250730280431211e-06,-8.9436216205017216e-06,-4.7597804282495176e-06,-8.8837377642464598e-08, 2.1704815081671658e-06, +-1.3020050588448152e-05,-6.9642285851319593e-06, 2.1830441595941020e-07, 3.7638599848875111e-06, 3.0437111478994915e-06, 6.4604112203466411e-07,-9.3926354638268520e-07,-1.0935622561902153e-06, + 6.0558220033161923e-06, 2.7697479996221822e-06,-7.4567985907968781e-07,-1.9310374363909117e-06,-1.0119727534857844e-06, 2.2513837443818554e-07, 6.4859515706549124e-07, 3.8063319828024227e-07, +-3.2860740036940101e-06,-1.2482605712365767e-06, 6.9495659709401379e-07, 1.0331902090791689e-06, 2.7881076755548227e-07,-3.3134681307781961e-07,-3.3972880055850592e-07,-7.3361492135905247e-08, + 3.8639876352173100e-02, 3.5653796263578612e-02, 3.0373926677463990e-02, 2.3917348552039211e-02, 1.7435639207272771e-02, 1.1790551576347169e-02, 7.4127591964675927e-03, 4.3434210080257798e-03, +-2.9860800885944880e-03,-2.5245530278782541e-03,-1.7619990408090161e-03,-9.3672900039877549e-04,-2.5540008617358501e-04, 1.7806217048641111e-04, 3.6779899693729044e-04, 3.8407017729759005e-04, + 4.6152706071623389e-04, 3.5452697114074765e-04, 1.9014042941844925e-04, 3.5643647952862938e-05,-6.2000485955642361e-05,-9.3535484054064075e-05,-7.8809438167936827e-05,-4.6201119095732137e-05, +-1.0700008957548624e-04,-7.3924331289703521e-05,-2.6943452190432426e-05, 1.0416258394676820e-05, 2.5877949460212508e-05, 2.2366478709897469e-05, 1.0761689091436108e-05, 5.8092592290511869e-07, + 3.3075758285782721e-05, 2.0295333304253156e-05, 3.6234747113571095e-06,-7.1760524990264261e-06,-8.8226797793019925e-06,-4.7337621781084517e-06,-1.2589265145759479e-07, 2.1270427381941441e-06, +-1.2780424981529565e-05,-6.8544307347541785e-06, 1.8902711092829781e-07, 3.6874389300069059e-06, 3.0034552363411077e-06, 6.5478446853976756e-07,-9.1358995633407489e-07,-1.0783959912156204e-06, + 5.9259942467753860e-06, 2.7203071481965228e-06,-7.1833604682582585e-07,-1.8901671759855738e-06,-1.0008243404826123e-06, 2.1210066270578609e-07, 6.3512340808247979e-07, 3.7767086777243570e-07, +-3.2056870985788632e-06,-1.2238664304886112e-06, 6.7235860051309071e-07, 1.0104092470701558e-06, 2.7858374154779396e-07,-3.2058986760743907e-07,-3.3386955803311316e-07,-7.4738799693413018e-08, + 3.8520801232460808e-02, 3.5553096977673178e-02, 3.0303598541164989e-02, 2.3879908017286060e-02, 1.7425373878529979e-02, 1.1797599472850770e-02, 7.4274082235716949e-03, 4.3587468606449166e-03, +-2.9677042547876301e-03,-2.5104308727429206e-03,-1.7544149397240826e-03,-9.3529499762679338e-04,-2.5785949704130312e-04, 1.7433859388378027e-04, 3.6465522732207715e-04, 3.8222261984824715e-04, + 4.5727338204470946e-04, 3.5158616133098902e-04, 1.8906559205083824e-04, 3.6054596578584809e-05,-6.0972394190727110e-05,-9.2644604908694183e-05,-7.8379080995891637e-05,-4.6176191887296457e-05, +-1.0568722071372045e-04,-7.3117972615527056e-05,-2.6798369571291725e-05, 1.0132146191358942e-05, 2.5527434387490253e-05, 2.2177654278786424e-05, 1.0755929252565454e-05, 6.6514893613334528e-07, + 3.2569248098193390e-05, 2.0023319330092426e-05, 3.6304682398962658e-06,-7.0300563576323929e-06,-8.7033392586715989e-06,-4.7074045103460643e-06,-1.6193169674607242e-07, 2.0842082345239093e-06, +-1.2545928768100964e-05,-6.7465911374304548e-06, 1.6082567756126953e-07, 3.6126345983470221e-06, 2.9636450384204993e-06, 6.6301483090657095e-07,-8.8845056636231398e-07,-1.0633492955763047e-06, + 5.7993376306705088e-06, 2.6718319997709797e-06,-6.9188137352523854e-07,-1.8501978574376213e-06,-9.8968808865150557e-07, 1.9948715035966663e-07, 6.2188471377810570e-07, 3.7465536914967335e-07, +-3.1275056308995291e-06,-1.1999737052309691e-06, 6.5049545897105763e-07, 9.8814121812594441e-07, 2.7820412443459976e-07,-3.1013552859502061e-07,-3.2807621483920466e-07,-7.6020485354243023e-08, + 3.8402457757107947e-02, 3.5452960233897567e-02, 3.0233572910587779e-02, 2.3842525168387661e-02, 1.7415010992099779e-02, 1.1804499136982279e-02, 7.4419318441116657e-03, 4.3739988318016697e-03, +-2.9494975232103801e-03,-2.4964257078030697e-03,-1.7468737159961542e-03,-9.3384478265017001e-04,-2.6027806338177473e-04, 1.7065050166943652e-04, 3.6152866700413146e-04, 3.8037612641035265e-04, + 4.5307181540731045e-04, 3.4867738940217363e-04, 1.8799656328482434e-04, 3.6454296719375633e-05,-5.9958227979724926e-05,-9.1761257567989714e-05,-7.7948982781893945e-05,-4.6147929865756406e-05, +-1.0439442600513682e-04,-7.2322408743187290e-05,-2.6653029492329522e-05, 9.8538144142776908e-06, 2.5181661206119806e-05, 2.1989890605263510e-05, 1.0748747822799087e-05, 7.4767057426590634e-07, + 3.2072017261949534e-05, 1.9755580413255343e-05, 3.6363546436212194e-06,-6.8870206503504536e-06,-8.5855822412944370e-06,-4.6807276082277334e-06,-1.9697569576505499e-07, 2.0419731728653858e-06, +-1.2316436848694190e-05,-6.6406715635246870e-06, 1.3366513147064700e-07, 3.5394113597341554e-06, 2.9242799476788278e-06, 6.7074893722205070e-07,-8.6383610725869159e-07,-1.0484242204380979e-06, + 5.6757652851695033e-06, 2.6243027016070549e-06,-6.6628694104002891e-07,-1.8111091904302625e-06,-9.7856993378473063e-07, 1.8728588958176642e-07, 6.0887642112527778e-07, 3.7159045750337662e-07, +-3.0514625835624483e-06,-1.1765722339105732e-06, 6.2934250742469362e-07, 9.6637482496468976e-07, 2.7768023225003987e-07,-2.9997599341558336e-07,-3.2234961035495205e-07,-7.7210021558523478e-08, + 3.8284839203501883e-02, 3.5353381378159562e-02, 3.0163848075287589e-02, 2.3805200644894799e-02, 1.7404552170673219e-02, 1.1811251982103151e-02, 7.4563307462371794e-03, 4.3891769667062626e-03, +-2.9314578253423207e-03,-2.4825362601338802e-03,-1.7393751370868848e-03,-9.3237880081542199e-04,-2.6265633844044581e-04, 1.6699759342313734e-04, 3.5841930449841738e-04, 3.7853082902171778e-04, + 4.4892156520844051e-04, 3.4580022696185020e-04, 1.8693335254407967e-04, 3.6842977240788004e-05,-5.8957798909109872e-05,-9.0885399351475969e-05,-7.7519199599121371e-05,-4.6116400607872522e-05, +-1.0312133824659031e-04,-7.1537470196316930e-05,-2.6507475414866785e-05, 9.5811459014690699e-06, 2.4840566931973439e-05, 2.1803200065996194e-05, 1.0740184186508800e-05, 8.2851471717964437e-07, + 3.1583868050273384e-05, 1.9492040504208978e-05, 3.6411748772214527e-06,-6.7468828324271555e-06,-8.4693909391004107e-06,-4.6537509951852872e-06,-2.3104546218305647e-07, 2.0003326498315846e-06, +-1.2091827546064406e-05,-6.5366345693035484e-06, 1.0751162500584575e-07, 3.4677343860361152e-06, 2.8853591273631815e-06, 6.7800304349434308e-07,-8.3973741645468472e-07,-1.0336226695046405e-06, + 5.5551929767608581e-06, 2.5776998039526437e-06,-6.4152482110559648e-07,-1.7728813311117920e-06,-9.6747548718360643e-07, 1.7548524178636589e-07, 5.9609584525726737e-07, 3.6847975104303401e-07, +-2.9774931728082144e-06,-1.1536520257694221e-06, 6.0887594401957873e-07, 9.4509898653304703e-07, 2.7702002990412442e-07,-2.9010363854767753e-07,-3.1669048310192635e-07,-7.8310781505206282e-08, + 3.8167938931138047e-02, 3.5254355806943027e-02, 3.0094422334128221e-02, 2.3767935068726150e-02, 1.7393999014961581e-02, 1.1817859409592240e-02, 7.4706056175940366e-03, 4.4042813157966253e-03, +-2.9135831241950197e-03,-2.4687612738115289e-03,-1.7319189701153204e-03,-9.3089748840743947e-04,-2.6499486797649380e-04, 1.6337957044158802e-04, 3.5532712610825828e-04, 3.7668685703611416e-04, + 4.4482185038349081e-04, 3.4295425233630888e-04, 1.8587596754624501e-04, 3.7220862371448583e-05,-5.7970921070374826e-05,-9.0016987099126152e-05,-7.7089785961925446e-05,-4.6081670739127984e-05, +-1.0186759804718193e-04,-7.0762990510981976e-05,-2.6361749188852287e-05, 9.3140259652993746e-06, 2.4504089291504117e-05, 2.1617594269723715e-05, 1.0730276902798312e-05, 9.0770504709790346e-07, + 3.1104607536199956e-05, 1.9232625036019816e-05, 3.6449685636391205e-06,-6.6095817368051463e-06,-8.3547476015245523e-06,-4.6264935538773121e-06,-2.6416144525772561e-07, 1.9592816887883112e-06, +-1.1871982500180140e-05,-6.4344434815270851e-06, 8.2332408685717928e-08, 3.3975696346364543e-06, 2.8468815219015361e-06, 6.8479294668012026e-07,-8.1614543949194349e-07,-1.0189464044697605e-06, + 5.4375390186530547e-06, 2.5320042539241838e-06,-6.1756802051467994e-07,-1.7354948755416976e-06,-9.5641004724082310e-07, 1.6407386900679068e-07, 5.8354027401443554e-07, 3.6532673503316633e-07, +-2.9055347647288709e-06,-1.1312032613829522e-06, 5.8907279675933497e-07, 9.2430283975493592e-07, 2.7623114089273015e-07,-2.8051101374474539e-07,-3.1109947714728874e-07,-7.9326041200034131e-08, + 3.8051750380370578e-02, 3.5155878966633192e-02, 3.0025293995294512e-02, 2.3730729044527221e-02, 1.7383353103993859e-02, 1.1824322808914991e-02, 7.4847571452370176e-03, 4.4193119346317899e-03, +-2.8958714137373859e-03,-2.4550995096466605e-03,-1.7245049819249007e-03,-9.2940127283308582e-04,-2.6729419036232438e-04, 1.5979613575695627e-04, 3.5225211598701855e-04, 3.7484433716121566e-04, + 4.4077190409072542e-04, 3.4013905045093135e-04, 1.8482441436638505e-04, 3.7588171801085910e-05,-5.6997411031849111e-05,-8.9155977201457241e-05,-7.6660794858538026e-05,-4.6043805941755613e-05, +-1.0063285363979407e-04,-6.9998806176432837e-05,-2.6215891105360947e-05, 9.0523423377367589e-06, 2.4172166720411041e-05, 2.1433084082323267e-05, 1.0719063719997042e-05, 9.8526504586435716e-07, + 3.0634047463361236e-05, 1.8977260892927519e-05, 3.6477740374298656e-06,-6.4750575426565695e-06,-8.2416345245706676e-06,-4.5989735439562280e-06,-2.9634373422857233e-07, 1.9188152452981220e-06, +-1.1656786570433717e-05,-6.3340623801871981e-06, 5.8095794147200893e-08, 3.3288838303718449e-06, 2.8088458700809550e-06, 6.9113399593579417e-07,-7.9305123089839023e-07,-1.0043970500738250e-06, + 5.3227241902465185e-06, 2.4871973861407601e-06,-5.9439044799897366e-07,-1.6989308499767846e-06,-9.4537861439580496e-07, 1.5304072815642707e-07, 5.7120697129054333e-07, 3.6213476538691290e-07, +-2.8355268041057584e-06,-1.1092162880579029e-06, 5.6991089246920708e-07, 9.0397573546533588e-07, 2.7532086338191584e-07,-2.7119084126876934e-07,-3.0557714616385464e-07,-8.0258981323315349e-08, + 3.7936267071184963e-02, 3.5057946352852587e-02, 2.9956461376301979e-02, 2.3693583160021799e-02, 1.7372615995410269e-02, 1.1830643557693100e-02, 7.4987860155450057e-03, 4.4342688837867962e-03, +-2.8783207183323764e-03,-2.4415497449229440e-03,-1.7171329391478668e-03,-9.2789057280079704e-04,-2.6955483668219052e-04, 1.5624699415429759e-04, 3.4919425619854647e-04, 3.7300339349611873e-04, + 4.3677097340943244e-04, 3.3735421271357396e-04, 1.8377869749821099e-04, 3.7945120776173842e-05,-5.6037087810220567e-05,-8.8302325628813392e-05,-7.6232277783268309e-05,-4.6002870962737002e-05, +-9.9416760695858475e-05,-6.9244756578289157e-05,-2.6069939947077079e-05, 8.7959851172191218e-06, 2.3844738361401504e-05, 2.1249679651475872e-05, 1.0706581590034516e-05, 1.0612179922329977e-06, + 3.0172004117569318e-05, 1.8725876381618284e-05, 3.6496283860928873e-06,-6.3432517451655819e-06,-8.1300340584841875e-06,-4.5712086199109081e-06,-3.2761206276634540e-07, 1.8789282126611911e-06, +-1.1446127735951033e-05,-6.2354560850332542e-06, 3.4771119455077790e-08, 3.2616444486429981e-06, 2.7712507162378684e-06, 6.9704110454554373e-07,-7.7044595499035569e-07,-9.8997609946247201e-07, + 5.2106716509177791e-06, 2.4432609193529618e-06,-5.7196688428258113e-07,-1.6631707024548972e-06,-9.3438590320456725e-07, 1.4237506374965695e-07, 5.5909318045466029e-07, 3.5890707285129415e-07, +-2.7674107315648173e-06,-1.0876816252354228e-06, 5.5136883055082757e-07, 8.8410723593118114e-07, 2.7429618197442245e-07,-2.6213601223100915e-07,-3.0012395795796798e-07,-8.1112690082816350e-08, + 3.7821482601993570e-02, 3.4960553509807250e-02, 2.9887922804004010e-02, 2.3656497986356408e-02, 1.7361789225751760e-02, 1.1836823021775021e-02, 7.5126929141386550e-03, 4.4491522287491043e-03, +-2.8609290921863192e-03,-2.4281107731400561e-03,-1.7098026082672663e-03,-9.2636579849654163e-04,-2.7177733082945493e-04, 1.5273185218777317e-04, 3.4615352677625812e-04, 3.7116414756861119e-04, + 4.3281831904626311e-04, 3.3459933689977250e-04, 1.8273881991331866e-04, 3.8291920193739108e-05,-5.5089772842467351e-05,-8.7455987959566460e-05,-7.5804284768033706e-05,-4.5958929622004995e-05, +-9.8218982146490615e-05,-6.8500683942139019e-05,-2.5923933037166208e-05, 8.5448467162732583e-06, 2.3521744062147799e-05, 2.1067390430426562e-05, 1.0692866682538804e-05, 1.1355869595250872e-06, + 2.9718298204351595e-05, 1.8478401201864680e-05, 3.6505674900745523e-06,-6.2141071252600330e-06,-8.0199286157893722e-06,-4.5432158480654891e-06,-3.5798581336688205e-07, 1.8396154270227995e-06, +-1.1239897002486915e-05,-6.1385901403644488e-06, 1.2328715515300490e-08, 3.1958196976980569e-06, 2.7340944223040866e-06, 7.0252876087020245e-07,-7.4832088657414419e-07,-9.7568491905538353e-07, + 5.1013068621224660e-06, 2.4001769498790110e-06,-5.5027295304224586e-07,-1.6281962925891646e-06,-9.2343635617706004e-07, 1.3206640204575838e-07, 5.4719612748441577e-07, 3.5564676661707394e-07, +-2.7011299122434550e-06,-1.0665899645330197e-06, 5.3342595744035155e-07, 8.6468710918416782e-07, 2.7316378282951938e-07,-2.5333958531655886e-07,-2.9474029836179517e-07,-8.1890165364686611e-08, + 3.7707390648452598e-02, 3.4863696029643003e-02, 2.9819676614596710e-02, 2.3619474078437609e-02, 1.7350874310745779e-02, 1.1842862555306980e-02, 7.5264785258003179e-03, 4.4639620398164732e-03, +-2.8436946188095946e-03,-2.4147814037609946e-03,-1.7025137556769439e-03,-9.2482735175571790e-04,-2.7396218960296440e-04, 1.4925041819582006e-04, 3.4312990578100507e-04, 3.6932671837209587e-04, + 4.2891321504859997e-04, 3.3187402703983414e-04, 1.8170478311911533e-04, 3.8628776692476580e-05,-5.4155289957454598e-05,-8.6616919407528408e-05,-7.5376864413344226e-05,-4.5912044820728458e-05, +-9.7039188008765827e-05,-6.7766433277557307e-05,-2.5777906287695736e-05, 8.2988218114559304e-06, 2.3203124372150628e-05, 2.0886225201406747e-05, 1.0677954398708101e-05, 1.2083948134974530e-06, + 2.9272754731208520e-05, 1.8234766416171543e-05, 3.6506260635463697e-06,-6.0875677220966011e-06,-7.9113006773886871e-06,-4.5150117238611363e-06,-3.8748402156020435e-07, 1.8008716722205548e-06, +-1.1037988315036976e-05,-6.0434307967377919e-06,-9.2601303357126809e-09, 3.1313785051086528e-06, 2.6973751765340114e-06, 7.0761104056071255e-07,-7.2666741210309822e-07,-9.6152475305098602e-07, + 4.9945575182991846e-06, 2.3579279381683247e-06,-5.2928508529421261e-07,-1.5939898886616662e-06,-9.1253415172976997e-07, 1.2210454217123896e-07, 5.3551302533443457e-07, 3.5235683724971212e-07, +-2.6366295801308598e-06,-1.0459321555980716e-06, 5.1606232736454281e-07, 8.4570533683284948e-07, 2.7193005797527339e-07,-2.4479477913871555e-07,-2.8942647812094085e-07,-8.2594315396534063e-08, + 3.7593984962300618e-02, 3.4767369551812130e-02, 2.9751721153621190e-02, 2.3582511975262829e-02, 1.7339872745588122e-02, 1.1848763500804700e-02, 7.5401435343962599e-03, 4.4786983919963214e-03, +-2.8266154104884880e-03,-2.4015604619644637e-03,-1.6952661477386416e-03,-9.2327562623196330e-04,-2.7610992280202931e-04, 1.4580240231513303e-04, 3.4012336935777560e-04, 3.6749122240215155e-04, + 4.2505494852402431e-04, 3.2917789330920693e-04, 1.8067658721367813e-04, 3.8955892742814483e-05,-5.3233465348213817e-05,-8.5785074848177846e-05,-7.4950063918863372e-05,-4.5862278549597209e-05, +-9.5877055214817382e-05,-6.7041852325413424e-05,-2.5631894244306641e-05, 8.0578072926396801e-06, 2.2888820540477004e-05, 2.0706192097791560e-05, 1.0661879385305865e-05, 1.2796642102258548e-06, + 2.8835202889403958e-05, 1.7994904424269876e-05, 3.6498376897250763e-06,-5.9635788027842389e-06,-7.8041328005307245e-06,-4.4866121874079046e-06,-4.1612538081891598e-07, 1.7626916848302922e-06, +-1.0840298465134082e-05,-5.9499450013185069e-06,-3.0023201687668269e-08, 3.0682904980774294e-06, 2.6610910062888937e-06, 7.1230161581089426e-07,-7.0547702922995956e-07,-9.4749672862496020e-07, + 4.8903534638155751e-06, 2.3164967118153673e-06,-5.0898049999327700e-07,-1.5605341523499194e-06,-9.0168322058176160e-07, 1.1247955292226125e-07, 5.2404107496000925e-07, 3.4904016133209172e-07, +-2.5738567520002078e-06,-1.0256992238723603e-06, 4.9925869330947239e-07, 8.2715209773465124e-07, 2.7060112671638707e-07,-2.3649497593578423e-07,-2.8418273289399315e-07,-8.3227963220158905e-08, + 3.7481259370217831e-02, 3.4671569762449513e-02, 2.9684054775963808e-02, 2.3545612200244179e-02, 1.7328786005221000e-02, 1.1854527189225510e-02, 7.5536886228011650e-03, 4.4933613649065333e-03, +-2.8096896077683189e-03,-2.3884467884010344e-03,-1.6880595508374958e-03,-9.2171100756197749e-04,-2.7822103332052553e-04, 1.4238751649376172e-04, 3.3713389179104974e-04, 3.6565777369281134e-04, + 4.2124281936728458e-04, 3.2651055191993111e-04, 1.7965423093989569e-04, 3.9273466734179017e-05,-5.2324127543819062e-05,-8.4960408844337101e-05,-7.4523929113184397e-05,-4.5809691897313919e-05, +-9.4732267447353476e-05,-6.6326791504239119e-05,-2.5485930131415849e-05, 7.8217022150225312e-06, 2.2578774512155792e-05, 2.0527298626318771e-05, 1.0644675548013622e-05, 1.3494175944449754e-06, + 2.8405475943114357e-05, 1.7758748934177399e-05, 3.6482348587337178e-06,-5.8420868358260148e-06,-7.6984076241909047e-06,-4.4580326400587097e-06,-4.4392824654997031e-07, 1.7250701584791942e-06, +-1.0646727008936958e-05,-5.8581003806501359e-06,-4.9987386558366376e-08, 3.0065259900313766e-06, 2.6252397860133933e-06, 7.1661376730831461e-07,-6.8474134814217580e-07,-9.3360185986351442e-07, + 4.7886266282868221e-06, 2.2758664532989059e-06,-4.8933717168286226e-07,-1.5278121351201661e-06,-8.9088725305038453e-07, 1.0318176371113195e-07, 5.1277747005027479e-07, 3.4569950370656728e-07, +-2.5127601749879162e-06,-1.0058823583252068e-06, 4.8299647193032507e-07, 8.0901777408443404e-07, 2.6918283950316182e-07,-2.2843371325206595e-07,-2.7900923095698536e-07,-8.3793846363897331e-08, + 3.7369207772705942e-02, 3.4576292393758513e-02, 2.9616675845854250e-02, 2.3508775261525981e-02, 1.7317615544607479e-02, 1.1860154940041121e-02, 7.5671144728247861e-03, 4.5079510426777264e-03, +-2.7929153789474290e-03,-2.3754392389537041e-03,-1.6808937314352554e-03,-9.2013387352702855e-04,-2.8029601723975409e-04, 1.3900547450307159e-04, 3.3416144555912380e-04, 3.6382648385245402e-04, + 4.1747613999372490e-04, 3.2387162501439082e-04, 1.7863771173755663e-04, 3.9581693060631142e-05,-5.1427107381663234e-05,-8.4142875670710471e-05,-7.4098504483307865e-05,-4.5754345059026771e-05, +-9.3604514979334086e-05,-6.5621103858111429e-05,-2.5340045895421603e-05, 7.5904077516569834e-06, 2.2272928924882365e-05, 2.0349551688150178e-05, 1.0626376065042459e-05, 1.4176771978102694e-06, + 2.7983411121222657e-05, 1.7526234934718999e-05, 3.6458490031712191e-06,-5.7230394640477482e-06,-7.5941078751736059e-06,-4.4292879595441265e-06,-4.7091064092146223e-07, 1.6880017484953226e-06, +-1.0457176186503658e-05,-5.7678652255306355e-06,-6.9178707712267950e-08, 2.9460559653076389e-06, 2.5898192469612027e-06, 7.2056039396259888e-07,-6.6445209121680709e-07,-9.1984105258034739e-07, + 4.6893109609730224e-06, 2.2360206915545707e-06,-4.7033380331540297e-07,-1.4958072703493522e-06,-8.8014971017858605e-07, 9.4201759446962145e-08, 5.0171939857935810e-07, 3.4233752165310268e-07, +-2.4532902694184517e-06,-9.8647290677383191e-07, 4.6725771772761993e-07, 7.9129294882641615e-07, 2.6768078971607517e-07,-2.2060468303030594e-07,-2.7390607486755104e-07,-8.4294620484511951e-08, + 3.7257824142987873e-02, 3.4481533223406510e-02, 2.9549582736861250e-02, 2.3472001652295751e-02, 1.7306362799002051e-02, 1.1865648061310749e-02, 7.5804217651407810e-03, 4.5224675138569384e-03, +-2.7762909195813631e-03,-2.3625366845030499e-03,-1.6737684561211955e-03,-9.1854459421118750e-04,-2.8233536392019074e-04, 1.3565599194879062e-04, 3.3120600138714790e-04, 3.6199746209937718e-04, + 4.1375423507831327e-04, 3.2126074056179881e-04, 1.7762702579326300e-04, 3.9880762204851919e-05,-5.0542237979897824e-05,-8.3332429337705749e-05,-7.3673833203426078e-05,-4.5696297344908262e-05, +-9.2493494516514459e-05,-6.4924645006852403e-05,-2.5194272245632345e-05, 7.3638271466048888e-06, 2.1971227105551033e-05, 2.0172957599519790e-05, 1.0607013400303587e-05, 1.4844650375044234e-06, + 2.7568849509662055e-05, 1.7297298670926025e-05, 3.6427105308543138e-06,-5.6063854772753035e-06,-7.4912163739934209e-06,-4.4003925150128210e-06,-4.9709025725360970e-07, 1.6514810760554660e-06, +-1.0271550838736031e-05,-5.6792084804691309e-06,-8.7622348849085712e-08, 2.8868520625023407e-06, 2.5548269868639414e-06, 7.2415402287747919e-07,-6.4460109333782616e-07,-9.0621510838010822e-07, + 4.5923423582668998e-06, 2.1969433016577303e-06,-4.5194980583716247e-07,-1.4645033623725539e-06,-8.6947383526430155e-07, 8.5530374785498047e-08, 4.9086404553814285e-07, 3.3895676782436151e-07, +-2.3953990566091695e-06,-9.6746238612687196e-07, 4.5202510907672234e-07, 7.7396839686274058e-07, 2.6610032686844329e-07,-2.1300172961210263e-07,-2.6887330527017987e-07,-8.4732860820005016e-08, + 3.7147102525927352e-02, 3.4387288073929483e-02, 2.9482773831886619e-02, 2.3435291851088991e-02, 1.7295029184217731e-02, 1.1871007849754690e-02, 7.5936111792176096e-03, 4.5369108713127189e-03, +-2.7598144519978690e-03,-2.3497380106959551e-03,-1.6666834916614290e-03,-9.1694353215602403e-04,-2.8433955609223974e-04, 1.3233878628115744e-04, 3.2826752829909558e-04, 3.6017081529703381e-04, + 4.1007644130191395e-04, 3.1867753225571288e-04, 1.7662216808943254e-04, 4.0170860819846140e-05,-4.9669354709794592e-05,-8.2529023614487016e-05,-7.3249957163235501e-05,-4.5635607188756664e-05, +-9.1398909046201075e-05,-6.4237273095453236e-05,-2.5048638695239690e-05, 7.1418656700280431e-06, 2.1673613066122307e-05, 1.9997522111906476e-05, 1.0586619316449452e-05, 1.5498029149485051e-06, + 2.7161635950747839e-05, 1.7071877616559753e-05, 3.6388488590752192e-06,-5.4920747873465911e-06,-7.3897160394951340e-06,-4.3713601819693628e-06,-5.2248446444342180e-07, 1.6155027322678549e-06, +-1.0089758334188086e-05,-5.5920997269269965e-06,-1.0534268485927205e-07, 2.8288865615244654e-06, 2.5202604773581136e-06, 7.2740681977516292e-07,-6.2518030216743922e-07,-8.9272472874633213e-07, + 4.4976586072610890e-06, 2.1586184922914536e-06,-4.3416526899684747e-07,-1.4338845822595170e-06,-8.5886266124992736e-07, 7.7158686932649273e-08, 4.8020859581564330e-07, 3.3555969330319366e-07, +-2.3390401149696355e-06,-9.4884246920232221e-07, 4.3728191655771876e-07, 7.5703508911805250e-07, 2.6444656187494722e-07,-2.0561884432862904e-07,-2.6391090545270093e-07,-8.5111063810634926e-08, + 3.7037037036967403e-02, 3.4293552812146098e-02, 2.9416247523157180e-02, 2.3398646322087879e-02, 1.7283616096889391e-02, 1.1876235590828279e-02, 7.6066833932515194e-03, 4.5512812121416384e-03, +-2.7434842248213048e-03,-2.3370421177188461e-03,-1.6596386050460148e-03,-9.1533104251229763e-04,-2.8630906994573171e-04, 1.2905357680408937e-04, 3.2534599366856876e-04, 3.5834664798890803e-04, + 4.0644210710245876e-04, 3.1612163941440157e-04, 1.7562313245109780e-04, 4.0452171809301769e-05,-4.8808295168573080e-05,-8.1732612051111747e-05,-7.2826916995730878e-05,-4.5572332156654249e-05, +-9.0320467688057189e-05,-6.3558848746183487e-05,-2.4903173599756100e-05, 6.9244305734126685e-06, 2.1380031499867339e-05, 1.9823250431361686e-05, 1.0565224887788545e-05, 1.6137124146842517e-06, + 2.6761618941873702e-05, 1.6849910450327028e-05, 3.6342924453303044e-06,-5.3800584019553750e-06,-7.2895898942607722e-06,-4.3422043562646002e-06,-5.4711031156086037e-07, 1.5800612820987910e-06, +-9.9117084915466741e-06,-5.5065091728155923e-06,-1.2236330637271776e-07, 2.7721323675193501e-06, 2.4861170732447165e-06, 7.3033059802196171e-07,-6.0618177789268345e-07,-8.7937051907557175e-07, + 4.4051993187310818e-06, 2.1210308047182226e-06,-4.1696094224190941e-07,-1.4039354569678197e-06,-8.4831902211280463e-07, 6.9078010965991063e-08, 4.6975023593905025e-07, 3.3214865083745602e-07, +-2.2841685140128592e-06,-9.3060499330246831e-07, 4.2301198994850664e-07, 7.4048418337111314e-07, 2.6272438066376876e-07,-1.9845016505051122e-07,-2.5901880350380884e-07,-8.5431649406076427e-08, + 3.6927621861088077e-02, 3.4200323348580447e-02, 2.9350002212214999e-02, 2.3362065515413911e-02, 1.7272124914733650e-02, 1.1881332558796269e-02, 7.6196390841015236e-03, 4.5655786375761939e-03, +-2.7272985125076296e-03,-2.3244479200744267e-03,-1.6526335635344731e-03,-9.1370747318825565e-04,-2.8824437521842924e-04, 1.2580008468349342e-04, 3.2244136326855209e-04, 3.5652506243304301e-04, + 4.0285059243320293e-04, 3.1359270688223473e-04, 1.7462991159174907e-04, 4.0724874405807646e-05,-4.7958899152187998e-05,-8.0943147999932853e-05,-7.2404752104531954e-05,-4.5506528955633480e-05, +-8.9257885550968197e-05,-6.2889235010001043e-05,-2.4757904195370575e-05, 6.7114310465488070e-06, 2.1090427777028697e-05, 1.9650147237375426e-05, 1.0542860513067996e-05, 1.6762149033442000e-06, + 2.6368650540967153e-05, 1.6631337029431263e-05, 3.6290688192994399e-06,-5.2702884005483687e-06,-7.1908210689095470e-06,-4.3129379679616577e-06,-5.7098453247861377e-07, 1.5451512682541513e-06, +-9.7373135115358901e-06,-5.4224076362425861e-06,-1.3870704785595547e-07, 2.7165629980141020e-06, 2.4523940197982405e-06, 7.3293682801443808e-07,-5.8759769290530054e-07,-8.6615299276594840e-07, + 4.3149058752933040e-06, 2.0841651004933191e-06,-4.0031820783261802e-07,-1.3746408643533742e-06,-8.3784556067284077e-07, 6.1279893945507263e-08, 4.5948615588414593e-07, 3.2872589825480472e-07, +-2.2307407747999849e-06,-9.1274194728396311e-07, 4.0919972941792119e-07, 7.2430702632634323e-07, 2.6093845092995636e-07,-1.9148997285999163e-07,-2.5419687500286311e-07,-8.5696963667104172e-08, + 3.6818851251781970e-02, 3.4107595636893882e-02, 2.9284036309905569e-02, 2.3325549867414652e-02, 1.7260556996805228e-02, 1.1886300016807360e-02, 7.6324789272263598e-03, 4.5798032528940576e-03, +-2.7112556148880876e-03,-2.3119543463628461e-03,-1.6456681346992234e-03,-9.1207316499499272e-04,-2.9014593528351590e-04, 1.2257803295484884e-04, 3.1955360131999053e-04, 3.5470615863624454e-04, + 3.9930126852524145e-04, 3.1109038493400132e-04, 1.7364249715708926e-04, 4.0989144247602209e-05,-4.7121008628231442e-05,-8.0160584636452143e-05,-7.1983500690544003e-05,-4.5438253442460833e-05, +-8.8210883591240130e-05,-6.2228297320861346e-05,-2.4612856634927409e-05, 6.5027781750180756e-06, 2.0804747940247896e-05, 1.9478216701504762e-05, 1.0519555927779490e-05, 1.7373315289471178e-06, + 2.5982586270378784e-05, 1.6416098367163034e-05, 3.6232046115937161e-06,-5.1627179098453111e-06,-7.0933928060705495e-06,-4.2835734953305428e-06,-5.9412354995961351e-07, 1.5107672145462014e-06, +-9.5664879032157500e-06,-5.3397665359742966e-06,-1.5439601063568837e-07, 2.6621525684880185e-06, 2.4190884598445537e-06, 7.3523664713868621e-07,-5.6942033236037489e-07,-8.5307257447264372e-07, + 4.2267213672414533e-06, 2.0480065611452544e-06,-3.8421906266121951e-07,-1.3459860245635685e-06,-8.2744473655060887e-07, 5.3756107866815547e-08, 4.4941355247757578e-07, 3.2529360042322187e-07, +-2.1787148060961989e-06,-8.9524548050558310e-07, 3.9583007238118019e-07, 7.0849514825126941e-07, 2.5909323000392038e-07,-1.8473268676568733e-07,-2.4944494861884914e-07,-8.5909278706878198e-08, + 3.6710719530048522e-02, 3.4015365673325297e-02, 2.9218348236364509e-02, 2.3289099800944780e-02, 1.7248913683749721e-02, 1.1891139216969200e-02, 7.6452035966233459e-03, 4.5939551673287102e-03, +-2.6953538567232246e-03,-2.2995603390661215e-03,-1.6387420864675192e-03,-9.1042845178872234e-04,-2.9201420723581895e-04, 1.1938714652977127e-04, 3.1668267053943690e-04, 3.5289003438790378e-04, + 3.9579351765710313e-04, 3.0861432918003395e-04, 1.7266087976783718e-04, 4.1245153453603315e-05,-4.6294467709295773e-05,-7.9384874979087012e-05,-7.1563199778363522e-05,-4.5367560632349993e-05, +-8.7179188477069184e-05,-6.1575903449108133e-05,-2.4468056023661605e-05, 6.2983848987293163e-06, 2.0522938700293349e-05, 1.9307462504845196e-05, 1.0495340216750294e-05, 1.7970832201049641e-06, + 2.5603285027961051e-05, 1.6204136607644002e-05, 3.6167255832559409e-06,-5.0573010801309474e-06,-6.9972884648329879e-06,-4.2541229773935140e-06,-6.1654348061137579e-07, 1.4769036296027081e-06, +-9.3991484203170481e-06,-5.2585578761530250e-06,-1.6945158827690774e-07, 2.6088757787646439e-06, 2.3861974417783924e-06, 7.3724086759049676e-07,-5.5164209301494214e-07,-8.4012960425293541e-07, + 4.1405905441640231e-06, 2.0125406771960706e-06,-3.6864609492551614e-07,-1.3179564927242372e-06,-8.1711883588827478e-07, 4.6498646118804058e-08, 4.3952962961282161e-07, 3.2185383315704041e-07, +-2.1280498669679525e-06,-8.7810789242507369e-07, 3.8288847016940211e-07, 6.9304026010571607e-07, 2.5719297585461610e-07,-1.7817286446102624e-07,-2.4476280585804415e-07,-8.6070796598752507e-08, + 3.6603221083405420e-02, 3.3923629496140327e-02, 2.9152936421002681e-02, 2.3252715725641561e-02, 1.7237196298053120e-02, 1.1895851400423541e-02, 7.6578137647691684e-03, 4.6080344939814326e-03, +-2.6795915872650927e-03,-2.2872648543367305e-03,-1.6318551871616141e-03,-9.0877366061006132e-04,-2.9384964197712651e-04, 1.1622715220196977e-04, 3.1382853218554514e-04, 3.5107678529348527e-04, + 3.9232673292836223e-04, 3.0616420047395714e-04, 1.7168504906088511e-04, 4.1493070696725903e-05,-4.5479122626250804e-05,-7.8615971908548141e-05,-7.1143885241990083e-05,-4.5294504707765791e-05, +-8.6162532454405090e-05,-6.0931923457246343e-05,-2.4323526453266700e-05, 6.0981659715101169e-06, 2.0244947431157790e-05, 1.9137887855530459e-05, 1.0470241826170904e-05, 1.8554906855251861e-06, + 2.5230608997158746e-05, 1.5995395003600180e-05, 3.6096566532742283e-06,-4.9539930622485372e-06,-6.9024915240808168e-06,-4.2245980270927890e-06,-6.3826013910482184e-07, 1.4435550100835870e-06, +-9.2352139935585661e-06,-5.1787542356977794e-06,-1.8389448918327831e-07, 2.5567078998913116e-06, 2.3537179258076956e-06, 7.3895998572615165e-07,-5.3425548335453400e-07,-8.2732434086689544e-07, + 4.0564597578607867e-06, 1.9777532450560719e-06,-3.5358246516104650e-07,-1.2905381519368906e-06,-8.0686997823036183e-07, 3.9499716902146025e-08, 4.2983160091519878e-07, 3.1840858555802457e-07, +-2.0787065128047148e-06,-8.6132163587650751e-07, 3.7036087202134092e-07, 6.7793425073623537e-07, 2.5524175342626939e-07,-1.7180519741674751e-07,-2.4015018550604128e-07,-8.6183650254142919e-08, + 3.6496350364917537e-02, 3.3832383185088508e-02, 2.9087799302489389e-02, 2.3216398038194572e-02, 1.7225406144287789e-02, 1.1900437797421559e-02, 7.6703101025624382e-03, 4.6220413497345802e-03, +-2.6639671798290299e-03,-2.2750668617897360e-03,-1.6250072055372412e-03,-9.0710911182038251e-04,-2.9565268430044658e-04, 1.1309777865240248e-04, 3.1099114610459461e-04, 3.4926650480766441e-04, + 3.8890031803929387e-04, 3.0373966482189884e-04, 1.7071499372911742e-04, 4.1733061275595453e-05,-4.4674821701721991e-05,-7.7853828186462946e-05,-7.0725591830128034e-05,-4.5219139027238495e-05, +-8.5160653217395028e-05,-6.0296229656055939e-05,-2.4179291035000610e-05, 5.9020379216137239e-06, 1.9970722165062776e-05, 1.8969495505610393e-05, 1.0444288575555179e-05, 1.9125744136213278e-06, + 2.4864423561339090e-05, 1.5789817893590522e-05, 3.6020219255464686e-06,-4.8527499851495408e-06,-6.8089855856731244e-06,-4.1950098439153977e-06,-6.5928904255428189e-07, 1.4107158438024666e-06, +-9.0746056677485677e-06,-5.1003287561131820e-06,-1.9774475919998371e-07, 2.5056247614276709e-06, 2.3216467900981072e-06, 7.4040419085255125e-07,-5.1725312335918898e-07,-8.1465696504997724e-07, + 3.9742769116353857e-06, 1.9436303607303371e-06,-3.3901188638868667e-07,-1.2637172067430311e-06,-7.9670012343439180e-07, 3.2751737359758054e-08, 4.2031669180268644e-07, 3.1495976243886597e-07, +-2.0306465509050485e-06,-8.4487931444433324e-07, 3.5823370663500291e-07, 6.6316918489965580e-07, 2.5324344119291027e-07,-1.6562450702847083e-07,-2.3560678709263951e-07,-8.6249904556629068e-08, + 3.6390101892243010e-02, 3.3741622860868903e-02, 2.9022935328734501e-02, 2.3180147122610351e-02, 1.7213544509355121e-02, 1.1904899627399559e-02, 7.6826932792681407e-03, 4.6359758551662413e-03, +-2.6484790313741069e-03,-2.2629653442982345e-03,-1.6181979108207296e-03,-9.0543511923549605e-04,-2.9742377297298922e-04, 1.0999875645357170e-04, 3.0817047077501616e-04, 3.4745928426711467e-04, + 3.8551368707587241e-04, 3.0134039329304590e-04, 1.6975070156013830e-04, 4.1965287184903824e-05,-4.3881415324135823e-05,-7.7098396473103425e-05,-7.0308353191075174e-05,-4.5141516134172843e-05, +-8.4173293782826512e-05,-5.9668696560996246e-05,-2.4035371931977644e-05, 5.7099190127921182e-06, 1.9700211587924510e-05, 1.8802287767000686e-05, 1.0417507669703604e-05, 1.9683546721725910e-06, + 2.4504597221830266e-05, 1.5587350678735648e-05, 3.5938447152544139e-06,-4.7535289333971019e-06,-6.7167543783498535e-06,-4.1653692253784903e-06,-6.7964541530266045e-07, 1.3783806129203951e-06, +-8.9172465430946177e-06,-5.0232551279559514e-06,-2.1102180379841555e-07, 2.4556027380205056e-06, 2.2899808382964245e-06, 7.4158337232710555e-07,-5.0062774329950690e-07,-8.0212758317177025e-07, + 3.8939914151386663e-06, 1.9101584110588018e-06,-3.2491860457166168e-07,-1.2374801749075840e-06,-7.8661108121669695e-07, 2.6247330553356476e-08, 4.1098213958875626e-07, 3.1150918777771302e-07, +-1.9838330040798644e-06,-8.2877367572702100e-07, 3.4649386405063210e-07, 6.4873729796733080e-07, 2.5120174267630212e-07,-1.5962574587616988e-07,-2.3113227052997704e-07,-8.6271559819423890e-08, + 3.6284470246695448e-02, 3.3651344684603880e-02, 2.8958342956868770e-02, 2.3143963350471530e-02, 1.7201612662725029e-02, 1.1909238099054590e-02, 7.6949639624637450e-03, 4.6498381344661447e-03, +-2.6331255620915678e-03,-2.2509592977928844e-03,-1.6114270727442988e-03,-9.0375199025632957e-04,-2.9916334081846532e-04, 1.0692981807337507e-04, 3.0536646335091282e-04, 3.4565521292291655e-04, + 3.8216626429868339e-04, 2.9896606193282943e-04, 1.6879215947334736e-04, 4.2189907183935596e-05,-4.3098755921361625e-05,-7.6349629344906860e-05,-6.9892201897015437e-05,-4.5061687765666678e-05, +-8.3200202365853963e-05,-5.9049200851036740e-05,-2.3891790389854212e-05, 5.5217292067209160e-06, 1.9433365033718075e-05, 1.8636266527734069e-05, 1.0389925710160977e-05, 2.0228515081798255e-06, + 2.4151001514817222e-05, 1.5387939802515947e-05, 3.5851475734720653e-06,-4.6562879259623937e-06,-6.6257817597676284e-06,-4.1356865795925942e-06,-6.9934419295611515e-07, 1.3465437967480874e-06, +-8.7630617123012752e-06,-4.9475075819288300e-06,-2.2374440804312225e-07, 2.4066187375832055e-06, 2.2587168040106790e-06, 7.4250712899488224e-07,-4.8437218399149692e-07,-7.8973623011600790e-07, + 3.8155541303724452e-06, 1.8773240724663237e-06,-3.1128738217848663e-07,-1.2118138815955843e-06,-7.7660451564320873e-07, 1.9979317923700713e-08, 4.0182519654205374e-07, 3.0805860654725236e-07, +-1.9382300579061215e-06,-8.1299761712783318e-07, 3.3512868220766563e-07, 6.3463099458011361e-07, 2.4912018933611617e-07,-1.5380399055676631e-07,-2.2672626166720985e-07,-8.6250551818353029e-08, + 3.6179450072323059e-02, 3.3561544857320741e-02, 2.8894020653223041e-02, 2.3107847081190850e-02, 1.7189611856671960e-02, 1.1913454410420391e-02, 7.7071228179871332e-03, 4.6636283153528918e-03, +-2.6179052150023183e-03,-2.2390477310643628e-03,-1.6046944615802326e-03,-9.0206002599699936e-04,-3.0087181479803229e-04, 1.0389069787802678e-04, 3.0257907970460476e-04, 3.4385437797265338e-04, + 3.7885748393795549e-04, 2.9661635167676842e-04, 1.6783935355628790e-04, 4.2407076863738413e-05,-4.2326697935063666e-05,-7.5607479310984318e-05,-6.9477169467932877e-05,-4.4979704861367086e-05, +-8.2241132261187070e-05,-5.8437621326591356e-05,-2.3748566767337493e-05, 5.3373901260628768e-06, 1.9170132479511666e-05, 1.8471433267082903e-05, 1.0361568706742450e-05, 2.0760847478208606e-06, + 2.3803510934595714e-05, 1.5191532727970675e-05, 3.5759523123386759e-06,-4.5609858952008495e-06,-6.5360517195487739e-06,-4.1059719363544469e-06,-7.1840002695449227e-07, 1.3151998745634941e-06, +-8.6119782066250390e-06,-4.8730608748796532e-06,-2.3593075827091514e-07, 2.3586501893181257e-06, 2.2278513570403695e-06, 7.4318477640255387e-07,-4.6847939582875583e-07,-7.7748287249267067e-07, + 3.7389173317453858e-06, 1.8451143004906969e-06,-2.9810347809007080e-07,-1.1867054531254498e-06,-7.6668195267533934e-07, 1.3940715436474573e-08, 3.9284313051849654e-07, 3.0460968754707709e-07, +-1.8938030312546889e-06,-7.9754417530228238e-07, 3.2412592641107972e-07, 6.2084284670093982e-07, 2.4700214875095864e-07,-1.4815444091517614e-07,-2.2238835317631293e-07,-8.6188754196867490e-08, + 3.6075036075003057e-02, 3.3472219619441128e-02, 2.8829966893305851e-02, 2.3071798662260098e-02, 1.7177543326507821e-02, 1.1917549748943339e-02, 7.7191705098861160e-03, 4.6773465289924347e-03, +-2.6028164555619293e-03,-2.2272296655695412e-03,-1.5979998481733398e-03,-9.0035952141026554e-04,-3.0254961609036540e-04, 1.0088113213446021e-04, 2.9980827446827400e-04, 3.4205686459212823e-04, + 3.7558678999238815e-04, 2.9429094826667179e-04, 1.6689226909936397e-04, 4.2616948712911168e-05,-4.1565097795052464e-05,-7.4871898829204135e-05,-6.9063286395069484e-05,-4.4895617572296453e-05, +-8.1295841725716363e-05,-5.7833838869633100e-05,-2.3605720564948531e-05, 5.1568250182148400e-06, 1.8910464540121793e-05, 1.8307789070506031e-05, 1.0332462088815639e-05, 2.1280739965021060e-06, + 2.3462002856083263e-05, 1.4998077917761959e-05, 3.5662800280241955e-06,-4.4675826659803292e-06,-6.4475483817451795e-06,-4.0762349583694139e-06,-7.3682728892710400e-07, 1.2843433282689204e-06, +-8.4639249383213042e-06,-4.7998902803847417e-06,-2.4759846050760894e-07, 2.3116750312791676e-06, 2.1973811088820247e-06, 7.4362535452500312e-07,-4.5294243817551447e-07,-7.6536741159115653e-07, + 3.6640346579365625e-06, 1.8135163272725677e-06,-2.8535263287878733e-07,-1.1621423092784146e-06,-7.5684478691072637e-07, 8.1247286892729493e-09, 3.8403322633027782e-07, 3.0116402575035909e-07, +-1.8505183306639947e-06,-7.8240652987957191e-07, 3.1347377822076570e-07, 6.0736558838137637e-07, 2.4485083205880497e-07,-1.4267241746854249e-07,-2.1811810691580467e-07,-8.6087979886924731e-08, + 3.5971223021552368e-02, 3.3383365250278442e-02, 2.8766180161780050e-02, 2.3035818429494231e-02, 1.7165408290811729e-02, 1.1921525291558580e-02, 7.7311077003696816e-03, 4.6909929099178691e-03, +-2.5878577712739256e-03,-2.2155041352409539e-03,-1.5913430039721337e-03,-8.9865076541036787e-04,-3.0419716017063628e-04, 9.7900859012031369e-05, 2.9705400107466959e-04, 3.4026275596670940e-04, + 3.7235363603297170e-04, 2.9198954216822295e-04, 1.6595089062953127e-04, 4.2819672181946969e-05,-4.0813813893954189e-05,-7.4142840321591712e-05,-6.8650582163965433e-05,-4.4809475269635805e-05, +-8.0364093864748742e-05,-5.7237736404211557e-05,-2.3463270453073906e-05, 4.9799587198783279e-06, 1.8654312462824113e-05, 1.8145334643995027e-05, 1.0302630716503822e-05, 2.1788386389286996e-06, + 2.3126357460537185e-05, 1.4807524813912708e-05, 3.5561511233162785e-06,-4.3760389352962239e-06,-6.3602560073253954e-06,-4.0464849518910730e-06,-7.5464007523681786e-07, 1.2539686451136505e-06, +-8.3188326466244775e-06,-4.7279715781894621e-06,-2.5876455892892911e-07, 2.2656716982458316e-06, 2.1673026183653672e-06, 7.4383763479581066e-07,-4.3775447826709628e-07,-7.5338968661384025e-07, + 3.5908610684350154e-06, 1.7825176566953505e-06,-2.7302105339935698e-07,-1.1381121558637344e-06,-7.4709428870288069e-07, 2.5247490427582965e-09, 3.7539278615001803e-07, 2.9772314534261209e-07, +-1.8083434117396649e-06,-7.6757800281658349e-07, 3.0316082255925667e-07, 5.9419211086236396e-07, 2.4266930223164228e-07,-1.3735336055314879e-07,-2.1391505448426155e-07,-8.5949983995978705e-08, + 3.5868005738852973e-02, 3.3294978067542121e-02, 2.8702658952437881e-02, 2.2999906707270260e-02, 1.7153207951656532e-02, 1.1925382204766039e-02, 7.7429350497607982e-03, 4.7045675959503817e-03, +-2.5730276713108527e-03,-2.2038701862992123e-03,-1.5847237010588773e-03,-8.9693404099315185e-04,-3.0581485688861709e-04, 9.4949618583728065e-05, 2.9431621179680945e-04, 3.3847213332239157e-04, + 3.6915748501164039e-04, 2.8971182848967682e-04, 1.6501520194330118e-04, 4.3015393745851876e-05,-4.0072706561823635e-05,-7.3420256189385229e-05,-6.8239085276877975e-05,-4.4721326553636299e-05, +-7.9445656521963566e-05,-5.6649198856929247e-05,-2.3321234299919312e-05, 4.8067176230922649e-06, 1.8401628121432669e-05, 1.7984070328441044e-05, 1.0272098891357559e-05, 2.2283978395368063e-06, + 2.2796457665034319e-05, 1.4619823816328519e-05, 3.5455853310029704e-06,-4.2863162536675877e-06,-6.2741589953688604e-06,-4.0167308779584357e-06,-7.7185221078802719e-07, 1.2240703197906712e-06, +-8.1766338487057993e-06,-4.6572810406484335e-06,-2.6944555667211471e-07, 2.2206191124580833e-06, 2.1376123948730237e-06, 7.4383012872457528e-07,-4.2290879145935108e-07,-7.4154947680955081e-07, + 3.5193528080573658e-06, 1.7521060532984241e-06,-2.6109539211240883e-07,-1.1146029825329761e-06,-7.3743160671133383e-07,-2.8656536692105884e-09, 3.6691913258862774e-07, 2.9428850071033695e-07, +-1.7672467547589417e-06,-7.5305204535424150e-07, 2.9317602391199292e-07, 5.8131546779261017e-07, 2.4046047354711641e-07,-1.3219282251487148e-07,-2.0977870313038965e-07,-8.5776462726359070e-08, + 3.5765379112992879e-02, 3.3207054426850298e-02, 2.8639401768175209e-02, 2.2964063808761870e-02, 1.7140943494832351e-02, 1.1929121644706711e-02, 7.7546532164508176e-03, 4.7180707281215496e-03, +-2.5583246861425810e-03,-2.1923268770691999e-03,-1.5781417121779676e-03,-8.9520962535400914e-04,-3.0740311054557046e-04, 9.2027152826620884e-05, 2.9159485778696044e-04, 3.3668507595642147e-04, + 3.6599780907338106e-04, 2.8745750690302788e-04, 1.6408518613788203e-04, 4.3204256965982809e-05,-3.9341638041421971e-05,-7.2704098827174485e-05,-6.7828823275062328e-05,-4.4631219262344121e-05, +-7.8540302170353182e-05,-5.6068113119979522e-05,-2.3179629197081172e-05, 4.6370296408683627e-06, 1.8152364011206277e-05, 1.7823996112857775e-05, 1.0240890367411889e-05, 2.2767705426807579e-06, + 2.2472189050373661e-05, 1.4434926265141015e-05, 3.5346017336103781e-06,-4.1983770046424223e-06,-6.1892418858993527e-06,-3.9869813619029843e-06,-7.8847725388020076e-07, 1.1946428570946732e-06, +-8.0372627852326453e-06,-4.5877954259428774e-06,-2.7965743033942516e-07, 2.1764966699615259e-06, 2.1083069050010628e-06, 7.4361109346862380e-07,-4.0839875933173752e-07,-7.2984650485069627e-07, + 3.4494673592897679e-06, 1.7222695439723792e-06,-2.4956273806081045e-07,-1.0916030515349581e-06,-7.2785777753559364e-07,-8.0527326490884744e-09, 3.5860960755149670e-07, 2.9086148003457479e-07, +-1.7271978153173887e-06,-7.3882224958299684e-07, 2.8350872472878737e-07, 5.6872886234570012e-07, 2.3822712538167425e-07,-1.2718647120263770e-07,-2.0570853337092034e-07,-8.5569057608091582e-08, + 3.5663338088421391e-02, 3.3119590721248988e-02, 2.8576407120964400e-02, 2.2928290036168950e-02, 1.7128616090066918e-02, 1.1932744757238699e-02, 7.7662628568553856e-03, 4.7315024505967564e-03, +-2.5437473671724026e-03,-2.1808732777989261e-03,-1.5715968107634336e-03,-8.9347779000311170e-04,-3.0896231997033091e-04, 8.9133205621929126e-05, 2.8888988911457501e-04, 3.3490166126761388e-04, + 3.6287408937347651e-04, 2.8522628156583637e-04, 1.6316082564199605e-04, 4.3386402550022471e-05,-3.8620472463313596e-05,-7.1994320636856803e-05,-6.7419822760354109e-05,-4.4539200480422643e-05, +-7.7647807807640140e-05,-5.5494368013346855e-05,-2.3038471485648014e-05, 4.4708241746537793e-06, 1.7906473242847580e-05, 1.7665111647884745e-05, 1.0209028361577237e-05, 2.3239754731489977e-06, + 2.2153439794293285e-05, 1.4252784420368137e-05, 3.5232187851015367e-06,-4.1121843868757398e-06,-6.1054893608432634e-06,-3.9572447039118979e-06,-8.0452850008866246e-07, 1.1656807739849390e-06, +-7.9006553739251482e-06,-4.5194919655360178e-06,-2.8941564907972533e-07, 2.1332842314373909e-06, 2.0793825756141022e-06, 7.4318853984387136e-07,-3.9421786957109279e-07,-7.1828043912423215e-07, + 3.3811634083891305e-06, 1.6929964081744852e-06,-2.3841059827224743e-07,-1.0691008949777862e-06,-7.1837372839533332e-07,-1.3042570694420978e-08, 3.5046157458598536e-07, 2.8744340679240118e-07, +-1.6881670002146453e-06,-7.2488233755960674e-07, 2.7414862455536990e-07, 5.5642565092091832e-07, 2.3597190246386116e-07,-1.2233008334746577e-07,-2.0170400355673287e-07,-8.5329355567986890e-08, + 3.5561877667119053e-02, 3.3032583380738820e-02, 2.8513673531826260e-02, 2.2892585680942851e-02, 1.7116226891243039e-02, 1.1936252678013451e-02, 7.7777646253719126e-03, 4.7448629105998731e-03, +-2.5292942863802334e-03,-2.1695084704816299e-03,-1.5650887709650202e-03,-8.9173880087843257e-04,-3.1049287859430050e-04, 8.6267522754429268e-05, 2.8620125480345853e-04, 3.3312196478633462e-04, + 3.5978581589860351e-04, 2.8301786104487211e-04, 1.6224210224530873e-04, 4.3561968410966555e-05,-3.7909075821431035e-05,-7.1290874040861230e-05,-6.7012109416464849e-05,-4.4445316547951695e-05, +-7.6767954853731394e-05,-5.4927854248465122e-05,-2.2897776780779965e-05, 4.3080320819194508e-06, 1.7663909536937706e-05, 1.7507416258502663e-05, 1.0176535564093364e-05, 2.3700311367316404e-06, + 2.1840100605266272e-05, 1.4073351443368018e-05, 3.5114543305455844e-06,-4.0277023954321756e-06,-6.0228862458053593e-06,-3.9275288885709644e-06,-8.2001898654432861e-07, 1.1371786016477558e-06, +-7.7667491618982543e-06,-4.4523483545822043e-06,-2.9873519045768172e-07, 2.0909621109200776e-06, 2.0508357986294119e-06, 7.4257023872616741e-07,-3.8035971498578665e-07,-7.0685089618825003e-07, + 3.3144008073160501e-06, 1.6642751736443320e-06,-2.2762688482315367e-07,-1.0470853076137059e-06,-7.0898028337261769e-07,-1.7841083886863842e-08, 3.4247241952726780e-07, 2.8403554177764223e-07, +-1.6501256336717181e-06,-7.1122616108775112e-07, 2.6508576971266298e-07, 5.4439933790514434e-07, 2.3369732227382405e-07,-1.1761954335854359e-07,-1.9776455113324377e-07,-8.5058890249735904e-08, + 3.5460992907781361e-02, 3.2946028871808641e-02, 2.8451199530800782e-02, 2.2856951024006939e-02, 1.7103777036612939e-02, 1.1939646532551860e-02, 7.7891591743384364e-03, 4.7581522583391173e-03, +-2.5149640359727193e-03,-2.1582315486810000e-03,-1.5586173676731610e-03,-8.8999291845635528e-04,-3.1199517452549022e-04, 8.3429851911349939e-05, 2.8352890286810137e-04, 3.3134606020407496e-04, + 3.5673248729171936e-04, 2.8083195824131968e-04, 1.6132899712694793e-04, 4.3731089724720470e-05,-3.7207315948806544e-05,-7.0593711494881112e-05,-6.6605708029899484e-05,-4.4349613069119293e-05, +-7.5900529050399682e-05,-5.4368464392781288e-05,-2.2757559995587756e-05, 4.1485856446534745e-06, 1.7424627218192804e-05, 1.7350908956387508e-05, 1.0143434148890125e-05, 2.4149558207261639e-06, + 2.1532064657618394e-05, 1.3896581378922892e-05, 3.4993256252673251e-06,-3.9448958037951965e-06,-5.9414175114648653e-06,-3.8978415941779837e-06,-8.3496149632026287e-07, 1.1091308877159284e-06, +-7.6354832786955018e-06,-4.3863427428718782e-06,-3.0763055597528539e-07, 2.0495110652155557e-06, 2.0226629352347874e-06, 7.4176372733744698e-07,-3.6681799222253765e-07,-6.9555744360701108e-07, + 3.2491405358236236e-06, 1.6360946126565207e-06,-2.1719990204413261e-07,-1.0255453404993709e-06,-6.9967816884040306e-07,-2.2454025261200485e-08, 3.3463955058989190e-07, 2.8063908590333832e-07, +-1.6130459231671030e-06,-6.9784770207806779e-07, 2.5631054280711843e-07, 5.3264357171451239e-07, 2.3140578125112682e-07,-1.1305084207176898e-07,-1.9388959291634073e-07,-8.4759144839214665e-08, + 3.5360678925016903e-02, 3.2859923696976302e-02, 2.8388983656917270e-02, 2.2821386335973009e-02, 1.7091267649009839e-02, 1.1942927436320350e-02, 7.8004471539939993e-03, 4.7713706469340710e-03, +-2.5007552280406006e-03,-2.1470416173591592e-03,-1.5521823765429418e-03,-8.8824039785998649e-04,-3.1346959062163865e-04, 8.0619942680848836e-05, 2.8087278034912445e-04, 3.2957401940274331e-04, + 3.5371361068144147e-04, 2.7866829031699780e-04, 1.6042149088328628e-04, 4.3893898986360758e-05,-3.6515062493439282e-05,-6.9902785500253081e-05,-6.6200642510332437e-05,-4.4252134920997710e-05, +-7.5045320364443670e-05,-5.3816092834326477e-05,-2.2617835364670697e-05, 3.9924185387966228e-06, 1.7188581209459015e-05, 1.7195588452144814e-05, 1.0109745783524557e-05, 2.4587675947311470e-06, + 2.1229227530117193e-05, 1.3722429136398124e-05, 3.4868493542180817e-06,-3.8637301468217709e-06,-5.8610682743578405e-06,-3.8681902022864135e-06,-8.4936856229479368e-07, 1.0815321979902408e-06, +-7.5067983937190694e-06,-4.3214537235470062e-06,-3.1611578775189380e-07, 2.0089122847107543e-06, 1.9948603189446014e-06, 7.4077631632659878e-07,-3.5358650138111373e-07,-6.8439960193114173e-07, + 3.1853446701720632e-06, 1.6084437338060538e-06,-2.0711833084045626e-07,-1.0044702972075080e-06,-6.9046801666948914e-07,-2.6886990286932872e-08, 3.2696040018431382e-07, 2.7725518145430869e-07, +-1.5769009363660094e-06,-6.8474106430900352e-07, 2.4781364603837307e-07, 5.2115214589331877e-07, 2.2909955664007843e-07,-1.0862007173502737e-07,-1.9007852876442431e-07,-8.4431551964638638e-08, + 3.5260930888558438e-02, 3.2774264394335867e-02, 2.8327024458162979e-02, 2.2785891877353161e-02, 1.7078699836056348e-02, 1.1946096494806810e-02, 7.8116292124403401e-03, 4.7845182323438791e-03, +-2.4866664942225711e-03,-2.1359377927077372e-03,-1.5457835740167354e-03,-8.8648148896540088e-04,-3.1491650456227233e-04, 7.7837546549896358e-05, 2.7823283334796854e-04, 3.2780591248355445e-04, + 3.5072870151483387e-04, 2.7652657862239005e-04, 1.5951956355440009e-04, 4.4050526065501612e-05,-3.5832186894630108e-05,-6.9218048615673648e-05,-6.5796935910717813e-05,-4.4152926262209721e-05, +-7.4202122892443826e-05,-5.3270635747845383e-05,-2.2478616466143091e-05, 3.8394658037383561e-06, 1.6955727026145466e-05, 1.7041453166813883e-05, 1.0075491639217050e-05, 2.5014843113582111e-06, + 2.0931487144598443e-05, 1.3550850472935380e-05, 3.4740416492479518e-06,-3.7841717028594142e-06,-5.7818237984762608e-06,-3.8385818062657348e-06,-8.6325247149468240e-07, 1.0543771183796535e-06, +-7.3806366716630632e-06,-4.2576603252372657e-06,-3.2420448178944811e-07, 1.9691473819792448e-06, 1.9674242603911131e-06, 7.3961509523397157e-07,-3.4065914457738170e-07,-6.7337684722394922e-07, + 3.1229763464257975e-06, 1.5813117801566125e-06,-1.9737121911791154e-07,-9.8384972537980096e-07,-6.8135037104813140e-07,-3.1145419371128349e-08, 3.1943242464170364e-07, 2.7388491454483547e-07, +-1.5416645662691849e-06,-6.7190047742662118e-07, 2.3958609595267602e-07, 5.0991899087319244e-07, 2.2678081567314853e-07,-1.0432342675527483e-07,-1.8633074113500532e-07,-8.4077496113779148e-08, + 3.5161744022487861e-02, 3.2689047537112187e-02, 2.8265320491451560e-02, 2.2750467898767741e-02, 1.7066074690370379e-02, 1.1949154803596609e-02, 7.8227059956050768e-03, 4.7975951732966053e-03, +-2.4726964853756736e-03,-2.1249192019818612e-03,-1.5394207373460415e-03,-8.8471643650542622e-04,-3.1633628891993698e-04, 7.5082416901784549e-05, 2.7560900706076127e-04, 3.2604180779561252e-04, + 3.4777728339381239e-04, 2.7440654862594246e-04, 1.5862319465004141e-04, 4.4201098260015798e-05,-3.5158562359261024e-05,-6.8539453468613383e-05,-6.5394610446915515e-05,-4.4052030541604989e-05, +-7.3370734767869931e-05,-5.2731991061310743e-05,-2.2339916243654939e-05, 3.6896638132813593e-06, 1.6726020770038384e-05, 1.6888501243359012e-05, 1.0040692400537424e-05, 2.5431236070923546e-06, + 2.0638743706559188e-05, 1.3381801976250809e-05, 3.4609181070994577e-06,-3.7061874776829715e-06,-5.7036694956027733e-06,-3.8090232203211519e-06,-8.7662526901430414e-07, 1.0276602565950205e-06, +-7.2569417303083788e-06,-4.1949420026647751e-06,-3.3190980320891712e-07, 1.9301983832382974e-06, 1.9403510497874796e-06, 7.3828693922118014e-07,-3.2802992527506283e-07,-6.6248861317823362e-07, + 3.0619997276436036e-06, 1.5546882237560378e-06,-1.8794796791401459e-07,-9.6367341330641649e-07,-6.7232569100313616e-07,-3.5234603104178223e-08, 3.1205310551194325e-07, 2.7052931680675985e-07, +-1.5073115038875659e-06,-6.5932029315084620e-07, 2.3161920943257988e-07, 4.9893817505576102e-07, 2.2445161669796321e-07,-1.0015719889073280e-07,-1.8264559789484714e-07,-8.3698314484867163e-08, + 3.5063113604473672e-02, 3.2604269733221038e-02, 2.8203870322589860e-02, 2.2715114641148851e-02, 1.7053393289767849e-02, 1.1952103448448249e-02, 7.8336781472060791e-03, 4.8106016312197018e-03, +-2.4588438712526348e-03,-2.1139849833365747e-03,-1.5330936446121372e-03,-8.8294548017157221e-04,-3.1772931123044343e-04, 7.2354309013179796e-05, 2.7300124581141477e-04, 3.2428177196410553e-04, + 3.4485888791606009e-04, 2.7230792984427174e-04, 1.5773236317456404e-04, 4.4345740348974397e-05,-3.4494063838488734e-05,-6.7866952766246029e-05,-6.4993687516967300e-05,-4.3949490506871823e-05, +-7.2550958071788355e-05,-5.2200058422542352e-05,-2.2201747027470711e-05, 3.5429502467023368e-06, 1.6499419123451781e-05, 1.6736730557678084e-05, 1.0005368274999685e-05, 2.5837029031865145e-06, + 2.0350899649246003e-05, 1.3215241046965762e-05, 3.4474938064751713e-06,-3.6297451879316234e-06,-5.6265909262073638e-06,-3.7795209879274469e-06,-8.8949876204782949e-07, 1.0013762438028142e-06, +-7.1356586022802414e-06,-4.1332786262336465e-06,-3.3924450044784001e-07, 1.8920477185882031e-06, 1.9136369605002831e-06, 7.3679851489801140e-07,-3.1569294725563088e-07,-6.5173429324528913e-07, + 3.0023799760465949e-06, 1.5285627585083395e-06,-1.7883831889269688e-07,-9.4393138420854417e-07,-6.6339435507329761e-07,-3.9159685900954175e-08, 3.0481995007648049e-07, 2.6718936721861235e-07, +-1.4738172175382554e-06,-6.4699497908793907e-07, 2.2390459177090620e-07, 4.8820390178407543e-07, 2.2211391436897012e-07,-9.6117775454282687e-08,-1.7902245352843731e-07,-8.3295298262359987e-08, + 3.4965034965021707e-02, 3.2519927624836922e-02, 2.8142672526244718e-02, 2.2679832335940169e-02, 1.7040656697462811e-02, 1.1954943505369169e-02, 7.8445463087173060e-03, 4.8235377701716167e-03, +-2.4451073401847850e-03,-2.1031342856665421e-03,-1.5268020747458456e-03,-8.8116885471368339e-04,-3.1909593406208650e-04, 6.9652980050637775e-05, 2.7040949308395137e-04, 3.2252586991820924e-04, + 3.4197305451824297e-04, 2.7023045577438350e-04, 1.5684704765101887e-04, 4.4484574644271637e-05,-3.3838568004751751e-05,-6.7200499305794525e-05,-6.4594187720005893e-05,-4.3845348213152903e-05, +-7.1742598743859470e-05,-5.1674739167623275e-05,-2.2064120554702476e-05, 3.3992640605925913e-06, 1.6275879343431071e-05, 1.6586138729085972e-05, 9.9695390025568605e-06, 2.6232394066469372e-06, + 2.0067859576236195e-05, 1.3051125883201806e-05, 3.4337833240087178e-06,-3.5548132449330403e-06,-5.5505738003421569e-06,-3.7500813897681073e-06,-9.0188452401498483e-07, 9.7551973620587034e-07, +-7.0167336930343889e-06,-4.0726504751172624e-06,-3.4622091768781884e-07, 1.8546782121698298e-06, 1.8872782527229685e-06, 7.3515628560440787e-07,-3.0364241330559631e-07,-6.4111324278249503e-07, + 2.9440832179171265e-06, 1.5029252989805869e-06,-1.7003234505718847e-07,-9.2461388962291310e-07,-6.5455666642281744e-07,-4.2925668897020157e-08, 2.9773049131705649e-07, 2.6386599413877197e-07, +-1.4411579189365396e-06,-6.3491912304633701e-07, 2.1643413087567546e-07, 4.7771050378536522e-07, 2.1976956609206711e-07,-9.2201638758593342e-08,-1.7546064934865013e-07,-8.2869694450133612e-08, + 3.4867503486738137e-02, 3.2436017887966323e-02, 2.8081725685908370e-02, 2.2644621205292561e-02, 1.7027865962264861e-02, 1.1957676040691180e-02, 7.8553111193357759e-03, 4.8364037567745028e-03, +-2.4314855987718140e-03,-2.0923662684480329e-03,-1.5205458075463023e-03,-8.7938679003762496e-04,-3.2043651508417703e-04, 6.6978189066906751e-05, 2.6783369155411636e-04, 3.2077416491859377e-04, + 3.3911933032378105e-04, 2.6817386382656022e-04, 1.5596722614451405e-04, 4.4617721041108598e-05,-3.3191953228708059e-05,-6.6540045984741944e-05,-6.4196130874762775e-05,-4.3739645031568247e-05, +-7.0945466497220836e-05,-5.1155936288957166e-05,-2.1927047989224799e-05, 3.2585454615642373e-06, 1.6055359255455244e-05, 1.6436723130913137e-05, 9.9332238648066712e-06, 2.6617501112501191e-06, + 1.9789530208263670e-05, 1.2889415463733693e-05, 3.4198007505804728e-06,-3.4813607395432982e-06,-5.4756039775860613e-06,-3.7207104521752986e-06,-9.1379389832746562e-07, 9.5008541650358825e-07, +-6.9001147445299770e-06,-4.0130382272588222e-06,-3.5285100881297395e-07, 1.8180730740286089e-06, 1.8612711754694295e-06, 7.3336651782119889e-07,-2.9187262455920175e-07,-6.3062478092735289e-07, + 2.8870765172711548e-06, 1.4777659732068473e-06,-1.6152043767338969e-07,-9.0571140610878089e-07,-6.4581285488938170e-07,-4.6537415094659199e-08, 2.9078228920810361e-07, 2.6056007672541406e-07, +-1.4093105440643075e-06,-6.2308742589872221e-07, 2.0919998329086019e-07, 4.6745244431196726e-07, 2.1742033267733512e-07,-8.8405361196094178e-08,-1.7195951639964645e-07,-8.2422706346473813e-08, + 3.4770514603604891e-02, 3.2352537232027592e-02, 2.8021028393863390e-02, 2.2609481462255911e-02, 1.7015022118773600e-02, 1.1960302111145869e-02, 7.8659732159499125e-03, 4.8491997601480324e-03, +-2.4179773715772984e-03,-2.0816801015837022e-03,-1.5143246236988053e-03,-8.7759951130097699e-04,-3.2175140713438036e-04, 6.4329696996628938e-05, 2.6527378312019879e-04, 3.1902671858461632e-04, + 3.3629726999359622e-04, 2.6613789525873266e-04, 1.5509287628473825e-04, 4.4745297067557408e-05,-3.2554099556815551e-05,-6.5885545810329750e-05,-6.3799536037730496e-05,-4.3632421657720070e-05, +-7.0159374734863559e-05,-5.0643554404375093e-05,-2.1790539940710733e-05, 3.1207358791500932e-06, 1.5837817247768978e-05, 1.6288480900287864e-05, 9.8964416941905694e-06, 2.6992517985992601e-06, + 1.9515820330488466e-05, 1.2730069532280089e-05, 3.4055597064507513e-06,-3.4093574264438489e-06,-5.4016674679867901e-06,-3.6914139544707457e-06,-9.2523800250426121e-07, 9.2506799540402867e-07, +-6.7857507982083777e-06,-3.9544229511500990e-06,-3.5914634940502445e-07, 1.7822158903588626e-06, 1.8356119704168874e-06, 7.3143528583806233e-07,-2.8037797895699079e-07,-6.2026819278688730e-07, + 2.8313278470582786e-06, 1.4530751188106235e-06,-1.5329329683969776e-07,-8.8721462843708019e-07,-6.3716308256958067e-07,-4.9999651443290301e-08, 2.8397293015084954e-07, 2.5727244724003454e-07, +-1.3782527282476551e-06,-6.1149470101766258e-07, 2.0219456730169909e-07, 4.5742431118030652e-07, 2.1506788579571708e-07,-8.4725606006055717e-08,-1.6851837461081108e-07,-8.1955496079782557e-08, + 3.4674063800267031e-02, 3.2269482399437027e-02, 2.7960579251146991e-02, 2.2574413310967208e-02, 1.7002126187570660e-02, 1.1962822763939739e-02, 7.8765332331090041e-03, 4.8619259518442506e-03, +-2.4045814008300040e-03,-2.0710749652500249e-03,-1.5081383047918576e-03,-8.7580723900669219e-04,-3.2304095828537827e-04, 6.1707266651833681e-05, 2.6272970893316365e-04, 3.1728359092119979e-04, + 3.3350643557997911e-04, 2.6412229511211865e-04, 1.5422397528783226e-04, 4.4867417932822873e-05,-3.1924888688799539e-05,-6.5236951908916366e-05,-6.3404421520902064e-05,-4.3523718120211906e-05, +-6.9384140467860459e-05,-5.0137499726904129e-05,-2.1654606483291071e-05, 2.9857779397912118e-06, 1.5623212265100607e-05, 1.6141408948060901e-05, 9.8592108828265566e-06, 2.7357610393889177e-06, + 1.9246640740956330e-05, 1.2573048582089933e-05, 3.3910733564041439e-06,-3.3387737097156085e-06,-5.3287504318262349e-06,-3.6621974369279583e-06,-9.3622773174287621e-07, 9.0046221270377070e-07, +-6.6735921588663975e-06,-3.8967860975017268e-06,-3.6511814939753563e-07, 1.7470906157023933e-06, 1.8102968736593210e-06, 7.2936847787446459e-07,-2.6915297076799733e-07,-6.1004273078275954e-07, + 2.7768060613646707e-06, 1.4288432782812372e-06,-1.4534192018171920e-07,-8.6911446621029661e-07,-6.2860744563911030e-07,-5.3316973902771773e-08, 2.7730002859626437e-07, 2.5400389166592370e-07, +-1.3479627830834334e-06,-6.0013587128082655e-07, 1.9541055176803613e-07, 4.4762081719578249e-07, 2.1271380848854970e-07,-8.1159122153406916e-08,-1.6513653642358476e-07,-8.1469183740114839e-08, + 3.4578146611332100e-02, 3.2186850165200960e-02, 2.7900376867514481e-02, 2.2539416946834940e-02, 1.6989179175409042e-02, 1.1965239036829309e-02, 7.8869918029939364e-03, 4.8745825057835840e-03, +-2.3912964461311401e-03,-2.0605500497472735e-03,-1.5019866333331328e-03,-8.7401018909499459e-04,-3.2430551191056298e-04, 5.9110662716946663e-05, 2.6020140942613519e-04, 3.1554484034529776e-04, + 3.3074639638386652e-04, 2.6212681214813835e-04, 1.5336049997722668e-04, 4.4984196574758941e-05,-3.1304203955575313e-05,-6.4594217534765197e-05,-6.3010804909307183e-05,-4.3413573788961398e-05, +-6.8619584235728170e-05,-4.9637680035365068e-05,-2.1519257173115982e-05, 2.8536154408665920e-06, 1.5411503802820844e-05, 1.5995503968063413e-05, 9.8215493915132596e-06, 2.7712941944013682e-06, + 1.8981904200363102e-05, 1.2418313841378357e-05, 3.3763544234899085e-06,-3.2695806277329581e-06,-5.2568391801782399e-06,-3.6330662077739780e-06,-9.4677376311402397e-07, 8.7626283892465299e-07, +-6.5635903589847454e-06,-3.8401094922640515e-06,-3.7077726357834024e-07, 1.7126815634124964e-06, 1.7853221190891595e-06, 7.2717180053985580e-07,-2.5819218874530679e-07,-5.9994761716669175e-07, + 2.7234808667206939e-06, 1.4050611968835762e-06,-1.3765759527978281e-07,-8.5140203689512260e-07,-6.2014597949479666e-07,-5.6493849360405145e-08, 2.7076122590471395e-07, 2.5075515270526096e-07, +-1.3184196698371176e-06,-5.8900597149653352e-07, 1.8884085189613985e-07, 4.3803679349247479e-07, 2.1035960234118378e-07,-7.7702745371022076e-08,-1.6181330492206811e-07,-8.0964851256802549e-08, + 3.4482758620680877e-02, 3.2104637336513538e-02, 2.7840419861402229e-02, 2.2504492556719671e-02, 1.6976182075399630e-02, 1.1967551958195760e-02, 7.8973495553890400e-03, 4.8871695981917958e-03, +-2.3781212841673394e-03,-2.0501045553517616e-03,-1.4958693927650119e-03,-8.7220857303321395e-04,-3.2554540674879784e-04, 5.6539651743547567e-05, 2.5768882434304766e-04, 3.1381052371211651e-04, + 3.2801672881557775e-04, 2.6015119878597414e-04, 1.5250242680437884e-04, 4.5095743706038798e-05,-3.0691930297326324e-05,-6.3957296078611509e-05,-6.2618703077962971e-05,-4.3302027383676056e-05, +-6.7865530029603610e-05,-4.9144004644528999e-05,-2.1384501066365886e-05, 2.7241933259370831e-06, 1.5202651900781615e-05, 1.5850762446392472e-05, 9.7834747581628613e-06, 2.8058674159608138e-06, + 1.8721525385074610e-05, 1.2265827257083872e-05, 3.3614152041165350e-06,-3.2017498396472545e-06,-5.1859201745915359e-06,-3.6040253506756328e-06,-9.5688655892589748e-07, 8.5246467610930290e-07, +-6.4556981279907384e-06,-3.7843753259813130e-06,-3.7613420507133836e-07, 1.6789733987877491e-06, 1.7606839399285152e-06, 7.2485078462899081e-07,-2.4749031578861635e-07,-5.8998204501388144e-07, + 2.6713228020094254e-06, 1.3817198132701747e-06,-1.3023188604853740e-07,-8.3406866385917117e-07,-6.1177866011785394e-07,-5.9534620546183819e-08, 2.6435419214836827e-07, 2.4752692994186022e-07, +-1.2896029887392507e-06,-5.7810013663272460e-07, 1.8247861304110468e-07, 4.2866719262816717e-07, 2.0800668698812017e-07,-7.4353392881003465e-08,-1.5854797781637456e-07,-8.0443540869878486e-08, + 3.4387895460789741e-02, 3.2022840752360927e-02, 2.7780706859889960e-02, 2.2469640319111289e-02, 1.6963135867195389e-02, 1.1969762547119640e-02, 7.9076071176550876e-03, 4.8996874075380552e-03, +-2.3650547084288140e-03,-2.0397376921710425e-03,-1.4897863674788146e-03,-8.7040259790394092e-04,-3.2676097696835230e-04, 5.3994002144674980e-05, 2.5519189276677554e-04, 3.1208069634093647e-04, + 3.2531701625777149e-04, 2.5819521104222809e-04, 1.5164973186803299e-04, 4.5202167859676292e-05,-3.0087954241913119e-05,-6.3326141075684822e-05,-6.2228132208728992e-05,-4.3189116982099798e-05, +-6.7121805215543395e-05,-4.8656384377615623e-05,-2.1250346735335974e-05, 2.5974576598160662e-06, 1.4996617137499903e-05, 1.5707180670053961e-05, 9.7450041065130311e-06, 2.8394966490759684e-06, + 1.8465420837927772e-05, 1.2115551482210513e-05, 3.3462675801793662e-06,-3.1352536106743970e-06,-5.1159800275516729e-06,-3.5750797312741703e-06,-9.6657637083183530e-07, 8.2906255923398148e-07, +-6.3498693557172597e-06,-3.7295661494483445e-06,-3.8119915369979877e-07, 1.6459511292931694e-06, 1.7363785720996240e-06, 7.2241078920604513e-07,-2.3704212709179174e-07,-5.8014518046272600e-07, + 2.6203032062689153e-06, 1.3588102617427254e-06,-1.2305662850363747e-07,-8.1710586825044084e-07,-6.0350540952152375e-07,-6.2443507574466094e-08, 2.5807662493772935e-07, 2.4431988247209233e-07, +-1.2614929445261899e-06,-5.6741361198884531e-07, 1.7631721225046317e-07, 4.1950707916515408e-07, 2.0565640831329112e-07,-7.1108064969283225e-08,-1.5533984556404862e-07,-7.9906258450037192e-08, + 3.4293552812063893e-02, 3.1941457283130630e-02, 2.7721236498662531e-02, 2.2434860404302589e-02, 1.6950041517172949e-02, 1.1971871813455100e-02, 7.9177651147033980e-03, 4.9121361144740094e-03, +-2.3520955289332637e-03,-2.0294486800009823e-03,-1.4837373428287226e-03,-8.6859246649124630e-04,-3.2795255223007705e-04, 5.1473484189002924e-05, 2.5271055314649883e-04, 3.1035541204063252e-04, + 3.2264684893228146e-04, 2.5625860847074610e-04, 1.5080239093358174e-04, 4.5303575433178330e-05,-2.9492163883252992e-05,-6.2700706213674948e-05,-6.1839107806618425e-05,-4.3074880028312471e-05, +-6.6388240461535356e-05,-4.8174731537597808e-05,-2.1116802285376296e-05, 2.4733556050692777e-06, 1.4793360623735056e-05, 1.5564754735858990e-05, 9.7061541542924990e-06, 2.8721976328683385e-06, + 1.8213508923937548e-05, 1.1967449860168494e-05, 3.3309230333787378e-06,-3.0700647995248000e-06,-5.0470055015603831e-06,-3.5462340045471470e-06,-9.7585324312078198e-07, 8.0605135704881900e-07, +-6.2460590637690539e-06,-3.6756648632701530e-06,-3.8598196902622024e-07, 1.6136000986526116e-06, 1.7124022548009457e-06, 7.1985700759018258e-07,-2.2684248979776799e-07,-5.7043616386392095e-07, + 2.5703942004989008e-06, 1.3363238626629885e-06,-1.1612391709027431e-07,-8.0050536834902288e-07,-5.9532609562746141e-07,-6.5224613479444420e-08, 2.5192625122035638e-07, 2.4113462941373764e-07, +-1.2340703378359123e-06,-5.5694174055687124e-07, 1.7035024114605602e-07, 4.1055163495178454e-07, 2.0331003553931547e-07,-6.7963838412843627e-08,-1.5218819544962585e-07,-7.9353972612047176e-08, + 3.4199726402181947e-02, 3.1860483830226972e-02, 2.7662007421971221e-02, 2.2400152974559651e-02, 1.6936899978611600e-02, 1.1973880757904081e-02, 7.9278241689710403e-03, 4.9245159017738786e-03, +-2.3392425719549748e-03,-2.0192367481855107e-03,-1.4777221051446403e-03,-8.6677837736535632e-04,-3.2912045774948634e-04, 4.8977869994486570e-05, 2.5024474332446985e-04, 3.0863472313484748e-04, + 3.2000582376946404e-04, 2.5434115410409228e-04, 1.4996037945122216e-04, 4.5400070732232699e-05,-2.8904448860401707e-05,-6.2080945339996796e-05,-6.1451644715942788e-05,-4.2959353340915141e-05, +-6.5664669665371767e-05,-4.7698959880122831e-05,-2.0983875370245608e-05, 2.3518353980615369e-06, 1.4592843996951350e-05, 1.5423480558390862e-05, 9.6669412216053466e-06, 2.9039859018791610e-06, + 1.7965709785248935e-05, 1.1821486411501837e-05, 3.3153926570333947e-06,-3.0061568441945972e-06,-4.9789835098179648e-06,-3.5174926207191518e-06,-9.8472701672078420e-07, 7.8342597323406323e-07, +-6.1442233737470987e-06,-3.6226547117299296e-06,-3.9049219894941782e-07, 1.5819059773129294e-06, 1.6887512342208373e-06, 7.1719447077237646e-07,-2.1688636110048284e-07,-5.6085411170472970e-07, + 2.5215686620171691e-06, 1.3142521211812851e-06,-1.0942609935479656e-07,-7.8425907159363005e-07,-5.8724053831932629e-07,-6.7881924908622924e-08, 2.4590082592364832e-07, 2.3797175214642061e-07, +-1.2073165408358840e-06,-5.4667996674542643e-07, 1.6457150487113262e-07, 4.0179614997338794e-07, 2.0096877043958910e-07,-6.4917869278171761e-08,-1.4909230934109398e-07,-7.8787617518316286e-08, + 3.4106412005450733e-02, 3.1779917325691798e-02, 2.7603018282594309e-02, 2.2365518184288561e-02, 1.6923712191869882e-02, 1.1975790372090130e-02, 7.9377849003970657e-03, 4.9368269542755406e-03, +-2.3264946797589350e-03,-2.0091011354786831e-03,-1.4717404417444527e-03,-8.6496052496535386e-04,-3.3026501435822614e-04, 4.6506933521851812e-05, 2.4779440056213117e-04, 3.0691868048685240e-04, + 3.1739354428025196e-04, 2.5244261439606968e-04, 1.4912367257376722e-04, 4.5491756013030758e-05,-2.8324700336457916e-05,-6.1466812468973973e-05,-6.1065757136048287e-05,-4.2842573121185676e-05, +-6.4950929884182275e-05,-4.7228984586807554e-05,-2.0851573207520871e-05, 2.2328463263220950e-06, 1.4395029415041597e-05, 1.5283353878194037e-05, 9.6273812389603171e-06, 2.9348767874871602e-06, + 1.7721945297374721e-05, 1.1677625820399548e-05, 3.2996871685911062e-06,-2.9435037495215569e-06,-4.9119011154573117e-06,-3.4888598319240488e-06,-9.9320733268536823e-07, 7.6118134731214033e-07, +-6.0443194769751736e-06,-3.5705192755472372e-06,-3.9473909014422084e-07, 1.5508547557992816e-06, 1.6654217646010367e-06, 7.1442805252416093e-07,-2.0716878734227105e-07,-5.5139811804413982e-07, + 2.4738002014279364e-06, 1.2925867231260321e-06,-1.0295576659510508e-07,-7.6835907180335527e-07,-5.7924851062126658e-07,-7.0419316255837591e-08, 2.3999813263734701e-07, 2.3483179553395850e-07, +-1.1812134783019043e-06,-5.3662383371345662e-07, 1.5897501276350477e-07, 3.9323602290758650e-07, 1.9863374745542115e-07,-6.1967388951639789e-08,-1.4605146562175594e-07,-7.8208093525680057e-08, + 3.4013605442171073e-02, 3.1699754731830891e-02, 2.7544267741797430e-02, 2.2330956180199119e-02, 1.6910479084559740e-02, 1.1977601638631930e-02, 7.9476479263997906e-03, 4.9490694588225923e-03, +-2.3138507103401817e-03,-1.9990410899089137e-03,-1.4657921409455994e-03,-8.6313909968036701e-04,-3.3138653856461600e-04, 4.4060450567838527e-05, 2.4535946156557277e-04, 3.0520733352408600e-04, + 3.1480962043126809e-04, 2.5056275916512027e-04, 1.4829224517381371e-04, 4.5578731523901028e-05,-2.7752810977859006e-05,-6.0858261788715196e-05,-6.0681458636677909e-05,-4.2724574961205334e-05, +-6.4246861266147818e-05,-4.6764722238821783e-05,-2.0719902593424984e-05, 2.1163387060996983e-06, 1.4199879550306574e-05, 1.5144370269682248e-05, 9.5874897550834068e-06, 2.9648854194268579e-06, + 1.7482139027326035e-05, 1.1535833421155856e-05, 3.2838169215560895e-06,-2.8820800745352209e-06,-4.8457455311054600e-06,-3.4603396985883105e-06,-1.0013036355386763e-06, 7.3931245537736316e-07, +-5.9463056061701786e-06,-3.5192424643431195e-06,-3.9873159781487899e-07, 1.5204327374275680e-06, 1.6424101098740786e-06, 7.1156247415564201e-07,-1.9768490322196393e-07,-5.4206725567267638e-07, + 2.4270631418270591e-06, 1.2713195304098072e-06,-9.6705745465828040e-08,-7.5279764513447119e-07,-5.7134974093091393e-07,-7.2840553243041179e-08, 2.3421598439312682e-07, 2.3171526872382629e-07, +-1.1557436114172519e-06,-5.2676898011133952e-07, 1.5355497054906822e-07, 3.8486675940287981e-07, 1.9630603573612611e-07,-5.9109701147486891e-08,-1.4306494119247012e-07,-7.7616267157344378e-08, + 3.3921302578013651e-02, 3.1619993040845687e-02, 2.7485754469293369e-02, 2.2296467101465291e-02, 1.6897201571718291e-02, 1.1979315531216670e-02, 7.9574138618550890e-03, 4.9612436042074303e-03, +-2.3013095371679643e-03,-1.9890558686455583e-03,-1.4598769920759203e-03,-8.6131428792910955e-04,-3.3248534261334436e-04, 4.1638198758055245e-05, 2.4293986251045299e-04, 3.0350073026235054e-04, + 3.1225366852240602e-04, 2.4870136153895680e-04, 1.4746607186023105e-04, 4.5661095546089821e-05,-2.7188674934006942e-05,-6.0255247667510169e-05,-6.0298762173161821e-05,-4.2605393851865051e-05, +-6.3552306983449217e-05,-4.6306090791334114e-05,-2.0588869916994437e-05, 2.0022638602909491e-06, 1.4007357583652321e-05, 1.5006525148509658e-05, 9.5472819448451786e-06, 2.9940267272020950e-06, + 1.7246216192115104e-05, 1.1396075185521421e-05, 3.2677919166353604e-06,-2.8218609197729534e-06,-4.7805041187954225e-06,-3.4319360951157778e-06,-1.0090251770395930e-06, 7.1781431105451892e-07, +-5.8501410065936828e-06,-3.4688085103928127e-06,-4.0247839429056421e-07, 1.4906265304478664e-06, 1.6197125460542333e-06, 7.0860230818717161e-07,-1.8842993013833288e-07,-5.3286057778918658e-07, + 2.3813324962008702e-06, 1.2504425786678757e-06,-9.0669091597841084e-08,-7.3756724454140346e-07,-5.6354391686230839e-07,-7.5149294601610777e-08, 2.2855222279977320e-07, 2.2862264703014253e-07, +-1.1308899175329944e-06,-5.1711114099947978e-07, 1.4830577634014933e-07, 3.7668396707815250e-07, 1.9398664450967863e-07,-5.6342182445016752e-08,-1.4013201036890144e-07,-7.7012973255470045e-08, + 3.3829499323405100e-02, 3.1540629274470072e-02, 2.7427477143201439e-02, 2.2262051079882300e-02, 1.6883880555977081e-02, 1.1980933014672989e-02, 7.9670833190756563e-03, 4.9733495811152420e-03, +-2.2888700489350280e-03,-1.9791447378674151e-03,-1.4539947854840286e-03,-8.5948627223763827e-04,-3.3356173454440058e-04, 3.9239957539677697e-05, 2.4053553906623788e-04, 3.0179891732970074e-04, + 3.0972531106761292e-04, 2.4685819789972002e-04, 1.4664512699447954e-04, 4.5738944433397185e-05,-2.6632187816951023e-05,-5.9657724660093666e-05,-5.9917680101163174e-05,-4.2485064190855956e-05, +-6.2867113167892896e-05,-4.5853009547529376e-05,-2.0458481174553218e-05, 1.8905740974077461e-06, 1.3817427198408847e-05, 1.4869813779026928e-05, 9.5067726168128941e-06, 3.0223154416267843e-06, + 1.7014103620363521e-05, 1.1258317708529603e-05, 3.2516218139861147e-06,-2.7628219159826413e-06,-4.7161643889904439e-06,-3.4036527160340551e-06,-1.0163810194629662e-06, 6.9668196620768618e-07, +-5.7557859118339177e-06,-3.4192019590843529e-06,-4.0598788016385777e-07, 1.4614230425535795e-06, 1.5973253618681282e-06, 7.0555198314950858e-07,-1.7939917536399759e-07,-5.2377711922928555e-07, + 2.3365839527495649e-06, 1.2299480683638084e-06,-8.4839077937735880e-08,-7.2266049869915957e-07,-5.5583068565014381e-07,-7.7349096135267129e-08, 2.2300471877107859e-07, 2.2555437296810814e-07, +-1.1066358843857564e-06,-5.0764613607244406e-07, 1.4322200606376359e-07, 3.6868335921147633e-07, 1.9167652170870226e-07,-5.3662278012391745e-08,-1.3725194692760522e-07,-7.6399015454690856e-08, + 3.3738191632923957e-02, 3.1461660483612909e-02, 2.7369434450006360e-02, 2.2227708240020991e-02, 1.6870516927729229e-02, 1.1982455045043741e-02, 7.9766569077912245e-03, 4.9853875820689711e-03, +-2.2765311493110479e-03,-1.9693069726340190e-03,-1.4481453125485995e-03,-8.5765523131585072e-04,-3.3461601825115345e-04, 3.6865508173848996e-05, 2.3814642641994781e-04, 3.0010193999001605e-04, + 3.0722417667702895e-04, 2.4503304783127016e-04, 1.4582938470548154e-04, 4.5812372651506117e-05,-2.6083246681530713e-05,-5.9065647513492658e-05,-5.9538224191239640e-05,-4.2363619790576352e-05, +-6.2191128845758784e-05,-4.5405399135272837e-05,-2.0328741982069792e-05, 1.7812226899684234e-06, 1.3630052574704176e-05, 1.4734231281211622e-05, 9.4659762208557585e-06, 3.0497660963476594e-06, + 1.6785729710485948e-05, 1.1122528198640052e-05, 3.2353159419417087e-06,-2.7049392110245184e-06,-4.6527140007117536e-06,-3.3754930813338546e-06,-1.0233800391862697e-06, 6.7591051169168824e-07, +-5.6632015118458957e-06,-3.3704076671835968e-06,-4.0926818910039898e-07, 1.4328094714499628e-06, 1.5752448617376041e-06, 7.0241578690872884e-07,-1.7058803051844652e-07,-5.1481589784591613e-07, + 2.2927938446622989e-06, 1.2098283705013656e-06,-7.9209194903062291e-08,-7.0807020292864569e-07,-5.4820965947721571e-07,-7.9443411856243333e-08, 2.1757137179005887e-07, 2.2251085769705781e-07, +-1.0829654741609333e-06,-4.9836988554930753e-07, 1.3829842134642118e-07, 3.6086074255463861e-07, 1.8937656269990469e-07,-5.1067503293368050e-08,-1.3442402311760157e-07,-7.5775167637683671e-08, + 3.3647375504706457e-02, 3.1383083748005067e-02, 2.7311625084517021e-02, 2.2193438699378881e-02, 1.6857111565294111e-02, 1.1983882569658360e-02, 7.9861352351297803e-03, 4.9973578013752379e-03, +-2.2642917567013907e-03,-1.9595418567582359e-03,-1.4423283656876638e-03,-8.5582134013209230e-04,-3.3564849353774281e-04, 3.4514633727934091e-05, 2.3577245929920672e-04, 2.9840984216625809e-04, + 3.0474989994315471e-04, 2.4322569406599664e-04, 1.4501881890511409e-04, 4.5881472815812005e-05,-2.5541750005445897e-05,-5.8478971172795332e-05,-5.9160405642944334e-05,-4.2241093886015218e-05, +-6.1524205877158070e-05,-4.4963181481535687e-05,-2.0199657589228229e-05, 1.6741638546963767e-06, 1.3445198383142712e-05, 1.4599772637804837e-05, 9.4249068553382966e-06, 3.0763930294827884e-06, + 1.6561024395622383e-05, 1.0988674462997514e-05, 3.2188833094317819e-06,-2.6481894597126405e-06,-4.5901407600527447e-06,-3.3474605425554435e-06,-1.0300309297068703e-06, 6.5549507786462979e-07, +-5.5723499326248692e-06,-3.3224107915021987e-06,-4.1232720006036025e-07, 1.4047733008675500e-06, 1.5534673654274358e-06, 6.9919787178226671e-07,-1.6199197108391840e-07,-5.0597591543765662e-07, + 2.2499391411226705e-06, 1.1900760139203356e-06,-7.3773136019989235e-08,-6.9378932064916969e-07,-5.4068041405170995e-07,-8.1435598997387688e-08, 2.1225011128622645e-07, 2.1949248155156992e-07, +-1.0598631272023350e-06,-4.8927839089277154e-07, 1.3352994919862169e-07, 3.5321202575391148e-07, 1.8708760543130808e-07,-4.8555437597266037e-08,-1.3164751306494466e-07,-7.5142173464702648e-08, + 3.3557046979861962e-02, 3.1304896175852019e-02, 2.7254047749824619e-02, 2.2159242568528342e-02, 1.6843665335079760e-02, 1.1985216527204990e-02, 7.9955189055995763e-03, 5.0092604350711273e-03, +-2.2521508040099433e-03,-1.9498486826816201e-03,-1.4365437383668071e-03,-8.5398476998650025e-04,-3.3665945617550319e-04, 3.2187119067396061e-05, 2.3341357199487163e-04, 2.9672266646340890e-04, + 3.0230212132832321e-04, 2.4143592243376774e-04, 1.4421340330225902e-04, 4.5946335729009748e-05,-2.5007597669943497e-05,-5.7897650786331188e-05,-5.8784235098853266e-05,-4.2117519142508540e-05, +-6.0866198894555471e-05,-4.4526279789487342e-05,-2.0071232891346051e-05, 1.5693527319906884e-06, 1.3262829779319392e-05, 1.4466432700618730e-05, 9.3835782745804302e-06, 3.1022103851279236e-06, + 1.6339919105068130e-05, 1.0856724897071486e-05, 3.2023326147455277e-06,-2.5925498115279155e-06,-4.5284326203131234e-06,-3.3195582875205902e-06,-1.0363422053798268e-06, 6.3543083540147628e-07, +-5.4831942079966437e-06,-3.2751967855517582e-06,-4.1517254283368200e-07, 1.3773022919542143e-06, 1.5319892110115000e-06, 6.9590225717108330e-07,-1.5360655441349687e-07,-4.9725615937884627e-07, + 2.2079974224448855e-06, 1.1706836876637556e-06,-6.8524796214492791e-08,-6.7981097544779237e-07,-5.3324249393680289e-07,-8.3328918209581559e-08, 2.0703889498077198e-07, 2.1649959611481566e-07, +-1.0373137347811298e-06,-4.8036774432512235e-07, 1.2891168601131968e-07, 3.4573320910626521e-07, 1.8481043917690540e-07,-4.6123727226725956e-08,-1.2892169009260120e-07,-7.4500749182919917e-08, + 3.3467202141897433e-02, 3.1227094903491001e-02, 2.7196701157260670e-02, 2.2125119951261849e-02, 1.6830179091743069e-02, 1.1986457847802169e-02, 8.0048085210721164e-03, 5.0210956808719540e-03, +-2.2401072384064316e-03,-1.9402267513514114e-03,-1.4307912251071593e-03,-8.5214568858266518e-04,-3.3764919795881837e-04, 2.9882750847651587e-05, 2.3106969838301329e-04, 2.9504045419108393e-04, + 2.9988048705502021e-04, 2.3966352181116132e-04, 1.4341311141699564e-04, 4.6007050417415070e-05,-2.4480690940337506e-05,-5.7321641710925434e-05,-5.8409722658128911e-05,-4.1992927663463922e-05, +-6.0216965243858889e-05,-4.4094618514824158e-05,-1.9943472442082060e-05, 1.4667453668187788e-06, 1.3082912397563407e-05, 1.4334206197247165e-05, 9.3420038958365949e-06, 3.1272321150037913e-06, + 1.6122346729034731e-05, 1.0726648472149824e-05, 3.1856722562436609e-06,-2.5379979005319999e-06,-4.4675776805066355e-06,-3.2917893460802010e-06,-1.0423222044127844e-06, 6.1571299576369561e-07, +-5.3956982568849075e-06,-3.2287513916424735e-06,-4.1781160770293095e-07, 1.3503844786326346e-06, 1.5108067546700794e-06, 6.9253283435202989e-07,-1.4542741913608766e-07,-4.8865560352664726e-07, + 2.1669468652424340e-06, 1.1516442342122172e-06,-6.3458261774477698e-08,-6.6612845069384528e-07,-5.2589541174889200e-07,-8.5126538121678040e-08, 2.0193571001498372e-07, 2.1353252477916843e-07, +-1.0153026310302168e-06,-4.7163412031439106e-07, 1.2443888504305744e-07, 3.3842038893398799e-07, 1.8254580137291744e-07,-4.3770079937827173e-08,-1.2624582965159060e-07,-7.3851583267641515e-08, + 3.3377837116151637e-02, 3.1149677095053219e-02, 2.7139584026354580e-02, 2.2091070944734590e-02, 1.6816653678347782e-02, 1.1987607453070381e-02, 8.0140046807660476e-03, 5.0328637381198676e-03, +-2.2281600210984180e-03,-1.9306753720996217e-03,-1.4250706214925385e-03,-8.5030426009818222e-04,-3.3861800675997339e-04, 2.7601317505544787e-05, 2.2874077194636432e-04, 2.9336324538590305e-04, + 2.9748464899879631e-04, 2.3790828407179018e-04, 1.4261791659378052e-04, 4.6063704167109546e-05,-2.3960932447249358e-05,-5.6750899516606705e-05,-5.8036877889857405e-05,-4.1867350998080113e-05, +-5.9576364927006135e-05,-4.3668123343004392e-05,-1.9816380464798719e-05, 1.3662986889396097e-06, 1.2905412345627653e-05, 1.4203087737025693e-05, 9.3001968063034817e-06, 3.1514719801666713e-06, + 1.5908241584001743e-05, 1.0598414724136539e-05, 3.1689103409607260e-06,-2.4845118334946881e-06,-4.4075641855291075e-06,-3.2641565946657703e-06,-1.0479790922018775e-06, 5.9633681164174046e-07, +-5.3098268598652040e-06,-3.1830606354954741e-06,-4.2025155140292313e-07, 1.3240081593183667e-06, 1.4899163736060401e-06, 6.8909336913333387e-07,-1.3745028368292553e-07,-4.8017320926676189e-07, + 2.1267662243697299e-06, 1.1329506479384577e-06,-5.8567807204246603e-08,-6.5273518214473935e-07,-5.1863865327935838e-07,-8.6831535866729534e-08, 1.9693857213928480e-07, 2.1059156386452464e-07, +-9.9381557643127221e-07,-4.6307377795137885e-07, 1.2010695709278606e-07, 3.3126974861185744e-07, 1.8029438573351339e-07,-4.1492267184278001e-08,-1.2361920815072364e-07,-7.3195337586748159e-08, + 3.3288948069238017e-02, 3.1072639942130949e-02, 2.7082695084791081e-02, 2.2057095639603959e-02, 1.6803089926520270e-02, 1.1988666256203000e-02, 8.0231079812317831e-03, 5.0445648077334067e-03, +-2.2163081271070681e-03,-1.9211938625242238e-03,-1.4193817241763274e-03,-8.4846064525333914e-04,-3.3956616658351035e-04, 2.5342609250822781e-05, 2.2642672579528157e-04, 2.9169107883344775e-04, + 2.9511426458284432e-04, 2.3617000403764951e-04, 1.4182779201463418e-04, 4.6116382558621517e-05,-2.3448226167516596e-05,-5.6185379991355728e-05,-5.7665709846122269e-05,-4.1740820148865126e-05, +-5.8944260545194804e-05,-4.3246721166945293e-05,-1.9689960864401453e-05, 1.2679704947836506e-06, 1.2730296198372970e-05, 1.4073071817326953e-05, 9.2581697699537901e-06, 3.1749435525699595e-06, + 1.5697539378249512e-05, 1.0471993742279392e-05, 3.1520546944935255e-06,-2.4320701804568614e-06,-4.3483805243985949e-06,-3.2366627617280813e-06,-1.0533208644190645e-06, 5.7729757755757761e-07, +-5.2255456359701202e-06,-3.1381108198672051e-06,-4.2249930585588539e-07, 1.2981618927263182e-06, 1.4693144654577225e-06, 6.8558750640923046e-07,-1.2967094538596979e-07,-4.7180792672275472e-07, + 2.0874348161029151e-06, 1.1145960706399082e-06,-5.3847886455205753e-08,-6.3962475783157047e-07,-5.1147167624089750e-07,-8.8446901411703814e-08, 1.9204552626259287e-07, 2.0767698380143243e-07, +-9.7283874546300692e-07,-4.5468305624240697e-07, 1.1591146001222675e-07, 3.2427756292739799e-07, 1.7805683864258631e-07,-3.9288118918198940e-08,-1.2104110486722331e-07,-7.2532648236582839e-08, + 3.3200531208496593e-02, 3.0995980663449180e-02, 2.7026033068367251e-02, 2.2023194120166571e-02, 1.6789488656603239e-02, 1.1989635162037139e-02, 8.0321190163370713e-03, 5.0561990921578663e-03, +-2.2045505450474130e-03,-1.9117815483721511e-03,-1.4137243308876384e-03,-8.4661500137875670e-04,-3.4049395761968568e-04, 2.3106418057279934e-05, 2.2412749268815174e-04, 2.9002399209003028e-04, + 2.9276899667526196e-04, 2.3444847943125463e-04, 1.4104271071152400e-04, 4.6165169501377048e-05,-2.2942477405717306e-05,-5.5625039145417929e-05,-5.7296227074775488e-05,-4.1613365579236720e-05, +-5.8320517244007334e-05,-4.2830340065151326e-05,-1.9564217238195902e-05, 1.1717194288661978e-06, 1.2557530992208253e-05, 1.3944152829305249e-05, 9.2159352342243594e-06, 3.1976602168471248e-06, + 1.5490177178856008e-05, 1.0347356158351618e-05, 3.1351128694550912e-06,-2.3806519639740102e-06,-4.2900152297648043e-06,-3.2093104323609382e-06,-1.0583553500888698e-06, 5.5859063013868569e-07, +-5.1428210205043892e-06,-3.0938885190962218e-06,-4.2456158449884959e-07, 1.2728344910177324e-06, 1.4489974500202787e-06, 6.8201877332846181e-07,-1.2208527938765556e-07,-4.6355869552312679e-07, + 2.0489325014081674e-06, 1.0965737892621926e-06,-4.9293128528999662e-08,-6.2679091293422307e-07,-5.0439391327436333e-07,-8.9975539348874534e-08, 1.8725464641141582e-07, 2.0478902974691497e-07, +-9.5235871214597482e-07,-4.4645837447880323e-07, 1.1184809647334288e-07, 3.1744019312215848e-07, 1.7583376344311168e-07,-3.7155523187791078e-08,-1.1851080240101908e-07,-7.1864125712805136e-08, + 3.3112582781454430e-02, 3.0919696504541992e-02, 2.6969596720949379e-02, 2.1989366464492521e-02, 1.6775850677807159e-02, 1.1990515067123999e-02, 8.0410383772532516e-03, 5.0677667953165709e-03, +-2.1928862769124390e-03,-1.9024377634242647e-03,-1.4080982404370695e-03,-8.4476748248155445e-04,-3.4140165629715016e-04, 2.0892537653754636e-05, 2.2184300505136319e-04, 2.8836202150406016e-04, + 2.9044851348817430e-04, 2.3274351082873878e-04, 1.4026264557843093e-04, 4.6210147267295994e-05,-2.2443592775899196e-05,-5.5069833215352072e-05,-5.6928437632059424e-05,-4.1485017220898495e-05, +-5.7705002659435515e-05,-4.2418909280393397e-05,-1.9439152886557812e-05, 1.0775049658034349e-06, 1.2387084219501817e-05, 1.3816325063365478e-05, 9.1735053367977452e-06, 3.2196351718562981e-06, + 1.5286093379042118e-05, 1.0224473136209684e-05, 3.1180921538825131e-06,-2.3302366488986013e-06,-4.2324569772750255e-06,-3.1821020526113374e-06,-1.0630902150141325e-06, 5.4021134879207704e-07, +-5.0616202428324338e-06,-3.0503805739406362e-06,-4.2644488873779963e-07, 1.2480150135482354e-06, 1.4289617707582379e-06, 6.7839058202407190e-07,-1.1468923684152031e-07,-4.5542444630952317e-07, + 2.0112396688917976e-06, 1.0788772338379585e-06,-4.4898332709513730e-08,-6.1422752543115648e-07,-4.9740477472342654e-07,-9.1420269956611301e-08, 1.8256403437827182e-07, 2.0192792357773565e-07, +-9.3236243505383907e-07,-4.3839623268036852e-07, 1.0791271098600332e-07, 3.1075408299940691e-07, 1.7362572455590629e-07,-3.5092427074979775e-08,-1.1602758473946554e-07,-7.1190357630689895e-08, + 3.3025099075294870e-02, 3.0843784737433301e-02, 2.6913384794429639e-02, 2.1955612744556950e-02, 1.6762176788359701e-02, 1.1991306859798869e-02, 8.0498666524424292e-03, 5.0792681225629646e-03, +-2.1813143378615688e-03,-1.8931618493819198e-03,-1.4025032527221482e-03,-8.4291823931013574e-04,-3.4228953533501499e-04, 1.8700763515044558e-05, 2.1957319499864465e-04, 2.8670520223721043e-04, + 2.8815248847964894e-04, 2.3105490161329820e-04, 1.3948756938329874e-04, 4.6251396523492401e-05,-2.1951480183353888e-05,-5.4519718668063398e-05,-5.6562349094741577e-05,-4.1355804481328152e-05, +-5.7097586866350749e-05,-4.2012359197882718e-05,-1.9314770823884009e-05, 9.8528739314769631e-07, 1.2218923822648619e-05, 1.3689582714861685e-05, 9.1308919118433069e-06, 3.2408814325679349e-06, + 1.5085227668468031e-05, 1.0103316359843129e-05, 3.1009995806195404e-06,-2.2808041332987747e-06,-4.1756945841042625e-06,-3.1550399344705078e-06,-1.0675329643705651e-06, 5.2215515572667328e-07, +-4.9819113086249016e-06,-3.0075740832740930e-06,-4.2815551666155304e-07, 1.2236927626475705e-06, 1.4092038945989695e-06, 6.7470623385735291e-07,-1.0747884460915279e-07,-4.4740410104288612e-07, + 1.9743372253508086e-06, 1.0614999692914239e-06,-4.0658459059542039e-08,-6.0192861573168214e-07,-4.9050364794596428e-07,-9.2783833371904740e-08, 1.7797182121253088e-07, 1.9909386362360514e-07, +-9.1283725605938465e-07,-4.3049320021418250e-07, 1.0410127733710234e-07, 3.0421576302275601e-07, 1.7143324463638073e-07,-3.3096831396698554e-08,-1.1359074081762260e-07,-7.0511907120418621e-08, + 3.2938076416335151e-02, 3.0768242660322631e-02, 2.6857396048682449e-02, 2.1921933026369269e-02, 1.6748467775653149e-02, 1.1992011420250789e-02, 8.0586044276453224e-03, 5.0907032806335887e-03, +-2.1698337560125194e-03,-1.8839531557559505e-03,-1.3969391687318373e-03,-8.4106741941785204e-04,-3.4315786379414751e-04, 1.6530892852636286e-05, 2.1731799435005181e-04, 2.8505356828520487e-04, + 2.8588060025656892e-04, 2.2938245793055262e-04, 1.3871745477874592e-04, 4.6288996364694649e-05,-2.1466048806766558e-05,-5.3974652204493248e-05,-5.6197968572186286e-05,-4.1225756251035413e-05, +-5.6498142326016302e-05,-4.1610621325865706e-05,-1.9191073787708067e-05, 8.9502779375842168e-07, 1.2053018188579042e-05, 1.3563919889315930e-05, 9.0881064964780232e-06, 3.2614118316818362e-06, + 1.4887521000150596e-05, 9.9838580253882298e-06, 3.0838419336168394e-06,-2.2323347378738541e-06,-4.1197170083997822e-06,-3.1281262600647181e-06,-1.0716909458881445e-06, 5.0441751645286214e-07, +-4.9036629747623660e-06,-2.9654564029268055e-06,-4.2969956618585957e-07, 1.1998572760526240e-06, 1.3897203137532256e-06, 6.7096892212582943e-07,-1.0045020374403059e-07,-4.3949657422780321e-07, + 1.9382065718355605e-06, 1.0444357005487770e-06,-3.6568629353288461e-08,-5.8988833941614920e-07,-4.8368990099326526e-07,-9.4068890643834499e-08, 1.7347616629482711e-07, 1.9628702618921809e-07, +-8.9377087128678346e-07,-4.2274592950578248e-07, 1.0040990592310980e-07, 2.9782184055430260e-07, 1.6925681089506871e-07,-3.1166791828653113e-08,-1.1119956325932560e-07,-6.9829314728952356e-08, + 3.2851511169511828e-02, 3.0693067597274540e-02, 2.6801629251520801e-02, 2.1888327370099520e-02, 1.6734724416389610e-02, 1.1992629620591860e-02, 8.0672522858698699e-03, 5.1020724776018192e-03, +-2.1584435722372883e-03,-1.8748110397567297e-03,-1.3914057905512721e-03,-8.3921516722511302e-04,-3.4400690712767940e-04, 1.4382724605164349e-05, 2.1507733465042991e-04, 2.8340715249836924e-04, + 2.8363253248055859e-04, 2.2772598864345228e-04, 1.3795227431351222e-04, 4.6323024344465378e-05,-2.0987209080612884e-05,-5.3434590762965948e-05,-5.5835302718155240e-05,-4.1094900910837803e-05, +-5.5906543837106306e-05,-4.1213628274257936e-05,-1.9068064249452073e-05, 8.0668802954678002e-07, 1.1889336143171966e-05, 1.3439330607329963e-05, 9.0451603371044525e-06, 3.2812390213665874e-06, + 1.4692915562848369e-05, 9.8660708289211211e-06, 3.0666257574769640e-06,-2.1848091974994022e-06,-4.0645133481900847e-06,-3.1013630856493688e-06,-1.0755713529855387e-06, 4.8699394010605635e-07, +-4.8268447339272483e-06,-2.9240151363203556e-06,-4.3108294440815675e-07, 1.1764983231666243e-06, 1.3705075461629233e-06, 6.6718173484358188e-07,-9.3599488026293689e-08,-4.3170077391128292e-07, + 1.9028295976068927e-06, 1.0276782620725018e-06,-3.2624116220011023e-08,-5.7810098724844969e-07,-4.7696288317576694e-07,-9.5278025511140523e-08, 1.6907525661725610e-07, 1.9350756676062794e-07, +-8.7515133553439083e-07,-4.1515114035021166e-07, 9.6834828699941962e-08, 2.9156900419657813e-07, 1.6709687467026680e-07,-2.9300417777522944e-08,-1.0885334782821361e-07,-6.9143099793176277e-08, + 3.2765399737875012e-02, 3.0618256897913039e-02, 2.6746083178652250e-02, 2.1854795830202601e-02, 1.6720947476724431e-02, 1.1993162324926060e-02, 8.0758108073806165e-03, 5.1133759228324839e-03, +-2.1471428399619727e-03,-1.8657348661865365e-03,-1.3859029213654714e-03,-8.3736162408053552e-04,-3.4483692723101880e-04, 1.2256059429015947e-05, 2.1285114718736300e-04, 2.8176598660187464e-04, + 2.8140797377543617e-04, 2.2608530528889811e-04, 1.3719200044253529e-04, 4.6353556506179960e-05,-2.0514872677543686e-05,-5.2899491522735568e-05,-5.5474357742192387e-05,-4.0963266339065149e-05, +-5.5322668486538053e-05,-4.0821313735395865e-05,-1.8945744423268067e-05, 7.2023072488162362e-07, 1.1727846945437239e-05, 1.3315808809928961e-05, 9.0020643952793509e-06, 3.3003754750869749e-06, + 1.4501354751142188e-05, 9.7499279577044698e-06, 3.0493573640386949e-06,-2.1382086517466573e-06,-4.0100728399737620e-06,-3.0747523463960264e-06,-1.0791812271883814e-06, 4.6987997948349895e-07, +-4.7514267934377179e-06,-2.8832381312979448e-06,-4.3231137200490118e-07, 1.1536058992068054e-06, 1.3515621356441218e-06, 6.6334765885065396e-07,-8.6922943734054497e-08,-4.2401560203405553e-07, + 1.8681886621397731e-06, 1.0112216188154382e-06,-2.8820340990193617e-08,-5.6656098112655056e-07,-4.7032192552406732e-07,-9.6413748321901046e-08, 1.6476730826217259e-07, 1.9075561986042452e-07, +-8.5696704332433484e-07,-4.0770562542897634e-07, 9.3372399840438599e-08, 2.8545402040271486e-07, 1.6495385151121096e-07,-2.7495867864217225e-08,-1.0655139679359064e-07,-6.8453759096705789e-08, + 3.2679738562089840e-02, 3.0543807937120020e-02, 2.6690756613634931e-02, 2.1821338455539959e-02, 1.6707137712407491e-02, 1.1993610389417890e-02, 8.0842805696887520e-03, 5.1246138269372540e-03, +-2.1359306249698201e-03,-1.8567240073334539e-03,-1.3804303654629466e-03,-8.3550692832070825e-04,-3.4564818249090135e-04, 1.0150699688469059e-05, 2.1063936300879521e-04, 2.8013010121567816e-04, + 2.7920661763636626e-04, 2.2446022203488278e-04, 1.3643660553714016e-04, 4.6380667413216219e-05,-2.0048952491375047e-05,-5.2369311906808662e-05,-5.5115139421059716e-05,-4.0830879918619955e-05, +-5.4746395601483477e-05,-4.0433612464667264e-05,-1.8824116275257307e-05, 6.3561925048668020e-07, 1.1568520282355218e-05, 1.3193348362878346e-05, 8.9588293540449716e-06, 3.3188334892202194e-06, + 1.4312783136816214e-05, 9.6354030806679018e-06, 3.0320428396824079e-06,-2.0925146356796877e-06,-3.9563848583176126e-06,-3.0482958596014447e-06,-1.0825274615979237e-06, 4.5307123157606360e-07, +-4.6773800561483120e-06,-2.8431134752742259e-06,-4.3339038882305918e-07, 1.1311702193620841e-06, 1.3328806537925043e-06, 6.5946958131275323e-07,-8.0416887369478166e-08,-4.1643995589551673e-07, + 1.8342665808740862e-06, 9.9505986400941594e-07,-2.5152869669380719e-08,-5.5526286954767847e-07,-4.6376634445782618e-07,-9.7478495426784899e-08, 1.6055056403162453e-07, 1.8803130125525709e-07, +-8.3920671686467025e-07,-4.0040625016430769e-07, 9.0019093544540012e-08, 2.7947372857061462e-07, 1.6282812719953303e-07,-2.5751353491340903e-08,-1.0429301509115607e-07,-6.7761770314692123e-08, + 3.2594524119946303e-02, 3.0469718114737750e-02, 2.6635648347833309e-02, 2.1787955289498749e-02, 1.6693295868922532e-02, 1.1993974662360360e-02, 8.0926621475428690e-03, 5.1357864017308064e-03, +-2.1248060052085523e-03,-1.8477778428667782e-03,-1.3749879282389590e-03,-8.3365121532874217e-04,-3.4644092783399708e-04, 8.0664494459901231e-06, 2.0844191294003972e-04, 2.7849952587422414e-04, + 2.7702816234177405e-04, 2.2285055563795483e-04, 1.3568606189500246e-04, 4.6404430178332949e-05,-1.9589362619893834e-05,-5.1844009585058035e-05,-5.4757653109615900e-05,-4.0697768544090802e-05, +-5.4177606703819216e-05,-4.0050460260695195e-05,-1.8703181532820745e-05, 5.5281770815734092e-07, 1.1411326263009566e-05, 1.3071943061679439e-05, 8.9154656235402181e-06, 3.3366251849675330e-06, + 1.4127146443124021e-05, 9.5224703375416269e-06, 3.0146880534370697e-06,-2.0477090719321931e-06,-3.9034389140066146e-06,-3.0219953292895188e-06,-1.0856168031671902e-06, 4.3656333744800978e-07, +-4.6046761055823938e-06,-2.8036294875422405e-06,-4.3432536157973413e-07, 1.1091817154014432e-06, 1.3144596990981295e-06, 6.5555029392259011e-07,-7.4077705571351859e-08,-4.0897272829561787e-07, + 1.8010466180401533e-06, 9.7918721129495314e-07,-2.1617404196296349e-08,-5.4420132802239816e-07,-4.5729544007382700e-07,-9.8474633735086828e-08, 1.5642329522259926e-07, 1.8533470751152813e-07, +-8.2185940674520015e-07,-3.9324994141243305e-07, 8.6771491900838741e-08, 2.7362504618179860e-07, 1.6072005332215739e-07,-2.4065132540689506e-08,-1.0207751444027804e-07,-6.7067590161940123e-08, + 3.2509752925876337e-02, 3.0395984855276038e-02, 2.6580757180373869e-02, 2.1754646370108991e-02, 1.6679422681624659e-02, 1.1994255984242809e-02, 8.1009561129204277e-03, 5.1468938601878320e-03, +-2.1137680706002984e-03,-1.8388957597346815e-03,-1.3695754161980565e-03,-8.3179461759181825e-04,-3.4721541477465701e-04, 6.0031144522697949e-06, 2.0625872760047202e-04, 2.7687428904581753e-04, + 2.7487231086561689e-04, 2.2125612540254444e-04, 1.3494034174909306e-04, 4.6424916492847097e-05,-1.9136018348223441e-05,-5.1323542476856414e-05,-5.4401903751676505e-05,-4.0563958628685572e-05, +-5.3616185463072454e-05,-3.9671793947943434e-05,-1.8582941692367022e-05, 4.7179091492224878e-07, 1.1256235413457474e-05, 1.2951586635840394e-05, 8.8719833469120803e-06, 3.3537625100487270e-06, + 1.3944391515129020e-05, 9.4111043320079363e-06, 2.9972986621429958e-06,-2.0037742611038436e-06,-3.8512246535807004e-06,-2.9958523495894996e-06,-1.0884558557287366e-06, 4.2035198254287392e-07, +-4.5332871831210834e-06,-2.7647747188695998e-06,-4.3512148600212741e-07, 1.0876310285475844e-06, 1.2962958988737144e-06, 6.5159249483714333e-07,-6.7901853481792623e-08,-4.0161280857115334e-07, + 1.7685124642514836e-06, 9.6359800049448716e-07,-1.8209784417161939e-08,-5.3337115176351646e-07,-4.5090850016526398e-07,-9.9404460884614564e-08, 1.5238380032985317e-07, 1.8266591740276771e-07, +-8.0491446375699648e-07,-3.8623370202210054e-07, 8.3626293556846991e-08, 2.6790495834743909e-07, 1.5862995444558192e-07,-2.2435511737858238e-08,-9.9904211367415751e-08,-6.6371656327998993e-08, + 3.2425421530478588e-02, 3.0322605607622670e-02, 2.6526081918100641e-02, 2.1721411730158138e-02, 1.6665518875875800e-02, 1.1994455187818170e-02, 8.1091630350197761e-03, 5.1579364164007230e-03, +-2.1028159228559176e-03,-1.8300771520627160e-03,-1.3641926369566890e-03,-8.2993726475740631e-04,-3.4797189146208718e-04, 3.9605021361615450e-06, 2.0408973741976866e-04, 2.7525441815174929e-04, + 2.7273877079320163e-04, 2.1967675313961754e-04, 1.3419941727715878e-04, 4.6442196654775635e-05,-1.8688836132225843e-05,-5.0807868753600081e-05,-5.4047895890598326e-05,-4.0429476111140884e-05, +-5.3062017653584094e-05,-3.9297551357111158e-05,-1.8463398028446387e-05, 3.9250438844907684e-07, 1.1103218671237187e-05, 1.2832272753171071e-05, 8.8283924060147365e-06, 3.3702572404769427e-06, + 1.3764466296472936e-05, 9.3012801202855400e-06, 2.9798801186713695e-06,-1.9606928742191366e-06,-3.7997318579425572e-06,-2.9698684084188577e-06,-1.0910510827558878e-06, 4.0443289682661670e-07, +-4.4631861761873964e-06,-2.7265379423469818e-06,-4.3578379508863512e-07, 1.0665090062539766e-06, 1.2783859091680199e-06, 6.4759879148721156e-07,-6.1885853607714401e-08,-3.9435908333856172e-07, + 1.7366482338404146e-06, 9.4828668689209306e-07,-1.4925978097771806e-08,-5.2276725605309469e-07,-4.4460480000669060e-07,-1.0027020746959225e-07, 1.4843040480412498e-07, 1.8002499274916472e-07, +-7.8836154694832157e-07,-3.7935459434380279e-07, 8.0580299222752271e-08, 2.6231052257879785e-07, 1.5655812649998618e-07,-2.0860844458471651e-08,-9.7772427540540412e-08,-6.5674388239820545e-08, + 3.2341526520050547e-02, 3.0249577844758620e-02, 2.6471621375530760e-02, 2.1688251397303650e-02, 1.6651585167178531e-02, 1.1994573098169960e-02, 8.1172834802529462e-03, 5.1689142855381211e-03, +-2.0919486752919263e-03,-1.8213214210545982e-03,-1.3588393992451202e-03,-8.2807928368845013e-04,-3.4871060272693294e-04, 1.9384215946150612e-06, 2.0193487265371575e-04, 2.7363993958513626e-04, + 2.7062725423732809e-04, 2.1811226312720938e-04, 1.3346326061021083e-04, 4.6456339596579865e-05,-1.8247733582036523e-05,-5.0296946841194175e-05,-5.3695633679589277e-05,-4.0294346462556307e-05, +-5.2514991110118705e-05,-3.8927671307959486e-05,-1.8344551601379155e-05, 3.1492433234675825e-07, 1.0952247379853032e-05, 1.2713995024128879e-05, 8.7847024268924111e-06, 3.3861209823626349e-06, + 1.3587319802159218e-05, 9.1929732036671488e-06, 2.9624376776034152e-06,-1.9184479444503788e-06,-3.7489504409606504e-06,-2.9440448913452773e-06,-1.0934088098684320e-06, 3.8880185481596054e-07, +-4.3943465984920697e-06,-2.6889081512118000e-06,-4.3631716280678253e-07, 1.0458066971600423e-06, 1.2607264149019947e-06, 6.4357170370765497e-07,-5.6026295082332621e-08,-3.8721043699133139e-07, + 1.7054384472802697e-06, 9.3324784317658861e-07,-1.1762079381912033e-08,-5.1238467270466645e-07,-4.3838360299327883e-07,-1.0107403970620253e-07, 1.4456146149053343e-07, 1.7741197876525178e-07, +-7.7219060410368107e-07,-3.7260974700444008e-07, 7.7630413029747642e-08, 2.5683886554483057e-07, 1.5450483750998121e-07,-1.9339528114087816e-08,-9.5681491250568257e-08,-6.4976186862955657e-08, + 3.2258064516127942e-02, 3.0176899063476731e-02, 2.6417374374809850e-02, 2.1655165394183232e-02, 1.6637622261307741e-02, 1.1994610532778730e-02, 8.1253180122389558e-03, 5.1798276838041181e-03, +-2.0811654526512111e-03,-1.8126279748941834e-03,-1.3535155129092181e-03,-8.2622079851744218e-04,-3.4943179012700970e-04,-6.3316417598519026e-08, 1.9979406339959947e-04, 2.7203087872948711e-04, + 2.6853747775702763e-04, 2.1656248207096778e-04, 1.3273184384107956e-04, 4.6467412912343221e-05,-1.7812629446074878e-05,-4.9790735422169813e-05,-5.3345120891844195e-05,-4.0158594693150563e-05, +-5.1974995686059847e-05,-3.8562093591238886e-05,-1.8226403265286505e-05, 2.3901762179094415e-07, 1.0803293283688633e-05, 1.2596747005675313e-05, 8.7409227853001321e-06, 3.4013651736774874e-06, + 1.3412902094820961e-05, 9.0861595190279349e-06, 2.9449764018655161e-06,-1.8770228590916557e-06,-3.6988704486285948e-06,-2.9183830847440447e-06,-1.0955352276236474e-06, 3.7345467571596086e-07, +-4.3267425757930265e-06,-2.6518745528439379e-06,-4.3672630970933506e-07, 1.0255153463891085e-06, 1.2433141308411675e-06, 6.3951366575451227e-07,-5.0319832257317508e-08,-3.8016575250618164e-07, + 1.6748680229490887e-06, 9.1847615444003899e-07,-8.7143035947750164e-09,-5.0221854721244209e-07,-4.3224416258239028e-07,-1.0181806023979121e-07, 1.4077534971761003e-07, 1.7482690514348604e-07, +-7.5639186850904966e-07,-3.6599634918685956e-07, 7.4773637043325403e-08, 2.5148718133902978e-07, 1.5247033035475425e-07,-1.7870004724417068e-08,-9.3630736289482729e-08,-6.4277436103999798e-08, + 3.2175032175031162e-02, 3.0104566784104551e-02, 2.6363339745667350e-02, 2.1622153738523050e-02, 1.6623630854440751e-02, 1.1994568301588250e-02, 8.1332671917978393e-03, 5.1906768283982866e-03, +-2.0704653909266110e-03,-1.8039962286492683e-03,-1.3482207889117005e-03,-8.2436193069947150e-04,-3.5013569199258965e-04,-2.0448994981787233e-06, 1.9766723961119927e-04, 2.7042725997701231e-04, + 2.6646916227734269e-04, 2.1502723906593113e-04, 1.3200513903231011e-04, 4.6475482884405887e-05,-1.7383443595052502e-05,-4.9289193437798787e-05,-5.2996360930428969e-05,-4.0022245358966777e-05, +-5.1441923211411559e-05,-3.8200758951943508e-05,-1.8108953675294114e-05, 1.6475178941130313e-07, 1.0656328522678012e-05, 1.2480522205268220e-05, 8.6970626120012651e-06, 3.4160010860750462e-06, + 1.3241164259468051e-05, 8.9808154312769131e-06, 2.9275011681634904e-06,-1.8364013515784865e-06,-3.6494820577906443e-06,-2.8928841793229789e-06,-1.0974363939909075e-06, 3.5838722339334448e-07, +-4.2603488281911383e-06,-2.6154265660119029e-06,-4.3701580659981681e-07, 1.0056263906253286e-06, 1.2261458019096622e-06, 6.3542702905946382e-07,-4.4763183869436059e-08,-3.7322391189866501e-07, + 1.6449222621792353e-06, 9.0396641888164577e-07,-5.7789854297472614e-09,-4.9226413521972898e-07,-4.2618572326536952e-07,-1.0250431030203706e-07, 1.3707047548990744e-07, 1.7226978641367558e-07, +-7.4095584329758956e-07,-3.5951165510839887e-07, 7.2007071850568235e-08, 2.4625272816962615e-07, 1.5045482411102495e-07,-1.6450759096817751e-08,-9.1619502945022327e-08,-6.3578502736618851e-08, + 3.2092426187418838e-02, 3.0032578550230810e-02, 2.6309516325371821e-02, 2.1589216443243700e-02, 1.6609611633285431e-02, 1.1994447207071110e-02, 8.1411315769451126e-03, 5.2014619374763354e-03, +-2.0598476371880281e-03,-1.7954256041766530e-03,-1.3429550393332761e-03,-8.2250279906410234e-04,-3.5082254347094596e-04,-4.0065136076728597e-06, 1.9555433111342717e-04, 2.6882910674665486e-04, + 2.6442203301137515e-04, 2.1350636555845961e-04, 1.3128311822415339e-04, 4.6480614509300652e-05,-1.6960097006251068e-05,-4.8792280089978666e-05,-5.2649356838000490e-05,-3.9885322568477058e-05, +-5.0915667452915538e-05,-3.7843609071898978e-05,-1.7992203295189154e-05, 9.2095011764479573e-08, 1.0511325627063208e-05, 1.2365314084591554e-05, 8.6531307980611502e-06, 3.4300398266542148e-06, + 1.3072058381016560e-05, 8.8769177241343648e-06, 2.9100166734882509e-06,-1.7965674942379984e-06,-3.6007755748392420e-06,-2.8675492733476507e-06,-1.0991182369743173e-06, 3.4359540645055974e-07, +-4.1951406568821949e-06,-2.5795538148033449e-06,-4.3719008037730345e-07, 9.8613145439625338e-07, 1.2092182033181035e-06, 6.3131406461654975e-07,-3.9353131866604828e-08,-3.6638379690993540e-07, + 1.6155868420788500e-06, 8.8971354225774442e-07,-2.9525729062825008e-09,-4.8251680123332433e-07,-4.2020752102168540e-07,-1.0313477139919630e-07, 1.3344527104581645e-07, 1.6974062279622634e-07, +-7.2587329982110562e-07,-3.5315297683564952e-07, 6.9327909069385694e-08, 2.4113282940395444e-07, 1.4845851414065443e-07,-1.5080317585669918e-08,-8.9647137878246723e-08,-6.2879737318249644e-08, + 3.2010243277848037e-02, 2.9960931928435679e-02, 2.6255902958686270e-02, 2.1556353516564281e-02, 1.6595565275206749e-02, 1.1994248044294069e-02, 8.1489117228869708e-03, 5.2121832301115761e-03, +-2.0493113494123583e-03,-1.7869155300288195e-03,-1.3377180773734322e-03,-8.2064351986630910e-04,-3.5149257657036276e-04,-5.9483430799259912e-06, 1.9345526761652479e-04, 2.6723644150185993e-04, + 2.6239581938353879e-04, 2.1199969530907858e-04, 1.3056575344211905e-04, 4.6482871523202273e-05,-1.6542511747955730e-05,-4.8299954843043560e-05,-5.2304111306258351e-05,-3.9747849989133410e-05, +-5.0396124074460202e-05,-3.7490586553152967e-05,-1.7876152404566238e-05, 2.1016096016899404e-08, 1.0368257512132538e-05, 1.2251116063286405e-05, 8.6091359999356361e-06, 3.4434923397640716e-06, + 1.2905537521307235e-05, 8.7744435919554121e-06, 2.8925274409151897e-06,-1.7575056910409804e-06,-3.5527414342992466e-06,-2.8423793759885412e-06,-1.1005865570074111e-06, 3.2907517818381283e-07, +-4.1310939293518232e-06,-2.5442461242428750e-06,-4.3725341875761278e-07, 9.6702234611934946e-07, 1.1925281405096212e-06, 6.2717696566665970e-07,-3.4086520580631806e-08,-3.5964428946744620e-07, + 1.5868478051089482e-06, 8.7571253528719222e-07,-2.3162326792759282e-10,-4.7297201672425710e-07,-4.1430878353065491e-07,-1.0371136756990378e-07, 1.2989819502123452e-07, 1.6723940062073047e-07, +-7.1113526982175599e-07,-3.4691768242949461e-07, 6.6733427348250244e-08, 2.3612487330619963e-07, 1.4648157189214969e-07,-1.3757245841538705e-08,-8.7712995103873709e-08,-6.2181474261964492e-08, + 3.1928480204341490e-02, 2.9889624508024980e-02, 2.6202498497823280e-02, 2.1523564962104381e-02, 1.6581492448351338e-02, 1.1993971600982921e-02, 8.1566081820159484e-03, 5.2228409262570392e-03, +-2.0388556963165105e-03,-1.7784654413623008e-03,-1.3325097173506606e-03,-8.1878420683649880e-04,-3.5214602020332622e-04,-7.8705706327043823e-06, 1.9136997872996019e-04, 2.6564928576808342e-04, + 2.6039025495420975e-04, 2.1050706435635702e-04, 1.2985301670384109e-04, 4.6482316427172150e-05,-1.6130610964397885e-05,-4.7812177425192887e-05,-5.1960626685317284e-05,-3.9609850853820959e-05, +-4.9883190597852737e-05,-3.7141634902393059e-05,-1.7760801104994983e-05,-4.8515533753331578e-08, 1.0227097473589454e-05, 1.2137921522111700e-05, 8.5650866447092806e-06, 3.4563694087290180e-06, + 1.2741555695459678e-05, 8.6733706331121594e-06, 2.8750378237857587e-06,-1.7192006691934015e-06,-3.5053701985288789e-06,-2.8173754097296142e-06,-1.1018470298036399e-06, 3.1482253671879210e-07, +-4.0681850623475187e-06,-2.5094935187684281e-06,-4.3720997205693542e-07, 9.4829105165651039e-07, 1.1760724512598038e-06, 6.2301784868722933e-07,-2.8960254915294152e-08,-3.5300427257930387e-07, + 1.5586915435790905e-06, 8.6195851661463192e-07, 2.3871955434703144e-09,-4.6362535324673779e-07,-4.0848873458622736e-07,-1.0423596443202451e-07, 1.2642773061285176e-07, 1.6476609373029389e-07, +-6.9673302696445859e-07,-3.4080320505928824e-07, 6.4220999154339832e-08, 2.3122630300180944e-07, 1.4452415290321918e-07,-1.2480152772886964e-08,-8.5816432957474064e-08,-6.1484034047402572e-08, + 3.1847133757961041e-02, 2.9818653900767551e-02, 2.6149301802400372e-02, 2.1490850778983991e-02, 1.6567393811770571e-02, 1.1993618657586840e-02, 8.1642215039071635e-03, 5.2334352467082977e-03, +-2.0284798571934895e-03,-1.7700747798469578e-03,-1.3273297747029567e-03,-8.1692497122922217e-04,-3.5278310022944168e-04,-9.7733773781281258e-06, 1.8929839397584594e-04, 2.6406766015005072e-04, + 2.5840507734653170e-04, 2.0902831098049027e-04, 1.2914488002664019e-04, 4.6479010511131231e-05,-1.5724318860283772e-05,-4.7328907830247572e-05,-5.1618904992647004e-05,-3.9471347967298545e-05, +-4.9376766366041437e-05,-3.6796698513886237e-05,-1.7646149327765336e-05,-1.1652984844759119e-07, 1.0087819181760108e-05, 1.2025723806856588e-05, 8.5209909347565933e-06, 3.4686816577422162e-06, + 1.2580067852155201e-05, 8.5736768400288690e-06, 2.8575520131422853e-06,-1.6816374738746335e-06,-3.4586525550387106e-06,-2.7925382143711248e-06,-1.1029052081923598e-06, 3.0083352471545379e-07, +-4.0063910121263319e-06,-2.4752862138822785e-06,-4.3706376145551797e-07, 9.2992973377063561e-07, 1.1598480031104709e-06, 6.1883875761224197e-07,-2.3971300516761222e-08,-3.4646263028116010e-07, + 1.5311047982440534e-06, 8.4844670220315620e-07, 4.9071161649877537e-09,-4.5447248690273133e-07,-4.0274658942783178e-07,-1.0471037466207957e-07, 1.2303238772486365e-07, 1.6232066285777661e-07, +-6.8265809604089716e-07,-3.3480702534514668e-07, 6.1788072574635959e-08, 2.2643462844325078e-07, 1.4258638710324032e-07,-1.1247681773372874e-08,-8.3956819107020674e-08,-6.0787721137756854e-08, + 3.1766200762388133e-02, 2.9748017740636751e-02, 2.6096311739395112e-02, 2.1458210961921659e-02, 1.6553270015541761e-02, 1.1993189987342501e-02, 8.1717522353151103e-03, 5.2439664130669939e-03, +-2.0181830217513817e-03,-1.7617429935773005e-03,-1.3221780659874172e-03,-8.1506592187131910e-04,-3.5340403949741389e-04,-1.1656942833459388e-05, 1.8724044280211787e-04, 2.6249158434875613e-04, + 2.5644002817408126e-04, 2.0756327566856178e-04, 1.2844131543370560e-04, 4.6473013878189614e-05,-1.5323560686205339e-05,-4.6850106318755368e-05,-5.1278947922076614e-05,-3.9332363712504066e-05, +-4.8876752505519483e-05,-3.6455722654730967e-05,-1.7532196839367120e-05,-1.8305622729026096e-07, 9.9503966772032966e-06, 1.1914516231165699e-05, 8.4768568528411807e-06, 3.4804395535681588e-06, + 1.2421029850788516e-05, 8.4753405933130602e-06, 2.8400740411005770e-06,-1.6448014597509068e-06,-3.4125793164624682e-06,-2.7678685490690115e-06,-1.1037665249972335e-06, 2.8710422950833556e-07, +-3.9456892574754562e-06,-2.4416146156498367e-06,-4.3681867962589667e-07, 9.1193072510117244e-07, 1.1438516959792810e-06, 6.1464166431485353e-07,-1.9116681760898808e-08,-3.4001824858238681e-07, + 1.5040746418256195e-06, 8.3517241007408694e-07, 7.3312684266654715e-09,-4.4550919009553901e-07,-3.9708156020384134e-07,-1.0513635619385240e-07, 1.1971070066954601e-07, 1.5990305720249418e-07, +-6.6890223175153253e-07,-3.2892668384777014e-07, 5.9432181545645940e-08, 2.2174741359048630e-07, 1.4066838894257268e-07,-1.0058516260868574e-08,-8.2133526573057944e-08,-6.0092826613545627e-08, + 3.1685678073510172e-02, 2.9677713683555120e-02, 2.6043527183100431e-02, 2.1425645501330651e-02, 1.6539121700887859e-02, 1.1992686356337569e-02, 8.1792009201709179e-03, 5.2544346477050004e-03, +-2.0079643899550519e-03,-1.7534695369847801e-03,-1.3170544088799939e-03,-8.1320716520883254e-04,-3.5400905788669779e-04,-1.3521444931679019e-05, 1.8519605459526786e-04, 2.6092107717821163e-04, + 2.5449485297027175e-04, 2.0611180107976690e-04, 1.2774229496078228e-04, 4.6464385467865060e-05,-1.4928262723716090e-05,-4.6375733419401155e-05,-5.0940756852390381e-05,-3.9192920056834878e-05, +-4.8383051890504847e-05,-3.6118653449154807e-05,-1.7418943248156477e-05,-2.4812346965327894e-07, 9.8148043653221394e-06, 1.1804292080044542e-05, 8.4326921666787600e-06, 3.4916534073899257e-06, + 1.2264398441350039e-05, 8.3783406535488738e-06, 2.8226077867025850e-06,-1.6086782850868457e-06,-3.3671414184766284e-06,-2.7433670958006101e-06,-1.1044362949867041e-06, 2.7363078286392646e-07, +-3.8860577878011655e-06,-2.4084693152971380e-06,-4.3647849633514288e-07, 8.9428652597273750e-07, 1.1280804607710246e-06, 6.1042847195484940e-07,-1.4393481533001610e-08,-3.3367001556636434e-07, + 1.4775884725040275e-06, 8.2213105513998769e-07, 9.6626857999302333e-09,-4.3673133253292754e-07,-3.9149285369711383e-07,-1.0551561607693006e-07, 1.1646122943796668e-07, 1.5751321419740637e-07, +-6.5545741736403985e-07,-3.2315977377202512e-07, 5.7150936736308337e-08, 2.1716228147740403e-07, 1.3877025252862932e-07,-8.9113740919580257e-09,-8.0345936905638683e-08,-5.9399626984098107e-08, + 3.1605562579013327e-02, 2.9607739407142591e-02, 2.5990947015079851e-02, 2.1393154383413170e-02, 1.6524949500295250e-02, 1.1992108523573901e-02, 8.1865680995801427e-03, 5.2648401737292868e-03, +-1.9978231718707357e-03,-1.7452538707515841e-03,-1.3119586221749108e-03,-8.1134880535308970e-04,-3.5459837234834077e-04,-1.5367060032345919e-05, 1.8316515869281312e-04, 2.5935615658193630e-04, + 2.5256930111915155e-04, 2.0467373201139838e-04, 1.2704779066242326e-04, 4.6453183079076107e-05,-1.4538352271002382e-05,-4.5905749929910897e-05,-5.0604332855930148e-05,-3.9053038558311106e-05, +-4.7895569107753166e-05,-3.5785437863399032e-05,-1.7306388010418242e-05,-3.1175980718178907e-07, 9.6810170117523729e-06, 1.1695044612584279e-05, 8.3885044338037569e-06, 3.5023333765164981e-06, + 1.2110131244354134e-05, 8.2826561538691498e-06, 2.8051569807495556e-06,-1.5732539048532446e-06,-3.3223299190641239e-06,-2.7190344615311516e-06,-1.1049197175636670e-06, 2.6040936105126460e-07, +-3.8274750904849842e-06,-2.3758410852514020e-06,-4.3604686211384259e-07, 8.7698979999498332e-07, 1.1125312605009309e-06, 6.0620101601273143e-07,-9.7988395000298255e-09,-3.2741682220803565e-07, + 1.4516340052335823e-06, 8.0931814701384549e-07, 1.1904308010271655e-08,-4.2813487775752673e-07,-3.8597967382942085e-07,-1.0584981005777915e-07, 1.1328255800927131e-07, 1.5515106083641173e-07, +-6.4231585821973676e-07,-3.1750393992913694e-07, 5.4942024140750536e-08, 2.1267691043083125e-07, 1.3689205590508720e-07,-7.8050100414459765e-09,-7.8593437585563066e-08,-5.8708386277910262e-08, + 3.1525851197981833e-02, 2.9538092610468261e-02, 2.5938570124122751e-02, 2.1360737590253021e-02, 1.6510754037630259e-02, 1.1991457241030300e-02, 8.1938543118210902e-03, 5.2751832149474428e-03, +-1.9877585875135717e-03,-1.7370954617258183e-03,-1.3068905257836334e-03,-8.0949094412597830e-04,-3.5517219694541566e-04,-1.7193962932315898e-05, 1.8114768439536459e-04, 2.5779683964921238e-04, + 2.5066312578775340e-04, 2.0324891536553885e-04, 1.2635777461771905e-04, 4.6439463392755056e-05,-1.4153757628527933e-05,-4.5440116918128715e-05,-5.0269676706857572e-05,-3.8912740371707297e-05, +-4.7414210422214555e-05,-3.5456023691141694e-05,-1.7194530435850474e-05,-3.7399291574856787e-07, 9.5490097374586688e-06, 1.1586767065057347e-05, 8.3443010060326941e-06, 3.5124894661959301e-06, + 1.1958186731072861e-05, 8.1882665931698626e-06, 2.7877252099446551e-06,-1.5385145639252532e-06,-3.2781359972039503e-06,-2.6948711811037562e-06,-1.1052218788238022e-06, 2.4743618463188650e-07, +-3.7699201379029987e-06,-2.3437208761824721e-06,-4.3552731103186154e-07, 8.6003336978499101e-07, 1.0972010904017509e-06, 6.0196106665261424e-07,-5.3299514992235271e-09,-3.2125756259483598e-07, + 1.4261992617205266e-06, 7.9672928952689830e-07, 1.4058982429867177e-08,-4.1971587999764545e-07,-3.8054122235696915e-07,-1.0614054456048576e-07, 1.1017329471090308e-07, 1.5281651378563946e-07, +-6.2946997219362833e-07,-3.1195688066681134e-07, 5.2803205382304908e-08, 2.0828903112074902e-07, 1.3503386204663466e-07,-6.7382139412803666e-09,-7.6875423238859881e-08,-5.8019355695892334e-08, + 3.1446540880502659e-02, 2.9468771013805350e-02, 2.5886395406199750e-02, 2.1328395099906049e-02, 1.6496535928253689e-02, 1.1990733253724710e-02, 8.2010600923435178e-03, 5.2854639958337842e-03, +-1.9777698666973084e-03,-1.7289937828379662e-03,-1.3018499407339811e-03,-8.0763368110405021e-04,-3.5573074289282913e-04,-1.9002326876569817e-05, 1.7914356097838667e-04, 2.5624314263109939e-04, + 2.4877608385934225e-04, 2.0183720011620948e-04, 1.2567221893636455e-04, 4.6423281993584597e-05,-1.3774408084843079e-05,-4.4978795722868864e-05,-4.9936788889288466e-05,-3.8772046254608827e-05, +-4.6938883743132768e-05,-3.5130359538852382e-05,-1.7083369693729987e-05,-4.3484992648155316e-07, 9.4187580137313058e-06, 1.1479452653782847e-05, 8.3000890339442375e-06, 3.5221315313995936e-06, + 1.1808524204280386e-05, 8.0951518286548015e-06, 2.7703159223001024e-06,-1.5044467915562664e-06,-3.2345509511770807e-06,-2.6708777199353983e-06,-1.1053477537523729e-06, 2.3470751830251741e-07, +-3.7133723756255840e-06,-2.3120998123612723e-06,-4.3492326577194122e-07, 8.4341021472654996e-07, 1.0820869771879632e-06, 5.9771033098997675e-07,-9.8406867030152053e-10,-3.1519113428088771e-07, + 1.4012725632643117e-06, 7.8436017663811695e-07, 1.6129469663362223e-08,-4.1147048452140296e-07,-3.7517669787062058e-07,-1.0638937881561243e-07, 1.0713207220673587e-07, 1.5050947977557964e-07, +-6.1691238662619474e-07,-3.0651634244110494e-07, 5.0732310279042822e-08, 2.0399642987963217e-07, 1.3319571651910126e-07,-5.7098081037228053e-09,-7.5191296396321809e-08,-5.7332773784924837e-08, + 3.1367628607276862e-02, 2.9399772358389621e-02, 2.5834421764418081e-02, 2.1296126886489328e-02, 1.6482295779134171e-02, 1.1989937299776191e-02, 8.2081859737679185e-03, 5.2956827414961972e-03, +-1.9678562488872411e-03,-1.7209483130186144e-03,-1.2968366891686345e-03,-8.0577711366205604e-04,-3.5627421859658545e-04,-2.0792323569067753e-05, 1.7715271770366199e-04, 2.5469508095619150e-04, + 2.4690793586862672e-04, 2.0043843727711105e-04, 1.2499109576395500e-04, 4.6404693391735412e-05,-1.3400233902699293e-05,-4.4521747954655462e-05,-4.9605669605282446e-05,-3.8630976573363464e-05, +-4.6469498591515668e-05,-3.4808394811598829e-05,-1.6972904818069319e-05,-4.9435743729715309e-07, 9.2902376575508833e-06, 1.1373094577819908e-05, 8.2558754713226760e-06, 3.5312692785416616e-06, + 1.1661103779916839e-05, 8.0032920690473949e-06, 2.7529324310514936e-06,-1.4710373947034785e-06,-3.1915661975607792e-06,-2.6470544763935028e-06,-1.1053022084987472e-06, 2.2221967082276520e-07, +-3.6578117108694440e-06,-2.2809691883741195e-06,-4.3423804025462227e-07, 8.2711346654795919e-07, 1.0671859796961762e-06, 5.9345045468474097e-07, 3.2415036832349010e-09,-3.0921643880795001e-07, + 1.3768425224953245e-06, 7.7220659124789020e-07, 1.8118444833749962e-08,-4.0339492397355387e-07,-3.6988529751667154e-07,-1.0659782554107820e-07, 1.0415754681313402e-07, 1.4822985635144091e-07, +-6.0463593124743431e-07,-3.0118012052694874e-07, 4.8727237281273830e-08, 1.9979694460706299e-07, 1.3137765045004862e-07,-4.7186477956994096e-09,-7.3540466719778852e-08,-5.6648867394321842e-08, + 3.1289111389236159e-02, 2.9331094406180890e-02, 2.5782648108976899e-02, 2.1263932920268219e-02, 1.6468034188959531e-02, 1.1989070110466229e-02, 8.2152324858851596e-03, 5.3058396776434974e-03, +-1.9580169830552691e-03,-1.7129585371175732e-03,-1.2918505943436097e-03,-8.0392133701552917e-04,-3.5680282969241875e-04,-2.2564123183627452e-05, 1.7517508383036763e-04, 2.5315266924616844e-04, + 2.4505844593769588e-04, 1.9905247987007718e-04, 1.2431437728726278e-04, 4.6383751044028611e-05,-1.3031166305387204e-05,-4.4068935496362354e-05,-4.9276318782566513e-05,-3.8489551309035916e-05, +-4.6005966067618701e-05,-3.4490079699336706e-05,-1.6863134712814733e-05,-5.5254152399439229e-07, 9.1634248269763862e-06, 1.1267686021604621e-05, 8.2116670793799343e-06, 3.5399122673234788e-06, + 1.1515886368281995e-05, 7.9126678682539849e-06, 2.7355779186834153e-06,-1.4382734517968435e-06,-3.1491732700824367e-06,-2.6234017842263000e-06,-1.1050900023882356e-06, 2.0996899470191341e-07, +-3.6032185000280100e-06,-2.2503204663710434e-06,-4.3347484245992721e-07, 8.1113640547120060e-07, 1.0524951891581172e-06, 5.8918302379524593e-07, 7.3494068155889523e-09,-3.0333238181259276e-07, + 1.3528980336569665e-06, 7.6026440472175529e-07, 2.0028499194230117e-08,-3.9548551557795952e-07,-3.6466621795133588e-07,-1.0676735227850774e-07, 1.0124839857543617e-07, 1.4597753190004634e-07, +-5.9263362893521126e-07,-2.9594606070661304e-07, 4.6785953347696299e-08, 1.9568846211758051e-07, 1.2957968198418289e-07,-3.7636202945888255e-09,-7.1922351680876334e-08,-5.5967851324670247e-08, +}; + +// rs, ws = dft.radi.gauss_chebyshev(nrs) +static double rs_gauss_chebyshev2047[] = { +2.109423746787797e-15, 6.672440377997191e-14, 5.055955654142963e-13, 2.130295939650750e-12, 6.500799898390142e-12, +1.617572742418361e-11, 3.496158917926095e-11, 6.816192055225656e-11, 1.228277479725648e-10, 2.080052796671339e-10, +3.349868160640312e-10, 5.175581074823299e-10, 7.722494865802787e-10, 1.118582004799862e-09, 1.579318786859574e-09, +2.180712166399701e-09, 2.952752042872930e-09, 3.929414571501866e-09, 5.148910409147334e-09, 6.653931405864455e-09, +8.491899960993976e-09, 1.071521438245071e-08, 1.338149835383717e-08, 1.655384551657590e-08, 2.030106827088929e-08, +2.469794224690958e-08, 2.982545377339108e-08, 3.577104545904319e-08, 4.262886077466277e-08, 5.049999096673474e-08, +5.949271808525225e-08, 6.972276078709427e-08, 8.131351858509106e-08, 9.439631398766579e-08, 1.091106383022122e-07, +1.256043927755357e-07, 1.440341329539407e-07, 1.645653087134491e-07, 1.873725090639766e-07, 2.126397006252390e-07, +2.405604703215047e-07, 2.713382656338581e-07, 3.051866345193943e-07, 3.423294646642816e-07, 3.830012232919344e-07, +4.274471947507408e-07, 4.759237197671240e-07, 5.286984324781585e-07, 5.860504967980518e-07, 6.482708438948492e-07, +7.156624082238494e-07, 7.885403613405728e-07, 8.672323489333778e-07, 9.520787229710947e-07, 1.043432776848263e-06, +1.141660977199699e-06, 1.247143197269374e-06, 1.360272948169872e-06, 1.481457609364689e-06, 1.611118660815869e-06, +1.749691911134832e-06, 1.897627727176499e-06, 2.055391262745232e-06, 2.223462686079536e-06, 2.402337407003685e-06, +2.592526303746290e-06, 2.794555946650235e-06, 3.008968825213287e-06, 3.236323571464972e-06, 3.477195182233217e-06, +3.732175243409408e-06, 4.001872150327657e-06, 4.286911329698384e-06, 4.587935458988390e-06, 4.905604686689102e-06, +5.240596849920287e-06, 5.593607693366032e-06, 5.965351084213921e-06, 6.356559230646930e-06, 6.767982894895219e-06, +7.200391608730428e-06, 7.654573886295424e-06, 8.131337437489172e-06, 8.631509378020930e-06, 9.155936441795909e-06, +9.705485189082097e-06, 1.028104221745263e-05, 1.088351436739909e-05, 1.151382893083142e-05, 1.217293385680218e-05, +1.286179795578768e-05, 1.358141110463507e-05, 1.433278444951114e-05, 1.511695060718576e-05, 1.593496386720350e-05, +1.678790039139066e-05, 1.767685841225219e-05, 1.860295843236770e-05, 1.956734342012378e-05, 2.057117900589045e-05, +2.161565367753138e-05, 2.270197897313864e-05, 2.383138967454457e-05, 2.500514399861320e-05, 2.622452378708839e-05, +2.749083469755220e-05, 2.880540638994233e-05, 3.016959271540109e-05, 3.158477190057241e-05, 3.305234673423030e-05, +3.457374474935548e-05, 3.615041840676625e-05, 3.778384527719503e-05, 3.947552821959022e-05, 4.122699556186049e-05, +4.303980127806639e-05, 4.491552516561192e-05, 4.685577301977162e-05, 4.886217680932781e-05, 5.093639484854418e-05, +5.308011196969442e-05, 5.529503969314842e-05, 5.758291639734736e-05, 5.994550748600336e-05, 6.238460555652026e-05, +6.490203056430666e-05, 6.749962998708892e-05, 7.017927898900211e-05, 7.294288058168341e-05, 7.579236578481030e-05, +7.872969378541761e-05, 8.175685209610428e-05, 8.487585671101971e-05, 8.808875226173907e-05, 9.139761217080711e-05, +9.480453880483797e-05, 9.831166362528343e-05, 1.019211473387571e-04, 1.056351800459154e-04, 1.094559813878959e-04, +1.133858006934219e-04, 1.174269171216880e-04, 1.215816398080216e-04, 1.258523080027718e-04, 1.302412912136397e-04, +1.347509893450116e-04, 1.393838328340724e-04, 1.441422827881400e-04, 1.490288311192245e-04, 1.540460006780320e-04, +1.591963453845269e-04, 1.644824503607145e-04, 1.699069320578728e-04, 1.754724383852269e-04, 1.811816488362927e-04, +1.870372746145543e-04, 1.930420587546999e-04, 1.991987762471892e-04, 2.055102341569359e-04, 2.119792717443225e-04, +2.186087605804410e-04, 2.254016046659979e-04, 2.323607405440020e-04, 2.394891374138952e-04, 2.467897972433519e-04, +2.542657548791905e-04, 2.619200781547315e-04, 2.697558679988221e-04, 2.777762585403076e-04, 2.859844172141690e-04, +2.943835448622201e-04, 3.029768758371354e-04, 3.117676780998169e-04, 3.207592533200909e-04, 3.299549369719657e-04, +3.393580984301092e-04, 3.489721410631086e-04, 3.588005023260621e-04, 3.688466538522839e-04, 3.791141015414556e-04, +3.896063856482224e-04, 4.003270808684567e-04, 4.112797964238579e-04, 4.224681761463289e-04, 4.338958985578012e-04, +4.455666769520583e-04, 4.574842594735617e-04, 4.696524291936122e-04, 4.820750041871769e-04, 4.947558376058314e-04, +5.076988177517006e-04, 5.209078681476242e-04, 5.343869476069907e-04, 5.481400503023481e-04, 5.621712058306860e-04, +5.764844792799373e-04, 5.910839712907068e-04, 6.059738181199981e-04, 6.211581917001663e-04, 6.366412996980930e-04, +6.524273855731400e-04, 6.685207286318828e-04, 6.849256440834006e-04, 7.016464830910119e-04, 7.186876328242331e-04, +7.360535165076287e-04, 7.537485934698829e-04, 7.717773591888744e-04, 7.901443453385282e-04, 8.088541198311150e-04, +8.279112868591065e-04, 8.473204869365869e-04, 8.670863969370002e-04, 8.872137301316751e-04, 9.077072362243532e-04, +9.285717013873818e-04, 9.498119482923562e-04, 9.714328361428715e-04, 9.934392607039433e-04, 1.015836154330207e-03, +1.038628485992676e-03, 1.061821261303719e-03, 1.085419522541042e-03, 1.109428348670116e-03, 1.133852855364603e-03, +1.158698195025232e-03, 1.183969556797670e-03, 1.209672166589626e-03, 1.235811287083721e-03, 1.262392217753150e-03, +1.289420294870558e-03, 1.316900891520256e-03, 1.344839417606991e-03, 1.373241319861718e-03, 1.402112081848927e-03, +1.431457223969756e-03, 1.461282303466205e-03, 1.491592914420803e-03, 1.522394687758388e-03, 1.553693291242553e-03, +1.585494429474199e-03, 1.617803843886989e-03, 1.650627312739905e-03, 1.683970651111810e-03, 1.717839710891900e-03, +1.752240380768710e-03, 1.787178586219684e-03, 1.822660289497513e-03, 1.858691489615705e-03, 1.895278222332486e-03, +1.932426560133482e-03, 1.970142612213621e-03, 2.008432524456039e-03, 2.047302479410984e-03, 2.086758696273061e-03, +2.126807430856470e-03, 2.167454975569916e-03, 2.208707659388853e-03, 2.250571847827287e-03, 2.293053942908019e-03, +2.336160383131225e-03, 2.379897643443152e-03, 2.424272235199809e-03, 2.469290706133775e-03, 2.514959640316894e-03, +2.561285658122636e-03, 2.608275416186467e-03, 2.655935607365323e-03, 2.704272960696308e-03, 2.753294241353399e-03, +2.803006250601814e-03, 2.853415825754047e-03, 2.904529840121461e-03, 2.956355202966998e-03, 3.008898859453768e-03, +3.062167790596981e-03, 3.116169013208991e-03, 3.170909579848002e-03, 3.226396578761892e-03, 3.282637133833477e-03, +3.339638404522671e-03, 3.397407585808199e-03, 3.455951908129085e-03, 3.515278637321595e-03, 3.575395074560062e-03, +3.636308556291601e-03, 3.698026454172276e-03, 3.760556175002594e-03, 3.823905160659002e-03, 3.888080888027168e-03, +3.953090868932585e-03, 4.018942650070745e-03, 4.085643812935302e-03, 4.153201973745579e-03, 4.221624783372957e-03, +4.290919927267156e-03, 4.361095125378189e-03, 4.432158132081643e-03, 4.504116736099295e-03, 4.576978760420625e-03, +4.650752062221875e-03, 4.725444532785894e-03, 4.801064097417984e-03, 4.877618715364740e-03, 4.955116379727453e-03, +5.033565117378069e-03, 5.112972988871589e-03, 5.193348088359806e-03, 5.274698543501044e-03, 5.357032515371896e-03, +5.440358198376516e-03, 5.524683820154142e-03, 5.610017641487719e-03, 5.696367956208759e-03, 5.783743091105631e-03, +5.872151405824644e-03, 5.961601292776342e-03, 6.052101177037361e-03, 6.143659516251621e-03, 6.236284800532066e-03, +6.329985552359529e-03, 6.424770326483253e-03, 6.520647709817085e-03, 6.617626321339221e-03, 6.715714811986073e-03, +6.814921864549350e-03, 6.915256193570474e-03, 7.016726545233665e-03, 7.119341697260251e-03, 7.223110458799420e-03, +7.328041670320640e-03, 7.434144203503856e-03, 7.541426961128916e-03, 7.649898876964545e-03, 7.759568915657322e-03, +7.870446072618553e-03, 7.982539373910136e-03, 8.095857876131873e-03, 8.210410666305679e-03, 8.326206861760221e-03, +8.443255610015132e-03, 8.561566088662653e-03, 8.681147505251285e-03, 8.802009097167107e-03, 8.924160131514092e-03, +9.047609904994536e-03, 9.172367743788712e-03, 9.298443003434631e-03, 9.425845068704142e-03, 9.554583353483359e-03, +9.684667300646432e-03, 9.816106381935530e-03, 9.948910097833163e-03, 1.008308797743995e-02, 1.021864957834762e-02, +1.035560448651363e-02, 1.049396231613464e-02, 1.063373270951939e-02, 1.077492533696045e-02, 1.091754989660665e-02, +1.106161611433398e-02, 1.120713374361704e-02, 1.135411256539764e-02, 1.150256238795655e-02, 1.165249304678062e-02, +1.180391440443351e-02, 1.195683635042222e-02, 1.211126880106639e-02, 1.226722169936456e-02, 1.242470501486137e-02, +1.258372874351443e-02, 1.274430290755935e-02, 1.290643755537668e-02, 1.307014276135632e-02, 1.323542862576210e-02, +1.340230527459707e-02, 1.357078285946678e-02, 1.374087155744330e-02, 1.391258157092867e-02, 1.408592312751711e-02, +1.426090647985911e-02, 1.443754190552227e-02, 1.461583970685365e-02, 1.479581021084275e-02, 1.497746376898046e-02, +1.516081075712217e-02, 1.534586157534801e-02, 1.553262664782251e-02, 1.572111642265639e-02, 1.591134137176486e-02, +1.610331199072890e-02, 1.629703879865418e-02, 1.649253233802961e-02, 1.668980317458724e-02, 1.688886189716132e-02, +1.708971911754642e-02, 1.729238547035528e-02, 1.749687161287938e-02, 1.770318822494388e-02, 1.791134600876854e-02, +1.812135568882300e-02, 1.833322801168658e-02, 1.854697374590397e-02, 1.876260368184401e-02, 1.898012863155596e-02, +1.919955942862750e-02, 1.942090692804088e-02, 1.964418200603013e-02, 1.986939555993894e-02, 2.009655850807557e-02, +2.032568178957128e-02, 2.055677636423647e-02, 2.078985321241644e-02, 2.102492333484884e-02, 2.126199775252069e-02, +2.150108750652369e-02, 2.174220365791113e-02, 2.198535728755502e-02, 2.223055949600172e-02, 2.247782140332888e-02, +2.272715414900195e-02, 2.297856889173067e-02, 2.323207680932560e-02, 2.348768909855503e-02, 2.374541697500121e-02, +2.400527167291688e-02, 2.426726444508320e-02, 2.453140656266606e-02, 2.479770931507197e-02, 2.506618400980654e-02, +2.533684197233121e-02, 2.560969454592055e-02, 2.588475309151861e-02, 2.616202898759867e-02, 2.644153363001833e-02, +2.672327843187916e-02, 2.700727482338328e-02, 2.729353425169223e-02, 2.758206818078524e-02, 2.787288809131727e-02, +2.816600548047699e-02, 2.846143186184702e-02, 2.875917876526146e-02, 2.905925773666584e-02, 2.936168033797626e-02, +2.966645814693858e-02, 2.997360275698868e-02, 3.028312577711201e-02, 3.059503883170467e-02, 3.090935356043223e-02, +3.122608161809270e-02, 3.154523467447490e-02, 3.186682441422239e-02, 3.219086253669268e-02, 3.251736075582046e-02, +3.284633079997867e-02, 3.317778441184183e-02, 3.351173334824786e-02, 3.384818938006162e-02, 3.418716429203716e-02, +3.452866988268266e-02, 3.487271796412339e-02, 3.521932036196629e-02, 3.556848891516351e-02, 3.592023547587964e-02, +3.627457190935368e-02, 3.663151009376786e-02, 3.699106192011115e-02, 3.735323929204692e-02, 3.771805412577878e-02, +3.808551834991891e-02, 3.845564390535294e-02, 3.882844274511099e-02, 3.920392683423346e-02, 3.958210814964069e-02, +3.996299868000186e-02, 4.034661042560395e-02, 4.073295539822197e-02, 4.112204562098976e-02, 4.151389312826947e-02, +4.190850996552320e-02, 4.230590818918512e-02, 4.270609986653273e-02, 4.310909707555954e-02, 4.351491190484791e-02, +4.392355645344292e-02, 4.433504283072520e-02, 4.474938315628607e-02, 4.516658955980202e-02, 4.558667418091022e-02, +4.600964916908301e-02, 4.643552668350659e-02, 4.686431889295495e-02, 4.729603797566861e-02, 4.773069611923253e-02, +4.816830552045337e-02, 4.860887838523908e-02, 4.905242692847755e-02, 4.949896337391668e-02, 4.994849995404438e-02, +5.040104890996966e-02, 5.085662249130440e-02, 5.131523295604434e-02, 5.177689257045137e-02, 5.224161360893820e-02, +5.270940835394999e-02, 5.318028909584915e-02, 5.365426813280050e-02, 5.413135777065581e-02, 5.461157032283936e-02, +5.509491811023537e-02, 5.558141346107348e-02, 5.607106871081735e-02, 5.656389620205238e-02, 5.705990828437424e-02, +5.755911731427787e-02, 5.806153565504846e-02, 5.856717567665026e-02, 5.907604975561864e-02, 5.958817027495178e-02, +6.010354962400222e-02, 6.062220019837017e-02, 6.114413439979682e-02, 6.166936463605877e-02, 6.219790332086217e-02, +6.272976287373844e-02, 6.326495571993940e-02, 6.380349429033505e-02, 6.434539102131032e-02, 6.489065835466190e-02, +6.543930873749826e-02, 6.599135462213745e-02, 6.654680846600769e-02, 6.710568273154727e-02, 6.766798988610578e-02, +6.823374240184577e-02, 6.880295275564441e-02, 6.937563342899777e-02, 6.995179690792341e-02, 7.053145568286479e-02, +7.111462224859677e-02, 7.170130910413064e-02, 7.229152875262046e-02, 7.288529370127028e-02, 7.348261646124121e-02, +7.408350954756104e-02, 7.468798547903088e-02, 7.529605677813689e-02, 7.590773597096001e-02, 7.652303558708617e-02, +7.714196815951879e-02, 7.776454622459050e-02, 7.839078232187713e-02, 7.902068899411019e-02, 7.965427878709253e-02, +8.029156424961181e-02, 8.093255793335807e-02, 8.157727239283941e-02, 8.222572018529828e-02, 8.287791387063070e-02, +8.353386601130464e-02, 8.419358917227782e-02, 8.485709592092017e-02, 8.552439882693175e-02, 8.619551046226637e-02, +8.687044340105243e-02, 8.754921021951523e-02, 8.823182349590231e-02, 8.891829581040556e-02, 8.960863974508770e-02, +9.030286788380648e-02, 9.100099281214191e-02, 9.170302711732337e-02, 9.240898338815640e-02, 9.311887421495202e-02, +9.383271218945555e-02, 9.455050990477631e-02, 9.527227995531851e-02, 9.599803493671222e-02, 9.672778744574539e-02, +9.746155008029700e-02, 9.819933543926984e-02, 9.894115612252541e-02, 9.968702473081781e-02, 1.004369538657303e-01, +1.011909561296108e-01, 1.019490441255099e-01, 1.027112304571168e-01, 1.034775277287007e-01, 1.042479485450465e-01, +1.050225055113976e-01, 1.058012112333943e-01, 1.065840783170174e-01, 1.073711193685279e-01, 1.081623469944119e-01, +1.089577738013222e-01, 1.097574123960239e-01, 1.105612753853389e-01, 1.113693753760913e-01, 1.121817249750545e-01, +1.129983367888973e-01, 1.138192234241328e-01, 1.146443974870655e-01, 1.154738715837426e-01, 1.163076583199018e-01, +1.171457703009237e-01, 1.179882201317826e-01, 1.188350204169984e-01, 1.196861837605896e-01, 1.205417227660276e-01, +1.214016500361893e-01, 1.222659781733142e-01, 1.231347197789590e-01, 1.240078874539534e-01, 1.248854937983590e-01, +1.257675514114263e-01, 1.266540728915522e-01, 1.275450708362414e-01, 1.284405578420657e-01, 1.293405465046229e-01, +1.302450494185015e-01, 1.311540791772403e-01, 1.320676483732928e-01, 1.329857695979896e-01, 1.339084554415035e-01, +1.348357184928154e-01, 1.357675713396769e-01, 1.367040265685807e-01, 1.376450967647247e-01, 1.385907945119819e-01, +1.395411323928671e-01, 1.404961229885086e-01, 1.414557788786153e-01, 1.424201126414496e-01, 1.433891368537974e-01, +1.443628640909412e-01, 1.453413069266331e-01, 1.463244779330659e-01, 1.473123896808505e-01, 1.483050547389889e-01, +1.493024856748500e-01, 1.503046950541461e-01, 1.513116954409096e-01, 1.523234993974717e-01, 1.533401194844389e-01, +1.543615682606737e-01, 1.553878582832733e-01, 1.564190021075507e-01, 1.574550122870155e-01, 1.584959013733559e-01, +1.595416819164206e-01, 1.605923664642027e-01, 1.616479675628233e-01, 1.627084977565156e-01, 1.637739695876110e-01, +1.648443955965244e-01, 1.659197883217403e-01, 1.670001602998014e-01, 1.680855240652955e-01, 1.691758921508438e-01, +1.702712770870920e-01, 1.713716914026971e-01, 1.724771476243222e-01, 1.735876582766231e-01, 1.747032358822443e-01, +1.758238929618096e-01, 1.769496420339153e-01, 1.780804956151250e-01, 1.792164662199631e-01, 1.803575663609118e-01, +1.815038085484055e-01, 1.826552052908276e-01, 1.838117690945084e-01, 1.849735124637223e-01, 1.861404479006873e-01, +1.873125879055626e-01, 1.884899449764504e-01, 1.896725316093949e-01, 1.908603602983842e-01, 1.920534435353513e-01, +1.932517938101783e-01, 1.944554236106973e-01, 1.956643454226953e-01, 1.968785717299186e-01, 1.980981150140780e-01, +1.993229877548531e-01, 2.005532024298998e-01, 2.017887715148576e-01, 2.030297074833560e-01, 2.042760228070226e-01, +2.055277299554933e-01, 2.067848413964206e-01, 2.080473695954835e-01, 2.093153270163990e-01, 2.105887261209327e-01, +2.118675793689117e-01, 2.131518992182352e-01, 2.144416981248900e-01, 2.157369885429627e-01, 2.170377829246547e-01, +2.183440937202972e-01, 2.196559333783660e-01, 2.209733143454988e-01, 2.222962490665121e-01, 2.236247499844177e-01, +2.249588295404408e-01, 2.262985001740399e-01, 2.276437743229242e-01, 2.289946644230754e-01, 2.303511829087662e-01, +2.317133422125836e-01, 2.330811547654477e-01, 2.344546329966364e-01, 2.358337893338069e-01, 2.372186362030203e-01, +2.386091860287636e-01, 2.400054512339762e-01, 2.414074442400741e-01, 2.428151774669761e-01, 2.442286633331299e-01, +2.456479142555387e-01, 2.470729426497893e-01, 2.485037609300803e-01, 2.499403815092498e-01, 2.513828167988050e-01, +2.528310792089532e-01, 2.542851811486299e-01, 2.557451350255318e-01, 2.572109532461475e-01, 2.586826482157885e-01, +2.601602323386246e-01, 2.616437180177138e-01, 2.631331176550388e-01, 2.646284436515390e-01, 2.661297084071472e-01, +2.676369243208250e-01, 2.691501037905967e-01, 2.706692592135881e-01, 2.721944029860626e-01, 2.737255475034589e-01, +2.752627051604298e-01, 2.768058883508796e-01, 2.783551094680049e-01, 2.799103809043336e-01, 2.814717150517650e-01, +2.830391243016115e-01, 2.846126210446394e-01, 2.861922176711112e-01, 2.877779265708287e-01, 2.893697601331744e-01, +2.909677307471566e-01, 2.925718508014534e-01, 2.941821326844561e-01, 2.957985887843163e-01, 2.974212314889901e-01, +2.990500731862850e-01, 3.006851262639058e-01, 3.023264031095035e-01, 3.039739161107222e-01, 3.056276776552466e-01, +3.072877001308524e-01, 3.089539959254547e-01, 3.106265774271579e-01, 3.123054570243069e-01, 3.139906471055368e-01, +3.156821600598255e-01, 3.173800082765443e-01, 3.190842041455124e-01, 3.207947600570477e-01, 3.225116884020204e-01, +3.242350015719100e-01, 3.259647119588548e-01, 3.277008319557116e-01, 3.294433739561082e-01, 3.311923503545005e-01, +3.329477735462284e-01, 3.347096559275741e-01, 3.364780098958174e-01, 3.382528478492958e-01, 3.400341821874614e-01, +3.418220253109411e-01, 3.436163896215949e-01, 3.454172875225767e-01, 3.472247314183941e-01, 3.490387337149696e-01, +3.508593068197022e-01, 3.526864631415291e-01, 3.545202150909875e-01, 3.563605750802787e-01, 3.582075555233305e-01, +3.600611688358608e-01, 3.619214274354428e-01, 3.637883437415691e-01, 3.656619301757168e-01, 3.675421991614147e-01, +3.694291631243073e-01, 3.713228344922228e-01, 3.732232256952404e-01, 3.751303491657568e-01, 3.770442173385560e-01, +3.789648426508764e-01, 3.808922375424802e-01, 3.828264144557234e-01, 3.847673858356254e-01, 3.867151641299390e-01, +3.886697617892225e-01, 3.906311912669101e-01, 3.925994650193838e-01, 3.945745955060461e-01, 3.965565951893925e-01, +3.985454765350852e-01, 4.005412520120260e-01, 4.025439340924303e-01, 4.045535352519037e-01, 4.065700679695144e-01, +4.085935447278706e-01, 4.106239780131954e-01, 4.126613803154038e-01, 4.147057641281797e-01, 4.167571419490529e-01, +4.188155262794768e-01, 4.208809296249073e-01, 4.229533644948806e-01, 4.250328434030933e-01, 4.271193788674812e-01, +4.292129834102998e-01, 4.313136695582048e-01, 4.334214498423336e-01, 4.355363367983851e-01, 4.376583429667026e-01, +4.397874808923573e-01, 4.419237631252284e-01, 4.440672022200890e-01, 4.462178107366874e-01, 4.483756012398330e-01, +4.505405862994800e-01, 4.527127784908120e-01, 4.548921903943288e-01, 4.570788345959309e-01, 4.592727236870064e-01, +4.614738702645177e-01, 4.636822869310888e-01, 4.658979862950926e-01, 4.681209809707396e-01, 4.703512835781659e-01, +4.725889067435219e-01, 4.748338630990631e-01, 4.770861652832382e-01, 4.793458259407801e-01, 4.816128577227978e-01, +4.838872732868651e-01, 4.861690852971143e-01, 4.884583064243279e-01, 4.907549493460301e-01, 4.930590267465806e-01, +4.953705513172678e-01, 4.976895357564027e-01, 5.000159927694126e-01, 5.023499350689369e-01, 5.046913753749205e-01, +5.070403264147112e-01, 5.093968009231546e-01, 5.117608116426910e-01, 5.141323713234518e-01, 5.165114927233572e-01, +5.188981886082140e-01, 5.212924717518137e-01, 5.236943549360304e-01, 5.261038509509224e-01, 5.285209725948272e-01, +5.309457326744665e-01, 5.333781440050431e-01, 5.358182194103427e-01, 5.382659717228360e-01, 5.407214137837790e-01, +5.431845584433166e-01, 5.456554185605835e-01, 5.481340070038090e-01, 5.506203366504190e-01, 5.531144203871413e-01, +5.556162711101083e-01, 5.581259017249632e-01, 5.606433251469644e-01, 5.631685543010918e-01, 5.657016021221524e-01, +5.682424815548867e-01, 5.707912055540767e-01, 5.733477870846521e-01, 5.759122391217992e-01, 5.784845746510683e-01, +5.810648066684829e-01, 5.836529481806498e-01, 5.862490122048672e-01, 5.888530117692359e-01, 5.914649599127690e-01, +5.940848696855039e-01, 5.967127541486132e-01, 5.993486263745167e-01, 6.019924994469936e-01, 6.046443864612955e-01, +6.073043005242590e-01, 6.099722547544215e-01, 6.126482622821319e-01, 6.153323362496688e-01, 6.180244898113527e-01, +6.207247361336633e-01, 6.234330883953553e-01, 6.261495597875734e-01, 6.288741635139710e-01, 6.316069127908261e-01, +6.343478208471607e-01, 6.370969009248573e-01, 6.398541662787782e-01, 6.426196301768863e-01, 6.453933059003619e-01, +6.481752067437248e-01, 6.509653460149543e-01, 6.537637370356102e-01, 6.565703931409543e-01, 6.593853276800731e-01, +6.622085540159985e-01, 6.650400855258326e-01, 6.678799356008698e-01, 6.707281176467215e-01, 6.735846450834394e-01, +6.764495313456413e-01, 6.793227898826366e-01, 6.822044341585503e-01, 6.850944776524510e-01, 6.879929338584769e-01, +6.908998162859632e-01, 6.938151384595697e-01, 6.967389139194078e-01, 6.996711562211717e-01, 7.026118789362655e-01, +7.055610956519328e-01, 7.085188199713881e-01, 7.114850655139461e-01, 7.144598459151537e-01, 7.174431748269205e-01, +7.204350659176528e-01, 7.234355328723833e-01, 7.264445893929071e-01, 7.294622491979135e-01, 7.324885260231198e-01, +7.355234336214076e-01, 7.385669857629564e-01, 7.416191962353794e-01, 7.446800788438597e-01, 7.477496474112875e-01, +7.508279157783965e-01, 7.539148978039009e-01, 7.570106073646355e-01, 7.601150583556924e-01, 7.632282646905613e-01, +7.663502403012684e-01, 7.694809991385172e-01, 7.726205551718293e-01, 7.757689223896850e-01, 7.789261147996659e-01, +7.820921464285965e-01, 7.852670313226878e-01, 7.884507835476791e-01, 7.916434171889846e-01, 7.948449463518353e-01, +7.980553851614256e-01, 8.012747477630576e-01, 8.045030483222885e-01, 8.077403010250762e-01, 8.109865200779265e-01, +8.142417197080427e-01, 8.175059141634705e-01, 8.207791177132497e-01, 8.240613446475629e-01, 8.273526092778845e-01, +8.306529259371322e-01, 8.339623089798182e-01, 8.372807727821995e-01, 8.406083317424322e-01, 8.439450002807229e-01, +8.472907928394819e-01, 8.506457238834783e-01, 8.540098078999933e-01, 8.573830593989762e-01, 8.607654929132000e-01, +8.641571229984173e-01, 8.675579642335178e-01, 8.709680312206844e-01, 8.743873385855537e-01, 8.778159009773718e-01, +8.812537330691559e-01, 8.847008495578534e-01, 8.881572651645022e-01, 8.916229946343914e-01, 8.950980527372238e-01, +8.985824542672787e-01, 9.020762140435729e-01, 9.055793469100264e-01, 9.090918677356259e-01, 9.126137914145884e-01, +9.161451328665288e-01, 9.196859070366245e-01, 9.232361288957822e-01, 9.267958134408062e-01, 9.303649756945656e-01, +9.339436307061634e-01, 9.375317935511056e-01, 9.411294793314710e-01, 9.447367031760827e-01, 9.483534802406778e-01, +9.519798257080818e-01, 9.556157547883781e-01, 9.592612827190845e-01, 9.629164247653245e-01, 9.665811962200039e-01, +9.702556124039845e-01, 9.739396886662626e-01, 9.776334403841419e-01, 9.813368829634150e-01, 9.850500318385387e-01, +9.887729024728134e-01, 9.925055103585639e-01, 9.962478710173183e-01, 9.999999999999885e-01, 1.003761912887053e+00, +1.007533625288741e+00, 1.011315152845208e+00, 1.015106511226732e+00, 1.018907716133886e+00, 1.022718783297729e+00, +1.026539728479992e+00, 1.030370567473266e+00, 1.034211316101185e+00, 1.038061990218617e+00, 1.041922605711853e+00, +1.045793178498799e+00, 1.049673724529162e+00, 1.053564259784643e+00, 1.057464800279131e+00, 1.061375362058895e+00, +1.065295961202775e+00, 1.069226613822382e+00, 1.073167336062285e+00, 1.077118144100216e+00, 1.081079054147261e+00, +1.085050082448059e+00, 1.089031245281002e+00, 1.093022558958432e+00, 1.097024039826843e+00, 1.101035704267078e+00, +1.105057568694538e+00, 1.109089649559378e+00, 1.113131963346712e+00, 1.117184526576819e+00, 1.121247355805347e+00, +1.125320467623518e+00, 1.129403878658337e+00, 1.133497605572798e+00, 1.137601665066093e+00, 1.141716073873820e+00, +1.145840848768196e+00, 1.149976006558267e+00, 1.154121564090119e+00, 1.158277538247093e+00, 1.162443945949996e+00, +1.166620804157320e+00, 1.170808129865452e+00, 1.175005940108896e+00, 1.179214251960488e+00, 1.183433082531615e+00, +1.187662448972432e+00, 1.191902368472086e+00, 1.196152858258938e+00, 1.200413935600778e+00, 1.204685617805057e+00, +1.208967922219106e+00, 1.213260866230362e+00, 1.217564467266596e+00, 1.221878742796136e+00, 1.226203710328099e+00, +1.230539387412619e+00, 1.234885791641076e+00, 1.239242940646329e+00, 1.243610852102946e+00, 1.247989543727436e+00, +1.252379033278489e+00, 1.256779338557203e+00, 1.261190477407328e+00, 1.265612467715497e+00, 1.270045327411469e+00, +1.274489074468365e+00, 1.278943726902908e+00, 1.283409302775671e+00, 1.287885820191309e+00, 1.292373297298812e+00, +1.296871752291744e+00, 1.301381203408493e+00, 1.305901668932515e+00, 1.310433167192582e+00, 1.314975716563032e+00, +1.319529335464022e+00, 1.324094042361773e+00, 1.328669855768829e+00, 1.333256794244309e+00, 1.337854876394158e+00, +1.342464120871408e+00, 1.347084546376432e+00, 1.351716171657208e+00, 1.356359015509568e+00, 1.361013096777469e+00, +1.365678434353252e+00, 1.370355047177901e+00, 1.375042954241313e+00, 1.379742174582563e+00, 1.384452727290165e+00, +1.389174631502349e+00, 1.393907906407323e+00, 1.398652571243548e+00, 1.403408645300008e+00, 1.408176147916483e+00, +1.412955098483826e+00, 1.417745516444234e+00, 1.422547421291532e+00, 1.427360832571444e+00, 1.432185769881879e+00, +1.437022252873206e+00, 1.441870301248542e+00, 1.446729934764032e+00, 1.451601173229137e+00, 1.456484036506918e+00, +1.461378544514324e+00, 1.466284717222483e+00, 1.471202574656990e+00, 1.476132136898203e+00, 1.481073424081531e+00, +1.486026456397735e+00, 1.490991254093218e+00, 1.495967837470327e+00, 1.500956226887651e+00, 1.505956442760323e+00, +1.510968505560318e+00, 1.515992435816760e+00, 1.521028254116228e+00, 1.526075981103059e+00, 1.531135637479659e+00, +1.536207244006810e+00, 1.541290821503984e+00, 1.546386390849654e+00, 1.551493972981610e+00, 1.556613588897271e+00, +1.561745259654005e+00, 1.566889006369449e+00, 1.572044850221828e+00, 1.577212812450277e+00, 1.582392914355164e+00, +1.587585177298418e+00, 1.592789622703854e+00, 1.598006272057504e+00, 1.603235146907942e+00, 1.608476268866623e+00, +1.613729659608212e+00, 1.618995340870920e+00, 1.624273334456844e+00, 1.629563662232302e+00, 1.634866346128176e+00, +1.640181408140253e+00, 1.645508870329571e+00, 1.650848754822764e+00, 1.656201083812407e+00, 1.661565879557370e+00, +1.666943164383165e+00, 1.672332960682303e+00, 1.677735290914645e+00, 1.683150177607763e+00, 1.688577643357294e+00, +1.694017710827305e+00, 1.699470402750651e+00, 1.704935741929343e+00, 1.710413751234912e+00, 1.715904453608779e+00, +1.721407872062620e+00, 1.726924029678748e+00, 1.732452949610475e+00, 1.737994655082498e+00, 1.743549169391268e+00, +1.749116515905380e+00, 1.754696718065947e+00, 1.760289799386987e+00, 1.765895783455807e+00, 1.771514693933398e+00, +1.777146554554815e+00, 1.782791389129577e+00, 1.788449221542058e+00, 1.794120075751887e+00, 1.799803975794342e+00, +1.805500945780753e+00, 1.811211009898908e+00, 1.816934192413453e+00, 1.822670517666302e+00, 1.828420010077050e+00, +1.834182694143378e+00, 1.839958594441473e+00, 1.845747735626441e+00, 1.851550142432729e+00, 1.857365839674541e+00, +1.863194852246269e+00, 1.869037205122911e+00, 1.874892923360502e+00, 1.880762032096549e+00, 1.886644556550454e+00, +1.892540522023960e+00, 1.898449953901579e+00, 1.904372877651041e+00, 1.910309318823730e+00, 1.916259303055132e+00, +1.922222856065283e+00, 1.928200003659215e+00, 1.934190771727414e+00, 1.940195186246274e+00, 1.946213273278552e+00, +1.952245058973829e+00, 1.958290569568978e+00, 1.964349831388619e+00, 1.970422870845602e+00, 1.976509714441463e+00, +1.982610388766907e+00, 1.988724920502281e+00, 1.994853336418056e+00, 2.000995663375304e+00, 2.007151928326185e+00, +2.013322158314437e+00, 2.019506380475860e+00, 2.025704622038817e+00, 2.031916910324722e+00, 2.038143272748544e+00, +2.044383736819307e+00, 2.050638330140594e+00, 2.056907080411055e+00, 2.063190015424920e+00, 2.069487163072505e+00, +2.075798551340740e+00, 2.082124208313677e+00, 2.088464162173019e+00, 2.094818441198647e+00, 2.101187073769142e+00, +2.107570088362325e+00, 2.113967513555783e+00, 2.120379378027419e+00, 2.126805710555982e+00, 2.133246540021617e+00, +2.139701895406415e+00, 2.146171805794957e+00, 2.152656300374876e+00, 2.159155408437412e+00, 2.165669159377972e+00, +2.172197582696696e+00, 2.178740707999024e+00, 2.185298564996266e+00, 2.191871183506183e+00, 2.198458593453555e+00, +2.205060824870774e+00, 2.211677907898422e+00, 2.218309872785862e+00, 2.224956749891828e+00, 2.231618569685028e+00, +2.238295362744736e+00, 2.244987159761402e+00, 2.251693991537250e+00, 2.258415888986902e+00, 2.265152883137981e+00, +2.271905005131734e+00, 2.278672286223657e+00, 2.285454757784115e+00, 2.292252451298977e+00, 2.299065398370248e+00, +2.305893630716707e+00, 2.312737180174549e+00, 2.319596078698030e+00, 2.326470358360118e+00, 2.333360051353147e+00, +2.340265189989474e+00, 2.347185806702143e+00, 2.354121934045548e+00, 2.361073604696108e+00, 2.368040851452938e+00, +2.375023707238529e+00, 2.382022205099434e+00, 2.389036378206953e+00, 2.396066259857824e+00, 2.403111883474923e+00, +2.410173282607964e+00, 2.417250490934200e+00, 2.424343542259140e+00, 2.431452470517258e+00, 2.438577309772715e+00, +2.445718094220081e+00, 2.452874858185064e+00, 2.460047636125243e+00, 2.467236462630808e+00, 2.474441372425298e+00, +2.481662400366349e+00, 2.488899581446454e+00, 2.496152950793708e+00, 2.503422543672581e+00, 2.510708395484677e+00, +2.518010541769510e+00, 2.525329018205282e+00, 2.532663860609661e+00, 2.540015104940573e+00, 2.547382787296993e+00, +2.554766943919739e+00, 2.562167611192282e+00, 2.569584825641548e+00, 2.577018623938735e+00, 2.584469042900134e+00, +2.591936119487944e+00, 2.599419890811117e+00, 2.606920394126182e+00, 2.614437666838086e+00, 2.621971746501049e+00, +2.629522670819411e+00, 2.637090477648490e+00, 2.644675204995446e+00, 2.652276891020153e+00, 2.659895574036073e+00, +2.667531292511137e+00, 2.675184085068634e+00, 2.682853990488102e+00, 2.690541047706231e+00, 2.698245295817766e+00, +2.705966774076419e+00, 2.713705521895790e+00, 2.721461578850285e+00, 2.729234984676057e+00, 2.737025779271931e+00, +2.744834002700356e+00, 2.752659695188352e+00, 2.760502897128468e+00, 2.768363649079740e+00, 2.776241991768669e+00, +2.784137966090191e+00, 2.792051613108661e+00, 2.799982974058850e+00, 2.807932090346928e+00, 2.815899003551485e+00, +2.823883755424526e+00, 2.831886387892502e+00, 2.839906943057326e+00, 2.847945463197409e+00, 2.856001990768700e+00, +2.864076568405733e+00, 2.872169238922677e+00, 2.880280045314406e+00, 2.888409030757559e+00, 2.896556238611621e+00, +2.904721712420011e+00, 2.912905495911168e+00, 2.921107632999655e+00, 2.929328167787261e+00, 2.937567144564127e+00, +2.945824607809858e+00, 2.954100602194663e+00, 2.962395172580491e+00, 2.970708364022179e+00, 2.979040221768610e+00, +2.987390791263878e+00, 2.995760118148456e+00, 3.004148248260384e+00, 3.012555227636456e+00, 3.020981102513418e+00, +3.029425919329174e+00, 3.037889724724010e+00, 3.046372565541807e+00, 3.054874488831285e+00, 3.063395541847244e+00, +3.071935772051809e+00, 3.080495227115702e+00, 3.089073954919505e+00, 3.097672003554945e+00, 3.106289421326176e+00, +3.114926256751088e+00, 3.123582558562608e+00, 3.132258375710021e+00, 3.140953757360297e+00, 3.149668752899430e+00, +3.158403411933788e+00, 3.167157784291462e+00, 3.175931920023649e+00, 3.184725869406014e+00, 3.193539682940093e+00, +3.202373411354682e+00, 3.211227105607252e+00, 3.220100816885367e+00, 3.228994596608115e+00, 3.237908496427554e+00, +3.246842568230157e+00, 3.255796864138282e+00, 3.264771436511644e+00, 3.273766337948806e+00, 3.282781621288667e+00, +3.291817339611980e+00, 3.300873546242867e+00, 3.309950294750358e+00, 3.319047638949922e+00, 3.328165632905038e+00, +3.337304330928749e+00, 3.346463787585256e+00, 3.355644057691494e+00, 3.364845196318752e+00, 3.374067258794277e+00, +3.383310300702911e+00, 3.392574377888732e+00, 3.401859546456707e+00, 3.411165862774356e+00, 3.420493383473447e+00, +3.429842165451671e+00, 3.439212265874365e+00, 3.448603742176221e+00, 3.458016652063027e+00, 3.467451053513418e+00, +3.476907004780629e+00, 3.486384564394270e+00, 3.495883791162131e+00, 3.505404744171970e+00, 3.514947482793334e+00, +3.524512066679399e+00, 3.534098555768812e+00, 3.543707010287551e+00, 3.553337490750810e+00, 3.562990057964882e+00, +3.572664773029073e+00, 3.582361697337624e+00, 3.592080892581644e+00, 3.601822420751070e+00, 3.611586344136635e+00, +3.621372725331849e+00, 3.631181627235008e+00, 3.641013113051205e+00, 3.650867246294375e+00, 3.660744090789333e+00, +3.670643710673850e+00, 3.680566170400736e+00, 3.690511534739940e+00, 3.700479868780675e+00, 3.710471237933548e+00, +3.720485707932715e+00, 3.730523344838058e+00, 3.740584215037369e+00, 3.750668385248565e+00, 3.760775922521908e+00, +3.770906894242247e+00, 3.781061368131299e+00, 3.791239412249907e+00, 3.801441095000366e+00, 3.811666485128723e+00, +3.821915651727133e+00, 3.832188664236210e+00, 3.842485592447412e+00, 3.852806506505434e+00, 3.863151476910643e+00, +3.873520574521499e+00, 3.883913870557034e+00, 3.894331436599327e+00, 3.904773344596001e+00, 3.915239666862761e+00, +3.925730476085937e+00, 3.936245845325039e+00, 3.946785848015371e+00, 3.957350557970621e+00, 3.967940049385509e+00, +3.978554396838440e+00, 3.989193675294189e+00, 3.999857960106600e+00, 4.010547327021312e+00, 4.021261852178517e+00, +4.032001612115733e+00, 4.042766683770594e+00, 4.053557144483683e+00, 4.064373072001384e+00, 4.075214544478740e+00, +4.086081640482366e+00, 4.096974438993361e+00, 4.107893019410271e+00, 4.118837461552051e+00, 4.129807845661077e+00, +4.140804252406161e+00, 4.151826762885632e+00, 4.162875458630386e+00, 4.173950421607024e+00, 4.185051734220966e+00, +4.196179479319638e+00, 4.207333740195653e+00, 4.218514600590035e+00, 4.229722144695478e+00, 4.240956457159616e+00, +4.252217623088338e+00, 4.263505728049137e+00, 4.274820858074468e+00, 4.286163099665153e+00, 4.297532539793814e+00, +4.308929265908342e+00, 4.320353365935387e+00, 4.331804928283875e+00, 4.343284041848587e+00, 4.354790796013735e+00, +4.366325280656599e+00, 4.377887586151166e+00, 4.389477803371849e+00, 4.401096023697188e+00, 4.412742339013631e+00, +4.424416841719308e+00, 4.436119624727885e+00, 4.447850781472409e+00, 4.459610405909228e+00, 4.471398592521917e+00, +4.483215436325263e+00, 4.495061032869268e+00, 4.506935478243211e+00, 4.518838869079734e+00, 4.530771302558964e+00, +4.542732876412686e+00, 4.554723688928536e+00, 4.566743838954274e+00, 4.578793425902044e+00, 4.590872549752711e+00, +4.602981311060233e+00, 4.615119810956068e+00, 4.627288151153625e+00, 4.639486433952758e+00, 4.651714762244315e+00, +4.663973239514709e+00, 4.676261969850549e+00, 4.688581057943313e+00, 4.700930609094060e+00, 4.713310729218199e+00, +4.725721524850293e+00, 4.738163103148915e+00, 4.750635571901562e+00, 4.763139039529587e+00, 4.775673615093210e+00, +4.788239408296574e+00, 4.800836529492834e+00, 4.813465089689299e+00, 4.826125200552656e+00, 4.838816974414199e+00, +4.851540524275148e+00, 4.864295963811994e+00, 4.877083407381912e+00, 4.889902970028242e+00, 4.902754767485968e+00, +4.915638916187349e+00, 4.928555533267491e+00, 4.941504736570079e+00, 4.954486644653096e+00, 4.967501376794639e+00, +4.980549052998763e+00, 4.993629794001427e+00, 5.006743721276453e+00, 5.019890957041582e+00, 5.033071624264576e+00, +5.046285846669371e+00, 5.059533748742330e+00, 5.072815455738514e+00, 5.086131093688055e+00, 5.099480789402581e+00, +5.112864670481698e+00, 5.126282865319549e+00, 5.139735503111452e+00, 5.153222713860579e+00, 5.166744628384741e+00, +5.180301378323200e+00, 5.193893096143594e+00, 5.207519915148915e+00, 5.221181969484560e+00, 5.234879394145455e+00, +5.248612324983266e+00, 5.262380898713673e+00, 5.276185252923733e+00, 5.290025526079311e+00, 5.303901857532590e+00, +5.317814387529677e+00, 5.331763257218268e+00, 5.345748608655417e+00, 5.359770584815368e+00, 5.373829329597493e+00, +5.387924987834285e+00, 5.402057705299476e+00, 5.416227628716221e+00, 5.430434905765360e+00, 5.444679685093800e+00, +5.458962116322963e+00, 5.473282350057335e+00, 5.487640537893116e+00, 5.502036832426946e+00, 5.516471387264770e+00, +5.530944357030720e+00, 5.545455897376190e+00, 5.560006164988958e+00, 5.574595317602406e+00, 5.589223514004851e+00, +5.603890914049015e+00, 5.618597678661549e+00, 5.633343969852670e+00, 5.648129950725965e+00, 5.662955785488214e+00, +5.677821639459424e+00, 5.692727679082864e+00, 5.707674071935328e+00, 5.722660986737433e+00, 5.737688593364079e+00, +5.752757062854974e+00, 5.767866567425386e+00, 5.783017280476891e+00, 5.798209376608307e+00, 5.813443031626794e+00, +5.828718422558992e+00, 5.844035727662364e+00, 5.859395126436613e+00, 5.874796799635312e+00, 5.890240929277553e+00, +5.905727698659847e+00, 5.921257292368080e+00, 5.936829896289670e+00, 5.952445697625814e+00, 5.968104884903939e+00, +5.983807647990229e+00, 5.999554178102374e+00, 6.015344667822389e+00, 6.031179311109692e+00, 6.047058303314223e+00, +6.062981841189806e+00, 6.078950122907638e+00, 6.094963348069916e+00, 6.111021717723705e+00, 6.127125434374859e+00, +6.143274702002223e+00, 6.159469726071964e+00, 6.175710713552025e+00, 6.191997872926832e+00, 6.208331414212177e+00, +6.224711548970203e+00, 6.241138490324660e+00, 6.257612452976330e+00, 6.274133653218585e+00, 6.290702308953236e+00, +6.307318639706492e+00, 6.323982866645138e+00, 6.340695212592962e+00, 6.357455902047350e+00, 6.374265161196075e+00, +6.391123217934304e+00, 6.408030301881873e+00, 6.424986644400687e+00, 6.441992478612433e+00, 6.459048039416443e+00, +6.476153563507849e+00, 6.493309289395911e+00, 6.510515457422603e+00, 6.527772309781480e+00, 6.545080090536701e+00, +6.562439045642397e+00, 6.579849422962180e+00, 6.597311472288993e+00, 6.614825445365213e+00, 6.632391595902918e+00, +6.650010179604594e+00, 6.667681454183917e+00, 6.685405679386927e+00, 6.703183117013510e+00, 6.721014030939050e+00, +6.738898687136427e+00, 6.756837353698344e+00, 6.774830300859905e+00, 6.792877801021459e+00, 6.810980128771898e+00, +6.829137560912018e+00, 6.847350376478465e+00, 6.865618856767845e+00, 6.883943285361148e+00, 6.902323948148620e+00, +6.920761133354844e+00, 6.939255131564280e+00, 6.957806235747054e+00, 6.976414741285144e+00, 6.995080945998938e+00, +7.013805150174196e+00, 7.032587656589204e+00, 7.051428770542594e+00, 7.070328799881272e+00, 7.089288055028900e+00, +7.108306849014756e+00, 7.127385497502940e+00, 7.146524318822049e+00, 7.165723633995188e+00, 7.184983766770552e+00, +7.204305043652314e+00, 7.223687793931977e+00, 7.243132349720228e+00, 7.262639045979126e+00, 7.282208220554966e+00, +7.301840214211342e+00, 7.321535370662962e+00, 7.341294036609699e+00, 7.361116561771329e+00, 7.381003298922700e+00, +7.400954603929380e+00, 7.420970835783875e+00, 7.441052356642428e+00, 7.461199531862184e+00, 7.481412730039120e+00, +7.501692323046366e+00, 7.522038686073230e+00, 7.542452197664677e+00, 7.562933239761500e+00, 7.583482197741078e+00, +7.604099460458579e+00, 7.624785420289157e+00, 7.645540473170391e+00, 7.666365018645576e+00, 7.687259459907600e+00, +7.708224203843671e+00, 7.729259661080338e+00, 7.750366246029681e+00, 7.771544376935775e+00, 7.792794475922316e+00, +7.814116969040460e+00, 7.835512286317934e+00, 7.856980861808525e+00, 7.878523133642516e+00, 7.900139544077947e+00, +7.921830539552562e+00, 7.943596570736623e+00, 7.965438092586653e+00, 7.987355564399849e+00, 8.009349449869553e+00, +8.031420217141484e+00, 8.053568338870971e+00, 8.075794292280927e+00, 8.098098559221048e+00, 8.120481626227640e+00, +8.142943984584740e+00, 8.165486130385943e+00, 8.188108564597510e+00, 8.210811793122247e+00, 8.233596326864642e+00, +8.256462681797082e+00, 8.279411379026904e+00, 8.302442944864886e+00, 8.325557910894734e+00, 8.348756814043647e+00, +8.372040196654362e+00, 8.395408606558021e+00, 8.418862597148458e+00, 8.442402727457974e+00, 8.466029562234013e+00, +8.489743672017255e+00, 8.513545633221351e+00, 8.537436028213545e+00, 8.561415445397042e+00, 8.585484479294841e+00, +8.609643730634522e+00, 8.633893806435257e+00, 8.658235320095770e+00, 8.682668891483992e+00, 8.707195147028431e+00, +8.731814719811089e+00, 8.756528249661875e+00, 8.781336383255059e+00, 8.806239774206903e+00, 8.831239083175706e+00, +8.856334977963076e+00, 8.881528133617271e+00, 8.906819232538691e+00, 8.932208964586735e+00, 8.957698027188872e+00, +8.983287125451987e+00, 9.008976972275276e+00, 9.034768288465537e+00, 9.060661802854733e+00, 9.086658252419237e+00, +9.112758382401763e+00, 9.138962946435646e+00, 9.165272706670864e+00, 9.191688433903026e+00, 9.218210907704670e+00, +9.244840916558999e+00, 9.271579257996139e+00, 9.298426738731981e+00, 9.325384174809844e+00, 9.352452391744864e+00, +9.379632224671093e+00, 9.406924518491431e+00, 9.434330128030593e+00, 9.461849918191293e+00, 9.489484764112710e+00, +9.517235551333323e+00, 9.545103175955768e+00, 9.573088544815768e+00, 9.601192575654281e+00, 9.629416197292837e+00, +9.657760349812646e+00, 9.686225984737575e+00, 9.714814065220347e+00, 9.743525566232606e+00, 9.772361474759579e+00, +9.801322789997847e+00, 9.830410523557575e+00, 9.859625699669385e+00, 9.888969355394741e+00, 9.918442540841205e+00, +9.948046319382158e+00, 9.977781767881448e+00, 1.000764997692218e+01, 1.003765205104090e+01, 1.006778910896657e+01, +1.009806228386475e+01, 1.012847272358711e+01, 1.015902159092605e+01, 1.018971006387557e+01, 1.022053933589693e+01, +1.025151061619078e+01, 1.028262512997506e+01, 1.031388411876938e+01, 1.034528884068487e+01, 1.037684057072195e+01, +1.040854060107327e+01, 1.044039024143443e+01, 1.047239081932158e+01, 1.050454368039601e+01, 1.053685018879641e+01, +1.056931172747886e+01, 1.060192969856399e+01, 1.063470552369310e+01, 1.066764064439239e+01, 1.070073652244486e+01, +1.073399464027219e+01, 1.076741650132477e+01, 1.080100363048166e+01, 1.083475757445879e+01, 1.086867990222930e+01, +1.090277220545159e+01, 1.093703609890872e+01, 1.097147322095934e+01, 1.100608523399792e+01, 1.104087382492768e+01, +1.107584070564463e+01, 1.111098761353359e+01, 1.114631631197722e+01, 1.118182859087630e+01, 1.121752626718531e+01, +1.125341118545871e+01, 1.128948521841485e+01, 1.132575026751078e+01, 1.136220826353296e+01, 1.139886116720549e+01, +1.143571096980984e+01, 1.147275969382474e+01, 1.151000939358083e+01, 1.154746215593246e+01, 1.158512010094877e+01, +1.162298538262129e+01, 1.166106018959245e+01, 1.169934674590217e+01, 1.173784731175548e+01, 1.177656418431080e+01, +1.181549969848945e+01, 1.185465622780946e+01, 1.189403618523908e+01, 1.193364202407642e+01, 1.197347623885395e+01, +1.201354136626696e+01, 1.205383998612883e+01, 1.209437472235599e+01, 1.213514824397457e+01, 1.217616326616551e+01, +1.221742255133045e+01, 1.225892891019650e+01, 1.230068520294748e+01, 1.234269434039220e+01, 1.238495928516590e+01, +1.242748305296925e+01, 1.247026871384086e+01, 1.251331939347148e+01, 1.255663827455916e+01, 1.260022859820111e+01, +1.264409366533197e+01, 1.268823683820882e+01, 1.273266154193326e+01, 1.277737126603530e+01, 1.282236956609193e+01, +1.286766006541033e+01, 1.291324645675497e+01, 1.295913250413619e+01, 1.300532204465481e+01, 1.305181899040709e+01, +1.309862733044861e+01, 1.314575113283309e+01, 1.319319454670351e+01, 1.324096180446875e+01, 1.328905722404351e+01, +1.333748521116541e+01, 1.338625026179792e+01, 1.343535696460546e+01, 1.348481000352272e+01, 1.353461416040978e+01, +1.358477431779985e+01, 1.363529546174767e+01, 1.368618268477408e+01, 1.373744118891886e+01, 1.378907628890699e+01, +1.384109341542250e+01, 1.389349811851252e+01, 1.394629607110189e+01, 1.399949307265937e+01, 1.405309505297676e+01, +1.410710807611295e+01, 1.416153834447302e+01, 1.421639220305289e+01, 1.427167614383876e+01, 1.432739681038808e+01, +1.438356100257590e+01, 1.444017568155371e+01, 1.449724797487072e+01, 1.455478518183584e+01, 1.461279477907283e+01, +1.467128442631195e+01, 1.473026197241717e+01, 1.478973546166729e+01, 1.484971314029506e+01, 1.491020346330665e+01, +1.497121510158665e+01, 1.503275694931317e+01, 1.509483813168130e+01, 1.515746801299181e+01, 1.522065620506818e+01, +1.528441257604393e+01, 1.534874725958989e+01, 1.541367066449597e+01, 1.547919348473382e+01, 1.554532670997873e+01, +1.561208163660320e+01, 1.567946987918948e+01, 1.574750338260948e+01, 1.581619443467032e+01, 1.588555567934477e+01, +1.595560013069564e+01, 1.602634118744881e+01, 1.609779264831570e+01, 1.616996872804772e+01, 1.624288407436192e+01, +1.631655378568588e+01, 1.639099342984711e+01, 1.646621906374661e+01, 1.654224725402799e+01, 1.661909509891309e+01, +1.669678025119957e+01, 1.677532094246386e+01, 1.685473600869450e+01, 1.693504491725503e+01, 1.701626779547523e+01, +1.709842546078591e+01, 1.718153945262697e+01, 1.726563206626724e+01, 1.735072638856963e+01, 1.743684633586383e+01, +1.752401669422101e+01, 1.761226316217449e+01, 1.770161239597318e+01, 1.779209205780555e+01, 1.788373086712009e+01, +1.797655865508622e+01, 1.807060642285958e+01, 1.816590640344814e+01, 1.826249212791489e+01, 1.836039849606064e+01, +1.845966185186158e+01, 1.856032006432152e+01, 1.866241261403591e+01, 1.876598068591657e+01, 1.887106726862854e+01, +1.897771726169035e+01, 1.908597759027450e+01, 1.919589732891547e+01, 1.930752783498753e+01, 1.942092289218180e+01, +1.953613886627202e+01, 1.965323487269077e+01, 1.977227295834986e+01, 1.989331829915240e+01, 2.001643941341685e+01, +2.014170839483397e+01, 2.026920116529554e+01, 2.039899775129894e+01, 2.053118258471455e+01, 2.066584483244346e+01, +2.080307875718952e+01, 2.094298411360127e+01, 2.108566658297434e+01, 2.123123825214442e+01, 2.137981814251149e+01, +2.153153279315106e+01, 2.168651690873131e+01, 2.184491407636305e+01, 2.200687756536829e+01, 2.217257121614261e+01, +2.234217043696705e+01, 2.251586331910539e+01, 2.269385188821027e+01, 2.287635351670385e+01, 2.306360251909887e+01, +2.325585195976869e+01, 2.345337570600628e+01, 2.365647077640220e+01, 2.386546002269716e+01, 2.408069521580909e+01, +2.430256060899734e+01, 2.453147706166365e+01, 2.476790684179502e+01, 2.501235924363743e+01, 2.526539718737621e+01, +2.552764503779376e+01, 2.579979785401857e+01, 2.608263251337429e+01, 2.637702106424066e+01, 2.668394692894125e+01, +2.700452472831961e+01, 2.734002470651923e+01, 2.769190305493776e+01, 2.806184022922345e+01, 2.845178925765459e+01, +2.886403827217789e+01, 2.930129173049771e+01, 2.976677786933950e+01, 3.026439315807712e+01, 3.079890061034902e+01, +3.137620667940138e+01, 3.200375858512068e+01, 3.269112884843310e+01, 3.345090536982737e+01, 3.430009548529412e+01, +3.526242585320269e+01, 3.637228801250404e+01, 3.768170434501420e+01, 3.927176058857470e+01, 4.125684860588751e+01, +4.357373524529790e+01, 4.484012866322161e+01, 0., +}; +static double ws_gauss_chebyshev2047[] = { +1.040141248065865e-14, 1.664218164750223e-13, 8.425038375613978e-13, 2.662698938341439e-12, 6.500638049218187e-12, +1.347949045313434e-11, 2.497191092593100e-11, 4.259997513447332e-11, 6.823510329518064e-11, 1.039979720960954e-10, +1.522584148861276e-10, 2.156353101356187e-10, 2.969964581728792e-10, 3.994584462018767e-10, 5.263865016067688e-10, +6.813943335495081e-10, 8.683439628672716e-10, 1.091345540277019e-09, 1.354757152895011e-09, 1.663184619079679e-09, +2.021481271606787e-09, 2.434747729186377e-09, 2.908331656331578e-09, 3.447827511589876e-09, 4.059076284148074e-09, +4.748165218822718e-09, 5.521427529448322e-09, 6.385442100676363e-09, 7.347033178198594e-09, 8.413270047408767e-09, +9.591466700517525e-09, 1.088918149213580e-08, 1.231421678334267e-08, 1.387461857425417e-08, 1.557867612511033e-08, +1.743492156589815e-08, 1.945212949452899e-08, 2.163931656358931e-08, 2.400574105568472e-08, 2.656090244739723e-08, +2.931454096187701e-08, 3.227663711009019e-08, 3.545741122074478e-08, 3.886732295891794e-08, 4.251707083340754e-08, +4.641759169283316e-08, 5.058006021051052e-08, 5.501588835812526e-08, 5.973672486823235e-08, 6.475445468560805e-08, +7.008119840748126e-08, 7.572931171267393e-08, 8.171138477967768e-08, 8.804024169369759e-08, 9.472893984269302e-08, +1.017907693024461e-07, 1.092392522106895e-07, 1.170881421303271e-07, 1.253514234017782e-07, 1.340433104844819e-07, +1.431782472875931e-07, 1.527709064899079e-07, 1.628361888490526e-07, 1.733892224999729e-07, 1.844453622427615e-07, +1.960201888198618e-07, 2.081295081826847e-07, 2.207893507476806e-07, 2.340159706419043e-07, 2.478258449381154e-07, +2.622356728794542e-07, 2.772623750937361e-07, 2.929230927974077e-07, 3.092351869892072e-07, 3.262162376335751e-07, +3.438840428338576e-07, 3.622566179953528e-07, 3.813521949782404e-07, 4.011892212404484e-07, 4.217863589704992e-07, +4.431624842103876e-07, 4.653366859685397e-07, 4.883282653228972e-07, 5.121567345141900e-07, 5.368418160294339e-07, +5.624034416757178e-07, 5.888617516443246e-07, 6.162370935652473e-07, 6.445500215521485e-07, 6.738212952378205e-07, +7.040718788002010e-07, 7.353229399790054e-07, 7.675958490830255e-07, 8.009121779881582e-07, 8.352936991262199e-07, +8.707623844646103e-07, 9.073404044768766e-07, 9.450501271042501e-07, 9.839141167082072e-07, 1.023955133014124e-06, +1.065196130046081e-06, 1.107660255052889e-06, 1.151370847425387e-06, 1.196351437605098e-06, 1.242625745984290e-06, +1.290217681797505e-06, 1.339151342004658e-06, 1.389451010165717e-06, 1.441141155307085e-06, 1.494246430779724e-06, +1.548791673109100e-06, 1.604801900837008e-06, 1.662302313355369e-06, 1.721318289732056e-06, 1.781875387528808e-06, +1.843999341611350e-06, 1.907716062951728e-06, 1.973051637422997e-06, 2.040032324586289e-06, 2.108684556470367e-06, +2.179034936343711e-06, 2.251110237479259e-06, 2.324937401911818e-06, 2.400543539188280e-06, 2.477955925110695e-06, +2.557202000472260e-06, 2.638309369786361e-06, 2.721305800008688e-06, 2.806219219252532e-06, 2.893077715497351e-06, +2.981909535290667e-06, 3.072743082443399e-06, 3.165606916718688e-06, 3.260529752514328e-06, 3.357540457538860e-06, +3.456668051481431e-06, 3.557941704675495e-06, 3.661390736756436e-06, 3.767044615313231e-06, 3.874932954534179e-06, +3.985085513846858e-06, 4.097532196552325e-06, 4.212303048453703e-06, 4.329428256479206e-06, 4.448938147299731e-06, +4.570863185941045e-06, 4.695233974390732e-06, 4.822081250199928e-06, 4.951435885079957e-06, 5.083328883493989e-06, +5.217791381243743e-06, 5.354854644051410e-06, 5.494550066136807e-06, 5.636909168789926e-06, 5.781963598938928e-06, +5.929745127713672e-06, 6.080285649004919e-06, 6.233617178019247e-06, 6.389771849829812e-06, 6.548781917923036e-06, +6.710679752741318e-06, 6.875497840221862e-06, 7.043268780331725e-06, 7.214025285599178e-06, 7.387800179641464e-06, +7.564626395689084e-06, 7.744536975106645e-06, 7.927565065910472e-06, 8.113743921282948e-06, 8.303106898083802e-06, +8.495687455358355e-06, 8.691519152842916e-06, 8.890635649467278e-06, 9.093070701854592e-06, 9.298858162818577e-06, +9.508031979858272e-06, 9.720626193650294e-06, 9.936674936538866e-06, 1.015621243102359e-05, 1.037927298824514e-05, +1.060589100646889e-05, 1.083610096956668e-05, 1.106993744549677e-05, 1.130743508478207e-05, 1.154862861898671e-05, +1.179355285919124e-05, 1.204224269446626e-05, 1.229473309034487e-05, 1.255105908729385e-05, 1.281125579918375e-05, +1.307535841175794e-05, 1.334340218110088e-05, 1.361542243210544e-05, 1.389145455693961e-05, 1.417153401351257e-05, +1.445569632394033e-05, 1.474397707301086e-05, 1.503641190664907e-05, 1.533303653038143e-05, 1.563388670780067e-05, +1.593899825903037e-05, 1.624840705918968e-05, 1.656214903685833e-05, 1.688026017254180e-05, 1.720277649713706e-05, +1.752973409039879e-05, 1.786116907940605e-05, 1.819711763702992e-05, 1.853761598040180e-05, 1.888270036938262e-05, +1.923240710503310e-05, 1.958677252808520e-05, 1.994583301741460e-05, 2.030962498851467e-05, 2.067818489197178e-05, +2.105154921194211e-05, 2.142975446463005e-05, 2.181283719676846e-05, 2.220083398410049e-05, 2.259378142986352e-05, +2.299171616327497e-05, 2.339467483802035e-05, 2.380269413074333e-05, 2.421581073953821e-05, 2.463406138244480e-05, +2.505748279594576e-05, 2.548611173346647e-05, 2.591998496387769e-05, 2.635913927000087e-05, 2.680361144711646e-05, +2.725343830147506e-05, 2.770865664881174e-05, 2.816930331286343e-05, 2.863541512388956e-05, 2.910702891719618e-05, +2.958418153166319e-05, 3.006690980827557e-05, 3.055525058865775e-05, 3.104924071361195e-05, 3.154891702166033e-05, +3.205431634759091e-05, 3.256547552100752e-05, 3.308243136488386e-05, 3.360522069412160e-05, 3.413388031411296e-05, +3.466844701930729e-05, 3.520895759178239e-05, 3.575544879982014e-05, 3.630795739648679e-05, 3.686652011821800e-05, +3.743117368340845e-05, 3.800195479100652e-05, 3.857890011911388e-05, 3.916204632358986e-05, 3.975143003666123e-05, +4.034708786553705e-05, 4.094905639102867e-05, 4.155737216617530e-05, 4.217207171487484e-05, 4.279319153052027e-05, +4.342076807464162e-05, 4.405483777555371e-05, 4.469543702700952e-05, 4.534260218685934e-05, 4.599636957571602e-05, +4.665677547562603e-05, 4.732385612874658e-05, 4.799764773602905e-05, 4.867818645590837e-05, 4.936550840299880e-05, +5.005964964679621e-05, 5.076064621038638e-05, 5.146853406916034e-05, 5.218334914953576e-05, 5.290512732768527e-05, +5.363390442827151e-05, 5.436971622318876e-05, 5.511259843031145e-05, 5.586258671224988e-05, 5.661971667511242e-05, +5.738402386727515e-05, 5.815554377815850e-05, 5.893431183701092e-05, 5.972036341169999e-05, 6.051373380751069e-05, +6.131445826595104e-05, 6.212257196356532e-05, 6.293811001075455e-05, 6.376110745060453e-05, 6.459159925772174e-05, +6.542962033707660e-05, 6.627520552285457e-05, 6.712838957731503e-05, 6.798920718965801e-05, 6.885769297489864e-05, +6.973388147274975e-05, 7.061780714651241e-05, 7.150950438197435e-05, 7.240900748631658e-05, 7.331635068702844e-05, +7.423156813083007e-05, 7.515469388260424e-05, 7.608576192433516e-05, 7.702480615405702e-05, 7.797186038480962e-05, +7.892695834360343e-05, 7.989013367039261e-05, 8.086141991705641e-05, 8.184085054638986e-05, 8.282845893110208e-05, +8.382427835282426e-05, 8.482834200112533e-05, 8.584068297253709e-05, 8.686133426958791e-05, 8.789032879984498e-05, +8.892769937496572e-05, 8.997347870975792e-05, 9.102769942124888e-05, 9.209039402776333e-05, 9.316159494801040e-05, +9.424133450017977e-05, 9.532964490104668e-05, 9.642655826508612e-05, 9.753210660359589e-05, 9.864632182382916e-05, +9.976923572813601e-05, 1.009008800131141e-04, 1.020412862687685e-04, 1.031904859776813e-04, 1.043485105141895e-04, +1.055153911435733e-04, 1.066911590212530e-04, 1.078758451919952e-04, 1.090694805891289e-04, 1.102720960337706e-04, +1.114837222340585e-04, 1.127043897843972e-04, 1.139341291647103e-04, 1.151729707397040e-04, 1.164209447581390e-04, +1.176780813521125e-04, 1.189444105363494e-04, 1.202199622075036e-04, 1.215047661434677e-04, 1.227988520026934e-04, +1.241022493235213e-04, 1.254149875235187e-04, 1.267370958988300e-04, 1.280686036235332e-04, 1.294095397490088e-04, +1.307599332033168e-04, 1.321198127905837e-04, 1.334892071903992e-04, 1.348681449572223e-04, 1.362566545197973e-04, +1.376547641805787e-04, 1.390625021151673e-04, 1.404798963717541e-04, 1.419069748705747e-04, 1.433437654033735e-04, +1.447902956328773e-04, 1.462465930922782e-04, 1.477126851847265e-04, 1.491885991828338e-04, 1.506743622281835e-04, +1.521700013308543e-04, 1.536755433689502e-04, 1.551910150881418e-04, 1.567164431012165e-04, 1.582518538876389e-04, +1.597972737931201e-04, 1.613527290291968e-04, 1.629182456728204e-04, 1.644938496659547e-04, 1.660795668151841e-04, +1.676754227913305e-04, 1.692814431290808e-04, 1.708976532266223e-04, 1.725240783452890e-04, 1.741607436092166e-04, +1.758076740050074e-04, 1.774648943814041e-04, 1.791324294489737e-04, 1.808103037797998e-04, 1.824985418071853e-04, +1.841971678253639e-04, 1.859062059892214e-04, 1.876256803140252e-04, 1.893556146751645e-04, 1.910960328078987e-04, +1.928469583071162e-04, 1.946084146271005e-04, 1.963804250813080e-04, 1.981630128421530e-04, 1.999562009408019e-04, +2.017600122669788e-04, 2.035744695687768e-04, 2.053995954524815e-04, 2.072354123824008e-04, 2.090819426807068e-04, +2.109392085272828e-04, 2.128072319595839e-04, 2.146860348725012e-04, 2.165756390182408e-04, 2.184760660062060e-04, +2.203873373028921e-04, 2.223094742317892e-04, 2.242424979732927e-04, 2.261864295646231e-04, 2.281412898997552e-04, +2.301070997293556e-04, 2.320838796607275e-04, 2.340716501577664e-04, 2.360704315409226e-04, 2.380802439871731e-04, +2.401011075300011e-04, 2.421330420593855e-04, 2.441760673217970e-04, 2.462302029202041e-04, 2.482954683140862e-04, +2.503718828194557e-04, 2.524594656088888e-04, 2.545582357115631e-04, 2.566682120133047e-04, 2.587894132566430e-04, +2.609218580408731e-04, 2.630655648221270e-04, 2.652205519134529e-04, 2.673868374849010e-04, 2.695644395636195e-04, +2.717533760339563e-04, 2.739536646375701e-04, 2.761653229735487e-04, 2.783883684985345e-04, 2.806228185268591e-04, +2.828686902306837e-04, 2.851260006401490e-04, 2.873947666435315e-04, 2.896750049874076e-04, 2.919667322768250e-04, +2.942699649754819e-04, 2.965847194059135e-04, 2.989110117496859e-04, 3.012488580475965e-04, 3.035982741998826e-04, +3.059592759664368e-04, 3.083318789670301e-04, 3.107160986815408e-04, 3.131119504501917e-04, 3.155194494737932e-04, +3.179386108139953e-04, 3.203694493935436e-04, 3.228119799965451e-04, 3.252662172687377e-04, 3.277321757177702e-04, +3.302098697134855e-04, 3.326993134882123e-04, 3.352005211370629e-04, 3.377135066182381e-04, 3.402382837533370e-04, +3.427748662276758e-04, 3.453232675906103e-04, 3.478835012558668e-04, 3.504555805018779e-04, 3.530395184721255e-04, +3.556353281754891e-04, 3.582430224866012e-04, 3.608626141462079e-04, 3.634941157615361e-04, 3.661375398066666e-04, +3.687928986229120e-04, 3.714602044192030e-04, 3.741394692724774e-04, 3.768307051280776e-04, 3.795339238001522e-04, +3.822491369720627e-04, 3.849763561967983e-04, 3.877155928973940e-04, 3.904668583673545e-04, 3.932301637710847e-04, +3.960055201443236e-04, 3.987929383945862e-04, 4.015924293016081e-04, 4.044040035177969e-04, 4.072276715686880e-04, +4.100634438534058e-04, 4.129113306451308e-04, 4.157713420915693e-04, 4.186434882154309e-04, 4.215277789149090e-04, +4.244242239641671e-04, 4.273328330138292e-04, 4.302536155914753e-04, 4.331865811021422e-04, 4.361317388288270e-04, +4.390890979329977e-04, 4.420586674551062e-04, 4.450404563151080e-04, 4.480344733129833e-04, 4.510407271292643e-04, +4.540592263255682e-04, 4.570899793451313e-04, 4.601329945133497e-04, 4.631882800383226e-04, 4.662558440114014e-04, +4.693356944077416e-04, 4.724278390868573e-04, 4.755322857931844e-04, 4.786490421566419e-04, 4.817781156932010e-04, +4.849195138054566e-04, 4.880732437832014e-04, 4.912393128040070e-04, 4.944177279338045e-04, 4.976084961274720e-04, +5.008116242294236e-04, 5.040271189742027e-04, 5.072549869870787e-04, 5.104952347846467e-04, 5.137478687754309e-04, +5.170128952604911e-04, 5.202903204340321e-04, 5.235801503840174e-04, 5.268823910927835e-04, 5.301970484376614e-04, +5.335241281915956e-04, 5.368636360237720e-04, 5.402155775002437e-04, 5.435799580845628e-04, 5.469567831384141e-04, +5.503460579222496e-04, 5.537477875959304e-04, 5.571619772193661e-04, 5.605886317531597e-04, 5.640277560592544e-04, +5.674793549015840e-04, 5.709434329467235e-04, 5.744199947645423e-04, 5.779090448288642e-04, 5.814105875181230e-04, +5.849246271160254e-04, 5.884511678122138e-04, 5.919902137029317e-04, 5.955417687916932e-04, 5.991058369899493e-04, +6.026824221177637e-04, 6.062715279044843e-04, 6.098731579894190e-04, 6.134873159225146e-04, 6.171140051650352e-04, +6.207532290902446e-04, 6.244049909840886e-04, 6.280692940458802e-04, 6.317461413889855e-04, 6.354355360415141e-04, +6.391374809470055e-04, 6.428519789651233e-04, 6.465790328723465e-04, 6.503186453626651e-04, 6.540708190482726e-04, +6.578355564602680e-04, 6.616128600493504e-04, 6.654027321865197e-04, 6.692051751637780e-04, 6.730201911948322e-04, +6.768477824157961e-04, 6.806879508858959e-04, 6.845406985881742e-04, 6.884060274301990e-04, 6.922839392447706e-04, +6.961744357906278e-04, 7.000775187531607e-04, 7.039931897451191e-04, 7.079214503073249e-04, 7.118623019093831e-04, +7.158157459503961e-04, 7.197817837596751e-04, 7.237604165974570e-04, 7.277516456556172e-04, 7.317554720583863e-04, +7.357718968630661e-04, 7.398009210607466e-04, 7.438425455770220e-04, 7.478967712727107e-04, 7.519635989445709e-04, +7.560430293260209e-04, 7.601350630878570e-04, 7.642397008389751e-04, 7.683569431270868e-04, 7.724867904394422e-04, +7.766292432035483e-04, 7.807843017878903e-04, 7.849519665026520e-04, 7.891322376004361e-04, 7.933251152769854e-04, +7.975305996719031e-04, 8.017486908693738e-04, 8.059793888988861e-04, 8.102226937359504e-04, 8.144786053028222e-04, +8.187471234692219e-04, 8.230282480530560e-04, 8.273219788211371e-04, 8.316283154899045e-04, 8.359472577261449e-04, +8.402788051477102e-04, 8.446229573242417e-04, 8.489797137778836e-04, 8.533490739840077e-04, 8.577310373719284e-04, +8.621256033256228e-04, 8.665327711844485e-04, 8.709525402438601e-04, 8.753849097561286e-04, 8.798298789310573e-04, +8.842874469366952e-04, 8.887576129000573e-04, 8.932403759078367e-04, 8.977357350071205e-04, 9.022436892061025e-04, +9.067642374747980e-04, 9.112973787457555e-04, 9.158431119147699e-04, 9.204014358415920e-04, 9.249723493506418e-04, +9.295558512317152e-04, 9.341519402406968e-04, 9.387606151002647e-04, 9.433818745006012e-04, 9.480157171000975e-04, +9.526621415260607e-04, 9.573211463754183e-04, 9.619927302154228e-04, 9.666768915843550e-04, 9.713736289922255e-04, +9.760829409214781e-04, 9.808048258276882e-04, 9.855392821402627e-04, 9.902863082631398e-04, 9.950459025754846e-04, +9.998180634323880e-04, 1.004602789165559e-03, 1.009400078084022e-03, 1.014209928474807e-03, 1.019032338603644e-03, +1.023867306715656e-03, 1.028714831036042e-03, 1.033574909770772e-03, 1.038447541107274e-03, 1.043332723215116e-03, +1.048230454246695e-03, 1.053140732337921e-03, 1.058063555608898e-03, 1.062998922164606e-03, 1.067946830095583e-03, +1.072907277478600e-03, 1.077880262377342e-03, 1.082865782843085e-03, 1.087863836915367e-03, 1.092874422622665e-03, +1.097897537983070e-03, 1.102933181004948e-03, 1.107981349687624e-03, 1.113042042022036e-03, 1.118115255991414e-03, +1.123200989571937e-03, 1.128299240733402e-03, 1.133410007439886e-03, 1.138533287650405e-03, 1.143669079319576e-03, +1.148817380398275e-03, 1.153978188834293e-03, 1.159151502572996e-03, 1.164337319557971e-03, 1.169535637731687e-03, +1.174746455036140e-03, 1.179969769413505e-03, 1.185205578806785e-03, 1.190453881160458e-03, 1.195714674421117e-03, +1.200987956538121e-03, 1.206273725464232e-03, 1.211571979156258e-03, 1.216882715575688e-03, 1.222205932689336e-03, +1.227541628469970e-03, 1.232889800896952e-03, 1.238250447956866e-03, 1.243623567644155e-03, 1.249009157961744e-03, +1.254407216921670e-03, 1.259817742545715e-03, 1.265240732866018e-03, 1.270676185925710e-03, 1.276124099779532e-03, +1.281584472494451e-03, 1.287057302150285e-03, 1.292542586840314e-03, 1.298040324671899e-03, 1.303550513767096e-03, +1.309073152263264e-03, 1.314608238313678e-03, 1.320155770088140e-03, 1.325715745773583e-03, 1.331288163574675e-03, +1.336873021714429e-03, 1.342470318434799e-03, 1.348080051997286e-03, 1.353702220683530e-03, 1.359336822795918e-03, +1.364983856658168e-03, 1.370643320615932e-03, 1.376315213037385e-03, 1.381999532313815e-03, 1.387696276860216e-03, +1.393405445115871e-03, 1.399127035544942e-03, 1.404861046637053e-03, 1.410607476907871e-03, 1.416366324899691e-03, +1.422137589182013e-03, 1.427921268352119e-03, 1.433717361035654e-03, 1.439525865887196e-03, 1.445346781590830e-03, +1.451180106860721e-03, 1.457025840441686e-03, 1.462883981109755e-03, 1.468754527672747e-03, 1.474637478970828e-03, +1.480532833877078e-03, 1.486440591298053e-03, 1.492360750174345e-03, 1.498293309481139e-03, 1.504238268228772e-03, +1.510195625463290e-03, 1.516165380267002e-03, 1.522147531759027e-03, 1.528142079095853e-03, 1.534149021471882e-03, +1.540168358119979e-03, 1.546200088312017e-03, 1.552244211359424e-03, 1.558300726613727e-03, 1.564369633467090e-03, +1.570450931352859e-03, 1.576544619746096e-03, 1.582650698164120e-03, 1.588769166167043e-03, 1.594900023358301e-03, +1.601043269385190e-03, 1.607198903939396e-03, 1.613366926757525e-03, 1.619547337621631e-03, 1.625740136359746e-03, +1.631945322846402e-03, 1.638162897003155e-03, 1.644392858799110e-03, 1.650635208251442e-03, 1.656889945425916e-03, +1.663157070437401e-03, 1.669436583450396e-03, 1.675728484679535e-03, 1.682032774390111e-03, 1.688349452898584e-03, +1.694678520573089e-03, 1.701019977833958e-03, 1.707373825154215e-03, 1.713740063060091e-03, 1.720118692131533e-03, +1.726509713002701e-03, 1.732913126362475e-03, 1.739328932954962e-03, 1.745757133579991e-03, 1.752197729093613e-03, +1.758650720408603e-03, 1.765116108494956e-03, 1.771593894380381e-03, 1.778084079150797e-03, 1.784586663950828e-03, +1.791101649984293e-03, 1.797629038514698e-03, 1.804168830865727e-03, 1.810721028421728e-03, 1.817285632628205e-03, +1.823862644992299e-03, 1.830452067083279e-03, 1.837053900533017e-03, 1.843668147036486e-03, 1.850294808352228e-03, +1.856933886302837e-03, 1.863585382775449e-03, 1.870249299722206e-03, 1.876925639160746e-03, 1.883614403174672e-03, +1.890315593914029e-03, 1.897029213595781e-03, 1.903755264504283e-03, 1.910493748991751e-03, 1.917244669478736e-03, +1.924008028454597e-03, 1.930783828477964e-03, 1.937572072177212e-03, 1.944372762250927e-03, 1.951185901468371e-03, +1.958011492669951e-03, 1.964849538767680e-03, 1.971700042745647e-03, 1.978563007660472e-03, 1.985438436641774e-03, +1.992326332892634e-03, 1.999226699690051e-03, 2.006139540385400e-03, 2.013064858404899e-03, 2.020002657250060e-03, +2.026952940498152e-03, 2.033915711802652e-03, 2.040890974893706e-03, 2.047878733578579e-03, 2.054878991742117e-03, +2.061891753347190e-03, 2.068917022435158e-03, 2.075954803126312e-03, 2.083005099620334e-03, 2.090067916196741e-03, +2.097143257215342e-03, 2.104231127116682e-03, 2.111331530422500e-03, 2.118444471736166e-03, 2.125569955743138e-03, +2.132707987211408e-03, 2.139858570991944e-03, 2.147021712019144e-03, 2.154197415311275e-03, 2.161385685970927e-03, +2.168586529185447e-03, 2.175799950227394e-03, 2.183025954454976e-03, 2.190264547312499e-03, 2.197515734330805e-03, +2.204779521127718e-03, 2.212055913408489e-03, 2.219344916966232e-03, 2.226646537682371e-03, 2.233960781527081e-03, +2.241287654559725e-03, 2.248627162929299e-03, 2.255979312874872e-03, 2.263344110726025e-03, 2.270721562903292e-03, +2.278111675918600e-03, 2.285514456375707e-03, 2.292929910970647e-03, 2.300358046492159e-03, 2.307798869822137e-03, +2.315252387936060e-03, 2.322718607903439e-03, 2.330197536888250e-03, 2.337689182149375e-03, 2.345193551041036e-03, +2.352710651013242e-03, 2.360240489612221e-03, 2.367783074480859e-03, 2.375338413359142e-03, 2.382906514084590e-03, +2.390487384592697e-03, 2.398081032917372e-03, 2.405687467191373e-03, 2.413306695646751e-03, 2.420938726615280e-03, +2.428583568528909e-03, 2.436241229920188e-03, 2.443911719422715e-03, 2.451595045771571e-03, 2.459291217803764e-03, +2.467000244458666e-03, 2.474722134778448e-03, 2.482456897908532e-03, 2.490204543098019e-03, 2.497965079700139e-03, +2.505738517172686e-03, 2.513524865078463e-03, 2.521324133085721e-03, 2.529136330968601e-03, 2.536961468607580e-03, +2.544799555989911e-03, 2.552650603210064e-03, 2.560514620470175e-03, 2.568391618080485e-03, 2.576281606459787e-03, +2.584184596135872e-03, 2.592100597745971e-03, 2.600029622037205e-03, 2.607971679867029e-03, 2.615926782203679e-03, +2.623894940126623e-03, 2.631876164827006e-03, 2.639870467608097e-03, 2.647877859885747e-03, 2.655898353188831e-03, +2.663931959159700e-03, 2.671978689554639e-03, 2.680038556244310e-03, 2.688111571214213e-03, 2.696197746565139e-03, +2.704297094513615e-03, 2.712409627392378e-03, 2.720535357650811e-03, 2.728674297855413e-03, 2.736826460690255e-03, +2.744991858957436e-03, 2.753170505577544e-03, 2.761362413590119e-03, 2.769567596154110e-03, 2.777786066548343e-03, +2.786017838171981e-03, 2.794262924544991e-03, 2.802521339308605e-03, 2.810793096225794e-03, 2.819078209181730e-03, +2.827376692184259e-03, 2.835688559364366e-03, 2.844013824976652e-03, 2.852352503399803e-03, 2.860704609137063e-03, +2.869070156816711e-03, 2.877449161192534e-03, 2.885841637144308e-03, 2.894247599678274e-03, 2.902667063927618e-03, +2.911100045152951e-03, 2.919546558742797e-03, 2.928006620214066e-03, 2.936480245212553e-03, 2.944967449513408e-03, +2.953468249021643e-03, 2.961982659772607e-03, 2.970510697932479e-03, 2.979052379798768e-03, 2.987607721800798e-03, +2.996176740500210e-03, 3.004759452591455e-03, 3.013355874902293e-03, 3.021966024394295e-03, 3.030589918163346e-03, +3.039227573440141e-03, 3.047879007590703e-03, 3.056544238116873e-03, 3.065223282656839e-03, 3.073916158985626e-03, +3.082622885015625e-03, 3.091343478797093e-03, 3.100077958518677e-03, 3.108826342507934e-03, 3.117588649231843e-03, +3.126364897297326e-03, 3.135155105451781e-03, 3.143959292583598e-03, 3.152777477722690e-03, 3.161609680041020e-03, +3.170455918853137e-03, 3.179316213616700e-03, 3.188190583933023e-03, 3.197079049547611e-03, 3.205981630350691e-03, +3.214898346377762e-03, 3.223829217810140e-03, 3.232774264975497e-03, 3.241733508348410e-03, 3.250706968550920e-03, +3.259694666353076e-03, 3.268696622673492e-03, 3.277712858579906e-03, 3.286743395289742e-03, 3.295788254170665e-03, +3.304847456741151e-03, 3.313921024671054e-03, 3.323008979782171e-03, 3.332111344048820e-03, 3.341228139598410e-03, +3.350359388712017e-03, 3.359505113824968e-03, 3.368665337527422e-03, 3.377840082564948e-03, 3.387029371839125e-03, +3.396233228408118e-03, 3.405451675487281e-03, 3.414684736449748e-03, 3.423932434827034e-03, 3.433194794309631e-03, +3.442471838747614e-03, 3.451763592151255e-03, 3.461070078691621e-03, 3.470391322701189e-03, 3.479727348674470e-03, +3.489078181268620e-03, 3.498443845304058e-03, 3.507824365765101e-03, 3.517219767800581e-03, 3.526630076724482e-03, +3.536055318016570e-03, 3.545495517323032e-03, 3.554950700457116e-03, 3.564420893399770e-03, 3.573906122300295e-03, +3.583406413476988e-03, 3.592921793417801e-03, 3.602452288780990e-03, 3.611997926395784e-03, 3.621558733263036e-03, +3.631134736555906e-03, 3.640725963620508e-03, 3.650332441976608e-03, 3.659954199318280e-03, 3.669591263514602e-03, +3.679243662610329e-03, 3.688911424826586e-03, 3.698594578561560e-03, 3.708293152391191e-03, 3.718007175069875e-03, +3.727736675531158e-03, 3.737481682888456e-03, 3.747242226435750e-03, 3.757018335648312e-03, 3.766810040183414e-03, +3.776617369881058e-03, 3.786440354764689e-03, 3.796279025041939e-03, 3.806133411105349e-03, 3.816003543533116e-03, +3.825889453089826e-03, 3.835791170727205e-03, 3.845708727584870e-03, 3.855642154991075e-03, 3.865591484463484e-03, +3.875556747709919e-03, 3.885537976629134e-03, 3.895535203311589e-03, 3.905548460040218e-03, 3.915577779291216e-03, +3.925623193734818e-03, 3.935684736236098e-03, 3.945762439855748e-03, 3.955856337850889e-03, 3.965966463675867e-03, +3.976092850983063e-03, 3.986235533623705e-03, 3.996394545648685e-03, 4.006569921309378e-03, 4.016761695058474e-03, +4.026969901550805e-03, 4.037194575644181e-03, 4.047435752400232e-03, 4.057693467085260e-03, 4.067967755171079e-03, +4.078258652335882e-03, 4.088566194465093e-03, 4.098890417652241e-03, 4.109231358199830e-03, 4.119589052620210e-03, +4.129963537636466e-03, 4.140354850183307e-03, 4.150763027407947e-03, 4.161188106671022e-03, 4.171630125547470e-03, +4.182089121827466e-03, 4.192565133517314e-03, 4.203058198840382e-03, 4.213568356238023e-03, 4.224095644370506e-03, +4.234640102117952e-03, 4.245201768581279e-03, 4.255780683083156e-03, 4.266376885168946e-03, 4.276990414607677e-03, +4.287621311393004e-03, 4.298269615744183e-03, 4.308935368107046e-03, 4.319618609154993e-03, 4.330319379789976e-03, +4.341037721143498e-03, 4.351773674577621e-03, 4.362527281685966e-03, 4.373298584294739e-03, 4.384087624463746e-03, +4.394894444487430e-03, 4.405719086895895e-03, 4.416561594455955e-03, 4.427422010172186e-03, 4.438300377287975e-03, +4.449196739286576e-03, 4.460111139892199e-03, 4.471043623071064e-03, 4.481994233032492e-03, 4.492963014229998e-03, +4.503950011362383e-03, 4.514955269374831e-03, 4.525978833460038e-03, 4.537020749059307e-03, 4.548081061863686e-03, +4.559159817815101e-03, 4.570257063107489e-03, 4.581372844187947e-03, 4.592507207757890e-03, 4.603660200774202e-03, +4.614831870450419e-03, 4.626022264257898e-03, 4.637231429927001e-03, 4.648459415448289e-03, 4.659706269073727e-03, +4.670972039317881e-03, 4.682256774959145e-03, 4.693560525040954e-03, 4.704883338873028e-03, 4.716225266032601e-03, +4.727586356365682e-03, 4.738966659988293e-03, 4.750366227287751e-03, 4.761785108923933e-03, 4.773223355830562e-03, +4.784681019216490e-03, 4.796158150567003e-03, 4.807654801645130e-03, 4.819171024492950e-03, 4.830706871432923e-03, +4.842262395069231e-03, 4.853837648289104e-03, 4.865432684264185e-03, 4.877047556451888e-03, 4.888682318596760e-03, +4.900337024731874e-03, 4.912011729180208e-03, 4.923706486556039e-03, 4.935421351766368e-03, 4.947156380012312e-03, +4.958911626790550e-03, 4.970687147894749e-03, 4.982482999417019e-03, 4.994299237749355e-03, 5.006135919585112e-03, +5.017993101920480e-03, 5.029870842055970e-03, 5.041769197597902e-03, 5.053688226459919e-03, 5.065627986864500e-03, +5.077588537344490e-03, 5.089569936744633e-03, 5.101572244223115e-03, 5.113595519253135e-03, 5.125639821624469e-03, +5.137705211445035e-03, 5.149791749142511e-03, 5.161899495465915e-03, 5.174028511487223e-03, 5.186178858602998e-03, +5.198350598536022e-03, 5.210543793336942e-03, 5.222758505385920e-03, 5.234994797394323e-03, 5.247252732406380e-03, +5.259532373800900e-03, 5.271833785292947e-03, 5.284157030935582e-03, 5.296502175121579e-03, 5.308869282585166e-03, +5.321258418403784e-03, 5.333669647999844e-03, 5.346103037142512e-03, 5.358558651949491e-03, 5.371036558888829e-03, +5.383536824780734e-03, 5.396059516799403e-03, 5.408604702474849e-03, 5.421172449694784e-03, 5.433762826706455e-03, +5.446375902118539e-03, 5.459011744903043e-03, 5.471670424397192e-03, 5.484352010305373e-03, 5.497056572701046e-03, +5.509784182028711e-03, 5.522534909105857e-03, 5.535308825124935e-03, 5.548106001655373e-03, 5.560926510645547e-03, +5.573770424424820e-03, 5.586637815705573e-03, 5.599528757585244e-03, 5.612443323548393e-03, 5.625381587468796e-03, +5.638343623611504e-03, 5.651329506634977e-03, 5.664339311593203e-03, 5.677373113937820e-03, 5.690430989520284e-03, +5.703513014594033e-03, 5.716619265816672e-03, 5.729749820252168e-03, 5.742904755373072e-03, 5.756084149062754e-03, +5.769288079617635e-03, 5.782516625749480e-03, 5.795769866587641e-03, 5.809047881681397e-03, 5.822350751002235e-03, +5.835678554946196e-03, 5.849031374336230e-03, 5.862409290424545e-03, 5.875812384895002e-03, 5.889240739865511e-03, +5.902694437890457e-03, 5.916173561963120e-03, 5.929678195518148e-03, 5.943208422434011e-03, 5.956764327035512e-03, +5.970345994096276e-03, 5.983953508841284e-03, 5.997586956949422e-03, 6.011246424556044e-03, 6.024931998255565e-03, +6.038643765104035e-03, 6.052381812621802e-03, 6.066146228796115e-03, 6.079937102083826e-03, 6.093754521414024e-03, +6.107598576190774e-03, 6.121469356295836e-03, 6.135366952091377e-03, 6.149291454422770e-03, 6.163242954621352e-03, +6.177221544507241e-03, 6.191227316392156e-03, 6.205260363082269e-03, 6.219320777881060e-03, 6.233408654592230e-03, +6.247524087522573e-03, 6.261667171484964e-03, 6.275838001801265e-03, 6.290036674305325e-03, 6.304263285345981e-03, +6.318517931790077e-03, 6.332800711025510e-03, 6.347111720964301e-03, 6.361451060045690e-03, 6.375818827239243e-03, +6.390215122048009e-03, 6.404640044511657e-03, 6.419093695209700e-03, 6.433576175264676e-03, 6.448087586345402e-03, +6.462628030670227e-03, 6.477197611010331e-03, 6.491796430693024e-03, 6.506424593605101e-03, 6.521082204196177e-03, +6.535769367482112e-03, 6.550486189048400e-03, 6.565232775053622e-03, 6.580009232232915e-03, 6.594815667901467e-03, +6.609652189958031e-03, 6.624518906888495e-03, 6.639415927769442e-03, 6.654343362271752e-03, 6.669301320664272e-03, +6.684289913817420e-03, 6.699309253206926e-03, 6.714359450917528e-03, 6.729440619646729e-03, 6.744552872708567e-03, +6.759696324037432e-03, 6.774871088191893e-03, 6.790077280358572e-03, 6.805315016356052e-03, 6.820584412638785e-03, +6.835885586301073e-03, 6.851218655081042e-03, 6.866583737364674e-03, 6.881980952189866e-03, 6.897410419250503e-03, +6.912872258900598e-03, 6.928366592158420e-03, 6.943893540710698e-03, 6.959453226916829e-03, 6.975045773813136e-03, +6.990671305117153e-03, 7.006329945231943e-03, 7.022021819250457e-03, 7.037747052959918e-03, 7.053505772846260e-03, +7.069298106098562e-03, 7.085124180613572e-03, 7.100984125000227e-03, 7.116878068584224e-03, 7.132806141412632e-03, +7.148768474258519e-03, 7.164765198625652e-03, 7.180796446753205e-03, 7.196862351620524e-03, 7.212963046951918e-03, +7.229098667221484e-03, 7.245269347658009e-03, 7.261475224249852e-03, 7.277716433749919e-03, 7.293993113680652e-03, +7.310305402339063e-03, 7.326653438801819e-03, 7.343037362930333e-03, 7.359457315375968e-03, 7.375913437585204e-03, +7.392405871804904e-03, 7.408934761087583e-03, 7.425500249296766e-03, 7.442102481112347e-03, 7.458741602036012e-03, +7.475417758396709e-03, 7.492131097356175e-03, 7.508881766914444e-03, 7.525669915915508e-03, 7.542495694052939e-03, +7.559359251875582e-03, 7.576260740793320e-03, 7.593200313082834e-03, 7.610178121893490e-03, 7.627194321253184e-03, +7.644249066074310e-03, 7.661342512159740e-03, 7.678474816208876e-03, 7.695646135823700e-03, 7.712856629514985e-03, +7.730106456708420e-03, 7.747395777750914e-03, 7.764724753916831e-03, 7.782093547414429e-03, 7.799502321392179e-03, +7.816951239945280e-03, 7.834440468122161e-03, 7.851970171931068e-03, 7.869540518346639e-03, 7.887151675316669e-03, +7.904803811768781e-03, 7.922497097617250e-03, 7.940231703769899e-03, 7.958007802134938e-03, 7.975825565628019e-03, +7.993685168179212e-03, 8.011586784740149e-03, 8.029530591291146e-03, 8.047516764848430e-03, 8.065545483471454e-03, +8.083616926270206e-03, 8.101731273412632e-03, 8.119888706132112e-03, 8.138089406735001e-03, 8.156333558608215e-03, +8.174621346226938e-03, 8.192952955162340e-03, 8.211328572089376e-03, 8.229748384794663e-03, 8.248212582184456e-03, +8.266721354292610e-03, 8.285274892288705e-03, 8.303873388486184e-03, 8.322517036350587e-03, 8.341206030507855e-03, +8.359940566752672e-03, 8.378720842056975e-03, 8.397547054578423e-03, 8.416419403669016e-03, 8.435338089883771e-03, +8.454303314989468e-03, 8.473315281973502e-03, 8.492374195052756e-03, 8.511480259682633e-03, 8.530633682566095e-03, +8.549834671662825e-03, 8.569083436198470e-03, 8.588380186673948e-03, 8.607725134874851e-03, 8.627118493880932e-03, +8.646560478075679e-03, 8.666051303155974e-03, 8.685591186141838e-03, 8.705180345386272e-03, 8.724819000585157e-03, +8.744507372787319e-03, 8.764245684404568e-03, 8.784034159221962e-03, 8.803873022408055e-03, 8.823762500525304e-03, +8.843702821540542e-03, 8.863694214835561e-03, 8.883736911217778e-03, 8.903831142931017e-03, 8.923977143666401e-03, +8.944175148573270e-03, 8.964425394270316e-03, 8.984728118856722e-03, 9.005083561923479e-03, 9.025491964564734e-03, +9.045953569389292e-03, 9.066468620532241e-03, 9.087037363666658e-03, 9.107660046015370e-03, 9.128336916362959e-03, +9.149068225067752e-03, 9.169854224073999e-03, 9.190695166924124e-03, 9.211591308771135e-03, 9.232542906391089e-03, +9.253550218195721e-03, 9.274613504245221e-03, 9.295733026261044e-03, 9.316909047638886e-03, 9.338141833461872e-03, +9.359431650513653e-03, 9.380778767291899e-03, 9.402183454021674e-03, 9.423645982669100e-03, 9.445166626955121e-03, +9.466745662369309e-03, 9.488383366183930e-03, 9.510080017468087e-03, 9.531835897101966e-03, 9.553651287791249e-03, +9.575526474081740e-03, 9.597461742373987e-03, 9.619457380938133e-03, 9.641513679928972e-03, 9.663630931400984e-03, +9.685809429323670e-03, 9.708049469596991e-03, 9.730351350066908e-03, 9.752715370541115e-03, 9.775141832804975e-03, +9.797631040637501e-03, 9.820183299827583e-03, 9.842798918190355e-03, 9.865478205583735e-03, 9.888221473925039e-03, +9.911029037207924e-03, 9.933901211519325e-03, 9.956838315056690e-03, 9.979840668145326e-03, 1.000290859325594e-02, +1.002604241502231e-02, 1.004924246025923e-02, 1.007250905798048e-02, 1.009584253941720e-02, 1.011924323803621e-02, +1.014271148955861e-02, 1.016624763197874e-02, 1.018985200558295e-02, 1.021352495296898e-02, 1.023726681906519e-02, +1.026107795115023e-02, 1.028495869887279e-02, 1.030890941427156e-02, 1.033293045179539e-02, 1.035702216832375e-02, +1.038118492318724e-02, 1.040541907818845e-02, 1.042972499762299e-02, 1.045410304830064e-02, 1.047855359956690e-02, +1.050307702332464e-02, 1.052767369405598e-02, 1.055234398884446e-02, 1.057708828739730e-02, 1.060190697206813e-02, +1.062680042787970e-02, 1.065176904254702e-02, 1.067681320650062e-02, 1.070193331291010e-02, 1.072712975770793e-02, +1.075240293961358e-02, 1.077775326015763e-02, 1.080318112370651e-02, 1.082868693748724e-02, 1.085427111161248e-02, +1.087993405910594e-02, 1.090567619592789e-02, 1.093149794100121e-02, 1.095739971623735e-02, 1.098338194656292e-02, +1.100944505994634e-02, 1.103558948742490e-02, 1.106181566313198e-02, 1.108812402432474e-02, 1.111451501141189e-02, +1.114098906798199e-02, 1.116754664083192e-02, 1.119418817999560e-02, 1.122091413877324e-02, 1.124772497376062e-02, +1.127462114487897e-02, 1.130160311540496e-02, 1.132867135200120e-02, 1.135582632474683e-02, 1.138306850716874e-02, +1.141039837627290e-02, 1.143781641257618e-02, 1.146532310013834e-02, 1.149291892659469e-02, 1.152060438318872e-02, +1.154837996480544e-02, 1.157624617000478e-02, 1.160420350105569e-02, 1.163225246397035e-02, 1.166039356853888e-02, +1.168862732836438e-02, 1.171695426089850e-02, 1.174537488747718e-02, 1.177388973335706e-02, 1.180249932775206e-02, +1.183120420387054e-02, 1.186000489895274e-02, 1.188890195430881e-02, 1.191789591535714e-02, 1.194698733166317e-02, +1.197617675697864e-02, 1.200546474928123e-02, 1.203485187081489e-02, 1.206433868813025e-02, 1.209392577212579e-02, +1.212361369808943e-02, 1.215340304574051e-02, 1.218329439927223e-02, 1.221328834739487e-02, 1.224338548337907e-02, +1.227358640510000e-02, 1.230389171508179e-02, 1.233430202054263e-02, 1.236481793344028e-02, 1.239544007051825e-02, +1.242616905335236e-02, 1.245700550839801e-02, 1.248795006703791e-02, 1.251900336563033e-02, 1.255016604555801e-02, +1.258143875327768e-02, 1.261282214037004e-02, 1.264431686359038e-02, 1.267592358491992e-02, 1.270764297161758e-02, +1.273947569627254e-02, 1.277142243685724e-02, 1.280348387678115e-02, 1.283566070494534e-02, 1.286795361579713e-02, +1.290036330938631e-02, 1.293289049142105e-02, 1.296553587332530e-02, 1.299830017229638e-02, 1.303118411136354e-02, +1.306418841944702e-02, 1.309731383141807e-02, 1.313056108815955e-02, 1.316393093662730e-02, 1.319742412991231e-02, +1.323104142730351e-02, 1.326478359435161e-02, 1.329865140293344e-02, 1.333264563131727e-02, 1.336676706422893e-02, +1.340101649291860e-02, 1.343539471522860e-02, 1.346990253566205e-02, 1.350454076545214e-02, 1.353931022263269e-02, +1.357421173210904e-02, 1.360924612573037e-02, 1.364441424236268e-02, 1.367971692796268e-02, 1.371515503565263e-02, +1.375072942579620e-02, 1.378644096607529e-02, 1.382229053156778e-02, 1.385827900482626e-02, 1.389440727595776e-02, +1.393067624270475e-02, 1.396708681052673e-02, 1.400363989268329e-02, 1.404033641031803e-02, 1.407717729254367e-02, +1.411416347652804e-02, 1.415129590758156e-02, 1.418857553924561e-02, 1.422600333338206e-02, 1.426358026026407e-02, +1.430130729866801e-02, 1.433918543596660e-02, 1.437721566822335e-02, 1.441539900028810e-02, 1.445373644589412e-02, +1.449222902775596e-02, 1.453087777766923e-02, 1.456968373661141e-02, 1.460864795484384e-02, 1.464777149201522e-02, +1.468705541726691e-02, 1.472650080933894e-02, 1.476610875667771e-02, 1.480588035754554e-02, 1.484581672013110e-02, +1.488591896266188e-02, 1.492618821351756e-02, 1.496662561134564e-02, 1.500723230517818e-02, 1.504800945455032e-02, +1.508895822962001e-02, 1.513007981129053e-02, 1.517137539133318e-02, 1.521284617251262e-02, 1.525449336871400e-02, +1.529631820507124e-02, 1.533832191809772e-02, 1.538050575581815e-02, 1.542287097790333e-02, 1.546541885580534e-02, +1.550815067289600e-02, 1.555106772460633e-02, 1.559417131856857e-02, 1.563746277475980e-02, 1.568094342564815e-02, +1.572461461634021e-02, 1.576847770473152e-02, 1.581253406165821e-02, 1.585678507105207e-02, 1.590123213009646e-02, +1.594587664938543e-02, 1.599072005308491e-02, 1.603576377909583e-02, 1.608100927922045e-02, 1.612645801932985e-02, +1.617211147953517e-02, 1.621797115436089e-02, 1.626403855291985e-02, 1.631031519909193e-02, 1.635680263170528e-02, +1.640350240471923e-02, 1.645041608741085e-02, 1.649754526456423e-02, 1.654489153666180e-02, 1.659245652007957e-02, +1.664024184728447e-02, 1.668824916703465e-02, 1.673648014458352e-02, 1.678493646188629e-02, 1.683361981780957e-02, +1.688253192834415e-02, 1.693167452682158e-02, 1.698104936413313e-02, 1.703065820895296e-02, 1.708050284796394e-02, +1.713058508608766e-02, 1.718090674671726e-02, 1.723146967195416e-02, 1.728227572284884e-02, 1.733332677964450e-02, +1.738462474202547e-02, 1.743617152936838e-02, 1.748796908099802e-02, 1.754001935644755e-02, 1.759232433572124e-02, +1.764488601956353e-02, 1.769770642973010e-02, 1.775078760926455e-02, 1.780413162277975e-02, 1.785774055674251e-02, +1.791161651976318e-02, 1.796576164289061e-02, 1.802017807991104e-02, 1.807486800765155e-02, 1.812983362629009e-02, +1.818507715966739e-02, 1.824060085560747e-02, 1.829640698624108e-02, 1.835249784833453e-02, 1.840887576362522e-02, +1.846554307916088e-02, 1.852250216764616e-02, 1.857975542779336e-02, 1.863730528467974e-02, 1.869515419011060e-02, +1.875330462298914e-02, 1.881175908969003e-02, 1.887052012444288e-02, 1.892959028971854e-02, 1.898897217662410e-02, +1.904866840530422e-02, 1.910868162534834e-02, 1.916901451620577e-02, 1.922966978760644e-02, 1.929065017999102e-02, +1.935195846494646e-02, 1.941359744564956e-02, 1.947556995731843e-02, 1.953787886767066e-02, 1.960052707739179e-02, +1.966351752060845e-02, 1.972685316537331e-02, 1.979053701415509e-02, 1.985457210433970e-02, 1.991896150873915e-02, +1.998370833610892e-02, 2.004881573167511e-02, 2.011428687767150e-02, 2.018012499388372e-02, 2.024633333820618e-02, +2.031291520720639e-02, 2.037987393670128e-02, 2.044721290234211e-02, 2.051493552021124e-02, 2.058304524742958e-02, +2.065154558277237e-02, 2.072044006730178e-02, 2.078973228500506e-02, 2.085942586344740e-02, 2.092952447443580e-02, +2.100003183469754e-02, 2.107095170656559e-02, 2.114228789868358e-02, 2.121404426671748e-02, 2.128622471408687e-02, +2.135883319270234e-02, 2.143187370372428e-02, 2.150535029833013e-02, 2.157926707849882e-02, 2.165362819781039e-02, +2.172843786225875e-02, 2.180370033108101e-02, 2.187941991760355e-02, 2.195560099010175e-02, 2.203224797267893e-02, +2.210936534616029e-02, 2.218695764900585e-02, 2.226502947823779e-02, 2.234358549039082e-02, 2.242263040247537e-02, +2.250216899296502e-02, 2.258220610279877e-02, 2.266274663640658e-02, 2.274379556275214e-02, 2.282535791639834e-02, +2.290743879859470e-02, 2.299004337838211e-02, 2.307317689372474e-02, 2.315684465266255e-02, 2.324105203448501e-02, +2.332580449093428e-02, 2.341110754742538e-02, 2.349696680429491e-02, 2.358338793807881e-02, 2.367037670280953e-02, +2.375793893134233e-02, 2.384608053671298e-02, 2.393480751351643e-02, 2.402412593931946e-02, 2.411404197610328e-02, +2.420456187172841e-02, 2.429569196144224e-02, 2.438743866940886e-02, 2.447980851027393e-02, 2.457280809076451e-02, +2.466644411132216e-02, 2.476072336776829e-02, 2.485565275301090e-02, 2.495123925877904e-02, 2.504748997740596e-02, +2.514441210364089e-02, 2.524201293650426e-02, 2.534029988118842e-02, 2.543928045099013e-02, 2.553896226928997e-02, +2.563935307158047e-02, 2.574046070753016e-02, 2.584229314309888e-02, 2.594485846270281e-02, 2.604816487141887e-02, +2.615222069724678e-02, 2.625703439342325e-02, 2.636261454077797e-02, 2.646896985015335e-02, 2.657610916487720e-02, +2.668404146329106e-02, 2.679277586133560e-02, 2.690232161519538e-02, 2.701268812400749e-02, 2.712388493263305e-02, +2.723592173449138e-02, 2.734880837446026e-02, 2.746255485184616e-02, 2.757717132342871e-02, 2.769266810656219e-02, +2.780905568237425e-02, 2.792634469901796e-02, 2.804454597501693e-02, 2.816367050268771e-02, 2.828372945163976e-02, +2.840473417236485e-02, 2.852669619991867e-02, 2.864962725768253e-02, 2.877353926121912e-02, 2.889844432223664e-02, +2.902435475263360e-02, 2.915128306865165e-02, 2.927924199514086e-02, 2.940824446991570e-02, 2.953830364823060e-02, +2.966943290736689e-02, 2.980164585134262e-02, 2.993495631572943e-02, 3.006937837260377e-02, 3.020492633562041e-02, +3.034161476522032e-02, 3.047945847397167e-02, 3.061847253204799e-02, 3.075867227286098e-02, 3.090007329882428e-02, +3.104269148728242e-02, 3.118654299659147e-02, 3.133164427236997e-02, 3.147801205389776e-02, 3.162566338071767e-02, +3.177461559938440e-02, 3.192488637041469e-02, 3.207649367542481e-02, 3.222945582445920e-02, 3.238379146352317e-02, +3.253951958232969e-02, 3.269665952224297e-02, 3.285523098446536e-02, 3.301525403844999e-02, 3.317674913053018e-02, +3.333973709282004e-02, 3.350423915235164e-02, 3.367027694048347e-02, 3.383787250255348e-02, 3.400704830786234e-02, +3.417782725989016e-02, 3.435023270683548e-02, 3.452428845247981e-02, 3.470001876733313e-02, 3.487744840014063e-02, +3.505660258971859e-02, 3.523750707714193e-02, 3.542018811831329e-02, 3.560467249687511e-02, 3.579098753756513e-02, +3.597916111990912e-02, 3.616922169242633e-02, 3.636119828718146e-02, 3.655512053481785e-02, 3.675101868011221e-02, +3.694892359790976e-02, 3.714886680965672e-02, 3.735088050040769e-02, 3.755499753636665e-02, 3.776125148302575e-02, +3.796967662383875e-02, 3.818030797954344e-02, 3.839318132807511e-02, 3.860833322514509e-02, 3.882580102549109e-02, +3.904562290481691e-02, 3.926783788251161e-02, 3.949248584503809e-02, 3.971960757016504e-02, 3.994924475202519e-02, +4.018144002697931e-02, 4.041623700037718e-02, 4.065368027430393e-02, 4.089381547610095e-02, 4.113668928814092e-02, +4.138234947837477e-02, 4.163084493216903e-02, 4.188222568510071e-02, 4.213654295701793e-02, 4.239384918727856e-02, +4.265419807130007e-02, 4.291764459832381e-02, 4.318424509064794e-02, 4.345405724432615e-02, 4.372714017122246e-02, +4.400355444273073e-02, 4.428336213519293e-02, 4.456662687673602e-02, 4.485341389631300e-02, 4.514379007413232e-02, +4.543782399442618e-02, 4.573558599994006e-02, 4.603714824871848e-02, 4.634258477304224e-02, 4.665197154069028e-02, +4.696538651850100e-02, 4.728290973878899e-02, 4.760462336791700e-02, 4.793061177813619e-02, 4.826096162201311e-02, +4.859576190993245e-02, 4.893510409101161e-02, 4.927908213701429e-02, 4.962779263004886e-02, 4.998133485382108e-02, +5.033981088872321e-02, 5.070332571109194e-02, 5.107198729654266e-02, 5.144590672785330e-02, 5.182519830765808e-02, +5.220997967580562e-02, 5.260037193226379e-02, 5.299649976494240e-02, 5.339849158400164e-02, 5.380647966132648e-02, +5.422060027715941e-02, 5.464099387290190e-02, 5.506780521131065e-02, 5.550118354380304e-02, 5.594128278599803e-02, +5.638826170099771e-02, 5.684228409236822e-02, 5.730351900500930e-02, 5.777214093711701e-02, 5.824833006154496e-02, +5.873227245843550e-02, 5.922416035927789e-02, 5.972419240331855e-02, 6.023257390671135e-02, 6.074951714552922e-02, +6.127524165309805e-02, 6.180997453292713e-02, 6.235395078742177e-02, 6.290741366510025e-02, 6.347061502504725e-02, +6.404381572070365e-02, 6.462728600642950e-02, 6.522130596345847e-02, 6.582616595121359e-02, 6.644216708351365e-02, +6.706962173067801e-02, 6.770885405015876e-02, 6.836020054851545e-02, 6.902401067524323e-02, 6.970064744995147e-02, +7.039048812873928e-02, 7.109392490838246e-02, 7.181136567395162e-02, 7.254323478986174e-02, 7.328997394213939e-02, +7.405204303036350e-02, 7.482992111660267e-02, 7.562410743459462e-02, 7.643512246096959e-02, 7.726350905876482e-02, +7.810983369459748e-02, 7.897468773330364e-02, 7.985868882391924e-02, 8.076248237350624e-02, 8.168674312725339e-02, +8.263217685253897e-02, 8.359952214218136e-02, 8.458955234763808e-02, 8.560307764709922e-02, 8.664094726097721e-02, +8.770405183579809e-02, 8.879332600333216e-02, 8.990975112426186e-02, 9.105435824770836e-02, 9.222823130012905e-02, +9.343251051187931e-02, 9.466839612987468e-02, 9.593715241066648e-02, 9.724011194914539e-02, 9.857868036165565e-02, +9.995434135119849e-02, 1.013686622100244e-01, 1.028232997924972e-01, 1.043200070026139e-01, 1.058606398495997e-01, +1.074471651569439e-01, 1.090816689466604e-01, 1.107663656076400e-01, 1.125036079374191e-01, 1.142958981007997e-01, +1.161458997119761e-01, 1.180564510381272e-01, 1.200305795535312e-01, 1.220715180084827e-01, 1.241827220798729e-01, +1.263678899607639e-01, 1.286309839853891e-01, 1.309762546828021e-01, 1.334082674145709e-01, 1.359319320967154e-01, +1.385525363255699e-01, 1.412757824333732e-01, 1.441078289265746e-01, 1.470553370223640e-01, 1.501255230791583e-01, +1.533262175560458e-01, 1.566659318789719e-01, 1.601539339820259e-01, 1.638003344031104e-01, 1.676161840762574e-01, +1.716135864704616e-01, 1.758058259373194e-01, 1.802075151350041e-01, 1.848347654315720e-01, 1.897053841569125e-01, +1.948391038040393e-01, 2.002578490946182e-01, 2.059860506445547e-01, 2.120510130261529e-01, 2.184833502462140e-01, +2.253175032175642e-01, 2.325923566075963e-01, 2.403519793681240e-01, 2.486465186036903e-01, 2.575332842542348e-01, +2.670780780746819e-01, 2.773568211297051e-01, 2.884575825808999e-01, 3.004831077874051e-01, 3.135540067457522e-01, +3.278128156815317e-01, 3.434292159604898e-01, 3.606068021496177e-01, 3.795920373061096e-01, 4.006860971742861e-01, +4.242609931230809e-01, 4.507816611158829e-01, 4.808368643715972e-01, 5.151832674168473e-01, 5.548098809961413e-01, +6.010342738416996e-01, 6.556508252475161e-01, 7.211660049076284e-01, 8.011867377877530e-01, 9.010874494589812e-01, +1.029199766035716e+00, 1.199011029546746e+00, 1.433109190324988e+00, 1.767258115946684e+00, 2.213710600108230e+00, +2.178771019099798e+00, 3.275790025202306e-01, 0., +}; + +static double _factorial[] = { + 1.0, 1.0, 2.0, 6.0, 24., + 1.2e+2, 7.2e+2, 5.04e+3, 4.032e+4, 3.6288e+5, + 3.6288e+6, 3.99168e+7, 4.790016e+8, 6.2270208e+9, 8.71782912e+10, + 1.307674368e+12, 2.0922789888e+13, 3.55687428096e+14, + 6.402373705728e+15, 1.21645100408832e+17, + 2.43290200817664e+18, 5.109094217170944e+19, + 1.1240007277776077e+21, 2.5852016738884978e+22, +}; + +const static double _factorial2[] = { + 1., 1., 2., 3., 8., + 15., 48., 105., 384., 945., + 3840., 10395., 46080., 135135., 645120., + 2027025., 10321920., 34459425., 185794560., 654729075., + 3715891200., 13749310575., 81749606400., 316234143225., 1961990553600., + 7905853580625., 51011754393600., 213458046676875., + 1428329123020800., 6190283353629376., + 42849873690624000., 1.9189878396251069e+17, + 1.371195958099968e+18, 6.3326598707628524e+18, + 4.6620662575398912e+19, 2.2164309547669976e+20, + 1.6783438527143608e+21, 8.2007945326378929e+21, + 6.3777066403145712e+22, 3.1983098677287775e+23, +}; + +static double factorial2(int n) +{ + if (n < 0) { + return 1; + } else { + return _factorial2[n]; + } +} + +const static double _binom[] = { + 1, + 1, 1, + 1, 2, 1, + 1, 3, 3, 1, + 1, 4, 6, 4, 1, + 1, 5, 10, 10, 5, 1, + 1, 6, 15, 20, 15, 6, 1, + 1, 7, 21, 35, 35, 21, 7, 1, + 1, 8, 28, 56, 70, 56, 28, 8, 1, + 1, 9, 36, 84, 126, 126, 84, 36, 9, 1,}; +static double binom(int n, int m) +{ + if (n < 10) { + return _binom[n*(n+1)/2+m]; + } else { + return _factorial[n] / (_factorial[m]*_factorial[n-m]); + } +} + +static int _cart_pow_y[] = { + 0, 1, 0, 2, 1, 0, 3, 2, 1, 0, 4, 3, 2, 1, 0, 5, 4, 3, 2, 1, + 0, 6, 5, 4, 3, 2, 1, 0, 7, 6, 5, 4, 3, 2, 1, 0, 8, 7, 6, 5, + 4, 3, 2, 1, 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0,10, 9, 8, 7, 6, + 5, 4, 3, 2, 1, 0,11,10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0,12,11, + 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0,13,12,11,10, 9, 8, 7, 6, 5, + 4, 3, 2, 1, 0,14,13,12,11,10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, +}; +static int _cart_pow_z[] = { + 0, 0, 1, 0, 1, 2, 0, 1, 2, 3, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, + 5, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, + 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, + 5, 6, 7, 8, 9,10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11, 0, 1, + 2, 3, 4, 5, 6, 7, 8, 9,10,11,12, 0, 1, 2, 3, 4, 5, 6, 7, 8, + 9,10,11,12,13, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14, +}; +#define LOOP_CART(l, i, ix, iy, iz) \ + for (i = 0; iy = _cart_pow_y[i], \ + iz = _cart_pow_z[i], \ + ix = l - iy - iz, \ + i < (l+1)*(l+2)/2; i++) +#define LOOP_XYZ(i, j, k, ix, iy, iz) \ + for (i = 0; i <= ix; i++) \ + for (j = 0; j <= iy; j++) \ + for (k = 0; k <= iz; k++) + +static int _offset_cart[] = {0, 1, 4, 10, 20, 35, 56, 84, 120, + 165, 220, 286, 364, 455, 560}; + +/* + * Matrix of angular moment operator l*1j on the real spherical harmonic basis. + * Obtained by the function below for l = 0..4 + * +def angular_moment_matrix(l): + lz = numpy.diag(numpy.arange(-l, l+1, dtype=numpy.complex128)) + lx = numpy.zeros_like(lz) + ly = numpy.zeros_like(lz) + for mi in range(-l, l+1): + mj = mi + 1 + if mj <= l: + lx[l+mi,l+mj] = .5 * ((l+mj)*(l-mj+1))**.5 + ly[l+mi,l+mj] = .5j * ((l+mj)*(l-mj+1))**.5 + mj = mi - 1 + if mj >= -l: + lx[l+mi,l+mj] = .5 * ((l-mj)*(l+mj+1))**.5 + ly[l+mi,l+mj] =-.5j * ((l-mj)*(l+mj+1))**.5 + u = sph_pure2real(l) + lx = u.conj().T.dot(lx).dot(u) + ly = u.conj().T.dot(ly).dot(u) + lz = u.conj().T.dot(lz).dot(u) + return numpy.array((lx, ly, lz)) * 1j +*/ +static double _angular_moment_matrix_s[] = { + 0, 0, 0 +}; +static double _angular_moment_matrix_p[] = { + 0, 0, 0, 0, 0, 1, 0, -1, 0, + 0, 0, -1, 0, 0, 0, 1, 0, 0, + 0, 1, 0, -1, 0, 0, 0, 0, 0, +}; +static double _angular_moment_matrix_d[] = { + 0, 0, 0, 1, 0, 0, 0, 1.73205080756887719, 0, 1, 0, -1.73205080756887719, 0, 0, 0, -1, 0, 0, 0, 0, 0, -1, 0, 0, 0, + 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1.73205080756887719, 0, 0, 0, -1.73205080756887719, 0, 1, 0, 0, 0, -1, 0, + 0, 0, 0, 0, -2, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, +}; +static double _angular_moment_matrix_f[] = { + 0, 0, 0, 0, 0, 1.22474487139158894, 0, 0, 0, 0, 0, 1.58113883008418976, 0, 1.22474487139158894, 0, 0, 0, 2.44948974278317788, 0, 1.58113883008418976, 0, 0, 0, -2.44948974278317788, 0, 0, 0, 0, 0, -1.58113883008418976, 0, 0, 0, 0, 0, -1.22474487139158894, 0, -1.58113883008418976, 0, 0, 0, 0, 0, -1.22474487139158894, 0, 0, 0, 0, 0, + 0, -1.22474487139158894, 0, 0, 0, 0, 0, 1.22474487139158894, 0, -1.58113883008418976, 0, 0, 0, 0, 0, 1.58113883008418976, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.44948974278317788, 0, 0, 0, 0, 0, -2.44948974278317788, 0, 1.58113883008418976, 0, 0, 0, 0, 0, -1.58113883008418976, 0, 1.22474487139158894, 0, 0, 0, 0, 0, -1.22474487139158894, 0, + 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, +}; +static double _angular_moment_matrix_g[] = { + 0, 0, 0, 0, 0, 0, 0, 1.41421356237309515, 0, 0, 0, 0, 0, 0, 0, 1.87082869338697066, 0, 1.41421356237309515, 0, 0, 0, 0, 0, 2.12132034355964239, 0, 1.87082869338697066, 0, 0, 0, 0, 0, 3.16227766016837952, 0, 2.12132034355964239, 0, 0, 0, 0, 0, -3.16227766016837952, 0, 0, 0, 0, 0, 0, 0, -2.12132034355964239, 0, 0, 0, 0, 0, 0, 0, -1.87082869338697066, 0, -2.12132034355964239, 0, 0, 0, 0, 0, -1.41421356237309515, 0, -1.87082869338697066, 0, 0, 0, 0, 0, 0, 0, -1.41421356237309515, 0, 0, 0, 0, 0, 0, 0, + 0, -1.41421356237309515, 0, 0, 0, 0, 0, 0, 0, 1.41421356237309515, 0, -1.87082869338697066, 0, 0, 0, 0, 0, 0, 0, 1.87082869338697066, 0, -2.12132034355964239, 0, 0, 0, 0, 0, 0, 0, 2.12132034355964239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.16227766016837952, 0, 0, 0, 0, 0, 0, 0, -3.16227766016837952, 0, 2.12132034355964239, 0, 0, 0, 0, 0, 0, 0, -2.12132034355964239, 0, 1.87082869338697066, 0, 0, 0, 0, 0, 0, 0, -1.87082869338697066, 0, 1.41421356237309515, 0, 0, 0, 0, 0, 0, 0, -1.41421356237309515, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, +}; +static double *_angular_moment_matrix[] = { + _angular_moment_matrix_s, + _angular_moment_matrix_p, + _angular_moment_matrix_d, + _angular_moment_matrix_f, + _angular_moment_matrix_g, +}; +// einsum('jfnq,lmn->ljfmq', angj, jmm) +static void transform_angj(double *jmm_angj, double *angj, int lj, int lc) +{ + const int lj1 = lj + 1; + const int dlc = lc * 2 + 1; + const int ljlc1 = lj + lc + 1; + const int nfj = (lj+1) * (lj+2) / 2; + double *jmm; + + const double D0 = 0; + const double D1 = 1; + const char TRANS_N = 'N'; + + int i, j; + for (i = 0; i < 3; i++) { + jmm = _angular_moment_matrix[lc] + i*dlc*dlc; + for (j = 0; j < lj1*nfj; j++) { + dgemm_(&TRANS_N, &TRANS_N, &ljlc1, &dlc, &dlc, + &D1, angj+j*dlc*ljlc1, &ljlc1, jmm, &dlc, + &D0, jmm_angj+j*dlc*ljlc1, &ljlc1); + } + jmm_angj += lj1 * nfj * dlc * ljlc1; + } +} + +/* + * exponentially scaled modified spherical Bessel function of the first kind + * scipy.special.sph_in(order, z) * numpy.exp(-z) + * + * JCC, 27, 1009 + */ +void ECPsph_ine(double *out, int order, double z) +{ + int i, k; + if (z < 1e-7) { + // (1-z) * z^l / (2l+1)!! + out[0] = 1. - z; + for (i = 1; i <= order; i++) { + out[i] = out[i-1] * z / (i*2+1); + } + } else if (z > 16) { + // R_l(z) = \sum_k (l+k)!/(k!(l-k)!(2x)^k) + double z2 = -.5 / z; + double ti, s; + for (i = 0; i <= order; i++) { + ti = .5 / z; + s = ti; + for (k = 1; k <= i; k++) { + ti *= z2; + s += ti * _factorial[i+k] + / (_factorial[k] * _factorial[i-k]); + } + out[i] = s; + } + } else { + // z^l e^{-z} \sum (z^2/2)^k/(k!(2k+2l+1)!!) + double z2 = .5 * z * z; + double t0 = exp(-z); + double ti, s, next; + for (i = 0; i <= order; i++) { + ti = t0; + s = ti; + for (k = 1;; k++) { + ti *= z2 / (k * (k*2+i*2+1)); + next = s + ti; + if (next == s) { + break; + } else { + s = next; + } + } + t0 *= z/(i*2+3); // k = 0 + out[i] = s; + } + } + +} + + +static const double _l2[] = { // l/(2l+1) + 0., 1./3, 2./5, 3./7, 4./9, 5./11, 6./13, 7./15, + 8./17, 9./19, 10./21, 11./23, 12./25, 13./27, + 14./29, 15./31, 16./33, 17./35, 18./37, 19./39, + 20./41, 21./43, 22./45, 23./47, +}; +static const double _j_inv[] = { // 1/j + 0., 1., .5, 1./3, 1./4, 1./5, 1./6, 1./7, 1./8, 1./9 +}; +void ECPsph_ine_opt(double *out, int order, double z) +{ + if (z < 1e-7 || z > 16) { + return ECPsph_ine(out, order, z); + } else { + /* + * j_n' = j_{n-1} - (n+1)/z j_n = j_{n+1} + n/z j_n + * => n/(2n+1) j_{n-1} + (n+1)/(2n+1) j_{n+1} + * K_n' = n/(2n+1) K_{n-1} + (n+1)/(2n+1) K_{n+1} - K_n + */ + int i, j; + double buf[K_TAB_COL*2]; + double *k0 = buf; + double *k1 = buf + K_TAB_COL; + double *tmp; + int entry = (int)floor(z/K_TAB_INTERVAL); + double *tabu = _sph_ine_tab_order7 + entry * ORDER7OFFSET * (K_TAYLOR_MAX+1); + double z0 = entry*K_TAB_INTERVAL + K_TAB_INTERVAL/2; + double dz = z - z0; + double fac = 1; + double s[ORDER7OFFSET]; + + switch (order) { + case 0: + s[0] = tabu[0]; + for (j = 1; j <= K_TAYLOR_MAX; j++) { + fac *= dz * _j_inv[j]; + s[0] += tabu[j*ORDER7OFFSET] * fac; + } + out[0] = s[0]; + break; + case 1: + s[0] = tabu[0]; + s[1] = tabu[1]; + for (j = 1; j <= K_TAYLOR_MAX; j++) { + fac *= dz * _j_inv[j]; + s[0] += tabu[j*ORDER7OFFSET+0] * fac; + s[1] += tabu[j*ORDER7OFFSET+1] * fac; + } + out[0] = s[0]; + out[1] = s[1]; + break; + case 2: + s[0] = tabu[0]; + s[1] = tabu[1]; + s[2] = tabu[2]; + for (j = 1; j <= K_TAYLOR_MAX; j++) { + fac *= dz * _j_inv[j]; + s[0] += tabu[j*ORDER7OFFSET+0] * fac; + s[1] += tabu[j*ORDER7OFFSET+1] * fac; + s[2] += tabu[j*ORDER7OFFSET+2] * fac; + } + out[0] = s[0]; + out[1] = s[1]; + out[2] = s[2]; + break; + case 3: + for (i = 0; i <= 3; i++) { + s[i] = tabu[i]; + } + for (j = 1; j <= K_TAYLOR_MAX; j++) { + fac *= dz * _j_inv[j]; + for (i = 0; i <= 3; i++) { + s[i] += tabu[j*ORDER7OFFSET+i] * fac; + } + } + for (i = 0; i <= 3; i++) { + out[i] = s[i]; + } + break; + case 4: + for (i = 0; i <= 4; i++) { + s[i] = tabu[i]; + } + for (j = 1; j <= K_TAYLOR_MAX; j++) { + fac *= dz * _j_inv[j]; + for (i = 0; i <= 4; i++) { + s[i] += tabu[j*ORDER7OFFSET+i] * fac; + } + } + for (i = 0; i <= 4; i++) { + out[i] = s[i]; + } + break; + case 5: + for (i = 0; i <= 5; i++) { + s[i] = tabu[i]; + } + for (j = 1; j <= K_TAYLOR_MAX; j++) { + fac *= dz * _j_inv[j]; + for (i = 0; i <= 5; i++) { + s[i] += tabu[j*ORDER7OFFSET+i] * fac; + } + } + for (i = 0; i <= 5; i++) { + out[i] = s[i]; + } + break; + case 6: + for (i = 0; i <= 6; i++) { + s[i] = tabu[i]; + } + for (j = 1; j <= K_TAYLOR_MAX; j++) { + fac *= dz * _j_inv[j]; + for (i = 0; i <= 6; i++) { + s[i] += tabu[j*ORDER7OFFSET+i] * fac; + } + } + for (i = 0; i <= 6; i++) { + out[i] = s[i]; + } + break; + case 7: + for (i = 0; i <= 7; i++) { + s[i] = tabu[i]; + } + for (j = 1; j <= K_TAYLOR_MAX; j++) { + fac *= dz * _j_inv[j]; + for (i = 0; i <= 7; i++) { + s[i] += tabu[j*ORDER7OFFSET+i] * fac; + } + } + for (i = 0; i <= 7; i++) { + out[i] = s[i]; + } + break; + default: + tabu = _sph_ine_tab + entry * K_TAB_COL; + for (i = 0; i <= order+K_TAYLOR_MAX; i++) { + k0[i] = tabu[i]; + } + for (i = 0; i <= order; i++) { + out[i] = k0[i]; + } + + for (j = 1; j <= K_TAYLOR_MAX; j++) { + k1[0] = k0[1] - k0[0]; + for (i = 1; i <= order+K_TAYLOR_MAX-j; i++) { + k1[i] = _l2[i]*k0[i-1] + (1-_l2[i])*k0[i+1] - k0[i]; + } + fac *= dz * _j_inv[j]; + for (i = 0; i <= order; i++) { + out[i] += k1[i] * fac; + } + tmp = k0; + k0 = k1; + k1 = tmp; + } + } + } +} + +void ECPsph_ine_a(double *out, int order, double *zs, int n) +{ + int i; + for (i = 0; i < n; i++) { + ECPsph_ine(out, order, zs[i]); + out += order+1; + } +} + +void ECPgauss_chebyshev(double *rs, double *ws, int n) +{ + int i; + double step = 1./(n+1); + double fac = 16 * step / 3; + double xinc = M_PI * step; + double x1 = 0; + double x2, x3, x4, xi; + for (i = 0; i < n; i++) { + x1 += xinc; + x2 = sin(x1); + x3 = sin(x1*2); + x4 = x2 * x2; + xi = (n-i*2-1) * step + M_1_PI * (1+2./3.*x4) * x3; + rs[i] = 1 - log(1+xi) * M_LOG2E; // 1/ln2 + ws[i] = fac * x4 * x4 * M_LOG2E / (1+xi); + } +} + +/* + * Return the number of effective grids + */ +int ECPrad_part(double *ur, double *rs, int rs_off, int nrs, int inc, + int *ecpshls, int *ecpbas, + int *atm, int natm, int *bas, int nbas, double *env, ECPOpt *opt, double *cache) +{ + const int ecpsh0 = ecpshls[0]; + const int ecpsh1 = ecpshls[1]; + double *ubuf, *r2; + MALLOC_INSTACK(ubuf, nrs); + MALLOC_INSTACK(r2, nrs); + double *ak, *ck, *u_ecp; + double s; + int npk; + int ish, i, kp, n; + int nrs_now; + int nrs_max = 0; + + rs += rs_off; + for (i = 0; i < nrs; i++) { + r2[i] = rs[i*inc] * rs[i*inc]; + ur[i] = 0; + } + + for (ish = ecpsh0; ish < ecpsh1; ish++) { + if (opt == NULL) { + npk = ecpbas[ish*BAS_SLOTS+NPRIM_OF]; + ak = env + ecpbas[ish*BAS_SLOTS+PTR_EXP]; + ck = env + ecpbas[ish*BAS_SLOTS+PTR_COEFF]; + + for (i = 0; i < nrs; i++) { + s = ck[0] * exp(-ak[0]*r2[i]); + for (kp = 1; kp < npk; kp++) { + s += ck[kp] * exp(-ak[kp]*r2[i]); + } + ubuf[i] = s; + if (i > 2 && + fabs(ubuf[i]) < SIM_ZERO && + fabs(ubuf[i-1]) < SIM_ZERO) { + break; + } + } + } else { + u_ecp = opt->u_ecp + ish * (1 << LEVEL_MAX); + for (i = 0; i < nrs; i++) { + ubuf[i] = u_ecp[i*inc+rs_off]; + if (fabs(ubuf[i]) < SIM_ZERO) { + break; + } + } + } + nrs_now = i; + nrs_max = MAX(nrs_max, nrs_now); + switch (ecpbas[ish*BAS_SLOTS+RADI_POWER]) { + case 1: + for (i = 0; i < nrs_now; i++) { + ubuf[i] *= rs[i*inc]; + } + break; + case 2: + for (i = 0; i < nrs_now; i++) { + ubuf[i] *= r2[i]; + } + break; + case 3: + for (i = 0; i < nrs_now; i++) { + ubuf[i] *= r2[i] * rs[i*inc]; + } + break; + default: + for (i = 0; i < nrs_now; i++) { + for (n = 0; n < ecpbas[ish*BAS_SLOTS+RADI_POWER]; n++) { + ubuf[i] *= rs[i*inc]; + } } + break; + } + + for (i = 0; i < nrs_now; i++) { + ur[i] += ubuf[i]; + } + } + return nrs_max; +} + +static double int_unit_xyz(int i, int j, int k) +{ + if (i % 2 || j % 2 || k % 2) { + return 0; + } else { + return (factorial2(i-1) * factorial2(j-1) * + factorial2(k-1) / factorial2(i+j+k+1)); + } +} +/* + * Angular part integration then transform back to cartesian basis + */ +double *CINTc2s_bra_sph(double *gsph, int nket, double *gcart, int l); +double *CINTs2c_bra_sph(double *gsph, int nket, double *gcart, int l); +static void ang_nuc_in_cart(double *omega, int l, double *r) +{ + double buf[CART_MAX]; + double xx[16]; + double yy[16]; + double zz[16]; + int i, j, k, n; + + switch (l) { + case 0: + omega[0] = 0.07957747154594767; + break; + case 1: + omega[0] = r[0] * 0.2387324146378430; + omega[1] = r[1] * 0.2387324146378430; + omega[2] = r[2] * 0.2387324146378430; + break; + default: + xx[0] = 1; + yy[0] = 1; + zz[0] = 1; + for (i = 1; i <= l; i++) { + xx[i] = xx[i-1] * r[0]; + yy[i] = yy[i-1] * r[1]; + zz[i] = zz[i-1] * r[2]; + } + for (n = 0, i = l; i >= 0; i--) { + for (j = l-i; j >= 0; j--, n++) { + k = l - i - j; + omega[n] = xx[i] * yy[j] * zz[k]; + } + } + CINTc2s_bra_sph(buf, 1, omega, l); + CINTs2c_bra_sph(buf, 1, omega, l); + } +} + +static void cache_3dfac(double *facs, int l, double *r) +{ + int l1 = l + 1; + double *facx = facs; + double *facy = facs + l1*l1; + double *facz = facy + l1*l1; + double xx[16]; + double yy[16]; + double zz[16]; + double bfac; + int i, j, off; + xx[0] = 1; + yy[0] = 1; + zz[0] = 1; + for (i = 1; i <= l; i++) { + xx[i] = xx[i-1] * r[0]; + yy[i] = yy[i-1] * r[1]; + zz[i] = zz[i-1] * r[2]; + } + for (i = 0; i <= l; i++) { + for (j = 0; j <= i; j++) { + bfac = binom(i,j); + off = i*l1+j; + facx[off] = bfac * xx[i-j]; + facy[off] = bfac * yy[i-j]; + facz[off] = bfac * zz[i-j]; + } + } +} + +void type2_facs_ang(double *facs, int li, int lc, double *ri, double *cache) +{ + double unitr[3]; + if (ri[0] == 0 && ri[1] == 0 && ri[2] == 0) { + unitr[0] = 0; + unitr[1] = 0; + unitr[2] = 0; + } else { + double norm_ri = -1/sqrt(SQUARE(ri)); + unitr[0] = ri[0] * norm_ri; + unitr[1] = ri[1] * norm_ri; + unitr[2] = ri[2] * norm_ri; + } + + const int li1 = li + 1; + const int dlc = lc * 2 + 1; + const int dlambda = li + lc + 1; + double omega_nuc[CART_CUM]; + double *pnuc; + int m, n, i, j, k, lmb, mi; + for (i = 0; i <= li+lc; i++) { + pnuc = omega_nuc + _offset_cart[i]; + ang_nuc_in_cart(pnuc, i, unitr); + } + for (i = 0; i < _offset_cart[li+lc+1]; i++) { + omega_nuc[i] *= 4 * M_PI; + } + + double buf[CART_MAX]; + double *omega; + MALLOC_INSTACK(omega, li1*li1*li1*dlambda*dlc); + double *pomega; + int dlclmb = dlambda * dlc; + int need_even; + int need_odd; + int pu, pv, pw, pr, ps, pt; + for (i = 0; i <= li; i++) { + for (j = 0; j <= li-i; j++) { + for (k = 0; k <= li-i-j; k++) { + // use need_even to ensure (lc+a+b+c+lmb) is even + need_even = (lc+i+j+k)%2; + pomega = omega + (i*li1*li1+j*li1+k)*dlclmb+need_even*dlc; + for (lmb = need_even; lmb <= li+lc; lmb+=2) { + pnuc = omega_nuc + _offset_cart[lmb]; + LOOP_CART(lc, m, pu, pv, pw) { + buf[m] = 0; + LOOP_CART(lmb, n, pr, ps, pt) { + buf[m] += pnuc[n] * + int_unit_xyz(i+pu+pr, j+pv+ps, k+pw+pt); + } + } + switch (lc) { + case 0: + pomega[0] = buf[0] * 0.282094791773878143; + break; + case 1: + pomega[0] = buf[0] * 0.488602511902919921; + pomega[1] = buf[1] * 0.488602511902919921; + pomega[2] = buf[2] * 0.488602511902919921; + break; + default: + CINTc2s_bra_sph(pomega, 1, buf, lc); + } + pomega += dlc*2; + } + + need_odd = need_even ^ 1; + pomega = omega + (i*li1*li1+j*li1+k)*dlclmb+need_odd*dlc; + for (lmb = need_odd; lmb <= li+lc; lmb+=2) { + for (m = 0; m < dlc; m++) { + pomega[m] = 0; + } + pomega += dlc*2; + } + } } } + + const int nfi = _offset_cart[li+1]-_offset_cart[li]; //(li+1)*(li+2)/2; + double *fac3d; + MALLOC_INSTACK(fac3d, 3*li1*li1); + double *fac3dx = fac3d; + double *fac3dy = fac3dx + li1*li1; + double *fac3dz = fac3dy + li1*li1; + double *pfacs; + double fac; + cache_3dfac(fac3d, li, ri); + + for (i = 0; i < li1*nfi*dlclmb; i++) { facs[i] = 0; } + LOOP_CART(li, mi, pr, ps, pt) { + LOOP_XYZ(i, j, k, pr, ps, pt) { + need_even = (lc+i+j+k)%2; + fac = fac3dx[pr*li1+i] * fac3dy[ps*li1+j] * fac3dz[pt*li1+k]; + pomega = omega + (i*li1*li1+j*li1+k)*dlclmb; + pfacs = facs + ((i+j+k)*nfi+mi)*dlclmb; + for (m = 0; m < dlc; m++) { + for (n = need_even; n < dlambda; n+=2) { + pfacs[m*dlambda+n] += fac * pomega[n*dlc+m]; + } } + } + } +} + +void type2_facs_rad(double *facs, int ish, int lc, double rca, + double *rs, int nrs, int inc, + int *atm, int natm, int *bas, int nbas, double *env, double *cache) +{ + if (nrs == 0) { + return; + } + + const int li = bas[ANG_OF +ish*BAS_SLOTS]; + const int np = bas[NPRIM_OF+ish*BAS_SLOTS]; + const int nc = bas[NCTR_OF +ish*BAS_SLOTS]; + const double *ai = env + bas[PTR_EXP+ish*BAS_SLOTS]; + const double *ci = env + bas[PTR_COEFF+ish*BAS_SLOTS]; + const int lilc1 = li + lc + 1; + int ip, i, j; + double ka; + double *r2, *buf; + MALLOC_INSTACK(r2, nrs); + MALLOC_INSTACK(buf, np*nrs*lilc1); + double t1, ar2; + double *pbuf = buf; + + for (i = 0; i < nrs; i++) { + t1 = rs[i*inc] - rca; + r2[i] = t1 * t1; + } + for (ip = 0; ip < np; ip++) { + ka = 2. * ai[ip] * rca; + for (i = 0; i < nrs; i++) { + // + 6. to include the largest value in ECPsph_ine_opt + ar2 = ai[ip] * r2[i]; + if (ar2 > EXPCUTOFF + 6.) { + for (j = 0; j <= li+lc; j++) { + pbuf[j] = 0; + } + } else { + t1 = exp(-ar2); + ECPsph_ine_opt(pbuf, li+lc, ka*rs[i*inc]); + for (j = 0; j <= li+lc; j++) { + pbuf[j] *= t1; + } + } + pbuf += lilc1; + } + } + + const double D0 = 0; + const double D1 = 1; + const char TRANS_N = 'N'; + const int m = nrs * lilc1; + dgemm_(&TRANS_N, &TRANS_N, &m, &nc, &np, + &D1, buf, &m, ci, &np, &D0, facs, &m); +} + +void type1_static_facs(double *facs, int li, double *ri, double *cache) +{ + const int d1 = li + 1; + const int d2 = d1 * d1; + const int d3 = d2 * d1; + double *fac3d; + MALLOC_INSTACK(fac3d, 3*d1*d1); + double *fac3dx = fac3d; + double *fac3dy = fac3dx + d1*d1; + double *fac3dz = fac3dy + d1*d1; + double *pfacs; + cache_3dfac(fac3d, li, ri); + int mi, i, j, k, px, py, pz; + + LOOP_CART(li, mi, px, py, pz) { + pfacs = facs + mi * d3; + LOOP_XYZ(i, j, k, px, py, pz) { + pfacs[i*d2+j*d1+k] = fac3dx[px*d1+i] * fac3dy[py*d1+j] + * fac3dz[pz*d1+k]; + } + } +} + +void type1_rad_ang(double *rad_ang, int lmax, double *r, double *rad_all) +{ + double unitr[3]; + if (r[0] == 0 && r[1] == 0 && r[2] == 0) { + unitr[0] = 0; + unitr[1] = 0; + unitr[2] = 0; + } else { + double norm_r = -1/sqrt(SQUARE(r)); + unitr[0] = r[0] * norm_r; + unitr[1] = r[1] * norm_r; + unitr[2] = r[2] * norm_r; + } + + double omega_nuc[CART_CUM]; + double *pnuc; + int n, i, j, k, lmb; + for (i = 0; i <= lmax; i++) { + pnuc = omega_nuc + _offset_cart[i]; + ang_nuc_in_cart(pnuc, i, unitr); + } + + const int d1 = lmax + 1; + const int d2 = d1 * d1; + const int d3 = d2 * d1; + int need_even; + double tmp; + int pr, ps, pt; + double *pout, *prad; + for (i = 0; i < d3; i++) { rad_ang[i] = 0; } + for (i = 0; i <= lmax; i++) { + for (j = 0; j <= lmax-i; j++) { + for (k = 0; k <= lmax-i-j; k++) { + pout = rad_ang + i*d2+j*d1+k; + prad = rad_all + (i+j+k)*d1; + // need_even to ensure (a+b+c+lmb) is even + need_even = (i+j+k)%2; + for (lmb = need_even; lmb <= lmax; lmb+=2) { + tmp = 0; + pnuc = omega_nuc + _offset_cart[lmb]; + LOOP_CART(lmb, n, pr, ps, pt) { + tmp += pnuc[n] * int_unit_xyz(i+pr, j+ps, k+pt); + } + *pout += prad[lmb] * tmp; + } + } } } +} + +// ecpbasis which have different r^n but the same l can be put in the same shell +// and evaluated together in ECPrad_part function +static int _loc_ecpbas(int *ecploc, int *ecpbas, int necpbas) +{ + int i, l, so, atm_id; + ecploc[0] = 0; + int nslots = 0; + int atm_last = ecpbas[ATOM_OF]; + int l_last = ecpbas[ANG_OF]; + int so_last = ecpbas[SO_TYPE_OF]; + for (i = 1; i < necpbas; i++) { + atm_id = ecpbas[ATOM_OF+i*BAS_SLOTS]; + l = ecpbas[ANG_OF +i*BAS_SLOTS]; + so = ecpbas[SO_TYPE_OF + i*BAS_SLOTS]; + if (atm_id != atm_last || l != l_last || so != so_last) { + nslots++; + ecploc[nslots] = i; + atm_last = atm_id; + l_last = l; + so_last = so; + } + } + if (necpbas != 0) { + nslots++; + ecploc[nslots] = necpbas; // store boundary at last + } + return nslots; +} + +static double distance_square(const double *r1, const double *r2) +{ + double r12[3]; + r12[0] = r1[0] - r2[0]; + r12[1] = r1[1] - r2[1]; + r12[2] = r1[2] - r2[2]; + return SQUARE(r12); +} + +static int check_3c_overlap(int *shls, int *atm, int *bas, double *env, + double *rc, int *ecpshls, int *ecpbas) +{ + const int ish = shls[0]; + const int jsh = shls[1]; + const int ecpsh0 = ecpshls[0]; + const int ecpsh1 = ecpshls[1]; + const int iprim = bas[NPRIM_OF+ish*BAS_SLOTS]; + const int jprim = bas[NPRIM_OF+jsh*BAS_SLOTS]; + const double ai = env[bas[PTR_EXP+ish*BAS_SLOTS]+iprim-1]; + const double aj = env[bas[PTR_EXP+jsh*BAS_SLOTS]+jprim-1]; + const double *ri = env + atm[PTR_COORD+bas[ATOM_OF+ish*BAS_SLOTS]*ATM_SLOTS]; + const double *rj = env + atm[PTR_COORD+bas[ATOM_OF+jsh*BAS_SLOTS]*ATM_SLOTS]; + double rrab = distance_square(ri, rj); + double rrca = distance_square(rc, ri); + double rrcb = distance_square(rc, rj); + double aiaj = ai * aj * rrab; + double aij = ai + aj; + double ajak, aiak, aijk, eijk; + double *ak; + int csh, kprim; + + for (csh = ecpsh0; csh < ecpsh1; csh++) { + kprim = ecpbas[csh*BAS_SLOTS+NPRIM_OF]; + ak = env + ecpbas[csh*BAS_SLOTS+PTR_EXP]; + + // Test the last primitive funciton only because the basis + // functions are sorted so that the last one has the smallest + // exponent. + aijk = aij + ak[kprim-1]; + aiak = ai * ak[kprim-1] * rrca; + ajak = aj * ak[kprim-1] * rrcb; + eijk = (aiaj+aiak+ajak) / aijk; + if (eijk < EXPCUTOFF) { + return 1; + } + } + return 0; +} + +int ECPtype2_cart(double *gctr, int *shls, int *ecpbas, int necpbas, + int *atm, int natm, int *bas, int nbas, double *env, + ECPOpt *opt, double *cache) +{ + if (necpbas == 0) { + return 0; + } + double *cache0 = cache; + const int ish = shls[0]; + const int jsh = shls[1]; + const int li = bas[ANG_OF+ish*BAS_SLOTS]; + const int lj = bas[ANG_OF+jsh*BAS_SLOTS]; + const int nci = bas[NCTR_OF+ish*BAS_SLOTS]; + const int ncj = bas[NCTR_OF+jsh*BAS_SLOTS]; + const int nfi = (li+1) * (li+2) / 2; + const int nfj = (lj+1) * (lj+2) / 2; + const int di = nfi * nci; + const double *ri = env + atm[PTR_COORD+bas[ATOM_OF+ish*BAS_SLOTS]*ATM_SLOTS]; + const double *rj = env + atm[PTR_COORD+bas[ATOM_OF+jsh*BAS_SLOTS]*ATM_SLOTS]; + const double D0 = 0; + const double D1 = 1; + const char TRANS_N = 'N'; + const char TRANS_T = 'T'; + const double common_fac = CINTcommon_fac_sp(li) * + CINTcommon_fac_sp(lj) * 16 * M_PI * M_PI; + + int nrs = 1 << LEVEL_MAX; + int atm_id, lc, lab, dlc, im, mq; + int i, j, n, ic, jc; + double dca, dcb, s; + double *rc, *pradi, *pradj, *prur; + double rca[3]; + double rcb[3]; + int has_value = 0; + int *ecploc; + MALLOC_INSTACK(ecploc, necpbas+1); + int nslots = _loc_ecpbas(ecploc, ecpbas, necpbas); + int *ecpshls; + int iloc; + + double *rur, *radi, *radj, *angi, *angj, *rad_all, *buf; + double *prad, *plast; + MALLOC_INSTACK(rad_all, nci*ncj*(li+lj+1)*(li+ECP_LMAX+1)*(lj+ECP_LMAX+1)); + MARK_STACK; + MALLOC_INSTACK(angi, (li+1)*nfi*(ECP_LMAX*2+1)*(li+ECP_LMAX+1)); + MALLOC_INSTACK(angj, (lj+1)*nfj*(ECP_LMAX*2+1)*(lj+ECP_LMAX+1)); + MALLOC_INSTACK(buf, nfi*(ECP_LMAX*2+1)*(lj+ECP_LMAX+1)); + + RESTORE_STACK; + MALLOC_INSTACK(rur, nrs*(li+lj+1)); + MALLOC_INSTACK(radi, nci*(li+ECP_LMAX+1)*nrs); + MALLOC_INSTACK(radj, ncj*(lj+ECP_LMAX+1)*nrs); + int lilj1 = li + lj + 1; + int lilc1 = li + ECP_LMAX + 1; + int ljlc1 = lj + ECP_LMAX + 1; + int d2 = lilc1 * ljlc1; + int d3 = lilj1 * d2; + MALLOC_INSTACK(plast, d2); + int8_t *converged; + MALLOC_INSTACK(converged, nci*ncj*lilj1); + + for (iloc = 0; iloc < nslots; iloc++) { + lc = ecpbas[ANG_OF+ecploc[iloc]*BAS_SLOTS]; + if (lc == -1 || + ecpbas[SO_TYPE_OF+ecploc[iloc]*BAS_SLOTS] == 1) { + continue; + } + atm_id = ecpbas[ATOM_OF+ecploc[iloc]*BAS_SLOTS]; + rc = env + atm[PTR_COORD+atm_id*ATM_SLOTS]; + ecpshls = ecploc + iloc; + + if (!check_3c_overlap(shls, atm, bas, env, rc, ecpshls, ecpbas)) { + continue; + } + has_value = 1; + rca[0] = rc[0] - ri[0]; + rca[1] = rc[1] - ri[1]; + rca[2] = rc[2] - ri[2]; + rcb[0] = rc[0] - rj[0]; + rcb[1] = rc[1] - rj[1]; + rcb[2] = rc[2] - rj[2]; + dca = sqrt(SQUARE(rca)); + dcb = sqrt(SQUARE(rcb)); + + dlc = lc * 2 + 1; + lilc1 = li + lc + 1; + ljlc1 = lj + lc + 1; + d2 = lilc1 * ljlc1; + d3 = lilj1 * d2; + im = nfi * dlc; + mq = dlc * ljlc1; + + int level, nrs0, start, step, ijl; + double wtscale; + int all_conv; + double *rs = rs_gauss_chebyshev2047; + double *ws = ws_gauss_chebyshev2047; + for (i = 0; i < nci*ncj*lilj1; i++) { converged[i] = 0; } + for (i = 0; i < nci*ncj*d3; i++) { rad_all[i] = 0; } + nrs0 = (1 << LEVEL0) - 1; + step = 1 << (LEVEL_MAX - LEVEL0); + start = step - 1; + wtscale = step; + for (level = LEVEL0; level <= LEVEL_MAX; level++) { + nrs = ECPrad_part(rur, rs, start, nrs0, step, ecpshls, ecpbas, + atm, natm, bas, nbas, env, opt, cache); + for (i = 0; i < nrs; i++) { + rur[i] *= ws[start+i*step] * wtscale; + for (lab = 1; lab <= li+lj; lab++) { + rur[nrs*lab+i] = rur[nrs*(lab-1)+i] * rs[start+i*step]; + } + } + + type2_facs_rad(radi, ish, lc, dca, rs+start, nrs, step, + atm, natm, bas, nbas, env, cache); + type2_facs_rad(radj, jsh, lc, dcb, rs+start, nrs, step, + atm, natm, bas, nbas, env, cache); + all_conv = 1; + for (ijl = 0, ic = 0; ic < nci; ic++) { + for (jc = 0; jc < ncj; jc++) { + pradi = radi + ic * nrs * lilc1; + pradj = radj + jc * nrs * ljlc1; + for (lab = 0; lab <= li+lj; lab++, ijl++) { + if (!converged[ijl]) { + prur = rur + lab * nrs; + prad = rad_all + ijl*d2; + for (i = 0; i < d2; i++) { + plast[i] = prad[i]; + prad[i] *= .5; + } + + for (i = 0; i < lilc1; i++) { + for (j = 0; j < ljlc1; j++) { + s = prad[i*ljlc1+j]; + for (n = 0; n < nrs; n++) { + s += prur[n] * pradi[n*lilc1+i] * pradj[n*ljlc1+j]; + } + prad[i*ljlc1+j] = s; + } } + + for (i = 0; i < d2; i++) { + if (!CLOSE_ENOUGH(plast[i],prad[i])) { + converged[ijl] = 0; + all_conv = 0; + break; + } + } + } + } + } } + + if (all_conv) { + break; + } else { + nrs0 = (1 << level) - 1; + step = 1 << (LEVEL_MAX - level); + start = (start - 1) / 2; + wtscale *= .5; + } + } + + type2_facs_ang(angi, li, lc, rca, cache); + type2_facs_ang(angj, lj, lc, rcb, cache); + for (ic = 0; ic < nci; ic++) { + for (jc = 0; jc < ncj; jc++) { + prad = rad_all + (ic*ncj+jc)*d3; + for (i = 0; i <= li; i++) { + for (j = 0; j <= lj; j++) { + dgemm_(&TRANS_N, &TRANS_N, &ljlc1, &im, &lilc1, + &D1, prad+(i+j)*d2, &ljlc1, + angi+i*nfi*dlc*lilc1, &lilc1, &D0, buf, &ljlc1); + dgemm_(&TRANS_T, &TRANS_N, &nfi, &nfj, &mq, + &common_fac, buf, &mq, angj+j*nfj*dlc*ljlc1, &mq, + &D1, gctr+jc*nfj*di+ic*nfi, &di); + } } + } } + } + return has_value; +} + +/* + * Compute integrals < 1j * l U(r) > in Cartesian GTO basis + */ +int ECPtype_so_cart(double *gctr, int *shls, int *ecpbas, int necpbas, + int *atm, int natm, int *bas, int nbas, double *env, + ECPOpt *opt, double *cache) +{ + if (necpbas == 0) { + return 0; + } + double *cache0 = cache; + const int ish = shls[0]; + const int jsh = shls[1]; + const int li = bas[ANG_OF+ish*BAS_SLOTS]; + const int lj = bas[ANG_OF+jsh*BAS_SLOTS]; + const int nci = bas[NCTR_OF+ish*BAS_SLOTS]; + const int ncj = bas[NCTR_OF+jsh*BAS_SLOTS]; + const int nfi = (li+1) * (li+2) / 2; + const int nfj = (lj+1) * (lj+2) / 2; + const int di = nfi * nci; + const int ngctr = nci * ncj * nfi * nfj; + const double *ri = env + atm[PTR_COORD+bas[ATOM_OF+ish*BAS_SLOTS]*ATM_SLOTS]; + const double *rj = env + atm[PTR_COORD+bas[ATOM_OF+jsh*BAS_SLOTS]*ATM_SLOTS]; + + int nrs = 1 << LEVEL_MAX; + int ecploc[necpbas+1]; + int nslots = _loc_ecpbas(ecploc, ecpbas, necpbas); + int *ecpshls; + int iloc; + + const double D0 = 0; + const double D1 = 1; + const char TRANS_N = 'N'; + const char TRANS_T = 'T'; + double common_fac = CINTcommon_fac_sp(li) * + CINTcommon_fac_sp(lj) * 16 * M_PI * M_PI; + // be careful with the factor 1/2 for the spin operator s = 1/2 Pauli matrix + // The ECPso_cart and ECPso_sph integral code evaluates the integrals + // as shown in NWChem ECP doc + // http://www.nwchem-sw.org/index.php/ECP + // Note when calling ECPso_spinor function to evaluate the integrals in + // spinor basis pyscf evaluates the expression like + // einsum('sxy,spq,xpi,yqj->ij', pauli_matrix, so_sph, ui.conj(), uj) + // A factor of 1/2 needs to be multiplied for integrals in spinor basis. + // See also the discussion in https://github.com/pyscf/pyscf/issues/378 + //common_fac *= .5; // 1/2 was applied in old implementation. + + const int lilj1 = li + lj + 1; + int atm_id, lc, lab, lilc1, ljlc1, dlc, im, mq, jfmq; + int i, j, n, ic, jc; + int d2, d3; + + double *rur, *radi, *radj, *angi, *angj, *jmm_angj, *rad_all, *buf, *plast; + MALLOC_INSTACK(rad_all, nci*ncj*(li+lj+1)*(li+ECP_LMAX+1)*(lj+ECP_LMAX+1)); + MARK_STACK; + MALLOC_INSTACK(angi, (li+1)*nfi*(ECP_LMAX*2+1)*(li+ECP_LMAX+1)); + MALLOC_INSTACK(angj, (lj+1)*nfj*(ECP_LMAX*2+1)*(lj+ECP_LMAX+1)); + MALLOC_INSTACK(buf, nfi*(ECP_LMAX*2+1)*(lj+ECP_LMAX+1)); + MALLOC_INSTACK(jmm_angj, (lj+1)*nfj*(ECP_LMAX*2+1)*(lj+ECP_LMAX+1)*3); + MALLOC_INSTACK(buf, nfi*(ECP_LMAX*2+1)*(lj+ECP_LMAX+1)); + + RESTORE_STACK; + MALLOC_INSTACK(rur, nrs*(li+lj+1)); + MALLOC_INSTACK(radi, nci*(li+ECP_LMAX+1)*nrs); + MALLOC_INSTACK(radj, ncj*(lj+ECP_LMAX+1)*nrs); + lilc1 = li + ECP_LMAX + 1; + ljlc1 = lj + ECP_LMAX + 1; + d2 = lilc1 * ljlc1; + MALLOC_INSTACK(plast, d2); + int8_t *converged; + MALLOC_INSTACK(converged, nci*ncj*lilj1); + + double rca[3]; + double rcb[3]; + double dca, dcb, s; + double *rc, *pradi, *pradj, *prur; + double *gctrx = gctr; + double *gctry = gctrx + ngctr; + double *gctrz = gctry + ngctr; + + int has_value = 0; + int ecp_lmax[natm]; + for (i = 0; i < natm; i++) { + ecp_lmax[i] = 0; + } + for (i = 0; i < necpbas; i++) { + n = ecpbas[ATOM_OF +i*BAS_SLOTS]; + ecp_lmax[n] = MAX(ecp_lmax[n], ecpbas[ANG_OF +i*BAS_SLOTS]); + } + + for (iloc = 0; iloc < nslots; iloc++) { + if (ecpbas[SO_TYPE_OF+ecploc[iloc]*BAS_SLOTS] != 1) { + continue; + } + lc = ecpbas[ANG_OF+ecploc[iloc]*BAS_SLOTS]; + if (lc == -1) { // Treat Ul term as L_max in SO-ECP + n = ecpbas[ATOM_OF+ecploc[iloc]*BAS_SLOTS]; + lc = ecp_lmax[n] + 1; + } + atm_id = ecpbas[ATOM_OF+ecploc[iloc]*BAS_SLOTS]; + rc = env + atm[PTR_COORD+atm_id*ATM_SLOTS]; + ecpshls = ecploc + iloc; + + if (!check_3c_overlap(shls, atm, bas, env, rc, ecpshls, ecpbas)) { + continue; + } + + has_value = 1; + rca[0] = rc[0] - ri[0]; + rca[1] = rc[1] - ri[1]; + rca[2] = rc[2] - ri[2]; + rcb[0] = rc[0] - rj[0]; + rcb[1] = rc[1] - rj[1]; + rcb[2] = rc[2] - rj[2]; + dca = sqrt(SQUARE(rca)); + dcb = sqrt(SQUARE(rcb)); + + dlc = lc * 2 + 1; + lilc1 = li + lc + 1; + ljlc1 = lj + lc + 1; + d2 = lilc1 * ljlc1; + d3 = lilj1 * d2; + im = nfi * dlc; + mq = dlc * ljlc1; + jfmq = (lj+1) * nfj * mq; + + int level, nrs0, start, step, ijl; + double wtscale; + double *prad; + int all_conv; + double *rs = rs_gauss_chebyshev2047; + double *ws = ws_gauss_chebyshev2047; + for (i = 0; i < nci*ncj*lilj1; i++) { converged[i] = 0; } + for (i = 0; i < nci*ncj*d3; i++) { rad_all[i] = 0; } + nrs0 = (1 << LEVEL0) - 1; + step = 1 << (LEVEL_MAX - LEVEL0); + start = step - 1; + wtscale = step; + for (level = LEVEL0; level <= LEVEL_MAX; level++) { + nrs = ECPrad_part(rur, rs, start, nrs0, step, ecpshls, ecpbas, + atm, natm, bas, nbas, env, opt, cache); + for (i = 0; i < nrs; i++) { + rur[i] *= ws[start+i*step] * wtscale; + for (lab = 1; lab <= li+lj; lab++) { + rur[nrs*lab+i] = rur[nrs*(lab-1)+i] * rs[start+i*step]; + } + } + + type2_facs_rad(radi, ish, lc, dca, rs+start, nrs, step, + atm, natm, bas, nbas, env, cache); + type2_facs_rad(radj, jsh, lc, dcb, rs+start, nrs, step, + atm, natm, bas, nbas, env, cache); + all_conv = 1; + for (ijl = 0, ic = 0; ic < nci; ic++) { + for (jc = 0; jc < ncj; jc++) { + pradi = radi + ic * nrs * lilc1; + pradj = radj + jc * nrs * ljlc1; + for (lab = 0; lab <= li+lj; lab++, ijl++) { + if (!converged[ijl]) { + prur = rur + lab * nrs; + prad = rad_all + ijl*d2; + for (i = 0; i < d2; i++) { + plast[i] = prad[i]; + prad[i] *= .5; + } + + for (i = 0; i < lilc1; i++) { + for (j = 0; j < ljlc1; j++) { + s = prad[i*ljlc1+j]; + for (n = 0; n < nrs; n++) { + s += prur[n] * pradi[n*lilc1+i] * pradj[n*ljlc1+j]; + } + prad[i*ljlc1+j] = s; + } } + + for (i = 0; i < d2; i++) { + if (!CLOSE_ENOUGH(plast[i], prad[i])) { + converged[ijl] = 0; + all_conv = 0; + break; + } + } + } + } + } } + + if (all_conv) { + break; + } else { + nrs0 = (1 << level) - 1; + step = 1 << (LEVEL_MAX - level); + start = (start - 1) / 2; + wtscale *= .5; + } + } + + type2_facs_ang(angi, li, lc, rca, cache); + type2_facs_ang(angj, lj, lc, rcb, cache); + transform_angj(jmm_angj, angj, lj, lc); + + for (ic = 0; ic < nci; ic++) { + for (jc = 0; jc < ncj; jc++) { + prad = rad_all + (ic*ncj+jc)*d3; + for (i = 0; i <= li; i++) { + for (j = 0; j <= lj; j++) { + dgemm_(&TRANS_N, &TRANS_N, &ljlc1, &im, &lilc1, + &D1, prad+(i+j)*d2, &ljlc1, + angi+i*nfi*dlc*lilc1, &lilc1, &D0, buf, &ljlc1); + dgemm_(&TRANS_T, &TRANS_N, &nfi, &nfj, &mq, + &common_fac, buf, &mq, jmm_angj +j*nfj*dlc*ljlc1, &mq, + &D1, gctrx+jc*nfj*di+ic*nfi, &di); + dgemm_(&TRANS_T, &TRANS_N, &nfi, &nfj, &mq, + &common_fac, buf, &mq, jmm_angj+jfmq +j*nfj*dlc*ljlc1, &mq, + &D1, gctry+jc*nfj*di+ic*nfi, &di); + dgemm_(&TRANS_T, &TRANS_N, &nfi, &nfj, &mq, + &common_fac, buf, &mq, jmm_angj+jfmq*2+j*nfj*dlc*ljlc1, &mq, + &D1, gctrz+jc*nfj*di+ic*nfi, &di); + } } + } } + } + return has_value; +} + +static void scale_coeff(double *cei, const double *ci, const double *ai, + const double r2ca, const int npi, const int nci, const int li) +{ + int ip, ic; + double tmp; + double common_fac = CINTcommon_fac_sp(li) * 4 * M_PI; + for (ip = 0; ip < npi; ip++) { + tmp = exp(-ai[ip] * r2ca) * common_fac; + for (ic = 0; ic < nci; ic++) { + cei[ic*npi+ip] = ci[ic*npi+ip] * tmp; + } + } +} + +void type1_rad_part(double *rad_all, int lmax, double k, double aij, + double *ur, double *rs, int nrs, int inc, double *cache) +{ + if (nrs == 0) { + return; + } + + const int lmax1 = lmax + 1; + double *rur, *bval; + MALLOC_INSTACK(rur, nrs); + MALLOC_INSTACK(bval, nrs*lmax1); + int lab, i, n; + double kaij, fac, tmp, s; + double *prad; + + kaij = k / (2*aij); + fac = kaij*kaij*aij; + for (n = 0; n < nrs; n++) { + tmp = rs[n*inc] - kaij; + tmp = fac - aij*tmp*tmp; + if (ur[n] == 0 +/* Avoid exp(tmp) to be infinity! Usually such points correspond to remote + * functions. Most likely, they can be dropped without affecting accuracy. */ + || tmp > CUTOFF +/* + 6. to include the largest value in ECPsph_ine_opt + * +30. to include the rs^lmax of remote point for high-l functions. */ + || tmp < -(EXPCUTOFF+6.+30.)) { + rur[n] = 0; + for (i = 0; i < lmax1; i++) { + bval[n*lmax1+i] = 0; + } + } else { + rur[n] = ur[n] * exp(tmp); + ECPsph_ine_opt(bval+n*lmax1, lmax, k*rs[n*inc]); + } + } + + for (lab = 0; lab <= lmax; lab++) { + if (lab > 0) { + for (n = 0; n < nrs; n++) { + rur[n] *= rs[n*inc]; + } + } + prad = rad_all + lab * lmax1; + for (i = lab%2; i <= lmax; i+=2) { + s = prad[i]; + for (n = 0; n < nrs; n++) { + s += rur[n] * bval[n*lmax1+i]; + } + prad[i] = s; + } + } +} + +int ECPtype1_cart(double *gctr, int *shls, int *ecpbas, int necpbas, + int *atm, int natm, int *bas, int nbas, double *env, + ECPOpt *opt, double *cache) +{ + if (necpbas == 0) { + return 0; + } + const int ish = shls[0]; + const int jsh = shls[1]; + const int li = bas[ANG_OF+ish*BAS_SLOTS]; + const int lj = bas[ANG_OF+jsh*BAS_SLOTS]; + const int npi = bas[NPRIM_OF+ish*BAS_SLOTS]; + const int npj = bas[NPRIM_OF+jsh*BAS_SLOTS]; + const int nci = bas[NCTR_OF+ish*BAS_SLOTS]; + const int ncj = bas[NCTR_OF+jsh*BAS_SLOTS]; + const int nfi = (li+1) * (li+2) / 2; + const int nfj = (lj+1) * (lj+2) / 2; + const double *ai = env + bas[PTR_EXP+ish*BAS_SLOTS]; + const double *aj = env + bas[PTR_EXP+jsh*BAS_SLOTS]; + const double *ci = env + bas[PTR_COEFF+ish*BAS_SLOTS]; + const double *cj = env + bas[PTR_COEFF+jsh*BAS_SLOTS]; + const double *ri = env + atm[PTR_COORD+bas[ATOM_OF+ish*BAS_SLOTS]*ATM_SLOTS]; + const double *rj = env + atm[PTR_COORD+bas[ATOM_OF+jsh*BAS_SLOTS]*ATM_SLOTS]; + + int nrs = 1 << LEVEL_MAX; + int *ecploc; + MALLOC_INSTACK(ecploc, necpbas+1); + int nslots = _loc_ecpbas(ecploc, ecpbas, necpbas); + int *ecpshls; + int iloc; + + const int lilj1 = li + lj + 1; + const int d1 = lilj1; + const int d2 = d1 * d1; + const int d3 = d2 * d1; + const int di1 = li + 1; + const int di2 = di1 * di1; + const int di3 = di2 * di1; + const int dj1 = lj + 1; + const int dj2 = dj1 * dj1; + const int dj3 = dj2 * dj1; + int atm_id; + int i, n, ip, jp, ic, jc, mi, mj; + int i1, i2, i3, j1, j2, j3; + int ix, iy, iz, jx, jy, jz; + double *ur, *rad_all, *rad_ang, *rad_ang_all, *ifac, *jfac, *cei, *cej, *plast; + MALLOC_INSTACK(ur, nrs); + MALLOC_INSTACK(rad_all, npi*npj*d2); + MALLOC_INSTACK(rad_ang, d3); + MALLOC_INSTACK(rad_ang_all, nci*ncj*d3); + MALLOC_INSTACK(ifac, nfi*di3); + MALLOC_INSTACK(jfac, nfj*dj3); + MALLOC_INSTACK(cei, npi*nci); + MALLOC_INSTACK(cej, npj*ncj); + MALLOC_INSTACK(plast, d2); + double rca[3]; + double rcb[3]; + double rij[3]; + double fac; + double *rc, *pifac, *pjfac, *pout; + int has_value = 0; + int8_t *converged; + MALLOC_INSTACK(converged, npi*npj); + + for (i = 0; i < d3; i++) { rad_all[i] = 0; } + + for (iloc = 0; iloc < nslots; iloc++) { + if (ecpbas[ANG_OF+ecploc[iloc]*BAS_SLOTS] != -1) { + continue; + } + atm_id = ecpbas[ATOM_OF+ecploc[iloc]*BAS_SLOTS]; + rc = env + atm[PTR_COORD+atm_id*ATM_SLOTS]; + ecpshls = ecploc + iloc; + + if (!check_3c_overlap(shls, atm, bas, env, rc, ecpshls, ecpbas)) { + continue; + } + + has_value = 1; + rca[0] = rc[0] - ri[0]; + rca[1] = rc[1] - ri[1]; + rca[2] = rc[2] - ri[2]; + rcb[0] = rc[0] - rj[0]; + rcb[1] = rc[1] - rj[1]; + rcb[2] = rc[2] - rj[2]; + scale_coeff(cei, ci, ai, SQUARE(rca), npi, nci, li); + scale_coeff(cej, cj, aj, SQUARE(rcb), npj, ncj, lj); + + int level, nrs0, start, step; + double wtscale; + double *prad; + int all_conv; + double *rs = rs_gauss_chebyshev2047; + double *ws = ws_gauss_chebyshev2047; + for (i = 0; i < npi*npj; i++) { converged[i] = 0; } + for (i = 0; i < npi*npj*d2; i++) { rad_all[i] = 0; } + nrs0 = (1 << LEVEL0) - 1; + step = 1 << (LEVEL_MAX - LEVEL0); + start = step - 1; + wtscale = step; + for (level = LEVEL0; level <= LEVEL_MAX; level++) { + nrs = ECPrad_part(ur, rs, start, nrs0, step, ecpshls, ecpbas, + atm, natm, bas, nbas, env, opt, cache); + if (nrs == 0) { + break; + } + for (n = 0; n < nrs; n++) { + ur[n] *= ws[start+n*step] * wtscale; + } + + all_conv = 1; + for (ip = 0; ip < npi; ip++) { + for (jp = 0; jp < npj; jp++) { + if (!converged[ip*npj+jp]) { + prad = rad_all + (ip*npj+jp)*d2; + for (i = 0; i < d2; i++) { + plast[i] = prad[i]; + prad[i] *= .5; + } + rij[0] = ai[ip] * rca[0] + aj[jp] * rcb[0]; + rij[1] = ai[ip] * rca[1] + aj[jp] * rcb[1]; + rij[2] = ai[ip] * rca[2] + aj[jp] * rcb[2]; + type1_rad_part(prad, li+lj, sqrt(SQUARE(rij))*2, + ai[ip]+aj[jp], ur, rs+start, nrs, step, cache); + converged[ip*npj+jp] = 1; + for (i = 0; i < d2; i++) { + if (!CLOSE_ENOUGH(plast[i],prad[i])) { + converged[ip*npj+jp] = 0; + all_conv = 0; + break; + } + } + } + } } + + if (all_conv) { + break; + } else { + nrs0 = (1 << level) - 1; + step = 1 << (LEVEL_MAX - level); + start = (start - 1) / 2; + wtscale *= .5; + } + } + + for (i = 0; i < nci*ncj*d3; i++) { rad_ang_all[i] = 0; } + for (ip = 0; ip < npi; ip++) { + for (jp = 0; jp < npj; jp++) { + rij[0] = ai[ip] * rca[0] + aj[jp] * rcb[0]; + rij[1] = ai[ip] * rca[1] + aj[jp] * rcb[1]; + rij[2] = ai[ip] * rca[2] + aj[jp] * rcb[2]; + type1_rad_ang(rad_ang, li+lj, rij, rad_all+(ip*npj+jp)*d2); + for (ic = 0; ic < nci; ic++) { + for (jc = 0; jc < ncj; jc++) { + fac = cei[ic*npi+ip] * cej[jc*npj+jp]; + prad = rad_ang_all + (ic*ncj+jc)*d3; + for (n = 0; n < d3; n++) { + prad[n] += fac * rad_ang[n]; + } + } } + } } + + type1_static_facs(ifac, li, rca, cache); + type1_static_facs(jfac, lj, rcb, cache); + for (ic = 0; ic < nci; ic++) { + for (jc = 0; jc < ncj; jc++) { + prad = rad_ang_all + (ic*ncj+jc)*d3; + LOOP_CART(li, mi, ix, iy, iz) { + LOOP_CART(lj, mj, jx, jy, jz) { + pifac = ifac + mi * di3; + pjfac = jfac + mj * dj3; + pout = gctr + (jc*nfj+mj) * nci*nfi + ic*nfi+mi; + LOOP_XYZ(i1, i2, i3, ix, iy, iz) { + LOOP_XYZ(j1, j2, j3, jx, jy, jz) { + *pout += pifac[i1*di2+i2*di1+i3] * + pjfac[j1*dj2+j2*dj1+j3] * + prad[(i1+j1)*d2+(i2+j2)*d1+i3+j3]; + } } + } } + } } + } + return has_value; +} + +int ECPtype_scalar_cart(double *gctr, int *shls, int *ecpbas, int necpbas, + int *atm, int natm, int *bas, int nbas, double *env, + ECPOpt *opt, double *cache) +{ + int has_value1, has_value2; + has_value1 = ECPtype1_cart(gctr, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); + has_value2 = ECPtype2_cart(gctr, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); + return has_value1 | has_value2; +} + +int ECPscalar_cache_size(int comp, int *shls, + int *atm, int natm, int *bas, int nbas, double *env) +{ + const int ish = shls[0]; + const int jsh = shls[1]; + const int li = bas[ANG_OF+ish*BAS_SLOTS]; + const int lj = bas[ANG_OF+jsh*BAS_SLOTS]; + const int nfi = (li+1) * (li+2) / 2; + const int nfj = (lj+1) * (lj+2) / 2; + const int npi = bas[NPRIM_OF+ish*BAS_SLOTS]; + const int npj = bas[NPRIM_OF+jsh*BAS_SLOTS]; + const int nci = bas[NCTR_OF+ish*BAS_SLOTS]; + const int ncj = bas[NCTR_OF+jsh*BAS_SLOTS]; + const int lilj1 = li + lj + 1; + const int lilc1 = li + ECP_LMAX + 1; + const int ljlc1 = lj + ECP_LMAX + 1; + const int d1 = lilj1; + const int d2 = d1 * d1; + const int d3 = d2 * d1; + const int di1 = li + 1; + const int di2 = di1 * di1; + const int di3 = di2 * di1; + const int dj1 = lj + 1; + const int dj2 = dj1 * dj1; + const int dj3 = dj2 * dj1; + const int nrs = 1 << LEVEL_MAX; + int size1 = nci*ncj*(li+lj+1); + size1 += ((li+1)*nfi*(ECP_LMAX*2+1)*(li+ECP_LMAX+1) + + (lj+1)*nfj*(ECP_LMAX*2+1)*(lj+ECP_LMAX+1)); + size1 += nfi*(ECP_LMAX*2+1)*(lj+ECP_LMAX+1); + size1 += (lj+1)*nfj*(ECP_LMAX*2+1)*(lj+ECP_LMAX+1)*3; + int size2 = nrs * (li+lj+1 + 1 + + nci*(li+ECP_LMAX+1) + + ncj*(lj+ECP_LMAX+1) + + MAX(npi*lilc1, npj*ljlc1)); + size2 += lilc1 * ljlc1; + size2 += MAX(di1*di1*di1*lilc1, dj1*dj1*dj1*ljlc1) * (ECP_LMAX*2 + 1); + int size = nfi*nfj*(nci*ncj+2) * comp; + size += nci*ncj*(li+lj+1)*(li+ECP_LMAX+1)*(lj+ECP_LMAX+1); + //size += MAX(size1, size2); bugs in bufsize estimation, not sure where's the error + size += size1 + size2 + 120; + size += nfi*(ECP_LMAX*2+1)*(lj+ECP_LMAX+1); + size += npi*npj*d2; + size += d3; + size += nci*ncj*d3; + size += nfi*di3; + size += nfj*dj3; + size += npi*nci; + size += npj*ncj; + size += natm; + return size; +} + +int ECPscalar_c2s_factory(Function_cart fcart, double *gctr, int comp, int *shls, + int *ecpbas, int necpbas, int *atm, int natm, + int *bas, int nbas, double *env, ECPOpt *opt, + double *cache) +{ + const int ish = shls[0]; + const int jsh = shls[1]; + const int li = bas[ANG_OF+ish*BAS_SLOTS]; + const int lj = bas[ANG_OF+jsh*BAS_SLOTS]; + const int nfi = (li+1) * (li+2) / 2; + const int nfj = (lj+1) * (lj+2) / 2; + const int nci = bas[NCTR_OF+ish*BAS_SLOTS]; + const int ncj = bas[NCTR_OF+jsh*BAS_SLOTS]; + int ngcart = nfi*nfj*nci*ncj * comp; + + if (li < 2 && lj < 2) { + NPdset0(gctr, ngcart); + return fcart(gctr, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); + } + + int j; + int di = nfi * nci; + int dji = di * (lj*2+1); + int nij = (li*2+1) * (lj*2+1) * nci * ncj; + double *gcart, *gtmp; + MALLOC_INSTACK(gcart, ngcart); + NPdset0(gcart, ngcart); + gtmp = cache; + int has_value = fcart(gcart, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); + + if (has_value) { + if (li < 2) { + for (j = 0; j < ncj * comp; j++) { + CINTc2s_ket_sph(gctr+j*dji, di, gcart+j*nfj*di, lj); + } + } else if (lj < 2 ) { + CINTc2s_bra_sph(gctr, (lj*2+1)*nci*ncj * comp, gcart, li); + } else { + for (j = 0; j < ncj * comp; j++) { + CINTc2s_ket_sph(gtmp+j*dji, di, gcart+j*nfj*di, lj); + } + CINTc2s_bra_sph(gctr, (lj*2+1)*nci*ncj * comp, gtmp, li); + } + } else { + for (j = 0; j < nij * comp; j++) { gctr[j] = 0; } + } + return has_value; +} + +int ECPtype1_sph(double *gctr, int *shls, int *ecpbas, int necpbas, + int *atm, int natm, int *bas, int nbas, double *env, + ECPOpt *opt, double *cache) +{ + return ECPscalar_c2s_factory(ECPtype1_cart, gctr, 1, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); +} + +int ECPtype2_sph(double *gctr, int *shls, int *ecpbas, int necpbas, + int *atm, int natm, int *bas, int nbas, double *env, + ECPOpt *opt, double *cache) +{ + return ECPscalar_c2s_factory(ECPtype2_cart, gctr, 1, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); +} + +int ECPtype_scalar_sph(double *gctr, int *shls, int *ecpbas, int necpbas, + int *atm, int natm, int *bas, int nbas, double *env, + ECPOpt *opt, double *cache) +{ + return ECPscalar_c2s_factory(ECPtype_scalar_cart, gctr, 1, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); +} + +void ECPscalar_distribute(double *out, double *gctr, const int *dims, + const int comp, const int di, const int dj) +{ + const int dij = di * dj; + int i, j, ni, icomp; + if (dims == NULL) { + for (i = 0; i < dij * comp; i++) { + out[i] = gctr[i]; + } + } else { + ni = dims[0]; + for (icomp = 0; icomp < comp; icomp++) { + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + out[i+j*ni] = gctr[i+j*di]; + } } + out += dims[0] * dims[1]; + gctr += dij; + } + } +} +void ECPscalar_distribute0(double *out, const int *dims, + const int comp, const int di, const int dj) +{ + const int dij = di * dj; + int i, j, ni, icomp; + if (dims == NULL) { + for (i = 0; i < dij * comp; i++) { + out[i] = 0; + } + } else { + ni = dims[0]; + for (icomp = 0; icomp < comp; icomp++) { + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + out[i+j*ni] = 0; + } } + out += dims[0] * dims[1]; + } + } +} + + +/* + * For moleintor.getints function + */ +int ECPscalar_sph(double *out, int *dims, int *shls, int *atm, int natm, + int *bas, int nbas, double *env, ECPOpt *opt, double *cache) + +{ + const int ish = shls[0]; + const int jsh = shls[1]; + const int li = bas[ANG_OF+ish*BAS_SLOTS]; + const int lj = bas[ANG_OF+jsh*BAS_SLOTS]; + const int di = (li*2+1) * bas[NCTR_OF+ish*BAS_SLOTS]; + const int dj = (lj*2+1) * bas[NCTR_OF+jsh*BAS_SLOTS]; + const int dij = di * dj; + const int comp = 1; + + if (out == NULL) { + int cache_size = ECPscalar_cache_size(comp, shls, + atm, natm, bas, nbas, env); + return cache_size; + } + double *stack = NULL; + if (cache == NULL) { + int cache_size = ECPscalar_cache_size(comp, shls, + atm, natm, bas, nbas, env); + stack = malloc(sizeof(double) * cache_size); + cache = stack; + } + + int *ecpbas = bas + (int)(env[AS_ECPBAS_OFFSET])*BAS_SLOTS; + int necpbas = (int)(env[AS_NECPBAS]); + double *buf1; + MALLOC_INSTACK(buf1, dij * comp); + int has_value = ECPtype_scalar_sph(buf1, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); + if (has_value) { + ECPscalar_distribute(out, buf1, dims, 1, di, dj); + } else { + ECPscalar_distribute0(out, dims, 1, di, dj); + } + + if (stack != NULL) { + free(stack); + } + return has_value; +} + +int ECPscalar_cart(double *out, int *dims, int *shls, int *atm, int natm, + int *bas, int nbas, double *env, ECPOpt *opt, double *cache) +{ + const int ish = shls[0]; + const int jsh = shls[1]; + const int li = bas[ANG_OF+ish*BAS_SLOTS]; + const int lj = bas[ANG_OF+jsh*BAS_SLOTS]; + const int di = (li+1) * (li+2) / 2 * bas[NCTR_OF+ish*BAS_SLOTS]; + const int dj = (lj+1) * (lj+2) / 2 * bas[NCTR_OF+jsh*BAS_SLOTS]; + const int dij = di * dj; + const int comp = 1; + + if (out == NULL) { + int cache_size = ECPscalar_cache_size(comp, shls, + atm, natm, bas, nbas, env); + return cache_size; + } + double *stack = NULL; + if (cache == NULL) { + int cache_size = ECPscalar_cache_size(comp, shls, + atm, natm, bas, nbas, env); + stack = malloc(sizeof(double) * cache_size); + cache = stack; + } + + int *ecpbas = bas + ((int)env[AS_ECPBAS_OFFSET])*BAS_SLOTS; + int necpbas = (int)env[AS_NECPBAS]; + int ngcart = dij * comp; + double *buf1; + MALLOC_INSTACK(buf1, ngcart); + NPdset0(buf1, ngcart); + int has_value = ECPtype_scalar_cart(buf1, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); + if (has_value) { + ECPscalar_distribute(out, buf1, dims, 1, di, dj); + } else { + ECPscalar_distribute0(out, dims, 1, di, dj); + } + + if (stack != NULL) { + free(stack); + } + return has_value; +} + +/* Port from libcint */ +void CINTc2s_bra_spinor_si(double complex *gsp, int nket, + double complex *gcart, int kappa, int l); +void CINTc2s_ket_spinor(double complex *gsp, int nbra, + double complex *gcart, int kappa, int l); +void CINTdcmplx_pp(const int n, double complex *z, + const double *re, const double *im); +void CINTdcmplx_pn(const int n, double complex *z, + const double *re, const double *im); +void CINTdcmplx_np(const int n, double complex *z, + const double *re, const double *im); +static void zcopy_ij(double complex *opij, const double complex *gctr, + const int ni, const int nj, const int mi, const int mj) +{ + int i, j; + + for (j = 0; j < mj; j++) { + for (i = 0; i < mi; i++) { + opij[j*ni+i] = gctr[j*mi+i]; + } + } +} +// multiply pauli_matrix +static void cart2spinor(double complex *opij, double *gctr, int *dims, + int *shls, int *bas, double *cache) +{ + //TODO: call libcint function c2s_si_1ei. Note c2s_si_1ei multiplies + //-1*pauli_matrix than pauli_matrix + + int i_sh = shls[0]; + int j_sh = shls[1]; + int li = bas[ANG_OF+i_sh*BAS_SLOTS]; + int lj = bas[ANG_OF+j_sh*BAS_SLOTS]; + int i_kp = bas[KAPPA_OF+i_sh*BAS_SLOTS]; + int j_kp = bas[KAPPA_OF+j_sh*BAS_SLOTS]; + int i_ctr = bas[NCTR_OF+i_sh*BAS_SLOTS]; + int j_ctr = bas[NCTR_OF+j_sh*BAS_SLOTS]; + int di = CINTlen_spinor(i_sh, bas); + int dj = CINTlen_spinor(j_sh, bas); + int ni = dims[0]; + int nj = dims[1]; + int ofj = ni * dj; + int nfi = (li+1)*(li+2)/2; + int nfj = (lj+1)*(lj+2)/2; + int nf2i = nfi + nfi; + int nf2j = nfj + nfj; + int nf = nfi * nfj; + int ic, jc; + double *gc_x = gctr; + double *gc_y = gc_x + nf * i_ctr * j_ctr; + double *gc_z = gc_y + nf * i_ctr * j_ctr; + double *gc_1 = gc_z + nf * i_ctr * j_ctr; + double complex *tmp1, *tmp2; + MALLOC_INSTACK(tmp1, nf2i*nf2j); + MALLOC_INSTACK(tmp2, nf2i*nf2j); + + for (jc = 0; jc < j_ctr; jc++) { + for (ic = 0; ic < i_ctr; ic++) { + //cmplx( gctr.POS_Z, gctr.POS_1) + //cmplx( gctr.POS_X,-gctr.POS_Y) + CINTdcmplx_pp(nf, tmp1, gc_z, gc_1); + CINTdcmplx_pn(nf, tmp1+nf, gc_x, gc_y); + //cmplx( gctr.POS_X, gctr.POS_Y) + //cmplx(-gctr.POS_Z, gctr.POS_1) + CINTdcmplx_pp(nf, tmp1+nfi*nf2j, gc_x, gc_y); + CINTdcmplx_np(nf, tmp1+nfi*nf2j+nf, gc_z, gc_1); + CINTc2s_bra_spinor_si(tmp2, nf2j, tmp1, i_kp, li); + CINTc2s_ket_spinor(tmp1, di, tmp2, j_kp, lj); + zcopy_ij(opij+ofj*jc+di*ic, tmp1, ni, nj, di, dj); + + gc_x += nf; + gc_y += nf; + gc_z += nf; + gc_1 += nf; + } } +} + +void ECPscalar_optimizer(ECPOpt **opt, int *atm, int natm, int *bas, int nbas, double *env) +{ + ECPOpt *opt0 = (ECPOpt *)malloc(sizeof(ECPOpt)); + *opt = opt0; + + int *ecpbas = bas + (int)(env[AS_ECPBAS_OFFSET])*BAS_SLOTS; + int necpbas = (int)(env[AS_NECPBAS]); + + double r2, s; + double *ak, *ck, *uk; + int npk; + int i, ib, kp; + + opt0->u_ecp = malloc(sizeof(double) * (1 << LEVEL_MAX) * necpbas); + uk = opt0->u_ecp; + for (ib = 0; ib < necpbas; ib++) { + npk = ecpbas[ib*BAS_SLOTS+NPRIM_OF]; + ak = env + ecpbas[ib*BAS_SLOTS+PTR_EXP]; + ck = env + ecpbas[ib*BAS_SLOTS+PTR_COEFF]; + + for (i = 0; i < (1 << LEVEL_MAX); i++) { + r2 = rs_gauss_chebyshev2047[i]*rs_gauss_chebyshev2047[i]; + s = ck[0] * exp(-ak[0]*r2); + for (kp = 1; kp < npk; kp++) { + s += ck[kp] * exp(-ak[kp]*r2); + } + uk[i] = s; + } + uk += (1 << LEVEL_MAX); + } +} + +void ECPdel_optimizer(ECPOpt **opt) +{ + if (opt == NULL) { + return; + } + + ECPOpt *opt0 = *opt; + if (opt0 == NULL) { + return; + } + + if (opt0->u_ecp != NULL) { + free(opt0->u_ecp); + } + free(opt0); + opt = NULL; +} + + +/* + * + * H^{SO} integrals in spinor basis can be evaluated + * -1j * einsum('sxy,spq,xpi,yqj->ij', .5 * pauli_matrix, so_cart, ui.conj(), uj) + */ +int ECPso_cart(double *out, int *dims, int *shls, int *atm, int natm, + int *bas, int nbas, double *env, ECPOpt *opt, double *cache) +{ + const int ish = shls[0]; + const int jsh = shls[1]; + const int li = bas[ANG_OF+ish*BAS_SLOTS]; + const int lj = bas[ANG_OF+jsh*BAS_SLOTS]; + const int di = (li+1) * (li+2) / 2 * bas[NCTR_OF+ish*BAS_SLOTS]; + const int dj = (lj+1) * (lj+2) / 2 * bas[NCTR_OF+jsh*BAS_SLOTS]; + const int dij = di * dj; + const int comp = 4; + + if (out == NULL) { + int cache_size = ECPscalar_cache_size(comp, shls, + atm, natm, bas, nbas, env); + return cache_size; + } + double *stack = NULL; + if (cache == NULL) { + int cache_size = ECPscalar_cache_size(comp, shls, + atm, natm, bas, nbas, env); + stack = malloc(sizeof(double) * cache_size); + cache = stack; + } + + int *ecpbas = bas + ((int)env[AS_ECPBAS_OFFSET])*BAS_SLOTS; + int necpbas = (int)env[AS_NECPBAS]; + int ngcart = dij * comp; + double *buf1; + MALLOC_INSTACK(buf1, ngcart); + NPdset0(buf1, ngcart); + int has_value = ECPtype_so_cart(buf1, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); + + if (has_value) { + // comp-1 for x, y, z components only + ECPscalar_distribute(out, buf1, dims, comp-1, di, dj); + } else { + ECPscalar_distribute0(out, dims, comp-1, di, dj); + } + + if (stack != NULL) { + free(stack); + } + return has_value; +} + +int ECPso_sph(double *out, int *dims, int *shls, int *atm, int natm, + int *bas, int nbas, double *env, ECPOpt *opt, double *cache) +{ + const int ish = shls[0]; + const int jsh = shls[1]; + const int li = bas[ANG_OF+ish*BAS_SLOTS]; + const int lj = bas[ANG_OF+jsh*BAS_SLOTS]; + const int nci = bas[NCTR_OF+ish*BAS_SLOTS]; + const int ncj = bas[NCTR_OF+jsh*BAS_SLOTS]; + const int di = (li*2+1) * nci; + const int dj = (lj*2+1) * ncj; + const int dij = di * dj; + const int comp = 4; + + if (out == NULL) { + int cache_size = ECPscalar_cache_size(comp, shls, + atm, natm, bas, nbas, env); + return cache_size; + } + double *stack = NULL; + if (cache == NULL) { + int cache_size = ECPscalar_cache_size(comp, shls, + atm, natm, bas, nbas, env); + stack = malloc(sizeof(double) * cache_size); + cache = stack; + } + + int *ecpbas = bas + (int)(env[AS_ECPBAS_OFFSET])*BAS_SLOTS; + int necpbas = (int)(env[AS_NECPBAS]); + double *buf1; + MALLOC_INSTACK(buf1, dij * comp); + int has_value = ECPscalar_c2s_factory(ECPtype_so_cart, buf1, comp, + shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); + if (has_value) { + // comp-1 for x, y, z components only + ECPscalar_distribute(out, buf1, dims, comp-1, di, dj); + } else { + ECPscalar_distribute0(out, dims, comp-1, di, dj); + } + + if (stack != NULL) { + free(stack); + } + return has_value; +} + +#define OF_CMPLX 2 +int ECPso_spinor(double complex *out, int *dims, int *shls, int *atm, int natm, + int *bas, int nbas, double *env, ECPOpt *opt, double *cache) +{ + const int ish = shls[0]; + const int jsh = shls[1]; + const int li = bas[ANG_OF+ish*BAS_SLOTS]; + const int lj = bas[ANG_OF+jsh*BAS_SLOTS]; + const int nfi = (li+1) * (li+2) / 2; + const int nfj = (lj+1) * (lj+2) / 2; + const int nci = bas[NCTR_OF+ish*BAS_SLOTS]; + const int ncj = bas[NCTR_OF+jsh*BAS_SLOTS]; + const int ngctr = nfi * nfj * nci * ncj; + const int di = CINTcgto_spinor(shls[0], bas); + const int dj = CINTcgto_spinor(shls[1], bas); + const int comp = 4; + + if (out == NULL) { + int cache_size = ECPscalar_cache_size(comp, shls, + atm, natm, bas, nbas, env); + return cache_size + ngctr*8*OF_CMPLX; + } + double *stack = NULL; + if (cache == NULL) { + int cache_size = ECPscalar_cache_size(comp, shls, + atm, natm, bas, nbas, env); + stack = malloc(sizeof(double) * (cache_size + ngctr*8*OF_CMPLX)); + cache = stack; + } + + int *ecpbas = bas + (int)(env[AS_ECPBAS_OFFSET])*BAS_SLOTS; + int necpbas = (int)(env[AS_NECPBAS]); + int ngcart = ngctr * comp; + double *buf1; + MALLOC_INSTACK(buf1, ngcart); + NPdset0(buf1, ngcart); + int has_value = ECPtype_so_cart(buf1, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); + int counts[2] = {di, dj}; + if (dims == NULL) { + dims = counts; + } + cart2spinor(out, buf1, dims, shls, bas, cache); + + if (stack != NULL) { + free(stack); + } + return has_value; +} diff --git a/pyscfadlib/pyscfadlib/gto/nr_ecp.h b/pyscfadlib/pyscfadlib/gto/nr_ecp.h new file mode 100644 index 00000000..98bd122d --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/nr_ecp.h @@ -0,0 +1,46 @@ +#ifndef HAVE_DEFINED_ECP_H +#define HAVE_DEFINED_ECP_H +#include + +//#define ATOM_OF 0 +//#define ANG_OF 1 +#define RADI_POWER 3 +#define SO_TYPE_OF 4 + +#define ECP_LMAX 5 +//#define PTR_EXP 5 +//#define PTR_COEFF 6 +#define SIM_ZERO 1e-50 +#define EXPCUTOFF 39 // 1e-17 +#define CUTOFF 460 // ~ 1e200 +#define CLOSE_ENOUGH(x, y) (fabs(x-y) < 1e-12*fabs(y) || fabs(x-y) < 1e-12) +#define SQUARE(r) (r[0]*r[0]+r[1]*r[1]+r[2]*r[2]) +#define CART_CUM (455+1) // upto l = 12 +#define K_TAYLOR_MAX 7 +#define K_TAB_COL 24 // >= (7*2+1+K_TAYLOR_MAX) +#define K_TAB_ENTRIES 400 +#define K_TAB_INTERVAL (16./K_TAB_ENTRIES) // [0,16], interval 0.04 +#define MALLOC_INSTACK(var, n) \ + var = (void *)cache; \ + cache = (void *)(((uintptr_t)(var + (n)) + 7) & (-(uintptr_t)8)); +#define MARK_STACK cache0 = cache; +#define RESTORE_STACK cache = cache0; + +// Held in env, to get *ecpbas, necpbas +#define AS_RINV_ORIG_ATOM 17 +#define AS_ECPBAS_OFFSET 18 +#define AS_NECPBAS 19 + +// for radial grids +#define LEVEL0 5 +//#define LEVEL_MAX 11 // 2047 points +#define LEVEL_MAX 11 +#endif + +typedef struct { + double *u_ecp; +} ECPOpt; + +typedef int Function_cart(double *gctr, int *shls, int *ecpbas, int necpbas, + int *atm, int natm, int *bas, int nbas, double *env, + ECPOpt *opt, double *cache); diff --git a/pyscfadlib/pyscfadlib/gto/nr_ecp_deriv.c b/pyscfadlib/pyscfadlib/gto/nr_ecp_deriv.c new file mode 100644 index 00000000..bc541694 --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/nr_ecp_deriv.c @@ -0,0 +1,1007 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +#include +#include +#include "cint.h" +#include "np_helper/np_helper.h" +#include "vhf/fblas.h" +#include "gto/nr_ecp.h" + +int ECPtype1_cart(double *gctr, int *shls, int *ecpbas, int necpbas, + int *atm, int natm, int *bas, int nbas, double *env, + ECPOpt *opt, double *cache); +int ECPtype2_cart(double *gctr, int *shls, int *ecpbas, int necpbas, + int *atm, int natm, int *bas, int nbas, double *env, + ECPOpt *opt, double *cache); +int ECPscalar_c2s_factory(Function_cart fcart, double *gctr, int comp, int *shls, + int *ecpbas, int necpbas, int *atm, int natm, + int *bas, int nbas, double *env, ECPOpt *opt, + double *cache); +void ECPscalar_distribute(double *out, double *gctr, const int *dims, + const int comp, const int di, const int dj); +void ECPscalar_distribute0(double *out, const int *dims, + const int comp, const int di, const int dj); +int ECPscalar_cache_size(int comp, int *shls, + int *atm, int natm, int *bas, int nbas, double *env); + +/* +static int _x_addr[] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, +105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, +}; */ +static int _y_addr[] = { + 1, 3, 4, 6, 7, 8, 10, 11, 12, 13, 15, 16, 17, 18, 19, + 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 36, 37, + 38, 39, 40, 41, 42, 43, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, +103, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, +120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, +}; +static int _z_addr[] = { + 2, 4, 5, 7, 8, 9, 11, 12, 13, 14, 16, 17, 18, 19, 20, + 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 37, 38, + 39, 40, 41, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, +104, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, +121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, +}; + +static int _cart_pow_y[] = { + 0, 1, 0, 2, 1, 0, 3, 2, 1, 0, 4, 3, 2, 1, 0, 5, 4, 3, 2, 1, + 0, 6, 5, 4, 3, 2, 1, 0, 7, 6, 5, 4, 3, 2, 1, 0, 8, 7, 6, 5, + 4, 3, 2, 1, 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0,10, 9, 8, 7, 6, + 5, 4, 3, 2, 1, 0,11,10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0,12,11, + 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0,13,12,11,10, 9, 8, 7, 6, 5, + 4, 3, 2, 1, 0,14,13,12,11,10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, +}; +static int _cart_pow_z[] = { + 0, 0, 1, 0, 1, 2, 0, 1, 2, 3, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, + 5, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, + 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, + 5, 6, 7, 8, 9,10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11, 0, 1, + 2, 3, 4, 5, 6, 7, 8, 9,10,11,12, 0, 1, 2, 3, 4, 5, 6, 7, 8, + 9,10,11,12,13, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14, +}; + +// ecpbas needs to be grouped according to atom Id. Searching for the first +// shell that matches the atm_id +static int _one_shell_ecpbas(int *nsh, int atm_id, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int *all_ecp = bas + ((int)env[AS_ECPBAS_OFFSET])*BAS_SLOTS; + int necpbas = (int)env[AS_NECPBAS]; + int i; + int n = 0; + int shl_id = -1; + for (i = 0; i < necpbas; i++) { + if (atm_id == all_ecp[ATOM_OF+i*BAS_SLOTS]) { + shl_id = i; + break; + } + } + for (; i < necpbas; i++) { + if (atm_id == all_ecp[ATOM_OF+i*BAS_SLOTS]) { + n++; + } else { + break; + } + } + *nsh = n; + return shl_id; +} + +static void _uncontract_bas(int *fakbas, int *shls, + int *atm, int natm, int *bas, int nbas, double *env) +{ + const int ish = shls[0]; + const int jsh = shls[1]; + const int npi = bas[NPRIM_OF+ish*BAS_SLOTS]; + const int npj = bas[NPRIM_OF+jsh*BAS_SLOTS]; + int i; + for (i = 0; i < npi; i++) { + fakbas[i*BAS_SLOTS+ATOM_OF ] = bas[ish*BAS_SLOTS+ATOM_OF]; + fakbas[i*BAS_SLOTS+ANG_OF ] = bas[ish*BAS_SLOTS+ANG_OF ]; + fakbas[i*BAS_SLOTS+NPRIM_OF ] = 1; + fakbas[i*BAS_SLOTS+NCTR_OF ] = 1; + fakbas[i*BAS_SLOTS+PTR_EXP ] = bas[ish*BAS_SLOTS+PTR_EXP] + i; + fakbas[i*BAS_SLOTS+PTR_COEFF] = bas[ish*BAS_SLOTS+PTR_EXP] + i; + } + fakbas += npi * BAS_SLOTS; + for (i = 0; i < npj; i++) { + fakbas[i*BAS_SLOTS+ATOM_OF ] = bas[jsh*BAS_SLOTS+ATOM_OF]; + fakbas[i*BAS_SLOTS+ANG_OF ] = bas[jsh*BAS_SLOTS+ANG_OF ]; + fakbas[i*BAS_SLOTS+NPRIM_OF ] = 1; + fakbas[i*BAS_SLOTS+NCTR_OF ] = 1; + fakbas[i*BAS_SLOTS+PTR_EXP ] = bas[jsh*BAS_SLOTS+PTR_EXP] + i; + fakbas[i*BAS_SLOTS+PTR_COEFF] = bas[jsh*BAS_SLOTS+PTR_EXP] + i; + } +} + +static void _l_down(double *out, double *buf1, + double fac, double ai, int li, int nfj) +{ + const int nfi = (li+1) * (li+2) / 2; + const int nfi1 = (li+2) * (li+3) / 2; + int i, j; + double *outx = out; + double *outy = outx + nfi*nfj; + double *outz = outy + nfi*nfj; + + if (li == 0) { + fac *= -2./sqrt(3.) * ai; + } else if (li == 1) { + fac *= -2.*0.488602511902919921 * ai; + } else { + fac *= -2. * ai; + } + for (j = 0; j < nfj; j++) { + for (i = 0; i < nfi; i++) { + outx[j*nfi+i] = fac * buf1[j*nfi1+ i ]; + outy[j*nfi+i] = fac * buf1[j*nfi1+_y_addr[i]]; + outz[j*nfi+i] = fac * buf1[j*nfi1+_z_addr[i]]; + } + } +} + +static void _l_up(double *out, double *buf1, double fac, int li, int nfj) +{ + const int nfi = (li+1) * (li+2) / 2; + const int nfi0 = li * (li+1) / 2; + int i, j; + double *outx = out; + double *outy = outx + nfi*nfj; + double *outz = outy + nfi*nfj; + double xfac, yfac, zfac; + + if (li == 1) { + fac *= sqrt(3.); + } else if (li == 2) { + fac *= 1./0.488602511902919921; + } + for (i = 0; i < nfi0; i++) { + yfac = fac * (_cart_pow_y[i] + 1); + zfac = fac * (_cart_pow_z[i] + 1); + xfac = fac * (li-1 - _cart_pow_y[i] - _cart_pow_z[i] + 1); + for (j = 0; j < nfj; j++) { + outx[j*nfi+ i ] += xfac * buf1[j*nfi0+i]; + outy[j*nfi+_y_addr[i]] += yfac * buf1[j*nfi0+i]; + outz[j*nfi+_z_addr[i]] += zfac * buf1[j*nfi0+i]; + } + } +} + +static int _deriv1_cart(double *gctr, int *shls, int *ecpbas, int necpbas, + int *atm, int natm, int *bas, int nbas, double *env, + ECPOpt *opt, double *cache) +{ + if (necpbas == 0) { + return 0; + } + const int ish = shls[0]; + const int jsh = shls[1]; + const int npi = bas[NPRIM_OF+ish*BAS_SLOTS]; + const int npj = bas[NPRIM_OF+jsh*BAS_SLOTS]; + const int nci = bas[NCTR_OF+ish*BAS_SLOTS]; + const int ncj = bas[NCTR_OF+jsh*BAS_SLOTS]; + const int li = bas[ANG_OF+ish*BAS_SLOTS]; + const int lj = bas[ANG_OF+jsh*BAS_SLOTS]; + const int nfi = (li+1) * (li+2) / 2; + const int nfj = (lj+1) * (lj+2) / 2; + const int nfi0 = li * (li+1) / 2; + const int nfi1 = (li+2) * (li+3) / 2; + const int di = nfi * nci; + const int dj = nfj * ncj; + const int dij = di * dj; + const double *expi = env + bas[PTR_EXP+ish*BAS_SLOTS]; + const double *expj = env + bas[PTR_EXP+jsh*BAS_SLOTS]; + const double *ci = env + bas[PTR_COEFF+ish*BAS_SLOTS]; + const double *cj = env + bas[PTR_COEFF+jsh*BAS_SLOTS]; + int nfakbas = npi + npj; + int *fakbas; + MALLOC_INSTACK(fakbas, (npi+npj) * BAS_SLOTS); + _uncontract_bas(fakbas, shls, atm, natm, bas, nbas, env); + double *buf1; + MALLOC_INSTACK(buf1, (nfi1*nfj + nfi*nfj*3)); + double *gprim = buf1 + nfi1*nfj; + + int has_value = 0; + int shls1[2]; + double fac; + + int i, j, ip, jp, ic, jc, n; + double *gctrx = gctr; + double *gctry = gctrx + dij; + double *gctrz = gctry + dij; + double *gpx = gprim; + double *gpy = gpx + nfi*nfj; + double *gpz = gpy + nfi*nfj; + + for (jp = 0; jp < npj; jp++) { + for (ip = 0; ip < npi; ip++) { + shls1[0] = ip; + shls1[1] = npi + jp; +/* divide (expi[ip] * expj[jp]) because the exponents were used as normalization + * coefficients for primitive GTOs in function _uncontract_bas */ + fac = 1. / (expi[ip] * expj[jp]); + fakbas[ip*BAS_SLOTS+ANG_OF] = li + 1; + NPdset0(buf1, nfi1*nfj); + has_value = (ECPtype1_cart(buf1, shls1, ecpbas, necpbas, atm, natm, + fakbas, nfakbas, env, opt, cache) | has_value); + has_value = (ECPtype2_cart(buf1, shls1, ecpbas, necpbas, atm, natm, + fakbas, nfakbas, env, opt, cache) | has_value); + _l_down(gprim, buf1, fac, expi[ip], li, nfj); + + if (li > 0) { + fakbas[ip*BAS_SLOTS+ANG_OF] = li - 1; + NPdset0(buf1, nfi0*nfj); + has_value = (ECPtype1_cart(buf1, shls1, ecpbas, necpbas, atm, natm, + fakbas, nfakbas, env, opt, cache) | has_value); + has_value = (ECPtype2_cart(buf1, shls1, ecpbas, necpbas, atm, natm, + fakbas, nfakbas, env, opt, cache) | has_value); + _l_up(gprim, buf1, fac, li, nfj); + } + + for (jc = 0; jc < ncj; jc++) { + for (ic = 0; ic < nci; ic++) { + fac = ci[ic*npi+ip] * cj[jc*npj+jp]; + n = jc*nfj*di + ic*nfi; + for (j = 0; j < nfj; j++) { + for (i = 0; i < nfi; i++) { + gctrx[n+j*di+i] += fac * gpx[j*nfi+i]; + gctry[n+j*di+i] += fac * gpy[j*nfi+i]; + gctrz[n+j*di+i] += fac * gpz[j*nfi+i]; + } } + } } + } } + + return has_value; +} + +static int _cart_factory(Function_cart intor_cart, double *out, int comp, + int *dims, int *shls, int *ecpbas, int necpbas, + int *atm, int natm, int *bas, int nbas, double *env, + ECPOpt *opt, double *cache) +{ + const int ish = shls[0]; + const int jsh = shls[1]; + const int li = bas[ANG_OF+ish*BAS_SLOTS]; + const int lj = bas[ANG_OF+jsh*BAS_SLOTS]; + const int di = (li+1) * (li+2) / 2 * bas[NCTR_OF+ish*BAS_SLOTS];; + const int dj = (lj+1) * (lj+2) / 2 * bas[NCTR_OF+jsh*BAS_SLOTS]; + const int dij = di * dj; + + if (out == NULL) { + int cache_size = ECPscalar_cache_size(comp*2, shls, + atm, natm, bas, nbas, env); + return cache_size; + } + double *stack = NULL; + if (cache == NULL) { + int cache_size = ECPscalar_cache_size(comp*2, shls, + atm, natm, bas, nbas, env); + stack = malloc(sizeof(double) * cache_size); + cache = stack; + } + + int ngcart = dij * comp; + double *buf; + MALLOC_INSTACK(buf, ngcart); + NPdset0(buf, ngcart); + int has_value; + has_value = intor_cart(buf, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); + if (has_value) { + ECPscalar_distribute(out, buf, dims, comp, di, dj); + } else { + ECPscalar_distribute0(out, dims, comp, di, dj); + } + + if (stack != NULL) { + free(stack); + } + return has_value; +} + +int ECPscalar_iprinv_cart(double *out, int *dims, int *shls, int *atm, int natm, + int *bas, int nbas, double *env, ECPOpt *opt, double *cache) +{ + int necpbas = (int)env[AS_NECPBAS]; + if (out == NULL) { + int cache_size = _cart_factory(_deriv1_cart, out, 3, + dims, shls, NULL, necpbas, + atm, natm, bas, nbas, env, opt, cache); + cache_size += necpbas * BAS_SLOTS; + return cache_size; + } else { + int atm_id = (int)env[AS_RINV_ORIG_ATOM]; + int *ecpbas = bas + ((int)env[AS_ECPBAS_OFFSET])*BAS_SLOTS; + int shl_id = _one_shell_ecpbas(&necpbas, atm_id, atm, natm, bas, nbas, env); + if (shl_id < 0) { + return 0; + } + ecpbas += shl_id * BAS_SLOTS; + ECPOpt opt1; + if (opt != NULL) { + // iprinv requires potential on a specific atom. + // opt->u_ecp used by ECPrad_part was initialized for all atoms. + // shifts the u_ecp pointer to the u_ecp of atm_id + opt1.u_ecp = opt->u_ecp + shl_id * (1 << LEVEL_MAX); + opt = &opt1; + } + int has_value = _cart_factory(_deriv1_cart, out, 3, + dims, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); + return has_value; + } +} + +int ECPscalar_ipnuc_cart(double *out, int *dims, int *shls, int *atm, int natm, + int *bas, int nbas, double *env, ECPOpt *opt, double *cache) +{ + int necpbas = (int)env[AS_NECPBAS]; + int *ecpbas = bas + ((int)env[AS_ECPBAS_OFFSET])*BAS_SLOTS; + int has_value = _cart_factory(_deriv1_cart, out, 3, + dims, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); + return has_value; +} + +static int _sph_factory(Function_cart intor_cart, double *out, int comp, + int *dims, int *shls, int *ecpbas, int necpbas, + int *atm, int natm, int *bas, int nbas, double *env, + ECPOpt *opt, double *cache) +{ + const int ish = shls[0]; + const int jsh = shls[1]; + const int li = bas[ANG_OF+ish*BAS_SLOTS]; + const int lj = bas[ANG_OF+jsh*BAS_SLOTS]; + const int di = (li*2+1) * bas[NCTR_OF+ish*BAS_SLOTS]; + const int dj = (lj*2+1) * bas[NCTR_OF+jsh*BAS_SLOTS]; + const int dij = di * dj; + + if (out == NULL) { + int cache_size = ECPscalar_cache_size(comp*2+2, shls, + atm, natm, bas, nbas, env); + return cache_size; + } + double *stack = NULL; + if (cache == NULL) { + int cache_size = ECPscalar_cache_size(comp*2+2, shls, + atm, natm, bas, nbas, env); + stack = malloc(sizeof(double) * cache_size); + cache = stack; + } + + double *buf = cache; + cache += dij * comp; + int has_value = 0; + has_value = ECPscalar_c2s_factory(intor_cart, buf, comp, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); + if (has_value) { + ECPscalar_distribute(out, buf, dims, comp, di, dj); + } else { + ECPscalar_distribute0(out, dims, comp, di, dj); + } + + if (stack != NULL) { + free(stack); + } + return has_value; +} + +int ECPscalar_iprinv_sph(double *out, int *dims, int *shls, int *atm, int natm, + int *bas, int nbas, double *env, ECPOpt *opt, double *cache) +{ + int necpbas = (int)env[AS_NECPBAS]; + if (out == NULL) { + int cache_size = _sph_factory(_deriv1_cart, out, 3, + dims, shls, NULL, necpbas, + atm, natm, bas, nbas, env, opt, cache); + cache_size += necpbas * BAS_SLOTS; + return cache_size; + } else { + int atm_id = (int)env[AS_RINV_ORIG_ATOM]; + int *ecpbas = bas + ((int)env[AS_ECPBAS_OFFSET])*BAS_SLOTS; + int shl_id = _one_shell_ecpbas(&necpbas, atm_id, atm, natm, bas, nbas, env); + if (shl_id < 0) { + return 0; + } + ecpbas += shl_id * BAS_SLOTS; + ECPOpt opt1; + if (opt != NULL) { + // iprinv requires potential on a specific atom. + // opt->u_ecp used by ECPrad_part was initialized for all atoms. + // shifts the u_ecp pointer to the u_ecp of atm_id + opt1.u_ecp = opt->u_ecp + shl_id * (1 << LEVEL_MAX); + opt = &opt1; + } + int has_value = _sph_factory(_deriv1_cart, out, 3, + dims, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); + return has_value; + } +} + +int ECPscalar_ipnuc_sph(double *out, int *dims, int *shls, int *atm, int natm, + int *bas, int nbas, double *env, ECPOpt *opt, double *cache) +{ + int necpbas = (int)env[AS_NECPBAS]; + int *ecpbas = bas + ((int)env[AS_ECPBAS_OFFSET])*BAS_SLOTS; + int has_value = _sph_factory(_deriv1_cart, out, 3, + dims, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); + return has_value; +} + +static int _ipipv_cart(double *gctr, int *shls, int *ecpbas, int necpbas, + int *atm, int natm, int *bas, int nbas, double *env, + ECPOpt *opt, double *cache) +{ + if (necpbas == 0) { + return 0; + } + const int ish = shls[0]; + const int jsh = shls[1]; + const int npi = bas[NPRIM_OF+ish*BAS_SLOTS]; + const int npj = bas[NPRIM_OF+jsh*BAS_SLOTS]; + const int nci = bas[NCTR_OF+ish*BAS_SLOTS]; + const int ncj = bas[NCTR_OF+jsh*BAS_SLOTS]; + const int li = bas[ANG_OF+ish*BAS_SLOTS]; + const int lj = bas[ANG_OF+jsh*BAS_SLOTS]; + const int nfi = (li+1) * (li+2) / 2; + const int nfj = (lj+1) * (lj+2) / 2; + const int nfi_1 = li * (li-1) / 2; + const int nfi1 = (li+2) * (li+3) / 2; + const int nfi2 = (li+3) * (li+4) / 2; + const int nff = nfi * nfj; + const int di = nfi * nci; + const int dj = nfj * ncj; + const int dij = di * dj; + const double *expi = env + bas[PTR_EXP+ish*BAS_SLOTS]; + const double *expj = env + bas[PTR_EXP+jsh*BAS_SLOTS]; + const double *ci = env + bas[PTR_COEFF+ish*BAS_SLOTS]; + const double *cj = env + bas[PTR_COEFF+jsh*BAS_SLOTS]; + int nfakbas = npi + npj; + int *fakbas; + MALLOC_INSTACK(fakbas, (npi+npj) * BAS_SLOTS); + _uncontract_bas(fakbas, shls, atm, natm, bas, nbas, env); + double *buf1; + MALLOC_INSTACK(buf1, (nfi2*nfj + nfi1*nfj*3 + nfi*nfj*9)); + double *buf = buf1 + nfi2*nfj; + double *gprim = buf + nfi1*nfj * 3; + + int has_value = 0; + int shls1[2]; + double fac; + + int i, j, k, ip, jp, ic, jc, n; + for (i = 0; i < dij*9; i++) { + gctr[i] = 0; + } + + for (jp = 0; jp < npj; jp++) { + for (ip = 0; ip < npi; ip++) { + shls1[0] = ip; + shls1[1] = npi + jp; + fac = 1. / (expi[ip] * expj[jp]); + fakbas[ip*BAS_SLOTS+ANG_OF] = li + 2; + NPdset0(buf1, nfi2*nfj); + has_value = (ECPtype1_cart(buf1, shls1, ecpbas, necpbas, atm, natm, + fakbas, nfakbas, env, opt, cache) | has_value); + has_value = (ECPtype2_cart(buf1, shls1, ecpbas, necpbas, atm, natm, + fakbas, nfakbas, env, opt, cache) | has_value); + _l_down(buf, buf1, fac, expi[ip], li+1, nfj); + + fakbas[ip*BAS_SLOTS+ANG_OF] = li; + NPdset0(buf1, nfi*nfj); + has_value = (ECPtype1_cart(buf1, shls1, ecpbas, necpbas, atm, natm, + fakbas, nfakbas, env, opt, cache) | has_value); + has_value = (ECPtype2_cart(buf1, shls1, ecpbas, necpbas, atm, natm, + fakbas, nfakbas, env, opt, cache) | has_value); + _l_up(buf, buf1, fac, li+1, nfj); + _l_down(gprim, buf, 1., expi[ip], li, nfj*3); + + if (li > 0) { + _l_down(buf, buf1, fac, expi[ip], li-1, nfj); + + if (li > 1) { + fakbas[ip*BAS_SLOTS+ANG_OF] = li - 2; + NPdset0(buf1, nfi_1*nfj); + has_value = (ECPtype1_cart(buf1, shls1, ecpbas, necpbas, atm, natm, + fakbas, nfakbas, env, opt, cache) | has_value); + has_value = (ECPtype2_cart(buf1, shls1, ecpbas, necpbas, atm, natm, + fakbas, nfakbas, env, opt, cache) | has_value); + _l_up(buf, buf1, fac, li-1, nfj); + } + _l_up(gprim, buf, 1., li, nfj*3); + } + + for (jc = 0; jc < ncj; jc++) { + for (ic = 0; ic < nci; ic++) { + fac = ci[ic*npi+ip] * cj[jc*npj+jp]; + n = jc*nfj*di + ic*nfi; + for (k = 0; k < 9; k++) { + for (j = 0; j < nfj; j++) { + for (i = 0; i < nfi; i++) { + gctr[k*dij+n+j*di+i] += fac * gprim[k*nff+j*nfi+i]; + } } } + } } + } } + + return has_value; +} + +int ECPscalar_ipiprinv_cart(double *out, int *dims, int *shls, int *atm, int natm, + int *bas, int nbas, double *env, ECPOpt *opt, double *cache) +{ + int necpbas = (int)env[AS_NECPBAS]; + if (out == NULL) { + int cache_size = _cart_factory(_ipipv_cart, out, 9, + dims, shls, NULL, necpbas, + atm, natm, bas, nbas, env, opt, cache); + cache_size += necpbas * BAS_SLOTS; + return cache_size; + } else { + int atm_id = (int)env[AS_RINV_ORIG_ATOM]; + int *ecpbas = bas + ((int)env[AS_ECPBAS_OFFSET])*BAS_SLOTS; + int shl_id = _one_shell_ecpbas(&necpbas, atm_id, atm, natm, bas, nbas, env); + if (shl_id < 0) { + return 0; + } + ecpbas += shl_id * BAS_SLOTS; + ECPOpt opt1; + if (opt != NULL) { + // iprinv requires potential on a specific atom. + // opt->u_ecp used by ECPrad_part was initialized for all atoms. + // shifts the u_ecp pointer to the u_ecp of atm_id + opt1.u_ecp = opt->u_ecp + shl_id * (1 << LEVEL_MAX); + opt = &opt1; + } + int has_value = _cart_factory(_ipipv_cart, out, 9, + dims, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); + return has_value; + } +} + +int ECPscalar_ipipnuc_cart(double *out, int *dims, int *shls, int *atm, int natm, + int *bas, int nbas, double *env, ECPOpt *opt, double *cache) +{ + int necpbas = (int)env[AS_NECPBAS]; + int *ecpbas = bas + ((int)env[AS_ECPBAS_OFFSET])*BAS_SLOTS; + int has_value = _cart_factory(_ipipv_cart, out, 9, + dims, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); + return has_value; +} + +int ECPscalar_ipiprinv_sph(double *out, int *dims, int *shls, int *atm, int natm, + int *bas, int nbas, double *env, ECPOpt *opt, double *cache) +{ + int necpbas = (int)env[AS_NECPBAS]; + if (out == NULL) { + int cache_size = _sph_factory(_ipipv_cart, out, 9, + dims, shls, NULL, necpbas, + atm, natm, bas, nbas, env, opt, cache); + cache_size += necpbas * BAS_SLOTS; + return cache_size; + } else { + int atm_id = (int)env[AS_RINV_ORIG_ATOM]; + int *ecpbas = bas + ((int)env[AS_ECPBAS_OFFSET])*BAS_SLOTS; + int shl_id = _one_shell_ecpbas(&necpbas, atm_id, atm, natm, bas, nbas, env); + if (shl_id < 0) { + return 0; + } + ecpbas += shl_id * BAS_SLOTS; + ECPOpt opt1; + if (opt != NULL) { + // iprinv requires potential on a specific atom. + // opt->u_ecp used by ECPrad_part was initialized for all atoms. + // shifts the u_ecp pointer to the u_ecp of atm_id + opt1.u_ecp = opt->u_ecp + shl_id * (1 << LEVEL_MAX); + opt = &opt1; + } + int has_value = _sph_factory(_ipipv_cart, out, 9, + dims, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); + return has_value; + } +} + +int ECPscalar_ipipnuc_sph(double *out, int *dims, int *shls, int *atm, int natm, + int *bas, int nbas, double *env, ECPOpt *opt, double *cache) +{ + int necpbas = (int)env[AS_NECPBAS]; + int *ecpbas = bas + ((int)env[AS_ECPBAS_OFFSET])*BAS_SLOTS; + int has_value = _sph_factory(_ipipv_cart, out, 9, + dims, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); + return has_value; +} + +static int _ipvip_cart(double *gctr, int *shls, int *ecpbas, int necpbas, + int *atm, int natm, int *bas, int nbas, double *env, + ECPOpt *opt, double *cache) +{ + if (necpbas == 0) { + return 0; + } + const int ish = shls[0]; + const int jsh = shls[1]; + const int npi = bas[NPRIM_OF+ish*BAS_SLOTS]; + const int npj = bas[NPRIM_OF+jsh*BAS_SLOTS]; + const int nci = bas[NCTR_OF+ish*BAS_SLOTS]; + const int ncj = bas[NCTR_OF+jsh*BAS_SLOTS]; + const int li = bas[ANG_OF+ish*BAS_SLOTS]; + const int lj = bas[ANG_OF+jsh*BAS_SLOTS]; + const int nfi = (li+1) * (li+2) / 2; + const int nfj = (lj+1) * (lj+2) / 2; + const int nfi0 = li * (li+1) / 2; + const int nfj0 = lj * (lj+1) / 2; + const int nfi1 = (li+2) * (li+3) / 2; + const int nfj1 = (lj+2) * (lj+3) / 2; + const int nff = nfi * nfj; + const int di = nfi * nci; + const int dj = nfj * ncj; + const int dij = di * dj; + const double *expi = env + bas[PTR_EXP+ish*BAS_SLOTS]; + const double *expj = env + bas[PTR_EXP+jsh*BAS_SLOTS]; + const double *ci = env + bas[PTR_COEFF+ish*BAS_SLOTS]; + const double *cj = env + bas[PTR_COEFF+jsh*BAS_SLOTS]; + int nfakbas = npi + npj; + int *fakbas; + MALLOC_INSTACK(fakbas, (npi+npj) * BAS_SLOTS); + _uncontract_bas(fakbas, shls, atm, natm, bas, nbas, env); + double *buf1; + MALLOC_INSTACK(buf1, (nfi1*nfj1 + nfi*nfj1*3 + nfi*nfj*9)); + double *buf = buf1 + nfi1*nfj1; + double *gprim = buf + nfi*nfj1 * 3; + double *pg, *pbuf; + + int has_value = 0; + int shls1[2]; + double fac, xfac, yfac, zfac; + + int i, j, k, ip, jp, ic, jc, n; + for (i = 0; i < dij*9; i++) { + gctr[i] = 0; + } + + for (jp = 0; jp < npj; jp++) { + for (ip = 0; ip < npi; ip++) { + shls1[0] = ip; + shls1[1] = npi + jp; + fac = 1. / (expi[ip] * expj[jp]); + fakbas[(npi+jp)*BAS_SLOTS+ANG_OF] = lj + 1; + fakbas[ip*BAS_SLOTS+ANG_OF] = li + 1; + NPdset0(buf1, nfi1*nfj1); + has_value = (ECPtype1_cart(buf1, shls1, ecpbas, necpbas, atm, natm, + fakbas, nfakbas, env, opt, cache) | has_value); + has_value = (ECPtype2_cart(buf1, shls1, ecpbas, necpbas, atm, natm, + fakbas, nfakbas, env, opt, cache) | has_value); + _l_down(buf, buf1, fac, expi[ip], li, nfj1); + + if (li > 0) { + fakbas[ip*BAS_SLOTS+ANG_OF] = li - 1; + NPdset0(buf1, nfi0*nfj1); + has_value = (ECPtype1_cart(buf1, shls1, ecpbas, necpbas, atm, natm, + fakbas, nfakbas, env, opt, cache) | has_value); + has_value = (ECPtype2_cart(buf1, shls1, ecpbas, necpbas, atm, natm, + fakbas, nfakbas, env, opt, cache) | has_value); + _l_up(buf, buf1, fac, li, nfj1); + } + if (lj == 0) { + fac = -2./sqrt(3.) * expj[jp]; + } else if (lj == 1) { + fac = -2.*0.488602511902919921 * expj[jp]; + } else { + fac = -2. * expj[jp]; + } + for (k = 0; k < 3; k++) { + pg = gprim + k * nff * 3; + pbuf = buf + k * nfi*nfj1; + for (j = 0; j < nfj; j++) { + for (i = 0; i < nfi; i++) { + pg[ j*nfi+i] = fac * pbuf[ j *nfi+i]; + pg[ nff+j*nfi+i] = fac * pbuf[_y_addr[j]*nfi+i]; + pg[2*nff+j*nfi+i] = fac * pbuf[_z_addr[j]*nfi+i]; + } } + } + + if (lj > 0) { + fac = 1. / (expi[ip] * expj[jp]); + fakbas[(npi+jp)*BAS_SLOTS+ANG_OF] = lj - 1; + fakbas[ip*BAS_SLOTS+ANG_OF] = li + 1; + NPdset0(buf1, nfi1*nfj0); + has_value = (ECPtype1_cart(buf1, shls1, ecpbas, necpbas, atm, natm, + fakbas, nfakbas, env, opt, cache) | has_value); + has_value = (ECPtype2_cart(buf1, shls1, ecpbas, necpbas, atm, natm, + fakbas, nfakbas, env, opt, cache) | has_value); + _l_down(buf, buf1, fac, expi[ip], li, nfj0); + + if (li > 0) { + fakbas[ip*BAS_SLOTS+ANG_OF] = li - 1; + NPdset0(buf1, nfi0*nfj0); + has_value = (ECPtype1_cart(buf1, shls1, ecpbas, necpbas, atm, natm, + fakbas, nfakbas, env, opt, cache) | has_value); + has_value = (ECPtype2_cart(buf1, shls1, ecpbas, necpbas, atm, natm, + fakbas, nfakbas, env, opt, cache) | has_value); + _l_up(buf, buf1, fac, li, nfj0); + } + if (lj == 1) { + fac = sqrt(3.); + } else if (lj == 2) { + fac = 1./0.488602511902919921; + } else { + fac = 1; + } + for (k = 0; k < 3; k++) { + pg = gprim + k * nff * 3; + pbuf = buf + k * nfi*nfj0; + for (j = 0; j < nfj0; j++) { + yfac = fac * (_cart_pow_y[j] + 1); + zfac = fac * (_cart_pow_z[j] + 1); + xfac = fac * (lj-1 - _cart_pow_y[j] - _cart_pow_z[j] + 1); + for (i = 0; i < nfi; i++) { + pg[ j *nfi+i] += xfac * pbuf[j*nfi+i]; + pg[ nff+_y_addr[j]*nfi+i] += yfac * pbuf[j*nfi+i]; + pg[2*nff+_z_addr[j]*nfi+i] += zfac * pbuf[j*nfi+i]; + } + } + } + } + + for (jc = 0; jc < ncj; jc++) { + for (ic = 0; ic < nci; ic++) { + fac = ci[ic*npi+ip] * cj[jc*npj+jp]; + n = jc*nfj*di + ic*nfi; + for (k = 0; k < 9; k++) { + for (j = 0; j < nfj; j++) { + for (i = 0; i < nfi; i++) { + gctr[k*dij+n+j*di+i] += fac * gprim[k*nff+j*nfi+i]; + } } } + } } + } } + + return has_value; +} + +int ECPscalar_iprinvip_cart(double *out, int *dims, int *shls, int *atm, int natm, + int *bas, int nbas, double *env, ECPOpt *opt, double *cache) +{ + int necpbas = (int)env[AS_NECPBAS]; + if (out == NULL) { + int cache_size = _cart_factory(_ipvip_cart, out, 9, + dims, shls, NULL, necpbas, + atm, natm, bas, nbas, env, opt, cache); + cache_size += necpbas * BAS_SLOTS; + return cache_size; + } else { + int atm_id = (int)env[AS_RINV_ORIG_ATOM]; + int *ecpbas = bas + ((int)env[AS_ECPBAS_OFFSET])*BAS_SLOTS; + int shl_id = _one_shell_ecpbas(&necpbas, atm_id, atm, natm, bas, nbas, env); + if (shl_id < 0) { + return 0; + } + ecpbas += shl_id * BAS_SLOTS; + ECPOpt opt1; + if (opt != NULL) { + // iprinv requires potential on a specific atom. + // opt->u_ecp used by ECPrad_part was initialized for all atoms. + // shifts the u_ecp pointer to the u_ecp of atm_id + opt1.u_ecp = opt->u_ecp + shl_id * (1 << LEVEL_MAX); + opt = &opt1; + } + int has_value = _cart_factory(_ipvip_cart, out, 9, + dims, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); + return has_value; + } +} + +int ECPscalar_ipnucip_cart(double *out, int *dims, int *shls, int *atm, int natm, + int *bas, int nbas, double *env, ECPOpt *opt, double *cache) +{ + int necpbas = (int)env[AS_NECPBAS]; + int *ecpbas = bas + ((int)env[AS_ECPBAS_OFFSET])*BAS_SLOTS; + int has_value = _cart_factory(_ipvip_cart, out, 9, + dims, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); + return has_value; +} + +int ECPscalar_iprinvip_sph(double *out, int *dims, int *shls, int *atm, int natm, + int *bas, int nbas, double *env, ECPOpt *opt, double *cache) +{ + int necpbas = (int)env[AS_NECPBAS]; + if (out == NULL) { + int cache_size = _sph_factory(_ipvip_cart, out, 9, + dims, shls, NULL, necpbas, + atm, natm, bas, nbas, env, opt, cache); + cache_size += necpbas * BAS_SLOTS; + return cache_size; + } else { + int atm_id = (int)env[AS_RINV_ORIG_ATOM]; + int *ecpbas = bas + ((int)env[AS_ECPBAS_OFFSET])*BAS_SLOTS; + int shl_id = _one_shell_ecpbas(&necpbas, atm_id, atm, natm, bas, nbas, env); + if (shl_id < 0) { + return 0; + } + ecpbas += shl_id * BAS_SLOTS; + ECPOpt opt1; + if (opt != NULL) { + // iprinv requires potential on a specific atom. + // opt->u_ecp used by ECPrad_part was initialized for all atoms. + // shifts the u_ecp pointer to the u_ecp of atm_id + opt1.u_ecp = opt->u_ecp + shl_id * (1 << LEVEL_MAX); + opt = &opt1; + } + int has_value = _sph_factory(_ipvip_cart, out, 9, + dims, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); + return has_value; + } +} + +int ECPscalar_ipnucip_sph(double *out, int *dims, int *shls, int *atm, int natm, + int *bas, int nbas, double *env, ECPOpt *opt, double *cache) +{ + int necpbas = (int)env[AS_NECPBAS]; + int *ecpbas = bas + ((int)env[AS_ECPBAS_OFFSET])*BAS_SLOTS; + int has_value = _sph_factory(_ipvip_cart, out, 9, + dims, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); + return has_value; +} + +static int _igv_cart(double *gctr, int *shls, int *ecpbas, int necpbas, + int *atm, int natm, int *bas, int nbas, double *env, + ECPOpt *opt, double *cache) +{ + if (necpbas == 0) { + return 0; + } + const int ish = shls[0]; + const int jsh = shls[1]; + const int nci = bas[NCTR_OF+ish*BAS_SLOTS]; + const int ncj = bas[NCTR_OF+jsh*BAS_SLOTS]; + const int li = bas[ANG_OF+ish*BAS_SLOTS]; + const int lj = bas[ANG_OF+jsh*BAS_SLOTS]; + const int nfi = (li+1) * (li+2) / 2; + const int nfj = (lj+1) * (lj+2) / 2; + const int nfi1 = (li+2) * (li+3) / 2; + const int di = nfi * nci; + const int dj = nfj * ncj; + const int dij = di * dj; + int ngcart = nfi1*nci*nfj*ncj; + const double *ri = env + atm[PTR_COORD+bas[ATOM_OF+ish*BAS_SLOTS]*ATM_SLOTS]; + const double *rj = env + atm[PTR_COORD+bas[ATOM_OF+jsh*BAS_SLOTS]*ATM_SLOTS]; + double *buf1; + MALLOC_INSTACK(buf1, ngcart * 2); + double *buf2 = buf1 + ngcart; + + int i, j; + double *gctrx = gctr; + double *gctry = gctrx + dij; + double *gctrz = gctry + dij; + double rirj[3]; + rirj[0] = ri[0] - rj[0]; + rirj[1] = ri[1] - rj[1]; + rirj[2] = ri[2] - rj[2]; + + int fakbas[2*BAS_SLOTS]; + for (i = 0; i < BAS_SLOTS; i++) { + fakbas[ i] = bas[ish*BAS_SLOTS+i]; + fakbas[BAS_SLOTS+i] = bas[jsh*BAS_SLOTS+i]; + } + int has_value = 0; + int shls1[2] = {0, 1}; + double fac, vx, vy, vz; + + fakbas[ANG_OF] = li + 1; + NPdset0(buf1, ngcart); + has_value = (ECPtype1_cart(buf1, shls1, ecpbas, necpbas, atm, natm, + fakbas, 2, env, opt, cache) | has_value); + has_value = (ECPtype2_cart(buf1, shls1, ecpbas, necpbas, atm, natm, + fakbas, 2, env, opt, cache) | has_value); + NPdset0(buf2, dij); + has_value = (ECPtype1_cart(buf2, shls, ecpbas, necpbas, atm, natm, + bas, nbas, env, opt, cache) | has_value); + has_value = (ECPtype2_cart(buf2, shls, ecpbas, necpbas, atm, natm, + bas, nbas, env, opt, cache) | has_value); + if (!has_value) { + return has_value; + } + + if (li == 0) { + fac = 1./sqrt(3.); + } else if (li == 1) { + fac = 0.488602511902919921; + } else { + fac = 1.; + } + for (j = 0; j < nci*nfj*ncj; j++) { + for (i = 0; i < nfi; i++) { + vx = fac * buf1[j*nfi1+ i ] + ri[0] * buf2[j*nfi+i]; + vy = fac * buf1[j*nfi1+_y_addr[i]] + ri[1] * buf2[j*nfi+i]; + vz = fac * buf1[j*nfi1+_z_addr[i]] + ri[2] * buf2[j*nfi+i]; + gctrx[j*nfi+i] = -.5 * (rirj[1] * vz - rirj[2] * vy); + gctry[j*nfi+i] = -.5 * (rirj[2] * vx - rirj[0] * vz); + gctrz[j*nfi+i] = -.5 * (rirj[0] * vy - rirj[1] * vx); + } + } + return has_value; +} + +int ECPscalar_ignuc_cart(double *out, int *dims, int *shls, int *atm, int natm, + int *bas, int nbas, double *env, ECPOpt *opt, double *cache) +{ + int necpbas = (int)env[AS_NECPBAS]; + int *ecpbas = bas + ((int)env[AS_ECPBAS_OFFSET])*BAS_SLOTS; + int comp = 3; + int has_value = _cart_factory(_igv_cart, out, comp, + dims, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); + return has_value; +} + +int ECPscalar_ignuc_sph(double *out, int *dims, int *shls, int *atm, int natm, + int *bas, int nbas, double *env, ECPOpt *opt, double *cache) +{ + int necpbas = (int)env[AS_NECPBAS]; + int *ecpbas = bas + ((int)env[AS_ECPBAS_OFFSET])*BAS_SLOTS; + int comp = 3; + int has_value = _sph_factory(_igv_cart, out, comp, + dims, shls, ecpbas, necpbas, + atm, natm, bas, nbas, env, opt, cache); + return has_value; +} + +void ECPscalar_optimizer(ECPOpt **opt, int *atm, int natm, int *bas, int nbas, double *env); +#define make_optimizer(fname) \ +void ECPscalar_##fname##_optimizer(ECPOpt **opt, int *atm, int natm, \ + int *bas, int nbas, double *env) \ +{ \ + ECPscalar_optimizer(opt, atm, natm, bas, nbas, env); \ +} +#define make_empty_optimizer(fname) \ +void ECPscalar_##fname##_optimizer(ECPOpt **opt, int *atm, int natm, \ + int *bas, int nbas, double *env) \ +{ \ + *opt = NULL; \ +} +make_optimizer(ignuc) +make_optimizer(ipnuc) +make_optimizer(ipipnuc) +make_optimizer(ipnucip) +make_empty_optimizer(iprinv) +make_empty_optimizer(ipiprinv) +make_empty_optimizer(iprinvip) diff --git a/pyscfadlib/pyscfadlib/gto/test/test_ecp.py b/pyscfadlib/pyscfadlib/gto/test/test_ecp.py new file mode 100644 index 00000000..046ca1ef --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/test/test_ecp.py @@ -0,0 +1,730 @@ +#!/usr/bin/env python +# Copyright 2014-2018 The PySCF Developers. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import ctypes +import unittest +import numpy +import scipy.misc +import scipy.special +try: + from scipy.special import factorial2 +except ImportError: + from scipy.misc import factorial2 +from pyscf import lib +from pyscf import gto +from pyscf.dft import radi +from pyscf.symm import sph + +libecp = gto.moleintor.libcgto + +mol = gto.M(atom=''' + Na 0.5 0.5 0. + H 0. 1. 1. + ''', + basis={'Na':'lanl2dz', + 'H':[[0,[1.21,1.],[.521,1.]], + [1,[3.12,1.],[.512,1.]], + [2,[2.54,1.],[.554,1.]], + [3,[0.98,1.],[.598,1.]], + [4,[0.79,1.],[.579,1.]]]}, + ecp = {'Na': gto.basis.parse_ecp(''' +Na nelec 10 +Na ul +0 2.0000000 6.0000000 +1 175.5502590 -10.0000000 +2 2.3365719 -6.0637782 +2 0.7799867 -0.7299393 +Na S +0 243.3605846 3.0000000 +#1 41.5764759 36.2847626 +#2 13.2649167 72.9304880 +#2 0.9764209 6.0123861 +#Na P +#0 1257.2650682 5.0000000 +#1 189.6248810 117.4495683 +#2 54.5247759 423.3986704 +#2 0.9461106 7.1241813 +''')}) + + +CHARGE_OF = 0 +PTR_COORD = 1 +NUC_MOD_OF = 2 +PTR_ZETA = 3 +ATM_SLOTS = 6 +# for _ecpbas +ATOM_OF = 0 +ANG_OF = 1 # <0 means local function +NPRIM_OF = 2 +RADI_POWER = 3 +SO_TYPE_OF = 4 +PTR_EXP = 5 +PTR_COEFF = 6 +BAS_SLOTS = 8 + +def type1_by_shell(mol, shls, ecpatm_id, ecpbas): + ish, jsh = shls + + li = mol.bas_angular(ish) + npi = mol.bas_nprim(ish) + nci = mol.bas_nctr(ish) + ai = mol.bas_exp(ish) + ci = mol._libcint_ctr_coeff(ish) + icart = (li+1) * (li+2) // 2 + + lj = mol.bas_angular(jsh) + npj = mol.bas_nprim(jsh) + ncj = mol.bas_nctr(jsh) + aj = mol.bas_exp(jsh) + cj = mol._libcint_ctr_coeff(jsh) + jcart = (lj+1) * (lj+2) // 2 + + rc = mol.atom_coord(ecpatm_id) + rca = rc - mol.bas_coord(ish) + r2ca = numpy.dot(rca, rca) + rcb = rc - mol.bas_coord(jsh) + r2cb = numpy.dot(rcb, rcb) +# Note the Mole._libcint_ctr_coeff are normalized to radial part + cei = numpy.einsum('ij,i->ij', ci, numpy.exp(-ai * r2ca)) + cej = numpy.einsum('ij,i->ij', cj, numpy.exp(-aj * r2cb)) + #rs, ws = radi.treutler(99) + rs, ws = radi.gauss_chebyshev(99) + + ur = rad_part(mol, ecpbas, rs) * ws + rad_ang_all = numpy.zeros((nci,ncj,li+lj+1,li+lj+1,li+lj+1)) + for ip in range(npi): + for jp in range(npj): + rij = ai[ip] * rca + aj[jp] * rcb + aij = ai[ip] + aj[jp] + k = 2*numpy.linalg.norm(rij) + rad_all = type1_rad_part(li+lj, k, aij, ur, rs) + #ang_all = type1_ang_part(li+lj, -rij) + #rad_ang = numpy.einsum('pl,lijk->pijk', rad_all, ang_all) + rad_ang = type1_rad_ang(li+lj, rij, rad_all) + for ic in range(nci): + for jc in range(ncj): + rad_ang_all[ic,jc] += rad_ang * cei[ip,ic]*cej[jp,jc] * (4*numpy.pi)**2 + ifac = type1_cache_fac(li, rca) + jfac = type1_cache_fac(lj, rcb) + + g1 = numpy.zeros((nci,ncj,icart,jcart)) + for ic in range(nci): + for jc in range(ncj): + for mi,(ix,iy,iz) in enumerate(loop_cart(li)): + for mj,(jx,jy,jz) in enumerate(loop_cart(lj)): + tmp = 0 + for i1, i2, i3 in loop_xyz(ix, iy, iz): + for j1, j2, j3 in loop_xyz(jx, jy, jz): + fac = ifac[mi,i1,i2,i3] * jfac[mj,j1,j2,j3] + tmp += fac * rad_ang_all[ic,jc,i1+j1,i2+j2,i3+j3] + g1[ic,jc,mi,mj] = tmp + + gsph = numpy.empty((nci,ncj,li*2+1,lj*2+1)) + for ic in range(nci): + for jc in range(ncj): + tmp = c2s_bra(lj, g1[ic,jc].T.copy()) + gsph[ic,jc] = c2s_bra(li, tmp.T.copy()) + return gsph.transpose(0,2,1,3).reshape(nci*(li*2+1),-1) + +def type1_cache_fac(li, ri): + facs = cache_fac(li, ri) + facs4 = numpy.zeros(((li+1)*(li+2)//2,li+1,li+1,li+1)) + for mi,(ix,iy,iz) in enumerate(loop_cart(li)): + for i1, i2, i3 in loop_xyz(ix, iy, iz): + facs4[mi,i1,i2,i3] =(facs[0,ix,i1] * facs[1,iy,i2] * facs[2,iz,i3]) + return facs4 + +def type1_rad_part(lmax, k, aij, ur, rs): + rad_all = numpy.empty((lmax+1,lmax+1)) + bessel_val = sph_ine(lmax, k*rs) + ur_base = numpy.exp(k**2/(4*aij)) * ur * numpy.exp(-aij*(rs-k/(2*aij))**2) + idx = abs(ur_base) > 1e-80 + for lab in range(lmax+1): + val = ur_base[idx] * rs[idx]**lab + for l in range(lmax+1): + if (lab+l) % 2 == 0: + val1 = val * bessel_val[l,idx] + rad_all[lab,l] = val1.sum() + else: + rad_all[lab,l] = 0 + return rad_all + +def type1_rad_ang(lmax, rij, rad_all): + norm_rij = numpy.linalg.norm(rij) + if norm_rij > 1e-18: + unitr = -rij/norm_rij + else: + unitr = -rij + omega_nuc = [] + for lmb in range(lmax+1): + c2smat = c2s_bra(lmb, numpy.eye((lmb+1)*(lmb+2)//2)) + omega_nuc.append(numpy.dot(ang_nuc_part(lmb, unitr), c2smat)) + + rad_ang = numpy.zeros((lmax+1,lmax+1,lmax+1)) + for i in range(lmax+1): + for j in range(lmax+1-i): + for k in range(lmax+1-i-j): + for lmb in range(lmax+1): + if (i+j+k+lmb) % 2 == 0: + tmp = 0 + for n, (i1, j1, k1) in enumerate(loop_cart(lmb)): + tmp += omega_nuc[lmb][n] * int_unit_xyz(i+i1, j+j1, k+k1) + rad_ang[i,j,k] += rad_all[i+j+k,lmb] * tmp + return rad_ang + +def type2_by_shell(mol, shls, ecpatm_id, ecpbas): + ish, jsh = shls + + li = mol.bas_angular(ish) + npi = mol.bas_nprim(ish) + nci = mol.bas_nctr(ish) + ai = mol.bas_exp(ish) + ci = mol._libcint_ctr_coeff(ish) + icart = (li+1) * (li+2) // 2 + + lj = mol.bas_angular(jsh) + npj = mol.bas_nprim(jsh) + ncj = mol.bas_nctr(jsh) + aj = mol.bas_exp(jsh) + cj = mol._libcint_ctr_coeff(jsh) + jcart = (lj+1) * (lj+2) // 2 + + rc = mol.atom_coord(ecpatm_id) + rcb = rc - mol.bas_coord(jsh) + r_cb = numpy.linalg.norm(rcb) + rca = rc - mol.bas_coord(ish) + r_ca = numpy.linalg.norm(rca) + #rs, ws = radi.treutler(99) + rs, ws = radi.gauss_chebyshev(99) + + i_fac_cache = cache_fac(li, rca) + j_fac_cache = cache_fac(lj, rcb) + + g1 = numpy.zeros((nci,ncj,icart,jcart)) + for lc in range(5): # up to g function + ecpbasi = ecpbas[ecpbas[:,ANG_OF] == lc] + if len(ecpbasi) == 0: + continue + ur = rad_part(mol, ecpbasi, rs) * ws + idx = abs(ur) > 1e-80 + rur = numpy.array([ur[idx] * rs[idx]**lab for lab in range(li+lj+1)]) + + fi = facs_rad(mol, ish, lc, r_ca, rs)[:,:,idx].copy() + fj = facs_rad(mol, jsh, lc, r_cb, rs)[:,:,idx].copy() + angi = facs_ang(type2_ang_part(li, lc, -rca), li, lc, i_fac_cache) + angj = facs_ang(type2_ang_part(lj, lc, -rcb), lj, lc, j_fac_cache) + + for ic in range(nci): + for jc in range(ncj): + rad_all = numpy.einsum('pr,ir,jr->pij', rur, fi[ic], fj[jc]) + + for i1 in range(li+1): + for j1 in range(lj+1): + g1[ic,jc] += numpy.einsum('pq,imp,jmq->ij', rad_all[i1+j1], + angi[i1], angj[j1]) + + g1 *= (numpy.pi*4)**2 + gsph = numpy.empty((nci,ncj,li*2+1,lj*2+1)) + for ic in range(nci): + for jc in range(ncj): + tmp = c2s_bra(lj, g1[ic,jc].T.copy()) + gsph[ic,jc] = c2s_bra(li, tmp.T.copy()) + return gsph.transpose(0,2,1,3).reshape(nci*(li*2+1),-1) + +def so_by_shell(mol, shls, ecpatm_id, ecpbas): + '''SO-ECP + i/2 + ''' + ish, jsh = shls + + li = mol.bas_angular(ish) + npi = mol.bas_nprim(ish) + nci = mol.bas_nctr(ish) + ai = mol.bas_exp(ish) + ci = mol._libcint_ctr_coeff(ish) + icart = (li+1) * (li+2) // 2 + + lj = mol.bas_angular(jsh) + npj = mol.bas_nprim(jsh) + ncj = mol.bas_nctr(jsh) + aj = mol.bas_exp(jsh) + cj = mol._libcint_ctr_coeff(jsh) + jcart = (lj+1) * (lj+2) // 2 + + rc = mol.atom_coord(ecpatm_id) + rcb = rc - mol.bas_coord(jsh) + r_cb = numpy.linalg.norm(rcb) + rca = rc - mol.bas_coord(ish) + r_ca = numpy.linalg.norm(rca) + #rs, ws = radi.treutler(99) + rs, ws = radi.gauss_chebyshev(99) + + i_fac_cache = cache_fac(li, rca) + j_fac_cache = cache_fac(lj, rcb) + + g1 = numpy.zeros((nci,ncj,3,icart,jcart), dtype=numpy.complex128) + for lc in range(5): # up to g function + ecpbasi = ecpbas[ecpbas[:,ANG_OF] == lc] + if len(ecpbasi) == 0: + continue + ur = rad_part(mol, ecpbasi, rs) * ws + idx = abs(ur) > 1e-80 + rur = numpy.array([ur[idx] * rs[idx]**lab for lab in range(li+lj+1)]) + + fi = facs_rad(mol, ish, lc, r_ca, rs)[:,:,idx].copy() + fj = facs_rad(mol, jsh, lc, r_cb, rs)[:,:,idx].copy() + angi = facs_ang(type2_ang_part(li, lc, -rca), li, lc, i_fac_cache) + angj = facs_ang(type2_ang_part(lj, lc, -rcb), lj, lc, j_fac_cache) + + # Note the factor 2/(2l+1) in JCP 82, 2664 (1985); DOI:10.1063/1.448263 is not multiplied here + # because the ECP parameter has been scaled by 2/(2l+1) in CRENBL + jmm = angular_moment_matrix(lc) + + for ic in range(nci): + for jc in range(ncj): + rad_all = numpy.einsum('pr,ir,jr->pij', rur, fi[ic], fj[jc]) + + for i1 in range(li+1): + for j1 in range(lj+1): + g1[ic,jc] += numpy.einsum('pq,imp,jnq,lmn->lij', rad_all[i1+j1], + angi[i1], angj[j1], jmm) + + g1 *= (numpy.pi*4)**2 + gspinor = numpy.empty((nci,ncj,li*4+2,lj*4+2), dtype=numpy.complex128) + for ic in range(nci): + for jc in range(ncj): + ui = numpy.asarray(gto.cart2spinor_l(li)) + uj = numpy.asarray(gto.cart2spinor_l(lj)) + s = lib.PauliMatrices * .5j + gspinor[ic,jc] = numpy.einsum('sxy,spq,xpi,yqj->ij', s, + g1[ic,jc], ui.conj(), uj) + return gspinor.transpose(0,2,1,3).reshape(nci*(li*4+2),-1) + +def cache_fac(l, r): + facs = numpy.empty((3,l+1,l+1)) + for i in range(l+1): + for j in range(i+1): + facs[0,i,j] = scipy.special.binom(i,j) * r[0]**(i-j) + facs[1,i,j] = scipy.special.binom(i,j) * r[1]**(i-j) + facs[2,i,j] = scipy.special.binom(i,j) * r[2]**(i-j) + return facs + +def sph_in(l, xs): + '''Modified spherical Bessel function of the first kind''' + return numpy.asarray([scipy.special.spherical_in(numpy.arange(l+1), x) for x in xs]).T + +def sph_ine(l, xs): + '''exponentially scaled modified spherical Bessel function''' + bval = sph_in(l, xs) + return numpy.einsum('ij,j->ij', bval, numpy.exp(-xs)) + +def loop_xyz(nx, ny, nz): + for ix in range(nx+1): + for iy in range(ny+1): + for iz in range(nz+1): + yield ix, iy, iz + +def loop_cart(l): + for ix in reversed(range(l+1)): + for iy in reversed(range(l-ix+1)): + iz = l - ix - iy + yield ix, iy, iz + +def rad_part(mol, ecpbas, rs): + ur = numpy.zeros_like(rs) + for ecpsh in ecpbas: + npk = ecpsh[NPRIM_OF] + r_order = ecpsh[RADI_POWER] + ak = mol._env[ecpsh[PTR_EXP]:ecpsh[PTR_EXP]+npk] + ck = mol._env[ecpsh[PTR_COEFF]:ecpsh[PTR_COEFF]+npk] + u1 = numpy.zeros_like(ur) + for kp, a1 in enumerate(ak): + u1 += ck[kp] * numpy.exp(-a1*rs**2) + u1 *= rs**r_order + ur += u1 + return ur + +def facs_rad(mol, ish, lc, r_ca, rs): + facs = [] + li = mol.bas_angular(ish) + ai = mol.bas_exp(ish) + ci = mol._libcint_ctr_coeff(ish) + npi = mol.bas_nprim(ish) + for ip in range(npi): + ka = 2*ai[ip]*r_ca + facs.append(numpy.einsum('ij,j->ij', sph_ine(li+lc, ka*rs), + numpy.exp(-ai[ip]*(rs-r_ca)**2))) + facs = numpy.einsum('pk,pij->kij', ci, facs) + return facs + +# x**n*y**n*z**n * c2s * c2s.T, to project out 3s, 4p, ... +def type1_ang_part(lmax, rij): + norm_rij = numpy.linalg.norm(rij) + if norm_rij > 1e-18: + unitr = rij/norm_rij + else: + unitr = rij + omega_nuc = [] + for lmb in range(lmax+1): + c2smat = c2s_bra(lmb, numpy.eye((lmb+1)*(lmb+2)//2)) + omega_nuc.append(4*numpy.pi * numpy.dot(ang_nuc_part(lmb, unitr), c2smat)) + + omega = numpy.empty((lmax+1,lmax+1,lmax+1,lmax+1)) + for lmb in range(lmax+1): + omega_elec = numpy.empty((lmb+1)*(lmb+2)//2) + for i in range(lmax+1): + for j in range(lmax+1-i): + for k in range(lmax+1-i-j): + if (i+j+k+lmb) % 2 == 0: + for n, (i1, j1, k1) in enumerate(loop_cart(lmb)): + omega_elec[n] = int_unit_xyz(i+i1, j+j1, k+k1) + omega[lmb,i,j,k] = numpy.dot(omega_nuc[lmb], omega_elec) + else: + omega[lmb,i,j,k] = 0 + return omega + +def type2_ang_part(li, lc, ri): + # [lambda,m,a,b,c] + norm_ri = numpy.linalg.norm(ri) + if norm_ri > 1e-18: + unitr = ri/norm_ri + else: + unitr = ri + omega = numpy.empty((li+1,li+1,li+1,lc*2+1,li+lc+1)) + lcart = (lc+1)*(lc+2)//2 + omega_nuc = [] + for lmb in range(li+lc+1): + c2smat = c2s_bra(lmb, numpy.eye((lmb+1)*(lmb+2)//2)) + omega_nuc.append(4*numpy.pi * numpy.dot(ang_nuc_part(lmb, unitr), c2smat)) + tmp = numpy.empty((lcart,li+lc+1)) + for a in range(li+1): + for b in range(li+1-a): + for c in range(li+1-a-b): + for lmb in range(li+lc+1): + if (lc+a+b+c+lmb) % 2 == 0: + omega_xyz = numpy.empty((lcart, (lmb+1)*(lmb+2)//2)) + for m,(u,v,w) in enumerate(loop_cart(lc)): + for n, (i1, j1, k1) in enumerate(loop_cart(lmb)): + omega_xyz[m,n] = int_unit_xyz(a+u+i1, b+v+j1, c+w+k1) + tmp[:,lmb] = numpy.dot(omega_xyz, omega_nuc[lmb]) + else: + tmp[:,lmb] = 0 + omega[a,b,c,:,:] = c2s_bra(lc, tmp) + return omega + +def angular_moment_matrix(l): + '''Matrix of angular moment operator l*1j on the real spherical harmonic + basis''' + lz = numpy.diag(numpy.arange(-l, l+1, dtype=numpy.complex128)) + lx = numpy.zeros_like(lz) + ly = numpy.zeros_like(lz) + for mi in range(-l, l+1): + mj = mi + 1 + if mj <= l: + lx[l+mi,l+mj] = .5 * ((l+mj)*(l-mj+1))**.5 + ly[l+mi,l+mj] = .5j * ((l+mj)*(l-mj+1))**.5 + + mj = mi - 1 + if mj >= -l: + lx[l+mi,l+mj] = .5 * ((l-mj)*(l+mj+1))**.5 + ly[l+mi,l+mj] =-.5j * ((l-mj)*(l+mj+1))**.5 + + u = sph.sph_pure2real(l) + lx = u.conj().T.dot(lx).dot(u) + ly = u.conj().T.dot(ly).dot(u) + lz = u.conj().T.dot(lz).dot(u) + return numpy.array((lx, ly, lz)) + +def facs_ang(omega, l, lc, fac_cache): + # (a+b+c,cart_nlm, m, lambda ) + facs = numpy.zeros((l+1,(l+1)*(l+2)//2,lc*2+1,l+lc+1)) + for mi,(ix,iy,iz) in enumerate(loop_cart(l)): + for i1, i2, i3 in loop_xyz(ix, iy, iz): + fac = fac_cache[0,ix,i1] * fac_cache[1,iy,i2] * fac_cache[2,iz,i3] + facs[i1+i2+i3,mi,:,:] += fac * omega[i1,i2,i3] + return facs + +def ang_nuc_part(l, rij): + omega_xyz = numpy.empty((l+1)*(l+2)//2) + k = 0 + for i1 in reversed(range(l+1)): + for j1 in reversed(range(l-i1+1)): + k1 = l - i1 - j1 + omega_xyz[k] = rij[0]**i1 * rij[1]**j1 * rij[2]**k1 + k += 1 + if l == 0: + return omega_xyz * 0.282094791773878143 + elif l == 1: + return omega_xyz * 0.488602511902919921 + else: + omega = numpy.empty((2*l+1)) + fc2s = libecp.CINTc2s_ket_sph + fc2s(omega.ctypes.data_as(ctypes.c_void_p), ctypes.c_int(1), + omega_xyz.ctypes.data_as(ctypes.c_void_p), ctypes.c_int(l)) + return omega + +def int_unit_xyz(i, j, k): + if i % 2 or j % 2 or k % 2: + return 0 + else: + return (_fac2[i-1] * _fac2[j-1] * _fac2[k-1] / _fac2[i+j+k+1]) + +_fac2 = factorial2(numpy.arange(80)) +_fac2[-1] = 1 + +def c2s_bra(l, gcart): + if l == 0: + return gcart * 0.282094791773878143 + elif l == 1: + return gcart * 0.488602511902919921 + else: + m = gcart.shape[1] + gsph = numpy.empty((l*2+1,m)) + fc2s = libecp.CINTc2s_ket_sph + fc2s(gsph.ctypes.data_as(ctypes.c_void_p), ctypes.c_int(m), + gcart.ctypes.data_as(ctypes.c_void_p), ctypes.c_int(l)) + return gsph + +class KnownValues(unittest.TestCase): + def test_bessel(self): + rs = radi.gauss_chebyshev(99)[0] + bessel1 = numpy.empty(8) + for i,x in enumerate(rs): + bessel0 = scipy.special.spherical_in(numpy.arange(7+1), x) * numpy.exp(-x) + libecp.ECPsph_ine(bessel1.ctypes.data_as(ctypes.c_void_p), + ctypes.c_int(7), ctypes.c_double(x)) + self.assertTrue(numpy.allclose(bessel0, bessel1)) + + def test_gauss_chebyshev(self): + rs0, ws0 = radi.gauss_chebyshev(99) + rs = numpy.empty_like(rs0) + ws = numpy.empty_like(ws0) + libecp.ECPgauss_chebyshev(rs.ctypes.data_as(ctypes.c_void_p), + ws.ctypes.data_as(ctypes.c_void_p), + ctypes.c_int(99)) + self.assertTrue(numpy.allclose(rs0, rs)) + self.assertTrue(numpy.allclose(ws0, ws)) + + def test_rad_part(self): + rs, ws = radi.gauss_chebyshev(99) + ur0 = rad_part(mol, mol._ecpbas, rs) + ur1 = numpy.empty_like(ur0) + cache = numpy.empty(100000) + libecp.ECPrad_part(ur1.ctypes.data_as(ctypes.c_void_p), + rs.ctypes.data_as(ctypes.c_void_p), + ctypes.c_int(0), ctypes.c_int(len(rs)), ctypes.c_int(1), + (ctypes.c_int*2)(0, len(mol._ecpbas)), + mol._ecpbas.ctypes.data_as(ctypes.c_void_p), + mol._atm.ctypes.data_as(ctypes.c_void_p), ctypes.c_int(mol.natm), + mol._bas.ctypes.data_as(ctypes.c_void_p), ctypes.c_int(mol.nbas), + mol._env.ctypes.data_as(ctypes.c_void_p), + lib.c_null_ptr(), cache.ctypes.data_as(ctypes.c_void_p)) + self.assertTrue(numpy.allclose(ur0, ur1)) + + def test_type2_ang_part(self): + numpy.random.seed(3) + rca = numpy.random.random(3) + cache = numpy.empty(100000) + def type2_facs_ang(li, lc): + i_fac_cache = cache_fac(li, rca) + facs0 = facs_ang(type2_ang_part(li, lc, -rca), li, lc, i_fac_cache) + facs1 = numpy.empty_like(facs0) + libecp.type2_facs_ang(facs1.ctypes.data_as(ctypes.c_void_p), + ctypes.c_int(li), ctypes.c_int(lc), + rca.ctypes.data_as(ctypes.c_void_p), + cache.ctypes.data_as(ctypes.c_void_p)) + self.assertTrue(numpy.allclose(facs0, facs1)) + for li in range(6): + for lc in range(5): + type2_facs_ang(li, lc) + + def test_type2_rad_part(self): + rc = .8712 + rs, ws = radi.gauss_chebyshev(99) + cache = numpy.empty(100000) + def type2_facs_rad(ish, lc): + facs0 = facs_rad(mol, ish, lc, rc, rs).transpose(0,2,1).copy() + facs1 = numpy.empty_like(facs0) + libecp.type2_facs_rad(facs1.ctypes.data_as(ctypes.c_void_p), + ctypes.c_int(ish), ctypes.c_int(lc), + ctypes.c_double(rc), + rs.ctypes.data_as(ctypes.c_void_p), + ctypes.c_int(len(rs)), ctypes.c_int(1), + mol._atm.ctypes.data_as(ctypes.c_void_p), ctypes.c_int(mol.natm), + mol._bas.ctypes.data_as(ctypes.c_void_p), ctypes.c_int(mol.nbas), + mol._env.ctypes.data_as(ctypes.c_void_p), + cache.ctypes.data_as(ctypes.c_void_p)) + self.assertTrue(numpy.allclose(facs0, facs1)) + for ish in range(mol.nbas): + for lc in range(5): + type2_facs_rad(ish, lc) + + def test_type2(self): + cache = numpy.empty(100000) + def gen_type2(shls): + di = (mol.bas_angular(shls[0])*2+1) * mol.bas_nctr(shls[0]) + dj = (mol.bas_angular(shls[1])*2+1) * mol.bas_nctr(shls[1]) + mat0 = numpy.zeros((di,dj)) + for ia in range(mol.natm): + ecpbas = mol._ecpbas[mol._ecpbas[:,ATOM_OF] == ia] + if len(ecpbas) == 0: + continue + mat0 += type2_by_shell(mol, shls, ia, ecpbas) + mat1 = numpy.empty(mat0.shape, order='F') + libecp.ECPtype2_sph(mat1.ctypes.data_as(ctypes.c_void_p), + (ctypes.c_int*2)(*shls), + mol._ecpbas.ctypes.data_as(ctypes.c_void_p), + ctypes.c_int(len(mol._ecpbas)), + mol._atm.ctypes.data_as(ctypes.c_void_p), ctypes.c_int(mol.natm), + mol._bas.ctypes.data_as(ctypes.c_void_p), ctypes.c_int(mol.nbas), + mol._env.ctypes.data_as(ctypes.c_void_p), + lib.c_null_ptr(), cache.ctypes.data_as(ctypes.c_void_p)) + if not numpy.allclose(mat0, mat1, atol=1e-8): + print(i, j, 'error = ', numpy.linalg.norm(mat0-mat1)) + self.assertTrue(numpy.allclose(mat0, mat1, atol=1e-6)) + mat2 = gto.ecp.type2_by_shell(mol, shls) + self.assertTrue(numpy.allclose(mat0, mat2, atol=1e-6)) + for i in range(mol.nbas): + for j in range(mol.nbas): + gen_type2((i,j)) + + def test_type1_state_fac(self): + numpy.random.seed(3) + ri = numpy.random.random(3) - .5 + cache = numpy.empty(100000) + def tfacs(li): + facs0 = type1_cache_fac(li, ri) + facs1 = numpy.zeros_like(facs0) + libecp.type1_static_facs(facs1.ctypes.data_as(ctypes.c_void_p), + ctypes.c_int(li), + ri.ctypes.data_as(ctypes.c_void_p), + cache.ctypes.data_as(ctypes.c_void_p)) + self.assertTrue(numpy.allclose(facs0, facs1)) + for l in range(6): + tfacs(l) + + def test_type1_rad_ang(self): + numpy.random.seed(4) + ri = numpy.random.random(3) - .5 + def tfacs(lmax): + rad_all = numpy.random.random((lmax+1,lmax+1)) + rad_ang0 = type1_rad_ang(lmax, ri, rad_all) + rad_ang1 = numpy.empty_like(rad_ang0) + libecp.type1_rad_ang(rad_ang1.ctypes.data_as(ctypes.c_void_p), + ctypes.c_int(lmax), + ri.ctypes.data_as(ctypes.c_void_p), + rad_all.ctypes.data_as(ctypes.c_void_p)) + self.assertTrue(numpy.allclose(rad_ang0, rad_ang1)) + for l in range(13): + tfacs(l) + + def test_type1_rad(self): + k = 1.621 + aij = .792 + rs, ws = radi.gauss_chebyshev(99) + ur = rad_part(mol, mol._ecpbas, rs) * ws + cache = numpy.empty(100000) + def gen_type1_rad(li): + rad_all0 = type1_rad_part(li, k, aij, ur, rs) + rad_all1 = numpy.zeros_like(rad_all0) + libecp.type1_rad_part(rad_all1.ctypes.data_as(ctypes.c_void_p), + ctypes.c_int(li), + ctypes.c_double(k), ctypes.c_double(aij), + ur.ctypes.data_as(ctypes.c_void_p), + rs.ctypes.data_as(ctypes.c_void_p), + ctypes.c_int(len(rs)), ctypes.c_int(1), + cache.ctypes.data_as(ctypes.c_void_p)) + self.assertTrue(numpy.allclose(rad_all0, rad_all1)) + for l in range(13): + gen_type1_rad(l) + + def test_type1(self): + def gen_type1(shls): + di = (mol.bas_angular(shls[0])*2+1) * mol.bas_nctr(shls[0]) + dj = (mol.bas_angular(shls[1])*2+1) * mol.bas_nctr(shls[1]) + mat0 = numpy.zeros((di,dj)) + for ia in range(mol.natm): + ecpbas = mol._ecpbas[mol._ecpbas[:,ATOM_OF] == ia] + if len(ecpbas) == 0: + continue + ecpbas0 = ecpbas[ecpbas[:,ANG_OF] < 0] + if len(ecpbas0) == 0: + continue + mat0 += type1_by_shell(mol, shls, ia, ecpbas0) + mat1 = numpy.empty(mat0.shape, order='F') + cache = numpy.empty(100000) + libecp.ECPtype1_sph(mat1.ctypes.data_as(ctypes.c_void_p), + (ctypes.c_int*2)(*shls), + mol._ecpbas.ctypes.data_as(ctypes.c_void_p), + ctypes.c_int(len(mol._ecpbas)), + mol._atm.ctypes.data_as(ctypes.c_void_p), ctypes.c_int(mol.natm), + mol._bas.ctypes.data_as(ctypes.c_void_p), ctypes.c_int(mol.nbas), + mol._env.ctypes.data_as(ctypes.c_void_p), + lib.c_null_ptr(), cache.ctypes.data_as(ctypes.c_void_p)) + if not numpy.allclose(mat0, mat1, atol=1e-8): + print(i, j, numpy.linalg.norm(mat0-mat1)) + self.assertTrue(numpy.allclose(mat0, mat1, atol=1e-6)) + mat2 = gto.ecp.type1_by_shell(mol, shls) + self.assertTrue(numpy.allclose(mat0, mat2, atol=1e-6)) + for i in range(mol.nbas): + for j in range(mol.nbas): + gen_type1((i,j)) + + def test_so_1atom(self): + mol = gto.M(atom=''' + Na 0.5 0.5 0. + ''', + charge=1, + basis={'Na': [(0, (1, 1)), (1, (4, 1)), (1, (1, 1)), (2, (1, 1))]}, + ecp = {'Na': gto.basis.parse_ecp(''' +Na nelec 8 +Na ul +1 0. -3. -3. +Na S +1 0. -3. -3. +Na P +1 0. -3. -3. +Na D +1 0. -3. -3. +Na F +1 0. -3. -3. +''')}) + def gen_so(shls): + mat0 = 0 + for ia in range(mol.natm): + ecpbas = mol._ecpbas[(mol._ecpbas[:,ATOM_OF]==ia) & + (mol._ecpbas[:,SO_TYPE_OF]==1)] + if len(ecpbas) == 0: + continue + mat0 += so_by_shell(mol, shls, ia, ecpbas) + + s = lib.PauliMatrices * .5 + ui = numpy.asarray(gto.sph2spinor_l(mol.bas_angular(shls[0]))) + uj = numpy.asarray(gto.sph2spinor_l(mol.bas_angular(shls[1]))) + ref = numpy.einsum('sxy,spq,xpi,yqj->ij', s, + mol.intor_by_shell('int1e_inuc_rxp', shls), + ui.conj(), uj) + self.assertAlmostEqual(abs(ref-mat0).max(), 0, 12) + + mat2 = .5 * gto.ecp.so_by_shell(mol, shls) + self.assertTrue(numpy.allclose(ref, mat2, atol=1e-6)) + for i in range(mol.nbas): + for j in range(mol.nbas): + gen_so((i,j)) + + +if __name__ == '__main__': + print('Full Tests for ecp') + unittest.main() diff --git a/pyscfadlib/pyscfadlib/gto/test/test_gridao.py b/pyscfadlib/pyscfadlib/gto/test/test_gridao.py new file mode 100644 index 00000000..3f6acb02 --- /dev/null +++ b/pyscfadlib/pyscfadlib/gto/test/test_gridao.py @@ -0,0 +1,368 @@ +#!/usr/bin/env python +# Copyright 2014-2018 The PySCF Developers. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import ctypes +import unittest +import numpy +from pyscf import lib, gto, df +from pyscf.gto.eval_gto import BLKSIZE + +libcgto = lib.load_library('libdft') + +mol = gto.M(atom=''' + O 0.5 0.5 0. + H 1. 1.2 0. + H 0. 0. 1.3 + ''', + basis='ccpvqz') + +def eval_gto(mol, eval_name, coords, + comp=1, shls_slice=None, non0tab=None, ao_loc=None, out=None): + atm = numpy.asarray(mol._atm, dtype=numpy.int32, order='C') + bas = numpy.asarray(mol._bas, dtype=numpy.int32, order='C') + env = numpy.asarray(mol._env, dtype=numpy.double, order='C') + coords = numpy.asarray(coords, dtype=numpy.double, order='F') + natm = atm.shape[0] + nbas = bas.shape[0] + ngrids = coords.shape[0] + if ao_loc is None: + ao_loc = gto.moleintor.make_loc(bas, eval_name) + + if shls_slice is None: + shls_slice = (0, nbas) + sh0, sh1 = shls_slice + nao = ao_loc[sh1] - ao_loc[sh0]; + if 'spinor' in eval_name: + ao = numpy.ndarray((2,comp,nao,ngrids), dtype=numpy.complex128, buffer=out) + else: + ao = numpy.ndarray((comp,nao,ngrids), buffer=out) + + if non0tab is None: + non0tab = numpy.ones(((ngrids+BLKSIZE-1)//BLKSIZE,nbas), + dtype=numpy.uint8) + + drv = getattr(libcgto, eval_name) + drv(ctypes.c_int(ngrids), + (ctypes.c_int*2)(*shls_slice), ao_loc.ctypes.data_as(ctypes.c_void_p), + ao.ctypes.data_as(ctypes.c_void_p), + coords.ctypes.data_as(ctypes.c_void_p), + non0tab.ctypes.data_as(ctypes.c_void_p), + atm.ctypes.data_as(ctypes.c_void_p), ctypes.c_int(natm), + bas.ctypes.data_as(ctypes.c_void_p), ctypes.c_int(nbas), + env.ctypes.data_as(ctypes.c_void_p)) + + ao = numpy.swapaxes(ao, -1, -2) + if comp == 1: + if 'spinor' in eval_name: + ao = ao[:,0] + else: + ao = ao[0] + return ao + +PTR_ENV_START = 20 +CHARGE_OF = 0 +PTR_COORD = 1 +NUC_MOD_OF = 2 +PTR_ZETA = 3 +RAD_GRIDS = 4 +ANG_GRIDS = 5 +ATM_SLOTS = 6 +ATOM_OF = 0 +ANG_OF = 1 +NPRIM_OF = 2 +NCTR_OF = 3 +KAPPA_OF = 4 +PTR_EXP = 5 +PTR_COEFF = 6 +BAS_SLOTS = 8 +natm = 4 +nbas = 0 +atm = numpy.zeros((natm,ATM_SLOTS), dtype=numpy.int32) +bas = numpy.zeros((1000,BAS_SLOTS), dtype=numpy.int32) +env = numpy.zeros(10000) +off = PTR_ENV_START +for i in range(natm): + atm[i, CHARGE_OF] = (i+1)*2 + atm[i, PTR_COORD] = off + env[off+0] = .2 * (i+1) + env[off+1] = .3 + (i+1) * .5 + env[off+2] = .1 - (i+1) * .5 + off += 3 +off0 = off +# basis with kappa > 0 +nh = 0 +bas[nh,ATOM_OF ] = 0 +bas[nh,ANG_OF ] = 1 +bas[nh,KAPPA_OF] = 1 +bas[nh,NPRIM_OF] = 1 +bas[nh,NCTR_OF ] = 1 +bas[nh,PTR_EXP] = off +env[off+0] = 1 +bas[nh,PTR_COEFF] = off + 1 +env[off+1] = 1 +off += 2 +nh += 1 +bas[nh,ATOM_OF ] = 1 +bas[nh,ANG_OF ] = 2 +bas[nh,KAPPA_OF] = 2 +bas[nh,NPRIM_OF] = 2 +bas[nh,NCTR_OF ] = 2 +bas[nh,PTR_EXP] = off +env[off+0] = 5 +env[off+1] = 3 +bas[nh,PTR_COEFF] = off + 2 +env[off+2] = 1 +env[off+3] = 2 +env[off+4] = 4 +env[off+5] = 1 +off += 6 +nh += 1 +bas[nh,ATOM_OF ] = 2 +bas[nh,ANG_OF ] = 3 +bas[nh,KAPPA_OF] = 3 +bas[nh,NPRIM_OF] = 1 +bas[nh,NCTR_OF ] = 1 +bas[nh,PTR_EXP ] = off +env[off+0] = 1 +bas[nh,PTR_COEFF] = off + 1 +env[off+1] = 1 +off += 2 +nh += 1 +bas[nh,ATOM_OF ] = 3 +bas[nh,ANG_OF ] = 4 +bas[nh,KAPPA_OF] = 4 +bas[nh,NPRIM_OF] = 1 +bas[nh,NCTR_OF ] = 1 +bas[nh,PTR_EXP ] = off +env[off+0] = .5 +bas[nh,PTR_COEFF] = off + 1 +env[off+1] = 1. +off = off + 2 +nh += 1 + +nbas = nh +# basis with kappa < 0 +n = off - off0 +for i in range(n): + env[off+i] = env[off0+i] +for i in range(nh): + bas[i+nh,ATOM_OF ] = bas[i,ATOM_OF ] + bas[i+nh,ANG_OF ] = bas[i,ANG_OF ] - 1 + bas[i+nh,KAPPA_OF] =-bas[i,KAPPA_OF] + bas[i+nh,NPRIM_OF] = bas[i,NPRIM_OF] + bas[i+nh,NCTR_OF ] = bas[i,NCTR_OF ] + bas[i+nh,PTR_EXP ] = bas[i,PTR_EXP ] + n + bas[i+nh,PTR_COEFF]= bas[i,PTR_COEFF] + n + env[bas[i+nh,PTR_COEFF]] /= 2 * env[bas[i,PTR_EXP]] +env[bas[5,PTR_COEFF]+0] = env[bas[1,PTR_COEFF]+0] / (2 * env[bas[1,PTR_EXP]+0]) +env[bas[5,PTR_COEFF]+1] = env[bas[1,PTR_COEFF]+1] / (2 * env[bas[1,PTR_EXP]+1]) +env[bas[5,PTR_COEFF]+2] = env[bas[1,PTR_COEFF]+2] / (2 * env[bas[1,PTR_EXP]+0]) +env[bas[5,PTR_COEFF]+3] = env[bas[1,PTR_COEFF]+3] / (2 * env[bas[1,PTR_EXP]+1]) + +mol1 = gto.Mole() +mol1._atm = atm +mol1._bas = bas[:nh*2] +mol1._env = env +mol1._built = True + + +numpy.random.seed(1) +ngrids = 2000 +coords = numpy.random.random((ngrids,3)) +coords = (coords-.5)**2 * 80 + +def tearDownModule(): + global mol, mol1, coords + del mol, mol1, coords + + +class KnownValues(unittest.TestCase): + def test_sph(self): + ao = eval_gto(mol, 'GTOval_sph', coords) + self.assertAlmostEqual(lib.fp(ao), -6.8109234394857712, 9) + + def test_cart(self): + ao = eval_gto(mol, 'GTOval_cart', coords) + self.assertAlmostEqual(lib.fp(ao), -16.384888666900274, 9) + + def test_ip_cart(self): + ao = eval_gto(mol, 'GTOval_ip_cart', coords, comp=3) + self.assertAlmostEqual(lib.fp(ao), 94.04527465181198, 9) + + def test_sph_deriv1(self): + ao = eval_gto(mol, 'GTOval_sph_deriv1', coords, comp=4) + self.assertAlmostEqual(lib.fp(ao), -45.129633361047482, 9) + + def test_sph_deriv2(self): + ao = eval_gto(mol, 'GTOval_sph_deriv2', coords, comp=10) + self.assertAlmostEqual(lib.fp(ao), -88.126901222477954, 9) + + def test_sph_deriv3(self): + ao = eval_gto(mol, 'GTOval_sph_deriv3', coords, comp=20) + self.assertAlmostEqual(lib.fp(ao), -402.84257273073263, 9) + + def test_sph_deriv4(self): + ao = eval_gto(mol, 'GTOval_sph_deriv4', coords, comp=35) + self.assertAlmostEqual(lib.fp(ao), 4933.0635429300246, 9) + + def test_shls_slice(self): + ao0 = eval_gto(mol, 'GTOval_ip_cart', coords, comp=3) + ao1 = ao0[:,:,14:77] + ao = eval_gto(mol, 'GTOval_ip_cart', coords, comp=3, shls_slice=(7, 19)) + self.assertAlmostEqual(abs(ao-ao1).sum(), 0, 9) + + def test_ig_sph(self): + ao = eval_gto(mol, 'GTOval_ig_sph', coords, comp=3) + self.assertAlmostEqual(lib.fp(ao), 8.6601301646129052, 9) + + def test_ipig_sph(self): + ao = eval_gto(mol, 'GTOval_ipig_sph', coords, comp=9) + self.assertAlmostEqual(lib.fp(ao), -53.56608497643537, 9) + + def test_spinor(self): + ao = eval_gto(mol, 'GTOval_spinor', coords) + self.assertAlmostEqual(lib.fp(ao), -4.5941099464020079+5.9444339000526707j, 9) + + def test_sp_spinor(self): + ao = eval_gto(mol, 'GTOval_sp_spinor', coords) + self.assertAlmostEqual(lib.fp(ao), 26.212937567473656-68.970076521029782j, 9) + + numpy.random.seed(1) + rs = numpy.random.random((213,3)) + rs = (rs-.5)**2 * 30 + ao1 = eval_gto(mol1, 'GTOval_spinor', rs, shls_slice=(0,mol1.nbas//2)) + ao2 = eval_gto(mol1, 'GTOval_sp_spinor', rs, shls_slice=(mol1.nbas//2,mol1.nbas)) + self.assertAlmostEqual(abs(ao1-ao2*1j).sum(), 0, 9) +# +# t = gto.cart2j_kappa(0, 2) +# aonr = eval_gto(mol1, 'GTOval_cart', rs, shls_slice=(1,2)) +# aa = numpy.zeros((2,12)) +# aa[:1,:6] = aonr[:,:6] +# aa[1:,6:] = aonr[:,:6] +# print aa.dot(t[:,:4]) +# +# t = gto.cart2j_kappa(0, 1)/0.488602511902919921 +# aonr = eval_gto(mol1, 'GTOval_ip_cart', rs, comp=3, shls_slice=(mol1.nbas//2+1,mol1.nbas//2+2)) +# print 'x', aonr[0,0,:3] +# print 'y', aonr[1,0,:3] +# print 'z', aonr[2,0,:3] +# aa = numpy.zeros((3,2,6),dtype=numpy.complex128) +# aa[0,:1,3:] = aonr[0,0,:3] +# aa[0,1:,:3] = aonr[0,0,:3] +# aa[1,:1,3:] =-aonr[1,0,:3]*1j +# aa[1,1:,:3] = aonr[1,0,:3]*1j +# aa[2,:1,:3] = aonr[2,0,:3] +# aa[2,1:,3:] =-aonr[2,0,:3] +# aa = (aa[0]*-1j + aa[1]*-1j + aa[2]*-1j) +# print 'p',aa.dot(t[:,2:])*1j + + def test_ip_spinor(self): + ao = eval_gto(mol, 'GTOval_ip_spinor', coords, comp=3) + self.assertAlmostEqual(lib.fp(ao), -52.516545034166775+24.765350351395604j, 9) + + def test_ipsp_spinor(self): + ao = eval_gto(mol, 'GTOval_ipsp_spinor', coords, comp=3) + self.assertAlmostEqual(lib.fp(ao), -159.94403505490939+400.80148912086418j, 9) + + numpy.random.seed(1) + rs = numpy.random.random((213,3)) + rs = (rs-.5)**2 * 30 + ao1 = eval_gto(mol1, 'GTOval_ip_spinor', rs, comp=3, shls_slice=(0,mol1.nbas//2)) + ao2 = eval_gto(mol1, 'GTOval_ipsp_spinor', rs, comp=3, shls_slice=(mol1.nbas//2,mol1.nbas)) + self.assertAlmostEqual(abs(ao1-ao2*1j).sum(), 0, 9) + + def test_int1e_grids(self): + mol1 = gto.M(atom=''' +O 0.5 0.5 0. +H 1. 1.2 0. +H 0. 0. 1.3''', basis='ccpvtz') + ngrids = 201 + grids = numpy.random.random((ngrids, 3)) * 12 - 5 + fmol = gto.fakemol_for_charges(grids) + ref = df.incore.aux_e2(mol1, fmol, intor='int3c2e').transpose(2,0,1) + j3c = mol1.intor('int1e_grids', grids=grids) + self.assertAlmostEqual(abs(j3c - ref).max(), 0, 12) + + ref = df.incore.aux_e2(mol1, fmol, intor='int3c2e_cart').transpose(2,0,1) + j3c = mol1.intor('int1e_grids_cart', grids=grids) + self.assertAlmostEqual(abs(j3c - ref).max(), 0, 12) + + ref = df.incore.aux_e2(mol1, fmol, intor='int3c2e_spinor').transpose(2,0,1) + j3c = mol1.intor('int1e_grids_spinor', grids=grids) + self.assertAlmostEqual(abs(j3c - ref).max(), 0, 12) + + def test_range_separated_coulomb_int1e_grids(self): + mol1 = gto.M(atom=''' +O 0.5 0.5 0. +H 1. 1.2 0. +H 0. 0. 1.3''', basis='ccpvtz') + ngrids = 201 + grids = numpy.random.random((ngrids, 3)) * 12 - 5 + fmol = gto.fakemol_for_charges(grids) + + with mol1.with_range_coulomb(.8): + ref = df.incore.aux_e2(mol1, fmol, intor='int3c2e').transpose(2,0,1) + j3c = mol1.intor('int1e_grids', grids=grids) + self.assertAlmostEqual(abs(j3c - ref).max(), 0, 12) + + ref = df.incore.aux_e2(mol1, fmol, intor='int3c2e_cart').transpose(2,0,1) + j3c = mol1.intor('int1e_grids_cart', grids=grids) + self.assertAlmostEqual(abs(j3c - ref).max(), 0, 12) + + ref = df.incore.aux_e2(mol1, fmol, intor='int3c2e_spinor').transpose(2,0,1) + j3c = mol1.intor('int1e_grids_spinor', grids=grids) + self.assertAlmostEqual(abs(j3c - ref).max(), 0, 12) + + with mol1.with_range_coulomb(-.8): + ref = df.incore.aux_e2(mol1, fmol, intor='int3c2e').transpose(2,0,1) + j3c = mol1.intor('int1e_grids', grids=grids) + self.assertAlmostEqual(abs(j3c - ref).max(), 0, 12) + + ref = df.incore.aux_e2(mol1, fmol, intor='int3c2e_cart').transpose(2,0,1) + j3c = mol1.intor('int1e_grids_cart', grids=grids) + self.assertAlmostEqual(abs(j3c - ref).max(), 0, 12) + + ref = df.incore.aux_e2(mol1, fmol, intor='int3c2e_spinor').transpose(2,0,1) + j3c = mol1.intor('int1e_grids_spinor', grids=grids) + self.assertAlmostEqual(abs(j3c - ref).max(), 0, 12) + + def test_int1e_grids_ip(self): + ngrids = 201 + grids = numpy.random.random((ngrids, 3)) * 12 - 5 + fmol = gto.fakemol_for_charges(grids) + ref = df.incore.aux_e2(mol1, fmol, intor='int3c2e_ip1').transpose(0,3,1,2) + j3c = mol1.intor('int1e_grids_ip', grids=grids) + self.assertAlmostEqual(abs(j3c - ref).max(), 0, 12) + + ref = df.incore.aux_e2(mol1, fmol, intor='int3c2e_ip1_cart').transpose(0,3,1,2) + j3c = mol1.intor('int1e_grids_ip_cart', grids=grids) + self.assertAlmostEqual(abs(j3c - ref).max(), 0, 12) + + ref = df.incore.aux_e2(mol1, fmol, intor='int3c2e_ip1_spinor').transpose(0,3,1,2) + j3c = mol1.intor('int1e_grids_ip_spinor', grids=grids) + self.assertAlmostEqual(abs(j3c - ref).max(), 0, 12) + + def test_int1e_grids_spvsp(self): + ngrids = 201 + grids = numpy.random.random((ngrids, 3)) * 12 - 5 + fmol = gto.fakemol_for_charges(grids) + ref = df.r_incore.aux_e2(mol, fmol, intor='int3c2e_spsp1_spinor').transpose(2,0,1) + j3c = mol.intor('int1e_grids_spvsp_spinor', grids=grids) + self.assertAlmostEqual(abs(j3c - ref).max(), 0, 11) + + +if __name__ == '__main__': + print('Full Tests for grid_ao and grids_ints') + unittest.main() diff --git a/pyscfadlib/lib.py b/pyscfadlib/pyscfadlib/lib.py similarity index 100% rename from pyscfadlib/lib.py rename to pyscfadlib/pyscfadlib/lib.py diff --git a/pyscfadlib/libcint.patch b/pyscfadlib/pyscfadlib/libcint.patch similarity index 100% rename from pyscfadlib/libcint.patch rename to pyscfadlib/pyscfadlib/libcint.patch diff --git a/pyscfadlib/libcint.patch.5.4 b/pyscfadlib/pyscfadlib/libcint.patch.5.4 similarity index 100% rename from pyscfadlib/libcint.patch.5.4 rename to pyscfadlib/pyscfadlib/libcint.patch.5.4 diff --git a/pyscfadlib/pyscfadlib/np_helper/CMakeLists.txt b/pyscfadlib/pyscfadlib/np_helper/CMakeLists.txt new file mode 100644 index 00000000..b8cef010 --- /dev/null +++ b/pyscfadlib/pyscfadlib/np_helper/CMakeLists.txt @@ -0,0 +1,21 @@ +# Copyright 2014-2018 The PySCF Developers. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +add_library(np_helper SHARED + transpose.c pack_tril.c npdot.c condense.c omp_reduce.c np_helper.c) + +set_target_properties(np_helper PROPERTIES + LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}) + +target_link_libraries(np_helper ${BLAS_LIBRARIES} ${OPENMP_C_PROPERTIES}) diff --git a/pyscfadlib/pyscfadlib/np_helper/condense.c b/pyscfadlib/pyscfadlib/np_helper/condense.c new file mode 100644 index 00000000..fef43c60 --- /dev/null +++ b/pyscfadlib/pyscfadlib/np_helper/condense.c @@ -0,0 +1,187 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +#include +#define MIN(X,Y) ((X)<(Y) ? (X) : (Y)) +#define MAX(X,Y) ((X)>(Y) ? (X) : (Y)) + +/* + * def condense(op, a, loc): + * nd = loc[-1] + * out = numpy.empty((nd,nd)) + * for i,i0 in enumerate(loc): + * i1 = loc[i+1] + * for j,j0 in enumerate(loc): + * j1 = loc[j+1] + * out[i,j] = op(a[i0:i1,j0:j1]) + * return out + */ + +void NPcondense(double (*op)(double *, int, int, int), double *out, double *a, + int *loc_x, int *loc_y, int nloc_x, int nloc_y) +{ + const size_t nj = loc_y[nloc_y]; + const size_t Nloc_y = nloc_y; +#pragma omp parallel +{ + int i, j, i0, j0, di, dj; +#pragma omp for + for (i = 0; i < nloc_x; i++) { + i0 = loc_x[i]; + di = loc_x[i+1] - i0; + for (j = 0; j < nloc_y; j++) { + j0 = loc_y[j]; + dj = loc_y[j+1] - j0; + out[i*Nloc_y+j] = op(a+i0*nj+j0, nj, di, dj); + } + } +} +} + +double NP_sum(double *a, int nd, int di, int dj) +{ + int i, j; + double out = 0; + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + out += a[i*nd+j]; + } } + return out; +} +double NP_max(double *a, int nd, int di, int dj) +{ + if (di == 0 || dj == 0) { + return 0.; + } + int i, j; + double out = a[0]; + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + out = MAX(out, a[i*nd+j]); + } } + return out; +} +double NP_min(double *a, int nd, int di, int dj) +{ + if (di == 0 || dj == 0) { + return 0.; + } + int i, j; + double out = a[0]; + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + out = MIN(out, a[i*nd+j]); + } } + return out; +} +double NP_abssum(double *a, int nd, int di, int dj) +{ + int i, j; + double out = 0; + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + out += fabs(a[i*nd+j]); + } } + return out; +} +double NP_absmax(double *a, int nd, int di, int dj) +{ + if (di == 0 || dj == 0) { + return 0.; + } + int i, j; + double out = fabs(a[0]); + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + out = MAX(out, fabs(a[i*nd+j])); + } } + return out; +} +double NP_absmin(double *a, int nd, int di, int dj) +{ + if (di == 0 || dj == 0) { + return 0.; + } + int i, j; + double out = fabs(a[0]); + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + out = MIN(out, fabs(a[i*nd+j])); + } } + return out; +} +double NP_norm(double *a, int nd, int di, int dj) +{ + if (di == 0 || dj == 0) { + return 0.; + } + int i, j; + double out = 0; + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + out += a[i*nd+j] * a[i*nd+j]; + } } + return sqrt(out); +} + +void NPbcondense(int8_t (*op)(int8_t *, int, int, int), int8_t *out, int8_t *a, + int *loc_x, int *loc_y, int nloc_x, int nloc_y) +{ + size_t nj = loc_y[nloc_y]; + size_t Nloc_y = nloc_y; +#pragma omp parallel +{ + int i, j, i0, j0, di, dj; +#pragma omp for + for (i = 0; i < nloc_x; i++) { + i0 = loc_x[i]; + di = loc_x[i+1] - i0; + for (j = 0; j < nloc_y; j++) { + j0 = loc_y[j]; + dj = loc_y[j+1] - j0; + out[i*Nloc_y+j] = op(a+i0*nj+j0, nj, di, dj); + } + } +} +} + +int8_t NP_any(int8_t *a, int nd, int di, int dj) +{ + int i, j; + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + if (a[i*nd+j]) { + return 1; + } + } } + return 0; +} + +int8_t NP_all(int8_t *a, int nd, int di, int dj) +{ + int i, j; + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + if (!a[i*nd+j]) { + return 0; + } + } } + return 1; +} diff --git a/pyscfadlib/pyscfadlib/np_helper/np_helper.c b/pyscfadlib/pyscfadlib/np_helper/np_helper.c new file mode 100644 index 00000000..a997a242 --- /dev/null +++ b/pyscfadlib/pyscfadlib/np_helper/np_helper.c @@ -0,0 +1,49 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#include +#include "np_helper/np_helper.h" + +void NPdset0(double *p, const size_t n) +{ + size_t i; + for (i = 0; i < n; i++) { + p[i] = 0; + } +} + +void NPzset0(double complex *p, const size_t n) +{ + size_t i; + for (i = 0; i < n; i++) { + p[i] = 0; + } +} + +void NPdcopy(double *out, const double *in, const size_t n) +{ + size_t i; + for (i = 0; i < n; i++) { + out[i] = in[i]; + } +} + +void NPzcopy(double complex *out, const double complex *in, const size_t n) +{ + size_t i; + for (i = 0; i < n; i++) { + out[i] = in[i]; + } +} diff --git a/pyscfadlib/pyscfadlib/np_helper/np_helper.h b/pyscfadlib/pyscfadlib/np_helper/np_helper.h new file mode 100644 index 00000000..2c8227c0 --- /dev/null +++ b/pyscfadlib/pyscfadlib/np_helper/np_helper.h @@ -0,0 +1,63 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include + +#define BLOCK_DIM 104 + +#define HERMITIAN 1 +#define ANTIHERMI 2 +#define SYMMETRIC 3 + +#define MIN(X, Y) ((X) < (Y) ? (X) : (Y)) +#define MAX(X, Y) ((X) > (Y) ? (X) : (Y)) + +#define TRIU_LOOP(I, J) \ + for (j0 = 0; j0 < n; j0+=BLOCK_DIM) \ + for (I = 0, j1 = MIN(j0+BLOCK_DIM, n); I < j1; I++) \ + for (J = MAX(I,j0); J < j1; J++) + +void NPdsymm_triu(int n, double *mat, int hermi); +void NPzhermi_triu(int n, double complex *mat, int hermi); +void NPdunpack_tril(int n, double *tril, double *mat, int hermi); +void NPdunpack_row(int ndim, int row_id, double *tril, double *row); +void NPzunpack_tril(int n, double complex *tril, double complex *mat, + int hermi); +void NPdpack_tril(int n, double *tril, double *mat); +void NPzpack_tril(int n, double complex *tril, double complex *mat); + +void NPdtranspose(int n, int m, double *a, double *at); +void NPztranspose(int n, int m, double complex *a, double complex *at); +void NPdtranspose_021(int *shape, double *a, double *at); +void NPztranspose_021(int *shape, double complex *a, double complex *at); + +void NPdunpack_tril_2d(int count, int n, double *tril, double *mat, int hermi); +void NPzunpack_tril_2d(int count, int n, + double complex *tril, double complex *mat, int hermi); +void NPdpack_tril_2d(int count, int n, double *tril, double *mat); + +void NPomp_split(size_t *start, size_t *end, size_t n); +void NPomp_dsum_reduce_inplace(double **vec, size_t count); +void NPomp_dprod_reduce_inplace(double **vec, size_t count); +void NPomp_zsum_reduce_inplace(double complex **vec, size_t count); +void NPomp_zprod_reduce_inplace(double complex **vec, size_t count); + +void NPdset0(double *p, const size_t n); +void NPzset0(double complex *p, const size_t n); +void NPdcopy(double *out, const double *in, const size_t n); +void NPzcopy(double complex *out, const double complex *in, const size_t n); diff --git a/pyscfadlib/pyscfadlib/np_helper/npdot.c b/pyscfadlib/pyscfadlib/np_helper/npdot.c new file mode 100644 index 00000000..0ae03987 --- /dev/null +++ b/pyscfadlib/pyscfadlib/np_helper/npdot.c @@ -0,0 +1,244 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +//#include +#include "config.h" +#include "vhf/fblas.h" +#include "np_helper/np_helper.h" + +#define MIN(X,Y) ((X) < (Y) ? (X) : (Y)) +#define MAX(X,Y) ((X) > (Y) ? (X) : (Y)) + +/* + * numpy.dot may call unoptimized blas + */ +void NPdgemm(const char trans_a, const char trans_b, + const int m, const int n, const int k, + const int lda, const int ldb, const int ldc, + const int offseta, const int offsetb, const int offsetc, + double *a, double *b, double *c, + const double alpha, const double beta) +{ + const size_t Ldc = ldc; + int i, j; + if (m == 0 || n == 0) { + return; + } else if (k == 0) { + for (i = 0; i < n; i++) { + for (j = 0; j < m; j++) { + c[i*Ldc+j] = 0; + } } + return; + } + a += offseta; + b += offsetb; + c += offsetc; + + if ((k/m) > 3 && (k/n) > 3) { // parallelize k + + if (beta == 0) { + for (i = 0; i < n; i++) { + for (j = 0; j < m; j++) { + c[i*Ldc+j] = 0; + } + } + } else { + for (i = 0; i < n; i++) { + for (j = 0; j < m; j++) { + c[i*Ldc+j] *= beta; + } + } + } + +#pragma omp parallel private(i, j) +{ + double D0 = 0; + double *cpriv = malloc(sizeof(double) * (m*n+2)); + size_t k0, k1, ij; + NPomp_split(&k0, &k1, k); + int dk = k1 - k0; + if (dk > 0) { + size_t astride = k0; + size_t bstride = k0; + if (trans_a == 'N') { + astride *= lda; + } + if (trans_b != 'N') { + bstride *= ldb; + } + dgemm_(&trans_a, &trans_b, &m, &n, &dk, + &alpha, a+astride, &lda, b+bstride, &ldb, + &D0, cpriv, &m); + } +#pragma omp critical + if (dk > 0) { + for (ij = 0, i = 0; i < n; i++) { + for (j = 0; j < m; j++, ij++) { + c[i*Ldc+j] += cpriv[ij]; + } } + } + + free(cpriv); +} + + } else if (m > n*2) { // parallelize m + +#pragma omp parallel +{ + size_t m0, m1; + NPomp_split(&m0, &m1, m); + int dm = m1 - m0; + if (dm > 0) { + size_t astride = m0; + if (trans_a != 'N') { + astride *= lda; + } + dgemm_(&trans_a, &trans_b, &dm, &n, &k, + &alpha, a+astride, &lda, b, &ldb, + &beta, c+m0, &ldc); + } +} + + } else { // parallelize n + +#pragma omp parallel +{ + size_t n0, n1; + NPomp_split(&n0, &n1, n); + int dn = n1 - n0; + if (dn > 0) { + size_t bstride = n0; + if (trans_b == 'N') { + bstride *= ldb; + } + dgemm_(&trans_a, &trans_b, &m, &dn, &k, + &alpha, a, &lda, b+bstride, &ldb, + &beta, c+Ldc*n0, &ldc); + } +} + } +} + + +void NPzgemm(const char trans_a, const char trans_b, + const int m, const int n, const int k, + const int lda, const int ldb, const int ldc, + const int offseta, const int offsetb, const int offsetc, + double complex *a, double complex *b, double complex *c, + const double complex *alpha, const double complex *beta) +{ + const size_t Ldc = ldc; + int i, j; + if (m == 0 || n == 0) { + return; + } else if (k == 0) { + for (i = 0; i < n; i++) { + for (j = 0; j < m; j++) { + c[i*Ldc+j] = 0; + } } + return; + } + a += offseta; + b += offsetb; + c += offsetc; + + if ((k/m) > 3 && (k/n) > 3) { // parallelize k + + if (creal(*beta) == 0 && cimag(*beta) == 0) { + for (i = 0; i < n; i++) { + for (j = 0; j < m; j++) { + c[i*Ldc+j] = 0; + } + } + } else { + for (i = 0; i < n; i++) { + for (j = 0; j < m; j++) { + c[i*Ldc+j] *= beta[0]; + } + } + } + +#pragma omp parallel private(i, j) +{ + double complex Z0 = 0; + double complex *cpriv = malloc(sizeof(double complex) * (m*n+2)); + size_t k0, k1, ij; + NPomp_split(&k0, &k1, k); + int dk = k1 - k0; + if (dk > 0) { + size_t astride = k0; + size_t bstride = k0; + if (trans_a == 'N') { + astride *= lda; + } + if (trans_b != 'N') { + bstride *= ldb; + } + zgemm_(&trans_a, &trans_b, &m, &n, &dk, + alpha, a+astride, &lda, b+bstride, &ldb, + &Z0, cpriv, &m); + } +#pragma omp critical + if (dk > 0) { + for (ij = 0, i = 0; i < n; i++) { + for (j = 0; j < m; j++, ij++) { + c[i*Ldc+j] += cpriv[ij]; + } } + } + free(cpriv); +} + + } else if (m > n*2) { // parallelize m + +#pragma omp parallel +{ + size_t m0, m1; + NPomp_split(&m0, &m1, m); + int dm = m1 - m0; + if (dm > 0) { + size_t astride = m0; + if (trans_a != 'N') { + astride *= lda; + } + zgemm_(&trans_a, &trans_b, &dm, &n, &k, + alpha, a+astride, &lda, b, &ldb, + beta, c+m0, &ldc); + } +} + + } else { // parallelize n + +#pragma omp parallel +{ + size_t n0, n1; + NPomp_split(&n0, &n1, n); + int dn = n1 - n0; + if (dn > 0) { + size_t bstride = n0; + if (trans_b == 'N') { + bstride *= ldb; + } + zgemm_(&trans_a, &trans_b, &m, &dn, &k, + alpha, a, &lda, b+bstride, &ldb, + beta, c+Ldc*n0, &ldc); + } +} + } +} diff --git a/pyscfadlib/pyscfadlib/np_helper/omp_reduce.c b/pyscfadlib/pyscfadlib/np_helper/omp_reduce.c new file mode 100644 index 00000000..c59620a1 --- /dev/null +++ b/pyscfadlib/pyscfadlib/np_helper/omp_reduce.c @@ -0,0 +1,166 @@ +/* Copyright 2014-2020 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +#include "config.h" + +#define MIN(x, y) ((x) < (y) ? (x) : (y)) + +void NPomp_split(size_t *start, size_t *end, size_t n) { + int nthread = omp_get_num_threads(); + int thread_id = omp_get_thread_num(); + int rest = n % nthread; + size_t blksize = n / nthread; + if (thread_id < rest) { + blksize++; + *start = blksize * thread_id; + *end = blksize * (thread_id + 1); + } else{ + *start = blksize * thread_id + rest; + *end = *start + blksize; + } +} + +static int _highest_power2(int n) +{ + int v = n - 1; + v |= v >> 1; + v |= v >> 2; + v |= v >> 4; + v |= v >> 8; + return (v + 1) >> 1; +} + +void NPomp_dsum_reduce_inplace1(double **vec, size_t count) +{ + if (count <= 1) { + return; + } + unsigned int nthreads = omp_get_num_threads(); + unsigned int thread_id = omp_get_thread_num(); + double *src = vec[thread_id]; + double *dst; + int n; + size_t i; +#pragma omp barrier + for (n = _highest_power2(nthreads); n > 0; n >>= 1) { + if (thread_id >= n) { + dst = vec[thread_id - n]; + for (i = 0; i < count; i++) { + dst[i] += src[i]; + } + } +#pragma omp barrier + } +} + +void NPomp_dsum_reduce_inplace(double **vec, size_t count) +{ + unsigned int nthreads = omp_get_num_threads(); + unsigned int thread_id = omp_get_thread_num(); + size_t blksize = (count + nthreads - 1) / nthreads; + size_t start = thread_id * blksize; + size_t end = MIN(start + blksize, count); + double *dst = vec[0]; + double *src; + size_t it, i; +#pragma omp barrier + for (it = 1; it < nthreads; it++) { + src = vec[it]; + for (i = start; i < end; i++) { + dst[i] += src[i]; + } + } +#pragma omp barrier +} + +void NPomp_dprod_reduce_inplace(double **vec, size_t count) +{ + unsigned int nthreads = omp_get_num_threads(); + unsigned int thread_id = omp_get_thread_num(); + size_t blksize = (count + nthreads - 1) / nthreads; + size_t start = thread_id * blksize; + size_t end = MIN(start + blksize, count); + double *dst = vec[0]; + double *src; + size_t it, i; +#pragma omp barrier + for (it = 1; it < nthreads; it++) { + src = vec[it]; + for (i = start; i < end; i++) { + dst[i] *= src[i]; + } + } +#pragma omp barrier +} + +void NPomp_zsum_reduce_inplace(double complex **vec, size_t count) +{ + unsigned int nthreads = omp_get_num_threads(); + unsigned int thread_id = omp_get_thread_num(); + size_t blksize = (count + nthreads - 1) / nthreads; + size_t start = thread_id * blksize; + size_t end = MIN(start + blksize, count); + double complex *dst = vec[0]; + double complex *src; + size_t it, i; +#pragma omp barrier + for (it = 1; it < nthreads; it++) { + src = vec[it]; + for (i = start; i < end; i++) { + dst[i] += src[i]; + } + } +#pragma omp barrier +} + +void NPomp_zprod_reduce_inplace(double complex **vec, size_t count) +{ + unsigned int nthreads = omp_get_num_threads(); + unsigned int thread_id = omp_get_thread_num(); + size_t blksize = (count + nthreads - 1) / nthreads; + size_t start = thread_id * blksize; + size_t end = MIN(start + blksize, count); + double complex *dst = vec[0]; + double complex *src; + size_t it, i; +#pragma omp barrier + for (it = 1; it < nthreads; it++) { + src = vec[it]; + for (i = start; i < end; i++) { + dst[i] *= src[i]; + } + } +#pragma omp barrier +} + + +#ifdef _OPENMP +int get_omp_threads() { + return omp_get_max_threads(); +} +int set_omp_threads(int n) { + omp_set_num_threads(n); + return n; +} +#else +// mimic omp_get_max_threads omp_set_num_threads function of libgomp +int get_omp_threads() { return 1; } +int set_omp_threads(int n) { return 0; } +#endif diff --git a/pyscfadlib/pyscfadlib/np_helper/pack_tril.c b/pyscfadlib/pyscfadlib/np_helper/pack_tril.c new file mode 100644 index 00000000..0859c443 --- /dev/null +++ b/pyscfadlib/pyscfadlib/np_helper/pack_tril.c @@ -0,0 +1,274 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include "stdlib.h" +#include +#include "config.h" +#include "np_helper.h" + +void NPdsymm_triu(int n, double *mat, int hermi) +{ + size_t i, j, j0, j1; + + if (hermi == HERMITIAN || hermi == SYMMETRIC) { + TRIU_LOOP(i, j) { + mat[i*n+j] = mat[j*n+i]; + } + } else { + TRIU_LOOP(i, j) { + mat[i*n+j] = -mat[j*n+i]; + } + } +} + +void NPzhermi_triu(int n, double complex *mat, int hermi) +{ + size_t i, j, j0, j1; + + if (hermi == HERMITIAN) { + TRIU_LOOP(i, j) { + mat[i*n+j] = conj(mat[j*n+i]); + } + } else if (hermi == SYMMETRIC) { + TRIU_LOOP(i, j) { + mat[i*n+j] = mat[j*n+i]; + } + } else { + TRIU_LOOP(i, j) { + mat[i*n+j] = -conj(mat[j*n+i]); + } + } +} + + +void NPdunpack_tril(int n, double *tril, double *mat, int hermi) +{ + size_t i, j, ij; + for (ij = 0, i = 0; i < n; i++) { + for (j = 0; j <= i; j++, ij++) { + mat[i*n+j] = tril[ij]; + } + } + if (hermi) { + NPdsymm_triu(n, mat, hermi); + } +} + +// unpack one row from the compact matrix-tril coefficients +void NPdunpack_row(int ndim, int row_id, double *tril, double *row) +{ + int i; + size_t idx = ((size_t)row_id) * (row_id + 1) / 2; + NPdcopy(row, tril+idx, row_id); + for (i = row_id; i < ndim; i++) { + idx += i; + row[i] = tril[idx]; + } +} + +void NPzunpack_tril(int n, double complex *tril, double complex *mat, + int hermi) +{ + size_t i, j, ij; + for (ij = 0, i = 0; i < n; i++) { + for (j = 0; j <= i; j++, ij++) { + mat[i*n+j] = tril[ij]; + } + } + if (hermi) { + NPzhermi_triu(n, mat, hermi); + } +} + +void NPdpack_tril(int n, double *tril, double *mat) +{ + size_t i, j, ij; + for (ij = 0, i = 0; i < n; i++) { + for (j = 0; j <= i; j++, ij++) { + tril[ij] = mat[i*n+j]; + } + } +} + +void NPzpack_tril(int n, double complex *tril, double complex *mat) +{ + size_t i, j, ij; + for (ij = 0, i = 0; i < n; i++) { + for (j = 0; j <= i; j++, ij++) { + tril[ij] = mat[i*n+j]; + } + } +} + +/* out += in[idx[:,None],idy] */ +void NPdtake_2d(double *out, double *in, int *idx, int *idy, + int odim, int idim, int nx, int ny) +{ +#pragma omp parallel default(none) \ + shared(out, in, idx,idy, odim, idim, nx, ny) +{ + size_t i, j; + double *pin; +#pragma omp for schedule (static) + for (i = 0; i < nx; i++) { + pin = in + (size_t)idim * idx[i]; + for (j = 0; j < ny; j++) { + out[i*odim+j] = pin[idy[j]]; + } + } +} +} + +void NPztake_2d(double complex *out, double complex *in, int *idx, int *idy, + int odim, int idim, int nx, int ny) +{ +#pragma omp parallel default(none) \ + shared(out, in, idx,idy, odim, idim, nx, ny) +{ + size_t i, j; + double complex *pin; +#pragma omp for schedule (static) + for (i = 0; i < nx; i++) { + pin = in + (size_t)idim * idx[i]; + for (j = 0; j < ny; j++) { + out[i*odim+j] = pin[idy[j]]; + } + } +} +} + +/* out[idx[:,None],idy] += in */ +void NPdtakebak_2d(double *out, double *in, int *idx, int *idy, + int odim, int idim, int nx, int ny, int thread_safe) +{ + if (thread_safe) { +#pragma omp parallel default(none) \ + shared(out, in, idx,idy, odim, idim, nx, ny) +{ + size_t i, j; + double *pout; +#pragma omp for schedule (static) + for (i = 0; i < nx; i++) { + pout = out + (size_t)odim * idx[i]; + for (j = 0; j < ny; j++) { + pout[idy[j]] += in[i*idim+j]; + } + } +} + } else { + size_t i, j; + double *pout; + for (i = 0; i < nx; i++) { + pout = out + (size_t)odim * idx[i]; + for (j = 0; j < ny; j++) { + pout[idy[j]] += in[i*idim+j]; + } + } + } +} + +void NPztakebak_2d(double complex *out, double complex *in, int *idx, int *idy, + int odim, int idim, int nx, int ny, int thread_safe) +{ + if (thread_safe) { +#pragma omp parallel default(none) \ + shared(out, in, idx,idy, odim, idim, nx, ny) +{ + size_t i, j; + double complex *pout; +#pragma omp for schedule (static) + for (i = 0; i < nx; i++) { + pout = out + (size_t)odim * idx[i]; + for (j = 0; j < ny; j++) { + pout[idy[j]] += in[i*idim+j]; + } + } +} + } else { + size_t i, j; + double complex *pout; + for (i = 0; i < nx; i++) { + pout = out + (size_t)odim * idx[i]; + for (j = 0; j < ny; j++) { + pout[idy[j]] += in[i*idim+j]; + } + } + } +} + +void NPdunpack_tril_2d(int count, int n, double *tril, double *mat, int hermi) +{ +#pragma omp parallel default(none) \ + shared(count, n, tril, mat, hermi) +{ + int ic; + size_t nn = n * n; + size_t n2 = n*(n+1)/2; +#pragma omp for schedule (static) + for (ic = 0; ic < count; ic++) { + NPdunpack_tril(n, tril+n2*ic, mat+nn*ic, hermi); + } +} +} + +void NPzunpack_tril_2d(int count, int n, + double complex *tril, double complex *mat, int hermi) +{ +#pragma omp parallel default(none) \ + shared(count, n, tril, mat, hermi) +{ + int ic; + size_t nn = n * n; + size_t n2 = n*(n+1)/2; +#pragma omp for schedule (static) + for (ic = 0; ic < count; ic++) { + NPzunpack_tril(n, tril+n2*ic, mat+nn*ic, hermi); + } +} +} + +void NPdpack_tril_2d(int count, int n, double *tril, double *mat) +{ +#pragma omp parallel default(none) \ + shared(count, n, tril, mat) +{ + int ic; + size_t nn = n * n; + size_t n2 = n*(n+1)/2; +#pragma omp for schedule (static) + for (ic = 0; ic < count; ic++) { + NPdpack_tril(n, tril+n2*ic, mat+nn*ic); + } +} +} + +void NPzpack_tril_2d(int count, int n, double complex *tril, double complex *mat) +{ +#pragma omp parallel default(none) \ + shared(count, n, tril, mat) +{ + int ic; + size_t nn = n * n; + size_t n2 = n*(n+1)/2; +#pragma omp for schedule (static) + for (ic = 0; ic < count; ic++) { + NPzpack_tril(n, tril+n2*ic, mat+nn*ic); + } +} +} + diff --git a/pyscfadlib/pyscfadlib/np_helper/transpose.c b/pyscfadlib/pyscfadlib/np_helper/transpose.c new file mode 100644 index 00000000..cb4ba042 --- /dev/null +++ b/pyscfadlib/pyscfadlib/np_helper/transpose.c @@ -0,0 +1,155 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +#include "np_helper.h" + +/* + * matrix a[n,m] + */ +void NPdtranspose(int n, int m, double *a, double *at) +{ + size_t i, j, j0, j1; + for (j0 = 0; j0 < n; j0+=BLOCK_DIM) { + j1 = MIN(j0+BLOCK_DIM, n); + for (i = 0; i < m; i++) { + for (j = j0; j < j1; j++) { + at[i*n+j] = a[j*m+i]; + } + } + } +} + +void NPztranspose(int n, int m, double complex *a, double complex *at) +{ + size_t i, j, j0, j1; + for (j0 = 0; j0 < n; j0+=BLOCK_DIM) { + j1 = MIN(j0+BLOCK_DIM, n); + for (i = 0; i < m; i++) { + for (j = j0; j < j1; j++) { + at[i*n+j] = a[j*m+i]; + } + } + } +} + + +void NPdtranspose_021(int *shape, double *a, double *at) +{ +#pragma omp parallel default(none) \ + shared(shape, a, at) +{ + int ic; + size_t nm = shape[1] * shape[2]; +#pragma omp for schedule (static) + for (ic = 0; ic < shape[0]; ic++) { + NPdtranspose(shape[1], shape[2], a+ic*nm, at+ic*nm); + } +} +} + +void NPztranspose_021(int *shape, double complex *a, double complex *at) +{ +#pragma omp parallel default(none) \ + shared(shape, a, at) +{ + int ic; + size_t nm = shape[1] * shape[2]; +#pragma omp for schedule (static) + for (ic = 0; ic < shape[0]; ic++) { + NPztranspose(shape[1], shape[2], a+ic*nm, at+ic*nm); + } +} +} + + +void NPdsymm_sum(int n, double *a, double *out, int hermi) +{ + size_t i, j, j0, j1; + double tmp; + + if (hermi == HERMITIAN || hermi == SYMMETRIC) { + TRIU_LOOP(i, j) { + tmp = a[i*n+j] + a[j*n+i]; + out[i*n+j] = tmp; + out[j*n+i] = tmp; + } + } else { + TRIU_LOOP(i, j) { + tmp = a[i*n+j] - a[j*n+i]; + out[i*n+j] = tmp; + out[j*n+i] =-tmp; + } + } +} + +void NPzhermi_sum(int n, double complex *a, double complex *out, int hermi) +{ + size_t i, j, j0, j1; + double complex tmp; + + if (hermi == HERMITIAN) { + TRIU_LOOP(i, j) { + tmp = a[i*n+j] + conj(a[j*n+i]); + out[i*n+j] = tmp; + out[j*n+i] = conj(tmp); + } + } else if (hermi == SYMMETRIC) { + TRIU_LOOP(i, j) { + tmp = a[i*n+j] + a[j*n+i]; + out[i*n+j] = tmp; + out[j*n+i] = tmp; + } + } else { + TRIU_LOOP(i, j) { + tmp = a[i*n+j] - conj(a[j*n+i]); + out[i*n+j] = tmp; + out[j*n+i] =-conj(tmp); + } + } +} + + +void NPdsymm_021_sum(int *shape, double *a, double *out, int hermi) +{ +#pragma omp parallel default(none) \ + shared(shape, a, out, hermi) +{ + int ic; + size_t nn = shape[1] * shape[1]; +#pragma omp for schedule (static) + for (ic = 0; ic < shape[0]; ic++) { + NPdsymm_sum(shape[1], a+ic*nn, out+ic*nn, hermi); + } +} +} + +void NPzhermi_021_sum(int *shape, double complex *a, double complex *out, int hermi) +{ +#pragma omp parallel default(none) \ + shared(shape, a, out, hermi) +{ + int ic; + size_t nn = shape[1] * shape[1]; +#pragma omp for schedule (static) + for (ic = 0; ic < shape[0]; ic++) { + NPzhermi_sum(shape[1], a+ic*nn, out+ic*nn, hermi); + } +} +} diff --git a/pyscfadlib/pyscfadlib/version.py b/pyscfadlib/pyscfadlib/version.py new file mode 100644 index 00000000..7525d199 --- /dev/null +++ b/pyscfadlib/pyscfadlib/version.py @@ -0,0 +1 @@ +__version__ = '0.1.4' diff --git a/pyscfadlib/pyscfadlib/vhf/CMakeLists.txt b/pyscfadlib/pyscfadlib/vhf/CMakeLists.txt new file mode 100644 index 00000000..b2679d08 --- /dev/null +++ b/pyscfadlib/pyscfadlib/vhf/CMakeLists.txt @@ -0,0 +1,25 @@ +# Copyright 2014-2018 The PySCF Developers. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +add_library(cvhf SHARED + fill_nr_s8.c nr_incore.c nr_direct.c optimizer.c nr_direct_dot.c + time_rev.c r_direct_o1.c rkb_screen.c + r_direct_dot.c rah_direct_dot.c rha_direct_dot.c + hessian_screen.c nr_sgx_direct.c) +add_dependencies(cvhf cgto np_helper) + +set_target_properties(cvhf PROPERTIES + LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}) + +target_link_libraries(cvhf cgto np_helper cintad ${BLAS_LIBRARIES} ${OPENMP_C_PROPERTIES}) diff --git a/pyscfadlib/pyscfadlib/vhf/cvhf.h b/pyscfadlib/pyscfadlib/vhf/cvhf.h new file mode 100644 index 00000000..53623bc1 --- /dev/null +++ b/pyscfadlib/pyscfadlib/vhf/cvhf.h @@ -0,0 +1,26 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include "cint.h" + +#define DM_PLAIN 0 +#define DM_HERMITIAN 1 +#define DM_ANTI 2 + +#include "optimizer.h" + diff --git a/pyscfadlib/pyscfadlib/vhf/fblas.h b/pyscfadlib/pyscfadlib/vhf/fblas.h new file mode 100644 index 00000000..b0db13ff --- /dev/null +++ b/pyscfadlib/pyscfadlib/vhf/fblas.h @@ -0,0 +1,92 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + * + * blas interface and blas-like functions + */ + +#if defined __cplusplus +extern "C" { +#endif +#include + +double dasum_(const int *n, const double *dx, const int *incx); +void dscal_(const int *n, const double *da, double *dx, const int *incx); +void daxpy_(const int *n, const double *da, const double *dx, + const int *incx, double *dy, const int *incy); +double ddot_(const int *n, const double *dx, const int *incx, + const double *dy, const int *incy); +void dcopy_(const int *n, const double *dx, const int *incx, + const double *dy, const int *incy); +void dgemm_(const char*, const char*, + const int*, const int*, const int*, + const double*, const double*, const int*, + const double*, const int*, + const double*, double*, const int*); +void dgemv_(const char*, const int*, const int*, + const double*, const double*, const int*, + const double*, const int*, + const double*, double*, const int*); +void dger_(const int *m, const int *n, + const double *alpha, const double *x, + const int *incx, const double *y, const int *incy, + double *a, const int *lda); +void dsymm_(const char*, const char*, const int*, const int*, + const double*, const double*, const int*, + const double*, const int*, + const double*, double*, const int*); + +void dsyr_(const char *uplo, const int *n, const double *alpha, + const double *x, const int *incx, double *a, const int *lda); +void dsyr2_(const char *uplo, const int *n, const double *alpha, + const double *x, const int *incx, const double *y, const int *incy, + double *a, const int *lda); +void dsyr2k_(const char *uplo, const char *trans, const int *n, const int *k, + const double *alpha, const double *a, const int *lda, + const double *b, const int *ldb, + const double *beta, double *c, const int *ldc); +void dsyrk_(const char *uplo, const char *trans, const int *n, const int *k, + const double *alpha, const double *a, const int *lda, + const double *beta, double *c, const int *ldc); + +void zgerc_(const int *m, const int *n, + const double complex *alpha, const double complex *x, const int *incx, + const double complex *y, const int *incy, + double complex *a, const int *lda); +void zgemv_(const char*, const int*, const int*, + const double complex*, const double complex*, const int*, + const double complex*, const int*, + const double complex*, double complex*, const int*); +void zgemm_(const char*, const char*, + const int*, const int*, const int*, + const double complex*, const double complex*, const int*, + const double complex*, const int*, + const double complex*, double complex*, const int*); + + +void CINTdset0(const int n, double *x); +void CINTdaxpy2v(const int n, const double a, + const double *x, const double *y, double *v); +void CINTdmat_transpose(double *a_t, const double *a, + const int m, const int n); +void CINTzmat_transpose(double complex *a_t, const double complex *a, + const int m, const int n); +void CINTzmat_dagger(double complex *a_c, const double complex *a, + const int m, const int n); + +#if defined __cplusplus +} // end extern "C" +#endif diff --git a/pyscfadlib/pyscfadlib/vhf/fill_nr_s8.c b/pyscfadlib/pyscfadlib/vhf/fill_nr_s8.c new file mode 100644 index 00000000..4a8b1747 --- /dev/null +++ b/pyscfadlib/pyscfadlib/vhf/fill_nr_s8.c @@ -0,0 +1,138 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +//#include +#include "config.h" +#include "cint.h" +#include "cvhf.h" +#include "nr_direct.h" +#include "optimizer.h" +#include "gto/gto.h" + +#define MAX(I,J) ((I) > (J) ? (I) : (J)) + +void int2e_optimizer(CINTOpt **opt, int *atm, int natm, int *bas, int nbas, double *env); +/* + * 8-fold symmetry, k>=l, k>=i>=j, + */ +static void fillnr_s8(int (*intor)(), int (*fprescreen)(), double *eri, + int ish, int jsh, CVHFOpt *vhfopt, IntorEnvs *envs) +{ + const int *atm = envs->atm; + const int *bas = envs->bas; + const double *env = envs->env; + const int natm = envs->natm; + const int nbas = envs->nbas; + const int *ao_loc = envs->ao_loc; + const CINTOpt *cintopt = envs->cintopt; + const int nao = ao_loc[nbas]; + const size_t nao2 = nao * nao; + const int di = ao_loc[ish+1] - ao_loc[ish]; + const int dj = ao_loc[jsh+1] - ao_loc[jsh]; + double *cache = eri + di * dj * nao2; + int dims[4] = {nao, nao, dj, di}; + int ksh, lsh, ij, k, l; + int shls[4]; + double *peri; + + shls[2] = jsh; + shls[3] = ish; + + for (ksh = 0; ksh <= ish; ksh++) { + for (lsh = 0; lsh <= ksh; lsh++) { + shls[0] = lsh; + shls[1] = ksh; + peri = eri + ao_loc[ksh] * nao + ao_loc[lsh]; + if ((*fprescreen)(shls, vhfopt, atm, bas, env)) { + (*intor)(peri, dims, shls, atm, natm, bas, nbas, env, + cintopt, cache); + } else { + for (ij = 0; ij < di*dj; ij++) { + for (k = 0; k < ao_loc[ksh+1]-ao_loc[ksh]; k++) { + for (l = 0; l < ao_loc[lsh+1]-ao_loc[lsh]; l++) { + peri[k*nao+l] = 0; + } } + peri += nao2; + } + } + } } +} + +static void store_ij(int (*intor)(), double *eri, double *buf, int ish, int jsh, + CVHFOpt *vhfopt, IntorEnvs *envs) +{ + const int nbas = envs->nbas; + const int *ao_loc = envs->ao_loc; + const int nao = ao_loc[nbas]; + const size_t nao2 = nao * nao; + const int di = ao_loc[ish+1] - ao_loc[ish]; + const int dj = ao_loc[jsh+1] - ao_loc[jsh]; + int i, j, k, l, i0, j0, kl; + size_t ij0; + double *peri, *pbuf; + + fillnr_s8(intor, vhfopt->fprescreen, buf, ish, jsh, vhfopt, envs); + for (i0 = ao_loc[ish], i = 0; i < di; i++, i0++) { + for (j0 = ao_loc[jsh], j = 0; j < dj; j++, j0++) { + if (i0 >= j0) { + ij0 = i0*(i0+1)/2 + j0; + peri = eri + ij0*(ij0+1)/2; + pbuf = buf + nao2 * (i*dj+j); + for (kl = 0, k = 0; k < i0; k++) { + for (l = 0; l <= k; l++, kl++) { + peri[kl] = pbuf[k*nao+l]; + } } + // k == i0 + for (l = 0; l <= j0; l++, kl++) { + peri[kl] = pbuf[k*nao+l]; + } + } + } } +} + +void GTO2e_cart_or_sph(int (*intor)(), CINTOpt *cintopt, double *eri, int *ao_loc, + int *atm, int natm, int *bas, int nbas, double *env) +{ + const size_t nao = ao_loc[nbas]; + IntorEnvs envs = {natm, nbas, atm, bas, env, NULL, ao_loc, NULL, + cintopt, 1}; + CVHFOpt *vhfopt; + CVHFnr_optimizer(&vhfopt, intor, cintopt, ao_loc, atm, natm, bas, nbas, env); + vhfopt->fprescreen = CVHFnr_schwarz_cond; + int shls_slice[] = {0, nbas}; + const int di = GTOmax_shell_dim(ao_loc, shls_slice, 1); + const size_t cache_size = GTOmax_cache_size(intor, shls_slice, 1, + atm, natm, bas, nbas, env); + +#pragma omp parallel +{ + int i, j, ij; + double *buf = malloc(sizeof(double) * (di*di*nao*nao + cache_size)); +#pragma omp for nowait schedule(dynamic, 2) + for (ij = 0; ij < nbas*(nbas+1)/2; ij++) { + i = (int)(sqrt(2*ij+.25) - .5 + 1e-7); + j = ij - (i*(i+1)/2); + store_ij(intor, eri, buf, i, j, vhfopt, &envs); + } + free(buf); +} + CVHFdel_optimizer(&vhfopt); +} + diff --git a/pyscfadlib/pyscfadlib/vhf/hessian_screen.c b/pyscfadlib/pyscfadlib/vhf/hessian_screen.c new file mode 100644 index 00000000..bc55a1b4 --- /dev/null +++ b/pyscfadlib/pyscfadlib/vhf/hessian_screen.c @@ -0,0 +1,384 @@ +/* Copyright 2014-2019 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +#include +#include +#include +#include "cint.h" +#include "cvhf.h" +#include "optimizer.h" +#include "np_helper/np_helper.h" +#include "gto/gto.h" + +int int2e_sph(); +int int2e_cart(); +int int2e_ipvip1_cart(); +int int2e_spsp1spsp2_cart(); +int int2e_spsp1spsp2_sph(); + +/* + * Gradients screening for grad/rhf.py + */ + +// ijkl,lk->ij +// ijkl,jk->il +// ijkl,kl->ij +// ijkl,jl->ik +int CVHFgrad_jk_prescreen(int *shls, CVHFOpt *opt, + int *atm, int *bas, double *env) +{ + if (opt == NULL) { + return 1; // no screen + } + int i = shls[0]; + int j = shls[1]; + int k = shls[2]; + int l = shls[3]; + int n = opt->nbas; + assert(opt->q_cond); + assert(opt->dm_cond); + assert(i < n); + assert(j < n); + assert(k < n); + assert(l < n); + double *q_cond_kl = opt->q_cond + n * n; + double qijkl = opt->q_cond[i*n+j] * q_cond_kl[k*n+l]; + double dmin = opt->direct_scf_cutoff / qijkl; + return qijkl > opt->direct_scf_cutoff + &&((2*opt->dm_cond[l*n+k] > dmin) + || ( opt->dm_cond[j*n+k] > dmin) + || ( opt->dm_cond[j*n+l] > dmin)); +} + +void CVHFgrad_jk_direct_scf(CVHFOpt *opt, int (*intor)(), CINTOpt *cintopt, + int *ao_loc, int *atm, int natm, + int *bas, int nbas, double *env) +{ + if (opt->q_cond != NULL) { + free(opt->q_cond); + } + nbas = opt->nbas; + size_t Nbas = nbas; + size_t Nbas2 = Nbas * Nbas; + // First n*n elements for derivatives, the next n*n elements for regular ERIs + opt->q_cond = (double *)malloc(sizeof(double) * Nbas2*2); + + if (ao_loc[nbas] == CINTtot_cgto_spheric(bas, nbas)) { + CVHFset_int2e_q_cond(int2e_sph, NULL, opt->q_cond+Nbas2, ao_loc, + atm, natm, bas, nbas, env); + } else { + CVHFset_int2e_q_cond(int2e_cart, NULL, opt->q_cond+Nbas2, ao_loc, + atm, natm, bas, nbas, env); + } + + int shls_slice[] = {0, nbas}; + const int cache_size = GTOmax_cache_size(intor, shls_slice, 1, + atm, natm, bas, nbas, env); +#pragma omp parallel \ + shared(opt, intor, cintopt, ao_loc, atm, natm, bas, nbas, env) +{ + double qtmp; + int i, j, iijj, di, dj, ish, jsh; + size_t ij; + int shls[4]; + double *cache = malloc(sizeof(double) * cache_size); + di = 0; + for (ish = 0; ish < nbas; ish++) { + dj = ao_loc[ish+1] - ao_loc[ish]; + di = MAX(di, dj); + } + double *buf = malloc(sizeof(double) * 9 * di*di*di*di); + double *bufx = buf; + double *bufy, *bufz; +#pragma omp for schedule(dynamic, 4) + for (ij = 0; ij < Nbas2; ij++) { + ish = ij / Nbas; + jsh = ij - ish * Nbas; + di = ao_loc[ish+1] - ao_loc[ish]; + dj = ao_loc[jsh+1] - ao_loc[jsh]; + shls[0] = ish; + shls[1] = jsh; + shls[2] = ish; + shls[3] = jsh; + qtmp = 1e-100; + bufy = buf + 4*(di*dj*di*dj); + bufz = buf + 8*(di*dj*di*dj); + if (0 != (*intor)(buf, NULL, shls, atm, natm, bas, nbas, env, + cintopt, cache)) { + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + iijj = i+di*j+di*dj*i+di*dj*di*j; + qtmp = MAX(qtmp, fabs(bufx[iijj])); + qtmp = MAX(qtmp, fabs(bufy[iijj])); + qtmp = MAX(qtmp, fabs(bufz[iijj])); + } } + qtmp = sqrt(qtmp); + } + opt->q_cond[ish*nbas+jsh] = qtmp; + } + free(buf); + free(cache); +} +} + +void CVHFgrad_jk_direct_scf_dm(CVHFOpt *opt, double *dm, int nset, int *ao_loc, + int *atm, int natm, int *bas, int nbas, double *env) +{ + if (opt->dm_cond != NULL) { + free(opt->dm_cond); + } + nbas = opt->nbas; + size_t Nbas = nbas; + opt->dm_cond = (double *)malloc(sizeof(double) * nbas*nbas); + NPdset0(opt->dm_cond, Nbas * Nbas); + + const size_t nao = ao_loc[nbas]; + double dmax; + int i, j, ish, jsh; + int iset; + double *pdm; + for (ish = 0; ish < nbas; ish++) { + for (jsh = 0; jsh < nbas; jsh++) { + dmax = 0; + for (iset = 0; iset < nset; iset++) { + pdm = dm + nao*nao*iset; + for (i = ao_loc[ish]; i < ao_loc[ish+1]; i++) { + for (j = ao_loc[jsh]; j < ao_loc[jsh+1]; j++) { + dmax = MAX(dmax, fabs(pdm[i*nao+j])); + } } + } + opt->dm_cond[ish*Nbas+jsh] = dmax; + } } +} + + +/* + * Hessian screening for hessian/rhf.py + */ + +// ijkl,ji->kl +// ijkl,li->kj +// ijkl,lj->ki +int CVHFip1ip2_prescreen(int *shls, CVHFOpt *opt, + int *atm, int *bas, double *env) +{ + if (opt == NULL) { + return 1; // no screen + } + int i = shls[0]; + int j = shls[1]; + int k = shls[2]; + int l = shls[3]; + int n = opt->nbas; + assert(opt->q_cond); + assert(opt->dm_cond); + assert(i < n); + assert(j < n); + assert(k < n); + assert(l < n); + double qijkl = opt->q_cond[i*n+j] * opt->q_cond[k*n+l]; + double dmin = opt->direct_scf_cutoff / qijkl; + return qijkl > opt->direct_scf_cutoff + &&((opt->dm_cond[j*n+i] > dmin) + || (opt->dm_cond[l*n+i] > dmin) + || (opt->dm_cond[l*n+j] > dmin)); +} + + +void CVHFip1ip2_direct_scf(CVHFOpt *opt, int (*intor)(), CINTOpt *cintopt, + int *ao_loc, int *atm, int natm, + int *bas, int nbas, double *env) +{ + CVHFgrad_jk_direct_scf(opt, intor, cintopt, ao_loc, atm, natm, bas, nbas, env); +} + +void CVHFip1ip2_direct_scf_dm(CVHFOpt *opt, double *dm, int nset, int *ao_loc, + int *atm, int natm, int *bas, int nbas, double *env) +{ + CVHFgrad_jk_direct_scf_dm(opt, dm, nset, ao_loc, atm, natm, bas, nbas, env); +} + + +// ijkl,lk->ij +// ijkl,jk->il +// ijkl,kl->ij +// ijkl,jl->ik +int CVHFipip1_prescreen(int *shls, CVHFOpt *opt, + int *atm, int *bas, double *env) +{ + if (opt == NULL) { + return 1; // no screen + } + int i = shls[0]; + int j = shls[1]; + int k = shls[2]; + int l = shls[3]; + int n = opt->nbas; + assert(opt->q_cond); + assert(opt->dm_cond); + assert(i < n); + assert(j < n); + assert(k < n); + assert(l < n); + double *q_cond_kl = opt->q_cond + n * n; + double qijkl = opt->q_cond[i*n+j] * q_cond_kl[k*n+l]; + double dmin = opt->direct_scf_cutoff / qijkl; + return qijkl > opt->direct_scf_cutoff + &&((2*opt->dm_cond[l*n+k] > dmin) + || ( opt->dm_cond[j*n+k] > dmin) + || ( opt->dm_cond[j*n+l] > dmin)); +} + + +void CVHFipip1_direct_scf(CVHFOpt *opt, int (*intor)(), CINTOpt *cintopt, + int *ao_loc, int *atm, int natm, + int *bas, int nbas, double *env) +{ + if (opt->q_cond != NULL) { + free(opt->q_cond); + } + nbas = opt->nbas; + size_t Nbas = nbas; + size_t Nbas2 = Nbas * Nbas; + // First n*n elements for derivatives, the next n*n elements for regular ERIs + opt->q_cond = (double *)malloc(sizeof(double) * nbas*nbas*2); + + if (ao_loc[nbas] == CINTtot_cgto_spheric(bas, nbas)) { + CVHFset_int2e_q_cond(int2e_sph, NULL, opt->q_cond+Nbas2, ao_loc, + atm, natm, bas, nbas, env); + } else { + CVHFset_int2e_q_cond(int2e_cart, NULL, opt->q_cond+Nbas2, ao_loc, + atm, natm, bas, nbas, env); + } + + int shls_slice[] = {0, nbas}; + const int cache_size = GTOmax_cache_size(intor, shls_slice, 1, + atm, natm, bas, nbas, env); +#pragma omp parallel \ + shared(opt, intor, cintopt, ao_loc, atm, natm, bas, nbas, env) +{ + double qtmp; + int i, j, iijj, di, dj, ish, jsh; + size_t ij; + int shls[4]; + double *cache = malloc(sizeof(double) * cache_size); + di = 0; + for (ish = 0; ish < nbas; ish++) { + dj = ao_loc[ish+1] - ao_loc[ish]; + di = MAX(di, dj); + } + double *buf = malloc(sizeof(double) * 256 * di*di*di*di); + double *bufxx = buf; + double *bufxy, *bufxz, *bufyx, *bufyy, *bufyz, *bufzx, *bufzy, *bufzz; +#pragma omp for schedule(dynamic, 4) + for (ij = 0; ij < Nbas2; ij++) { + ish = ij / Nbas; + jsh = ij - ish * Nbas; + di = ao_loc[ish+1] - ao_loc[ish]; + dj = ao_loc[jsh+1] - ao_loc[jsh]; + shls[0] = ish; + shls[1] = jsh; + shls[2] = ish; + shls[3] = jsh; + qtmp = 1e-100; + iijj = di * dj * di * dj; + bufxy = buf + ( 1*16+ 1)*iijj; + bufxz = buf + ( 2*16+ 2)*iijj; + bufyx = buf + ( 4*16+ 4)*iijj; + bufyy = buf + ( 5*16+ 5)*iijj; + bufyz = buf + ( 6*16+ 6)*iijj; + bufzx = buf + ( 8*16+ 8)*iijj; + bufzy = buf + ( 9*16+ 9)*iijj; + bufzz = buf + (10*16+10)*iijj; + if (0 != (*intor)(buf, NULL, shls, atm, natm, bas, nbas, env, + cintopt, cache)) { + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + iijj = i+di*j+di*dj*i+di*dj*di*j; + qtmp = MAX(qtmp, fabs(bufxx[iijj])); + qtmp = MAX(qtmp, fabs(bufxy[iijj])); + qtmp = MAX(qtmp, fabs(bufxz[iijj])); + qtmp = MAX(qtmp, fabs(bufyx[iijj])); + qtmp = MAX(qtmp, fabs(bufyy[iijj])); + qtmp = MAX(qtmp, fabs(bufyz[iijj])); + qtmp = MAX(qtmp, fabs(bufzx[iijj])); + qtmp = MAX(qtmp, fabs(bufzy[iijj])); + qtmp = MAX(qtmp, fabs(bufzz[iijj])); + } } + qtmp = sqrt(qtmp); + } + opt->q_cond[ish*nbas+jsh] = qtmp; + } + free(buf); + free(cache); +} +} + +void CVHFipip1_direct_scf_dm(CVHFOpt *opt, double *dm, int nset, int *ao_loc, + int *atm, int natm, int *bas, int nbas, double *env) +{ + CVHFgrad_jk_direct_scf_dm(opt, dm, nset, ao_loc, atm, natm, bas, nbas, env); +} + + +// ijkl,lk->ij +// ijkl,li->kj +// ijkl,kl->ij +// ijkl,ki->lj +int CVHFipvip1_prescreen(int *shls, CVHFOpt *opt, + int *atm, int *bas, double *env) +{ + if (opt == NULL) { + return 1; // no screen + } + int i = shls[0]; + int j = shls[1]; + int k = shls[2]; + int l = shls[3]; + int n = opt->nbas; + assert(opt->q_cond); + assert(opt->dm_cond); + assert(i < n); + assert(j < n); + assert(k < n); + assert(l < n); + double *q_cond_kl = opt->q_cond + n * n; + double qijkl = opt->q_cond[i*n+j] * q_cond_kl[k*n+l]; + double dmin = opt->direct_scf_cutoff / qijkl; + return qijkl > opt->direct_scf_cutoff + &&((2*opt->dm_cond[l*n+k] > dmin) + || ( opt->dm_cond[l*n+i] > dmin) + || ( opt->dm_cond[k*n+i] > dmin)); +} + + +void CVHFipvip1_direct_scf(CVHFOpt *opt, int (*intor)(), CINTOpt *cintopt, + int *ao_loc, int *atm, int natm, + int *bas, int nbas, double *env) +{ + CVHFipip1_direct_scf(opt, intor, cintopt, ao_loc, atm, natm, bas, nbas, env); +} + +void CVHFipvip1_direct_scf_dm(CVHFOpt *opt, double *dm, int nset, int *ao_loc, + int *atm, int natm, int *bas, int nbas, double *env) +{ + CVHFgrad_jk_direct_scf_dm(opt, dm, nset, ao_loc, atm, natm, bas, nbas, env); +} + diff --git a/pyscfadlib/pyscfadlib/vhf/nr_direct.c b/pyscfadlib/pyscfadlib/vhf/nr_direct.c new file mode 100644 index 00000000..81fd6891 --- /dev/null +++ b/pyscfadlib/pyscfadlib/vhf/nr_direct.c @@ -0,0 +1,582 @@ +/* Copyright 2014-2022 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +#include +//#include +#include "config.h" +#include "cint.h" +#include "optimizer.h" +#include "nr_direct.h" +#include "np_helper/np_helper.h" +#include "gto/gto.h" + +#define DECLARE_ALL \ + const int *atm = envs->atm; \ + const int *bas = envs->bas; \ + const double *env = envs->env; \ + const int natm = envs->natm; \ + const int nbas = envs->nbas; \ + const int *ao_loc = envs->ao_loc; \ + const int *shls_slice = envs->shls_slice; \ + const CINTOpt *cintopt = envs->cintopt; \ + const int ioff = ao_loc[shls_slice[0]]; \ + const int joff = ao_loc[shls_slice[2]]; \ + const int koff = ao_loc[shls_slice[4]]; \ + const int loff = ao_loc[shls_slice[6]]; \ + const int ish0 = ishls[0]; \ + const int ish1 = ishls[1]; \ + const int jsh0 = jshls[0]; \ + const int jsh1 = jshls[1]; \ + const int ksh0 = kshls[0]; \ + const int ksh1 = kshls[1]; \ + const int lsh0 = lshls[0]; \ + const int lsh1 = lshls[1]; \ + int shls[4]; \ + void (*pf)(double *eri, double *dm, JKArray *vjk, int *shls, \ + int i0, int i1, int j0, int j1, \ + int k0, int k1, int l0, int l1); \ + int (*fprescreen)(); \ + int notempty; \ + if (vhfopt != NULL) { \ + fprescreen = vhfopt->fprescreen; \ + } else { \ + fprescreen = CVHFnoscreen; \ + } \ + int ish, jsh, ksh, lsh, i0, j0, k0, l0, i1, j1, k1, l1, idm; + +#define INTOR_AND_CONTRACT \ + shls[0] = ish; \ + shls[1] = jsh; \ + shls[2] = ksh; \ + shls[3] = lsh; \ + if (vhfopt != NULL) { \ + notempty = (*fprescreen)(shls, vhfopt, atm, bas, env) && \ + (*intor)(buf, NULL, shls, atm, natm, bas, nbas, env, \ + cintopt, cache); \ + } else { \ + notempty = (*intor)(buf, NULL, shls, atm, natm, bas, nbas, env, \ + cintopt, cache); \ + } \ + if (notempty) { \ + i0 = ao_loc[ish] - ioff; \ + j0 = ao_loc[jsh] - joff; \ + k0 = ao_loc[ksh] - koff; \ + l0 = ao_loc[lsh] - loff; \ + i1 = ao_loc[ish+1] - ioff; \ + j1 = ao_loc[jsh+1] - joff; \ + k1 = ao_loc[ksh+1] - koff; \ + l1 = ao_loc[lsh+1] - loff; \ + for (idm = 0; idm < n_dm; idm++) { \ + pf = jkop[idm]->contract; \ + (*pf)(buf, dms[idm], vjk[idm], shls, \ + i0, i1, j0, j1, k0, k1, l0, l1); \ + } \ + } + +/* + * for given ksh, lsh, loop all ish, jsh + */ +void CVHFdot_nrs1(int (*intor)(), JKOperator **jkop, JKArray **vjk, + double **dms, double *buf, double *cache, int n_dm, + int *ishls, int *jshls, int *kshls, int *lshls, + CVHFOpt *vhfopt, IntorEnvs *envs) +{ + DECLARE_ALL; + + for (ish = ish0; ish < ish1; ish++) { + for (jsh = jsh0; jsh < jsh1; jsh++) { + for (ksh = ksh0; ksh < ksh1; ksh++) { + for (lsh = lsh0; lsh < lsh1; lsh++) { + INTOR_AND_CONTRACT; + } } } } +} + +void CVHFdot_nrs2ij(int (*intor)(), JKOperator **jkop, JKArray **vjk, + double **dms, double *buf, double *cache, int n_dm, + int *ishls, int *jshls, int *kshls, int *lshls, + CVHFOpt *vhfopt, IntorEnvs *envs) +{ + if (ishls[0] > jshls[0]) { + return CVHFdot_nrs1(intor, jkop, vjk, dms, buf, cache, n_dm, + ishls, jshls, kshls, lshls, vhfopt, envs); + } else if (ishls[0] == jshls[0]) { + + DECLARE_ALL; + + for (ish = ish0; ish < ish1; ish++) { + for (jsh = jsh0; jsh <= ish; jsh++) { + for (ksh = ksh0; ksh < ksh1; ksh++) { + for (lsh = lsh0; lsh < lsh1; lsh++) { + INTOR_AND_CONTRACT; + } } } } + } +} + +void CVHFdot_nrs2kl(int (*intor)(), JKOperator **jkop, JKArray **vjk, + double **dms, double *buf, double *cache, int n_dm, + int *ishls, int *jshls, int *kshls, int *lshls, + CVHFOpt *vhfopt, IntorEnvs *envs) +{ + if (kshls[0] > lshls[0]) { + return CVHFdot_nrs1(intor, jkop, vjk, dms, buf, cache, n_dm, + ishls, jshls, kshls, lshls, vhfopt, envs); + } else if (kshls[0] == lshls[0]) { + assert(kshls[1] == lshls[1]); + + DECLARE_ALL; + + for (ish = ish0; ish < ish1; ish++) { + for (jsh = jsh0; jsh < jsh1; jsh++) { + for (ksh = ksh0; ksh < ksh1; ksh++) { + for (lsh = lsh0; lsh <= ksh; lsh++) { + INTOR_AND_CONTRACT; + } } } } + } +} + +void CVHFdot_nrs4(int (*intor)(), JKOperator **jkop, JKArray **vjk, + double **dms, double *buf, double *cache, int n_dm, + int *ishls, int *jshls, int *kshls, int *lshls, + CVHFOpt *vhfopt, IntorEnvs *envs) +{ + if (ishls[0] > jshls[0]) { + return CVHFdot_nrs2kl(intor, jkop, vjk, dms, buf, cache, n_dm, + ishls, jshls, kshls, lshls, vhfopt, envs); + } else if (ishls[1] <= jshls[0]) { + return; + } else if (kshls[0] > lshls[0]) { // ishls == jshls + return CVHFdot_nrs2ij(intor, jkop, vjk, dms, buf, cache, n_dm, + ishls, jshls, kshls, lshls, vhfopt, envs); + } else if (kshls[0] == lshls[0]) { // ishls == jshls + assert(kshls[1] == lshls[1]); + + DECLARE_ALL; + + for (ish = ish0; ish < ish1; ish++) { + for (jsh = jsh0; jsh <= ish; jsh++) { + for (ksh = ksh0; ksh < ksh1; ksh++) { + for (lsh = lsh0; lsh <= ksh; lsh++) { + INTOR_AND_CONTRACT; + } } } } + } +} + +void CVHFdot_nrs8(int (*intor)(), JKOperator **jkop, JKArray **vjk, + double **dms, double *buf, double *cache, int n_dm, + int *ishls, int *jshls, int *kshls, int *lshls, + CVHFOpt *vhfopt, IntorEnvs *envs) +{ + if (vhfopt != NULL) { + if (vhfopt->fprescreen == &CVHFnrs8_prescreen) { + if (!CVHFnrs8_prescreen_block(vhfopt, ishls, jshls, kshls, lshls)) { + return; + } + } else if (vhfopt->fprescreen == &CVHFnrs8_vj_prescreen) { + if (!CVHFnrs8_vj_prescreen_block(vhfopt, ishls, jshls, kshls, lshls)) { + return; + } + } else if (vhfopt->fprescreen == &CVHFnrs8_vk_prescreen) { + if (!CVHFnrs8_vk_prescreen_block(vhfopt, ishls, jshls, kshls, lshls)) { + return; + } + } + } + + if (ishls[0] > kshls[0]) { + return CVHFdot_nrs4(intor, jkop, vjk, dms, buf, cache, n_dm, + ishls, jshls, kshls, lshls, vhfopt, envs); + } else if (ishls[0] < kshls[0]) { + return; + } else if ((ishls[1] <= jshls[0]) || (kshls[1] <= lshls[0])) { + assert(ishls[1] == kshls[1]); + return; + } + // else i == k && i >= j && k >= l + assert(ishls[1] == kshls[1]); + + DECLARE_ALL; + + for (ish = ish0; ish < ish1; ish++) { + for (jsh = jsh0; jsh < MIN(jsh1, ish+1); jsh++) { + for (ksh = ksh0; ksh <= ish; ksh++) { + for (lsh = lsh0; lsh < MIN(lsh1, ksh+1); lsh++) { +/* when ksh==ish, (lshj). + * These integrals are calculated in the next (ish,jsh) pair. To show + * that, we just need to prove that every elements in shell^4 appeared + * only once in fjk_s8. */ + if ((ksh == ish) && (lsh > jsh)) { + break; + } + INTOR_AND_CONTRACT; + } } } } +} + +JKArray *CVHFallocate_JKArray(JKOperator *op, int *shls_slice, int *ao_loc, int ncomp) +{ + JKArray *jkarray = malloc(sizeof(JKArray)); + int ibra = op->ibra_shl0; + int iket = op->iket_shl0; + int obra = op->obra_shl0; + int oket = op->oket_shl0; + int v_bra_sh0 = shls_slice[obra]; + int v_ket_sh0 = shls_slice[oket]; + int v_bra_sh1 = shls_slice[obra+1]; + int v_ket_sh1 = shls_slice[oket+1]; + jkarray->v_ket_nsh = shls_slice[oket+1] - shls_slice[oket]; + jkarray->dm_dims[0] = ao_loc[shls_slice[ibra+1]] - ao_loc[shls_slice[ibra]]; + jkarray->dm_dims[1] = ao_loc[shls_slice[iket+1]] - ao_loc[shls_slice[iket]]; + int v_rows = ao_loc[v_bra_sh1] - ao_loc[v_bra_sh0]; + int v_cols = ao_loc[v_ket_sh1] - ao_loc[v_ket_sh0]; + jkarray->offset0_outptr = v_bra_sh0 * jkarray->v_ket_nsh + v_ket_sh0; + int outptr_size =((shls_slice[obra+1] - shls_slice[obra]) * + (shls_slice[oket+1] - shls_slice[oket])); + int *outptr = malloc(sizeof(int) * outptr_size); + jkarray->outptr = outptr; + int i; + for (i = 0; i < outptr_size; i++) { + outptr[i] = NOVALUE; + } + jkarray->stack_size = 0; + int data_size = v_rows * v_cols * ncomp; + jkarray->data = malloc(sizeof(double) * data_size); + jkarray->ncomp = ncomp; + return jkarray; +} + +void CVHFdeallocate_JKArray(JKArray *jkarray) +{ + free(jkarray->outptr); + free(jkarray->data); + free(jkarray); +} + +double *CVHFallocate_and_reorder_dm(JKOperator *op, double *dm, + int *shls_slice, int *ao_loc) +{ + int ibra = op->ibra_shl0; + int iket = op->iket_shl0; + int ish0 = shls_slice[ibra]; + int jsh0 = shls_slice[iket]; + int ish1 = shls_slice[ibra+1]; + int jsh1 = shls_slice[iket+1]; + int ioff = ao_loc[ish0]; + int joff = ao_loc[jsh0]; + int nrow = ao_loc[ish1] - ioff; + int ncol = ao_loc[jsh1] - joff; + double *out = malloc(sizeof(double) * nrow*ncol); + int ish, jsh, i0, i1, j0, j1, i, j, ij; + + ij = 0; + for (ish = ish0; ish < ish1; ish++) { + for (jsh = jsh0; jsh < jsh1; jsh++) { + i0 = ao_loc[ish ] - ioff; + i1 = ao_loc[ish+1] - ioff; + j0 = ao_loc[jsh ] - joff; + j1 = ao_loc[jsh+1] - joff; + for (i = i0; i < i1; i++) { + for (j = j0; j < j1; j++, ij++) { + out[ij] = dm[i*ncol+j]; + } } + } } + return out; +} + +void CVHFzero_out_vjk(double *vjk, JKOperator *op, + int *shls_slice, int *ao_loc, int ncomp) +{ + int obra = op->obra_shl0; + int oket = op->oket_shl0; + int ish0 = shls_slice[obra]; + int jsh0 = shls_slice[oket]; + int ish1 = shls_slice[obra+1]; + int jsh1 = shls_slice[oket+1]; + int nbra = ao_loc[ish1] - ao_loc[ish0]; + int nket = ao_loc[jsh1] - ao_loc[jsh0]; + NPdset0(vjk, ((size_t)nbra) * nket * ncomp); +} + +void CVHFassemble_v(double *vjk, JKOperator *op, JKArray *jkarray, + int *shls_slice, int *ao_loc) +{ + int obra = op->obra_shl0; + int oket = op->oket_shl0; + int ish0 = shls_slice[obra]; + int jsh0 = shls_slice[oket]; + int ish1 = shls_slice[obra+1]; + int jsh1 = shls_slice[oket+1]; + int njsh = jsh1 - jsh0; + size_t vrow = ao_loc[ish1] - ao_loc[ish0]; + size_t vcol = ao_loc[jsh1] - ao_loc[jsh0]; + int ncomp = jkarray->ncomp; + int voffset = ao_loc[ish0] * vcol + ao_loc[jsh0]; + int i, j, ish, jsh; + int di, dj, icomp; + int optr; + double *data, *pv; + + for (ish = ish0; ish < ish1; ish++) { + for (jsh = jsh0; jsh < jsh1; jsh++) { + optr = jkarray->outptr[ish*njsh+jsh-jkarray->offset0_outptr]; + if (optr != NOVALUE) { + di = ao_loc[ish+1] - ao_loc[ish]; + dj = ao_loc[jsh+1] - ao_loc[jsh]; + data = jkarray->data + optr; + pv = vjk + ao_loc[ish]*vcol+ao_loc[jsh] - voffset; + for (icomp = 0; icomp < ncomp; icomp++) { + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + pv[i*vcol+j] += data[i*dj+j]; + } } + pv += vrow * vcol; + data += di * dj; + } + } + } } +} + +// Divide shls into subblocks with roughly equal number of AOs in each block +int CVHFshls_block_partition(int *block_loc, int *shls_slice, int *ao_loc, + int block_size) +{ + int ish0 = shls_slice[0]; + int ish1 = shls_slice[1]; + int count = 0; + if (ish0 >= ish1) { + return count; + } + + int ao_loc_last = ao_loc[ish0]; + int ish; + + count = 1; + block_loc[0] = ish0; + for (ish = ish0 + 1; ish < ish1; ish++) { + if (ao_loc[ish+1] - ao_loc_last > block_size) { + block_loc[count] = ish; + count++; + ao_loc_last = ao_loc[ish]; + } + } + block_loc[count] = ish1; + return count; +} + +// Divide shells into subblocks with two cutting points specified in shls_lim. +// The cutting points should not be placed inside any subblocks. +static int _shls_block_partition_lim(int *block_loc, int *shls_slice, + int *shls_lim, int *ao_loc) +{ + int lim0 = shls_lim[0]; + int lim1 = shls_lim[1]; + if (lim0 >= lim1) { + return CVHFshls_block_partition(block_loc, shls_slice, ao_loc, AO_BLOCK_SIZE); + } + + int ish0 = shls_slice[0]; + int ish1 = shls_slice[1]; + int seg[4] = {ish0, lim0, lim1, ish1}; + int count = CVHFshls_block_partition(block_loc, seg, ao_loc, AO_BLOCK_SIZE); + count += CVHFshls_block_partition(block_loc+count, seg+1, ao_loc, AO_BLOCK_SIZE); + count += CVHFshls_block_partition(block_loc+count, seg+2, ao_loc, AO_BLOCK_SIZE); + return count; +} + + +/* + * drv loop over ij, generate eris of kl for given ij, call fjk to + * calculate vj, vk. + * + * n_dm is the number of dms for one [array(ij|kl)], it is also the size of dms and vjk + * ncomp is the number of components that produced by intor + * shls_slice = [ishstart, ishend, jshstart, jshend, kshstart, kshend, lshstart, lshend] + * + * ao_loc[i+1] = ao_loc[i] + CINTcgto_spheric(i, bas) for i = 0..nbas + * + * Return [(ptr[ncomp,nao,nao] in C-contiguous) for ptr in vjk] + */ +void CVHFnr_direct_drv(int (*intor)(), void (*fdot)(), JKOperator **jkop, + double **dms, double **vjk, int n_dm, int ncomp, + int *shls_slice, int *ao_loc, + CINTOpt *cintopt, CVHFOpt *vhfopt, + int *atm, int natm, int *bas, int nbas, double *env) +{ + IntorEnvs envs = {natm, nbas, atm, bas, env, shls_slice, ao_loc, NULL, + cintopt, ncomp}; + int idm; + double *tile_dms[n_dm]; + for (idm = 0; idm < n_dm; idm++) { + CVHFzero_out_vjk(vjk[idm], jkop[idm], shls_slice, ao_loc, ncomp); + tile_dms[idm] = CVHFallocate_and_reorder_dm(jkop[idm], dms[idm], + shls_slice, ao_loc); + } + + size_t di = GTOmax_shell_dim(ao_loc, shls_slice, 4); + size_t cache_size = GTOmax_cache_size(intor, shls_slice, 4, + atm, natm, bas, nbas, env); + int ish0 = shls_slice[0]; + int ish1 = shls_slice[1]; + int jsh0 = shls_slice[2]; + int jsh1 = shls_slice[3]; + int ksh0 = shls_slice[4]; + int ksh1 = shls_slice[5]; + int lsh0 = shls_slice[6]; + int lsh1 = shls_slice[7]; + int nish = ish1 - ish0; + int njsh = jsh1 - jsh0; + int nksh = ksh1 - ksh0; + int nlsh = lsh1 - lsh0; + int *block_iloc = malloc(sizeof(int) * (nish + njsh + nksh + nlsh + 4)); + int *block_jloc = block_iloc + nish + 1; + int *block_kloc = block_jloc + njsh + 1; + int *block_lloc = block_kloc + nksh + 1; + size_t nblock_i = CVHFshls_block_partition(block_iloc, shls_slice+0, ao_loc, AO_BLOCK_SIZE); + size_t nblock_j = CVHFshls_block_partition(block_jloc, shls_slice+2, ao_loc, AO_BLOCK_SIZE); + size_t nblock_k = CVHFshls_block_partition(block_kloc, shls_slice+4, ao_loc, AO_BLOCK_SIZE); + size_t nblock_l = CVHFshls_block_partition(block_lloc, shls_slice+6, ao_loc, AO_BLOCK_SIZE); + size_t nblock_kl = nblock_k * nblock_l; + size_t nblock_jkl = nblock_j * nblock_kl; + +#pragma omp parallel +{ + size_t i, j, k, l, r, blk_id; + JKArray *v_priv[n_dm]; + for (i = 0; i < n_dm; i++) { + v_priv[i] = CVHFallocate_JKArray(jkop[i], shls_slice, ao_loc, ncomp); + } + double *buf = malloc(sizeof(double) * (di*di*di*di*ncomp + di*di*2 + cache_size)); + double *cache = buf + di*di*di*di*ncomp; +#pragma omp for nowait schedule(dynamic, 1) + for (blk_id = 0; blk_id < nblock_jkl; blk_id++) { + r = blk_id; + j = r / nblock_kl ; r = r % nblock_kl; + k = r / nblock_l ; r = r % nblock_l; + l = r; + for (i = 0; i < nblock_i; i++) { + (*fdot)(intor, jkop, v_priv, tile_dms, buf, cache, n_dm, + block_iloc+i, block_jloc+j, block_kloc+k, block_lloc+l, + vhfopt, &envs); + } + } +#pragma omp critical + { + for (i = 0; i < n_dm; i++) { + CVHFassemble_v(vjk[i], jkop[i], v_priv[i], shls_slice, ao_loc); + CVHFdeallocate_JKArray(v_priv[i]); + } + } + free(buf); +} + for (idm = 0; idm < n_dm; idm++) { + free(tile_dms[idm]); + } + free(block_iloc); +} + +/* + * This driver is analogous to CVHFnr_direct_drv . It is to calculate vj, vk + * excluding the eri block [ix0:ix1,jx0:jx1,kx0:kx1,lx0:lx1]. + * The boundary ix, jx, kx, lx are provided by shls_slice[8:16] + */ +void CVHFnr_direct_ex_drv(int (*intor)(), void (*fdot)(), JKOperator **jkop, + double **dms, double **vjk, int n_dm, int ncomp, + int *shls_slice, int *ao_loc, + CINTOpt *cintopt, CVHFOpt *vhfopt, + int *atm, int natm, int *bas, int nbas, double *env) +{ + IntorEnvs envs = {natm, nbas, atm, bas, env, shls_slice, ao_loc, NULL, + cintopt, ncomp}; + int idm; + double *tile_dms[n_dm]; + for (idm = 0; idm < n_dm; idm++) { + CVHFzero_out_vjk(vjk[idm], jkop[idm], shls_slice, ao_loc, ncomp); + tile_dms[idm] = CVHFallocate_and_reorder_dm(jkop[idm], dms[idm], + shls_slice, ao_loc); + } + + size_t di = GTOmax_shell_dim(ao_loc, shls_slice, 4); + size_t cache_size = GTOmax_cache_size(intor, shls_slice, 4, + atm, natm, bas, nbas, env); + int ish0 = shls_slice[0]; + int ish1 = shls_slice[1]; + int jsh0 = shls_slice[2]; + int jsh1 = shls_slice[3]; + int ksh0 = shls_slice[4]; + int ksh1 = shls_slice[5]; + int lsh0 = shls_slice[6]; + int lsh1 = shls_slice[7]; + int nish = ish1 - ish0; + int njsh = jsh1 - jsh0; + int nksh = ksh1 - ksh0; + int nlsh = lsh1 - lsh0; + int *shls_excludes = shls_slice + 8; + int *block_iloc = malloc(sizeof(int) * (nish + njsh + nksh + nlsh + 4)); + int *block_jloc = block_iloc + nish + 1; + int *block_kloc = block_jloc + njsh + 1; + int *block_lloc = block_kloc + nksh + 1; + size_t nblock_i = _shls_block_partition_lim(block_iloc, shls_slice+0, shls_excludes+0, ao_loc); + size_t nblock_j = _shls_block_partition_lim(block_jloc, shls_slice+2, shls_excludes+2, ao_loc); + size_t nblock_k = _shls_block_partition_lim(block_kloc, shls_slice+4, shls_excludes+4, ao_loc); + size_t nblock_l = _shls_block_partition_lim(block_lloc, shls_slice+6, shls_excludes+6, ao_loc); + size_t nblock_kl = nblock_k * nblock_l; + size_t nblock_jkl = nblock_j * nblock_kl; + +#pragma omp parallel +{ + size_t i, j, k, l, r, blk_id; + JKArray *v_priv[n_dm]; + for (i = 0; i < n_dm; i++) { + v_priv[i] = CVHFallocate_JKArray(jkop[i], shls_slice, ao_loc, ncomp); + } + double *buf = malloc(sizeof(double) * (di*di*di*di*ncomp + di*di*2 + cache_size)); + double *cache = buf + di*di*di*di*ncomp; +#pragma omp for nowait schedule(dynamic, 1) + for (blk_id = 0; blk_id < nblock_jkl; blk_id++) { + r = blk_id; + j = r / nblock_kl ; r = r % nblock_kl; + k = r / nblock_l ; r = r % nblock_l; + l = r; + for (i = 0; i < nblock_i; i++) { + // Skip integrals in the segment [ix0:ix1,jx0:jx1,kx0:kx1,lx0:lx1] for + // ix0, ix1, jx0, jx1, kx0, kx1, lx0, lx1 = shls_excludes + if (shls_excludes[0] <= block_iloc[i] && block_iloc[i] < shls_excludes[1] && + shls_excludes[2] <= block_jloc[j] && block_jloc[j] < shls_excludes[3] && + shls_excludes[4] <= block_kloc[k] && block_kloc[k] < shls_excludes[5] && + shls_excludes[6] <= block_lloc[l] && block_lloc[l] < shls_excludes[7]) { + continue; + } + (*fdot)(intor, jkop, v_priv, tile_dms, buf, cache, n_dm, + block_iloc+i, block_jloc+j, block_kloc+k, block_lloc+l, + vhfopt, &envs); + } + } +#pragma omp critical + { + for (i = 0; i < n_dm; i++) { + CVHFassemble_v(vjk[i], jkop[i], v_priv[i], shls_slice, ao_loc); + CVHFdeallocate_JKArray(v_priv[i]); + } + } + free(buf); +} + for (idm = 0; idm < n_dm; idm++) { + free(tile_dms[idm]); + } + free(block_iloc); +} diff --git a/pyscfadlib/pyscfadlib/vhf/nr_direct.h b/pyscfadlib/pyscfadlib/vhf/nr_direct.h new file mode 100644 index 00000000..3a119a11 --- /dev/null +++ b/pyscfadlib/pyscfadlib/vhf/nr_direct.h @@ -0,0 +1,77 @@ +/* Copyright 2014-2018,2021 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include "cint.h" +#include "optimizer.h" + +#define AO_BLOCK_SIZE 64 + +#define NOVALUE 0xffffffff + +#if !defined(HAVE_DEFINED_INTORENV_H) +#define HAVE_DEFINED_INTORENV_H +typedef struct { + int v_ket_nsh; /* v_ket_sh1 - v_ket_sh0 */ + int offset0_outptr; /* v_bra_sh0 * v_ket_nsh + v_ket_sh0 */ + int dm_dims[2]; + int *outptr; /* Offset array to index the data which are stored in stack */ + double *data; /* Stack to store data */ + int stack_size; /* How many data have been used */ + int ncomp; +} JKArray; + +typedef struct { + int ibra_shl0; // = 0, 2, 4, 6. The index in shls_slice + int iket_shl0; + int obra_shl0; + int oket_shl0; + void (*contract)(double *eri, double *dm, JKArray *vjk, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1); + size_t (*data_size)(int *shls_slice, int *ao_loc); + void (*sanity_check)(int *shls_slice); +} JKOperator; + +typedef struct { + int natm; + int nbas; + int *atm; + int *bas; + double *env; + int *shls_slice; + int *ao_loc; /* size of nbas+1, last element = nao */ + int *tao; /* time reversal mappings, index start from 1 */ + CINTOpt *cintopt; + int ncomp; +} IntorEnvs; +#endif + +void CVHFnr_direct_drv(int (*intor)(), void (*fdot)(), JKOperator **jkop, + double **dms, double **vjk, int n_dm, int ncomp, + int *shls_slice, int *ao_loc, + CINTOpt *cintopt, CVHFOpt *vhfopt, + int *atm, int natm, int *bas, int nbas, double *env); + +JKArray *CVHFallocate_JKArray(JKOperator *op, int *shls_slice, int *ao_loc, int ncomp); +void CVHFdeallocate_JKArray(JKArray *jkarray); +double *CVHFallocate_and_reorder_dm(JKOperator *op, double *dm, + int *shls_slice, int *ao_loc); +void CVHFzero_out_vjk(double *vjk, JKOperator *op, + int *shls_slice, int *ao_loc, int ncomp); +void CVHFassemble_v(double *vjk, JKOperator *op, JKArray *jkarray, + int *shls_slice, int *ao_loc); diff --git a/pyscfadlib/pyscfadlib/vhf/nr_direct_dot.c b/pyscfadlib/pyscfadlib/vhf/nr_direct_dot.c new file mode 100644 index 00000000..4a91988d --- /dev/null +++ b/pyscfadlib/pyscfadlib/vhf/nr_direct_dot.c @@ -0,0 +1,3136 @@ +/* Copyright 2014-2018,2021 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * JKoperator + */ + +#include +#include +#include "nr_direct.h" +#include "np_helper/np_helper.h" + +#define ASSERT(expr, msg) \ + if (!(expr)) { fprintf(stderr, "Fail at %s\n", msg); exit(1); } + +#define MAXCGTO 64 + +#define ISH0 0 +#define ISH1 1 +#define JSH0 2 +#define JSH1 3 +#define KSH0 4 +#define KSH1 5 +#define LSH0 6 +#define LSH1 7 + +#define JKOP_DATA_SIZE(obra, oket) \ + static size_t JKOperator_data_size_##obra##oket(int *shls_slice, int *ao_loc) \ +{ \ + int nbra = ao_loc[shls_slice[obra##SH1]] - ao_loc[shls_slice[obra##SH0]]; \ + int nket = ao_loc[shls_slice[oket##SH1]] - ao_loc[shls_slice[oket##SH0]]; \ + return nbra * nket; \ +} +JKOP_DATA_SIZE(K, L) +JKOP_DATA_SIZE(L, K) +JKOP_DATA_SIZE(I, J) +JKOP_DATA_SIZE(J, I) +JKOP_DATA_SIZE(K, J) +JKOP_DATA_SIZE(J, K) +JKOP_DATA_SIZE(I, L) +JKOP_DATA_SIZE(L, I) +JKOP_DATA_SIZE(K, I) +JKOP_DATA_SIZE(I, K) +JKOP_DATA_SIZE(J, L) +JKOP_DATA_SIZE(L, J) + +#define ADD_JKOP(fname, ibra, iket, obra, oket, type) \ +JKOperator CVHF##fname = {ibra##SH0, iket##SH0, obra##SH0, oket##SH0, \ + fname, JKOperator_data_size_##obra##oket, \ + JKOperator_sanity_check_##type} + +static void JKOperator_sanity_check_s1(int *shls_slice) +{ +} +static void JKOperator_sanity_check_s2ij(int *shls_slice) +{ + ASSERT(((shls_slice[0] == shls_slice[2]) && + (shls_slice[1] == shls_slice[3])), "s2ij"); +} +static void JKOperator_sanity_check_s2kl(int *shls_slice) +{ + ASSERT(((shls_slice[4] == shls_slice[6]) && + (shls_slice[5] == shls_slice[7])), "s2kl"); +} +static void JKOperator_sanity_check_s4(int *shls_slice) +{ + ASSERT(((shls_slice[0] == shls_slice[2]) && + (shls_slice[1] == shls_slice[3])), "s4 ij"); + ASSERT(((shls_slice[4] == shls_slice[6]) && + (shls_slice[5] == shls_slice[7])), "s4 kl"); +} +static void JKOperator_sanity_check_s8(int *shls_slice) +{ + ASSERT(((shls_slice[0] == shls_slice[2]) && + (shls_slice[1] == shls_slice[3])), "s8 ij"); + ASSERT(((shls_slice[4] == shls_slice[6]) && + (shls_slice[5] == shls_slice[7])), "s8 kl"); + ASSERT(((shls_slice[0] == shls_slice[4]) && + (shls_slice[1] == shls_slice[5])), "s8 ik"); +} + +#define iSH 0 +#define jSH 1 +#define kSH 2 +#define lSH 3 +#define LOCATE(v, i, j) \ + int d##i##j = d##i * d##j; \ + _poutptr = out->outptr + shls[i##SH]*out->v_ket_nsh+shls[j##SH] - out->offset0_outptr; \ + if (*_poutptr == NOVALUE) { \ + *_poutptr = out->stack_size; \ + out->stack_size += d##i##j * ncomp; \ + NPdset0(out->data+*_poutptr, d##i##j*ncomp); \ + } \ + double *v = out->data + *_poutptr; +#define DECLARE(v, i, j) \ + int ncomp = out->ncomp; \ + int ncol = out->dm_dims[1]; \ + int di = i1 - i0; \ + int dj = j1 - j0; \ + int dk = k1 - k0; \ + int dl = l1 - l0; \ + int *_poutptr; \ + LOCATE(v, i, j) + +#define DEF_NRS1_CONTRACT(D1, D2, V1, V2) \ +static void nrs1_##D1##D2##_s1##V1##V2(double *eri, double *dm, JKArray *out, int *shls, \ + int i0, int i1, int j0, int j1, \ + int k0, int k1, int l0, int l1) \ +{ \ + DECLARE(v, V1, V2); \ + int i, j, k, l, ijkl, icomp; \ + dm += D1##0 * ncol + D2##0 * d##D1; \ + \ + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { \ + for (l = 0; l < dl; l++) { \ + for (k = 0; k < dk; k++) { \ + for (j = 0; j < dj; j++) { \ + for (i = 0; i < di; i++, ijkl++) { \ + v[V1*d##V2+V2] += eri[ijkl] * dm[D1*d##D2+D2]; \ + } } } } \ + v += d##V1##V2; \ + } \ +} + +#define DEF_DM(I, J) \ + double *dm##I##J = dm + I##0 * ncol + J##0 * d##I + +/* eri in Fortran order; dm, out in C order */ + +static void nrs1_ji_s1kl(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + DECLARE(v, k, l); + int dij = di * dj; + DEF_DM(j, i); + int k, l, ij, icomp; + double s; + + for (icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + s = v[k*dl+l]; +#pragma GCC ivdep + for (ij = 0; ij < dij; ij++) { + s += eri[ij] * dmji[ij]; + } + v[k*dl+l] = s; + eri += dij; + } } + v += dkl; + } +} +ADD_JKOP(nrs1_ji_s1kl, J, I, K, L, s1); + +static void nrs1_ji_s2kl(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (k0 >= l0) { + nrs1_ji_s1kl (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nrs1_ji_s2kl, J, I, K, L, s1); + + +static void nrs1_lk_s1ij(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + DECLARE(v, i, j); + DEF_DM(l, k); + int i, j, k, l, ij, icomp; + double *buf = eri + dij * dk * dl * ncomp; + double s; + + for (icomp = 0; icomp < ncomp; icomp++) { + + for (i = 0; i < dij; i++) { buf[i] = 0; } + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + s = dmlk[l*dk+k]; +#pragma GCC ivdep + for (ij = 0; ij < dij; ij++) { + buf[ij] += eri[ij] * s; + } + eri += dij; + } } + + for (ij = 0, j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ij++) { + v[i*dj+j] += buf[ij]; + } } + v += dij; + } +} +ADD_JKOP(nrs1_lk_s1ij, L, K, I, J, s1); + +static void nrs1_lk_s2ij(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 >= j0) { + nrs1_lk_s1ij (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nrs1_lk_s2ij, L, K, I, J, s1); + + +static void nrs1_jk_s1il(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + DECLARE(v, i, l); + DEF_DM(j, k); + int i, j, k, l, ijkl, icomp; + double s; + + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + s = dmjk[j*dk+k]; + for (i = 0; i < di; i++, ijkl++) { + v[i*dl+l] += eri[ijkl] * s; + } + } } } + v += dil; + } +} +ADD_JKOP(nrs1_jk_s1il, J, K, I, L, s1); + +//DEF_NRS1_CONTRACT(j, k, i, l); ADD_JKOP(nrs1_jk_s1il, J, K, I, L, s1); +DEF_NRS1_CONTRACT(j, k, l, i); ADD_JKOP(nrs1_jk_s1li, J, K, L, I, s1); +DEF_NRS1_CONTRACT(k, j, i, l); ADD_JKOP(nrs1_kj_s1il, K, J, I, L, s1); +DEF_NRS1_CONTRACT(k, j, l, i); ADD_JKOP(nrs1_kj_s1li, K, J, L, I, s1); +DEF_NRS1_CONTRACT(i, k, j, l); ADD_JKOP(nrs1_ik_s1jl, I, K, J, L, s1); +DEF_NRS1_CONTRACT(i, k, l, j); ADD_JKOP(nrs1_ik_s1lj, I, K, L, J, s1); +DEF_NRS1_CONTRACT(k, i, l, j); ADD_JKOP(nrs1_ki_s1lj, K, I, L, J, s1); +DEF_NRS1_CONTRACT(k, i, j, l); ADD_JKOP(nrs1_ki_s1jl, K, I, J, L, s1); +DEF_NRS1_CONTRACT(j, l, k, i); ADD_JKOP(nrs1_jl_s1ki, J, L, K, I, s1); +DEF_NRS1_CONTRACT(j, l, i, k); ADD_JKOP(nrs1_jl_s1ik, J, L, I, K, s1); +DEF_NRS1_CONTRACT(l, j, k, i); ADD_JKOP(nrs1_lj_s1ki, L, J, K, I, s1); +DEF_NRS1_CONTRACT(l, j, i, k); ADD_JKOP(nrs1_lj_s1ik, L, J, I, K, s1); +DEF_NRS1_CONTRACT(l, i, k, j); ADD_JKOP(nrs1_li_s1kj, L, I, K, J, s1); +DEF_NRS1_CONTRACT(l, i, j, k); ADD_JKOP(nrs1_li_s1jk, L, I, J, K, s1); +DEF_NRS1_CONTRACT(i, l, k, j); ADD_JKOP(nrs1_il_s1kj, I, L, K, J, s1); +DEF_NRS1_CONTRACT(i, l, j, k); ADD_JKOP(nrs1_il_s1jk, I, L, J, K, s1); + +//DEF_NRS1_CONTRACT(j, i, k, l); ADD_JKOP(nrs1_ji_s1kl, J, I, K, L, s1); +//DEF_NRS1_CONTRACT(l, k, i, j); ADD_JKOP(nrs1_lk_s1ij, L, K, I, J, s1); +DEF_NRS1_CONTRACT(i, j, k, l); ADD_JKOP(nrs1_ij_s1kl, I, J, K, L, s1); +DEF_NRS1_CONTRACT(i, j, l, k); ADD_JKOP(nrs1_ij_s1lk, I, J, L, K, s1); +DEF_NRS1_CONTRACT(j, i, l, k); ADD_JKOP(nrs1_ji_s1lk, J, I, L, K, s1); +DEF_NRS1_CONTRACT(l, k, j, i); ADD_JKOP(nrs1_lk_s1ji, L, K, J, I, s1); +DEF_NRS1_CONTRACT(k, l, i, j); ADD_JKOP(nrs1_kl_s1ij, K, L, I, J, s1); +DEF_NRS1_CONTRACT(k, l, j, i); ADD_JKOP(nrs1_kl_s1ji, K, L, J, I, s1); + +static void nrs1_jk_s2il(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 >= l0) { + nrs1_jk_s1il (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nrs1_jk_s2il, J, K, I, L, s1); + + +static void nrs1_kj_s2il(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 >= l0) { + nrs1_kj_s1il (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nrs1_kj_s2il, J, K, I, L, s1); + + +static void nrs1_li_s2kj(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (k0 >= j0) { + nrs1_li_s1kj (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nrs1_li_s2kj, L, I, K, J, s1); + +static void nrs2ij_ji_s1kl(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 > j0) { + DECLARE(v, k, l); + int dij = di * dj; + DEF_DM(i, j); + DEF_DM(j, i); + int i, j, k, l, ij, icomp; + double *tdm = eri + dij * dkl * ncomp; + double tmp; + + for (ij = 0, j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ij++) { + tdm[ij] = dmij[i*dj+j] + dmji[j*di+i]; + } } + + for (icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + tmp = 0; +#pragma GCC ivdep + for (ij = 0; ij < dij; ij++) { + tmp += eri[ij] * tdm[ij]; + } + v[k*dl+l] += tmp; + eri += dij; + } } + v += dkl; + } + } else { + nrs1_ji_s1kl (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nrs2ij_ji_s1kl, J, I, K, L, s2ij); + +static void nrs2ij_ji_s2kl(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (k0 >= l0) { + nrs2ij_ji_s1kl(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nrs2ij_ji_s2kl, J, I, K, L, s2ij); + + +static void nrs2ij_lk_s1ij(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 > j0) { + DECLARE(vij, i, j); + LOCATE(vji, j, i); + DEF_DM(l, k); + int i, j, k, l, ij, icomp; + double *buf = eri + dij * dk * dl * ncomp; + double s; + + for (icomp = 0; icomp < ncomp; icomp++) { + + for (i = 0; i < dij; i++) { buf[i] = 0; } + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + s = dmlk[l*dk+k]; +#pragma GCC ivdep + for (ij = 0; ij < dij; ij++) { + buf[ij] += eri[ij] * s; + } + eri += dij; + } } + + for (ij = 0, j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ij++) { + vij[i*dj+j] += buf[ij]; + vji[ij] += buf[ij]; + } } + vij += dij; + vji += dij; + } + } else { + nrs1_lk_s1ij (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nrs2ij_lk_s1ij, L, K, I, J, s2ij); + +static void nrs2ij_lk_s2ij(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + nrs2ij_lk_s1ij(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); +} +ADD_JKOP(nrs2ij_lk_s2ij, L, K, I, J, s2ij); + + +static void nrs2ij_jk_s1il(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 > j0) { + DECLARE(vil, i, l); + DEF_DM(i, k); + DEF_DM(j, k); + LOCATE(vjl, j, l); + int i, j, k, l, ijkl, icomp; + double s, tmp; + + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + s = dmjk[j*dk+k]; + tmp = vjl[j*dl+l]; + for (i = 0; i < di; i++, ijkl++) { + vil[i*dl+l] += eri[ijkl] * s; + tmp += eri[ijkl] * dmik[i*dk+k]; + } + vjl[j*dl+l] = tmp; + } } } + vil += dil; + vjl += djl; + } + } else { + nrs1_jk_s1il (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nrs2ij_jk_s1il, J, K, I, L, s2ij); + +static void nrs2ij_jk_s2il(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (j0 >= l0) { + nrs2ij_jk_s1il(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + nrs1_jk_s2il (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nrs2ij_jk_s2il, J, K, I, L, s2ij); + + +static void nrs2ij_li_s1kj(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 > j0) { + DECLARE(vkj, k, j); + DEF_DM(l, i); + DEF_DM(l, j); + LOCATE(vki, k, i); + int i, j, k, l, ijkl, icomp; + double s, tmp; + + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + s = dmlj[l*dj+j]; + tmp = vkj[k*dj+j]; + for (i = 0; i < di; i++, ijkl++) { + tmp += eri[ijkl] * dmli[l*di+i]; + vki[k*di+i] += eri[ijkl] * s; + } + vkj[k*dj+j] = tmp; + } } } + vkj += dkj; + vki += dki; + } + } else { + nrs1_li_s1kj (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nrs2ij_li_s1kj, L, I, K, J, s2ij); + +static void nrs2ij_li_s2kj(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (k0 >= i0) { + nrs2ij_li_s1kj(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + nrs1_li_s2kj (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nrs2ij_li_s2kj, L, I, K, J, s2ij); + + +static void nrs2kl_ji_s1kl(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (k0 > l0) { + DECLARE(vkl, k, l); + LOCATE(vlk, l, k); + int dij = di * dj; + DEF_DM(j, i); + int k, l, ij, icomp; + double tmp; + + for (icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + tmp = 0; +#pragma GCC ivdep + for (ij = 0; ij < dij; ij++) { + tmp += eri[ij] * dmji[ij]; + } + vkl[k*dl+l] += tmp; + vlk[l*dk+k] += tmp; + eri += dij; + } } + vkl += dkl; + vlk += dkl; + } + } else { + return nrs1_ji_s1kl(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nrs2kl_ji_s1kl, J, I, K, L, s2kl); + +static void nrs2kl_ji_s2kl(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + nrs1_ji_s1kl(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); +} +ADD_JKOP(nrs2kl_ji_s2kl, J, I, K, L, s2kl); + + +static void nrs2kl_lk_s1ij(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (k0 > l0) { + DECLARE(v, i, j); + DEF_DM(k, l); + DEF_DM(l, k); + int i, j, k, l, ij, icomp; + double *buf = eri + dij * dk * dl * ncomp; + double tdm; + + for (icomp = 0; icomp < ncomp; icomp++) { + + for (i = 0; i < dij; i++) { buf[i] = 0; } + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + tdm = dmkl[k*dl+l] + dmlk[l*dk+k]; +#pragma GCC ivdep + for (ij = 0; ij < dij; ij++) { + buf[ij] += eri[ij] * tdm; + } + eri += dij; + } } + + for (ij = 0, j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ij++) { + v[i*dj+j] += buf[ij]; + } } + v += dij; + } + } else { + nrs1_lk_s1ij (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nrs2kl_lk_s1ij, L, K, I, J, s2kl); + +static void nrs2kl_lk_s2ij(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 >= j0) { + nrs2kl_lk_s1ij(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nrs2kl_lk_s2ij, L, K, I, J, s2kl); + + +static void nrs2kl_jk_s1il(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (k0 > l0) { + DECLARE(vil, i, l); + DEF_DM(j, k); + DEF_DM(j, l); + LOCATE(vik, i, k); + int i, j, k, l, ijkl, icomp; + double s0, s1; + + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + s0 = dmjk[j*dk+k]; + s1 = dmjl[j*dl+l]; + for (i = 0; i < di; i++, ijkl++) { + vil[i*dl+l] += eri[ijkl] * s0; + vik[i*dk+k] += eri[ijkl] * s1; + } + } } } + vil += dil; + vik += dik; + } + } else { + nrs1_jk_s1il (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nrs2kl_jk_s1il, J, K, I, L, s2kl); + +static void nrs2kl_jk_s2il(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 >= k0) { + nrs2kl_jk_s1il(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + nrs1_jk_s2il (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nrs2kl_jk_s2il, J, K, I, L, s2kl); + + +static void nrs2kl_li_s1kj(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (k0 > l0) { + DECLARE(vkj, k, j); + DEF_DM(k, i); + DEF_DM(l, i); + LOCATE(vlj, l, j); + int i, j, k, l, ijkl, icomp; + double tmp0, tmp1; + + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + tmp0 = vkj[k*dj+j]; + tmp1 = vlj[l*dj+j]; + for (i = 0; i < di; i++, ijkl++) { + tmp0 += eri[ijkl] * dmli[l*di+i]; + tmp1 += eri[ijkl] * dmki[k*di+i]; + } + vkj[k*dj+j] = tmp0; + vlj[l*dj+j] = tmp1; + } } } + vkj += dkj; + vlj += dlj; + } + } else { + nrs1_li_s1kj (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nrs2kl_li_s1kj, L, I, K, J, s2kl); + +static void nrs2kl_li_s2kj(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (l0 >= j0) { + nrs2kl_li_s1kj(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + nrs1_li_s2kj (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nrs2kl_li_s2kj, L, I, K, J, s2kl); + + +static void nrs4_ji_s1kl(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == j0) { + nrs2kl_ji_s1kl(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 == l0) { + nrs2ij_ji_s1kl(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + DECLARE(vkl, k, l); + LOCATE(vlk, l, k); + int dij = di * dj; + DEF_DM(i, j); + DEF_DM(j, i); + int i, j, k, l, ij, icomp; + double *tdm = eri + dij * dkl * ncomp; + double tmp; + + for (ij = 0, j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ij++) { + tdm[ij] = dmij[i*dj+j] + dmji[j*di+i]; + } + } + + for (icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + tmp = 0; +#pragma GCC ivdep + for (ij = 0; ij < dij; ij++) { + tmp += eri[ij] * tdm[ij]; + } + vkl[k*dl+l] += tmp; + vlk[l*dk+k] += tmp; + eri += dij; + } } + vkl += dkl; + vlk += dkl; + } + } +} +ADD_JKOP(nrs4_ji_s1kl, J, I, K, L, s4); + +static void nrs4_ji_s2kl(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + nrs2ij_ji_s1kl(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); +} +ADD_JKOP(nrs4_ji_s2kl, J, I, K, L, s4); + + +static void nrs4_lk_s1ij(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == j0) { + nrs2kl_lk_s1ij(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 == l0) { + nrs2ij_lk_s1ij(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + DECLARE(vij, i, j); + LOCATE(vji, j, i); + DEF_DM(k, l); + DEF_DM(l, k); + int i, j, k, l, ij, icomp; + double *buf = eri + dij * dk * dl * ncomp; + double tdm; + + for (icomp = 0; icomp < ncomp; icomp++) { + + for (i = 0; i < dij; i++) { buf[i] = 0; } + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + tdm = dmlk[l*dk+k] + dmkl[k*dl+l]; +#pragma GCC ivdep + for (ij = 0; ij < dij; ij++) { + buf[ij] += eri[ij] * tdm; + } + eri += dij; + } } + + for (ij = 0, j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ij++) { + vij[i*dj+j] += buf[ij]; + vji[ij] += buf[ij]; + } } + vij += dij; + vji += dij; + } + } +} +ADD_JKOP(nrs4_lk_s1ij, L, K, I, J, s4); + +static void nrs4_lk_s2ij(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + nrs2kl_lk_s1ij(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); +} +ADD_JKOP(nrs4_lk_s2ij, L, K, I, J, s4); + +static void nrs4_jk_s1il(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == j0) { + nrs2kl_jk_s1il(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 == l0) { + nrs2ij_jk_s1il(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + DECLARE(vik, i, k); + LOCATE(vil, i, l); + LOCATE(vjk, j, k); + LOCATE(vjl, j, l); + DEF_DM(i, l); + DEF_DM(i, k); + DEF_DM(j, l); + DEF_DM(j, k); + int i, j, k, l, ijkl, icomp; + double s0, s1, tmp0, tmp1; + + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + s0 = dmjl[j*dl+l]; + s1 = dmjk[j*dk+k]; + tmp0 = vjk[j*dk+k]; + tmp1 = vjl[j*dl+l]; + for (i = 0; i < di; i++, ijkl++) { + tmp0 += eri[ijkl] * dmil[i*dl+l]; + tmp1 += eri[ijkl] * dmik[i*dk+k]; + vik[i*dk+k] += eri[ijkl] * s0; + vil[i*dl+l] += eri[ijkl] * s1; + } + vjk[j*dk+k] = tmp0; + vjl[j*dl+l] = tmp1; + } } } + vjk += djk; + vjl += djl; + vik += dik; + vil += dil; + } + } +} +ADD_JKOP(nrs4_jk_s1il, J, K, I, L, s4); + +static void nrs4_jk_s2il(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == j0) { + nrs2kl_jk_s2il(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 == l0) { + nrs2ij_jk_s2il(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (i0 < l0) { + } else if (i0 < k0) { + if (j0 < l0) { // j < l <= i < k + DECLARE(v, i, l); + DEF_DM(j, k); + int i, j, k, l, ijkl, icomp; + double s; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + s = dmjk[j*dk+k]; + for (i = 0; i < di; i++, ijkl++) { + v[i*dl+l] += eri[ijkl] * s; + } + } } } + v += dil; + } + } else { // l <= j < i < k + DECLARE(vil, i, l); + LOCATE(vjl, j, l); + DEF_DM(i, k); + DEF_DM(j, k); + int i, j, k, l, ijkl, icomp; + double s, tmp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + s = dmjk[j*dk+k]; + tmp = vjl[j*dl+l]; + for (i = 0; i < di; i++, ijkl++) { + tmp += eri[ijkl] * dmik[i*dk+k]; + vil[i*dl+l] += eri[ijkl] * s; + } + vjl[j*dl+l] = tmp; + } } } + vjl += djl; + vil += dil; + } + } + } else if (j0 < l0) { // j < l < k <= i + DECLARE(vil, i, l); + LOCATE(vik, i, k); + DEF_DM(j, k); + DEF_DM(j, l); + int i, j, k, l, ijkl, icomp; + double s0, s1; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + s0 = dmjk[j*dk+k]; + s1 = dmjl[j*dl+l]; + for (i = 0; i < di; i++, ijkl++) { + vil[i*dl+l] += eri[ijkl] * s0; + vik[i*dk+k] += eri[ijkl] * s1; + } + } } } + vil += dil; + vik += dik; + } + } else if (j0 < k0) { // l <= j < k <= i + DECLARE(vjl, j, l); + LOCATE(vik, i, k); + LOCATE(vil, i, l); + DEF_DM(i, k); + DEF_DM(j, k); + DEF_DM(j, l); + int i, j, k, l, ijkl, icomp; + double s0, s1, tmp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + s0 = dmjk[j*dk+k]; + s1 = dmjl[j*dl+l]; + tmp = vjl[j*dl+l]; + for (i = 0; i < di; i++, ijkl++) { + tmp += eri[ijkl] * dmik[i*dk+k]; + vil[i*dl+l] += eri[ijkl] * s0; + vik[i*dk+k] += eri[ijkl] * s1; + } + vjl[j*dl+l] = tmp; + } } } + vjl += djl; + vil += dil; + vik += dik; + } + } else { // l < k <= j < i + DECLARE(vjl, j, l); + LOCATE(vik, i, k); + LOCATE(vjk, j, k); + LOCATE(vil, i, l); + DEF_DM(i, l); + DEF_DM(i, k); + DEF_DM(j, l); + DEF_DM(j, k); + int i, j, k, l, ijkl, icomp; + double s0, s1, tmp0, tmp1; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + s0 = dmjl[j*dl+l]; + s1 = dmjk[j*dk+k]; + tmp0 = vjk[j*dk+k]; + tmp1 = vjl[j*dl+l]; + for (i = 0; i < di; i++, ijkl++) { + tmp0 += eri[ijkl] * dmil[i*dl+l]; + tmp1 += eri[ijkl] * dmik[i*dk+k]; + vik[i*dk+k] += eri[ijkl] * s0; + vil[i*dl+l] += eri[ijkl] * s1; + } + vjk[j*dk+k] = tmp0; + vjl[j*dl+l] = tmp1; + } } } + vjk += djk; + vjl += djl; + vik += dik; + vil += dil; + } + } +} +ADD_JKOP(nrs4_jk_s2il, J, K, I, L, s4); + + +static void nrs4_li_s1kj(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == j0) { + nrs2kl_li_s1kj(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 == l0) { + nrs2ij_li_s1kj(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + DECLARE(vki, k, i); + LOCATE(vkj, k, j); + LOCATE(vli, l, i); + LOCATE(vlj, l, j); + DEF_DM(l, i); + DEF_DM(l, j); + DEF_DM(k, i); + DEF_DM(k, j); + int i, j, k, l, ijkl, icomp; + double s0, s1, tmp0, tmp1; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + s0 = dmlj[l*dj+j]; + s1 = dmkj[k*dj+j]; + tmp0 = vkj[k*dj+j]; + tmp1 = vlj[l*dj+j]; + for (i = 0; i < di; i++, ijkl++) { + tmp0 += eri[ijkl] * dmli[l*di+i]; + tmp1 += eri[ijkl] * dmki[k*di+i]; + vki[k*di+i] += eri[ijkl] * s0; + vli[l*di+i] += eri[ijkl] * s1; + } + vkj[k*dj+j] = tmp0; + vlj[l*dj+j] = tmp1; + } } } + vkj += dkj; + vki += dki; + vlj += dlj; + vli += dli; + } + } +} +ADD_JKOP(nrs4_li_s1kj, L, I, K, J, s4); + +static void nrs4_li_s2kj(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == j0) { + nrs2kl_li_s2kj(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 == l0) { + nrs2ij_li_s2kj(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 < j0) { + } else if (k0 < i0) { + if (l0 < j0) { // l < j < k < i + DECLARE(v, k, j); + DEF_DM(l, i); + int i, j, k, l, ijkl, icomp; + double tmp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + tmp = v[k*dj+j]; + for (i = 0; i < di; i++, ijkl++) { + tmp += eri[ijkl] * dmli[l*di+i]; + } + v[k*dj+j] = tmp; + } } } + v += dkj; + } + } else { // j <= l < k < i + DECLARE(vkj, k, j); + LOCATE(vlj, l, j); + DEF_DM(l, i); + DEF_DM(k, i); + int i, j, k, l, ijkl, icomp; + double tmp0, tmp1; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + tmp0 = vkj[k*dj+j]; + tmp1 = vlj[l*dj+j]; + for (i = 0; i < di; i++, ijkl++) { + tmp0 += eri[ijkl] * dmli[l*di+i]; + tmp1 += eri[ijkl] * dmki[k*di+i]; + } + vkj[k*dj+j] = tmp0; + vlj[l*dj+j] = tmp1; + } } } + vkj += dkj; + vlj += dlj; + } + } + } else if (l0 < j0) { // l < j < i <= k + DECLARE(vki, k, i); + LOCATE(vkj, k, j); + DEF_DM(l, i); + DEF_DM(l, j); + int i, j, k, l, ijkl, icomp; + double s, tmp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + s = dmlj[l*dj+j]; + tmp = vkj[k*dj+j]; + for (i = 0; i < di; i++, ijkl++) { + tmp += eri[ijkl] * dmli[l*di+i]; + vki[k*di+i] += eri[ijkl] * s; + } + vkj[k*dj+j] = tmp; + } } } + vkj += dkj; + vki += dki; + } + } else if (l0 < i0) { // j <= l < i <= k + DECLARE(vki, k, i); + LOCATE(vkj, k, j); + LOCATE(vlj, l, j); + DEF_DM(l, i); + DEF_DM(l, j); + DEF_DM(k, i); + int i, j, k, l, ijkl, icomp; + double s, tmp0, tmp1; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + s = dmlj[l*dj+j]; + tmp0 = vkj[k*dj+j]; + tmp1 = vlj[l*dj+j]; + for (i = 0; i < di; i++, ijkl++) { + vki[k*di+i] += eri[ijkl] * s; + tmp0 += eri[ijkl] * dmli[l*di+i]; + tmp1 += eri[ijkl] * dmki[k*di+i]; + } + vkj[k*dj+j] = tmp0; + vlj[l*dj+j] = tmp1; + } } } + vkj += dkj; + vki += dki; + vlj += dlj; + } + } else { // j < i <= l < k + DECLARE(vki, k, i); + LOCATE(vkj, k, j); + LOCATE(vli, l, i); + LOCATE(vlj, l, j); + DEF_DM(l, i); + DEF_DM(l, j); + DEF_DM(k, i); + DEF_DM(k, j); + int i, j, k, l, ijkl, icomp; + double s0, s1, tmp0, tmp1; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + s0 = dmlj[l*dj+j]; + s1 = dmkj[k*dj+j]; + tmp0 = vkj[k*dj+j]; + tmp1 = vlj[l*dj+j]; + for (i = 0; i < di; i++, ijkl++) { + tmp0 += eri[ijkl] * dmli[l*di+i]; + tmp1 += eri[ijkl] * dmki[k*di+i]; + vki[k*di+i] += eri[ijkl] * s0; + vli[l*di+i] += eri[ijkl] * s1; + } + vkj[k*dj+j] = tmp0; + vlj[l*dj+j] = tmp1; + } } } + vkj += dkj; + vki += dki; + vlj += dlj; + vli += dli; + } + } +} +ADD_JKOP(nrs4_li_s2kj, L, I, K, J, s4); + + +static void nrs8_ji_s1kl(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == k0 && j0 == l0) { + nrs4_ji_s1kl (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (i0 == j0 || k0 == l0) { + nrs4_ji_s1kl (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + nrs4_lk_s1ij (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + DECLARE(vij, i, j); + LOCATE(vji, j, i); + LOCATE(vkl, k, l); + LOCATE(vlk, l, k); + DEF_DM(i, j); + DEF_DM(j, i); + DEF_DM(k, l); + DEF_DM(l, k); + int i, j, k, l, ij, icomp; + double *tdm = eri + dij * dkl * ncomp; + double *buf = tdm + dij; + double tdm2, tmp; + + for (icomp = 0; icomp < ncomp; icomp++) { + for (ij = 0, j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ij++) { + tdm[ij] = dmij[i*dj+j] + dmji[j*di+i]; + } + } + for (ij = 0; ij < dij; ij++) { + buf[ij] = 0; + } + + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + tmp = 0; + tdm2 = dmkl[k*dl+l] + dmlk[l*dk+k]; +#pragma GCC ivdep + for (ij = 0; ij < dij; ij++) { + tmp += eri[ij] * tdm[ij]; + buf[ij] += eri[ij] * tdm2; + } + vkl[k*dl+l] += tmp; + vlk[l*dk+k] += tmp; + eri += dij; + } } + + for (ij = 0, j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ij++) { + vij[i*dj+j] += buf[ij]; + vji[ij] += buf[ij]; + } } + vij += dij; + vji += dji; + vkl += dkl; + vlk += dlk; + } + } +} +ADD_JKOP(nrs8_ji_s1kl, J, I, K, L, s8); + +static void nrs8_ji_s2kl(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == k0 && j0 == l0) { + nrs4_ji_s2kl (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (i0 == j0 || k0 == l0) { + nrs4_ji_s2kl (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + nrs4_lk_s2ij (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + DECLARE(vij, i, j); + LOCATE(vkl, k, l); + DEF_DM(i, j); + DEF_DM(j, i); + DEF_DM(k, l); + DEF_DM(l, k); + int i, j, k, l, ij, icomp; + double *tdm = eri + dij * dkl * ncomp; + double *buf = tdm + dij; + double tmp, tdm2; + + for (icomp = 0; icomp < ncomp; icomp++) { + for (ij = 0, j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ij++) { + tdm[ij] = dmij[i*dj+j] + dmji[j*di+i]; + } + } + for (ij = 0; ij < dij; ij++) { + buf[ij] = 0; + } + + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + tdm2 = dmkl[k*dl+l] + dmlk[l*dk+k]; + tmp = 0; +#pragma GCC ivdep + for (ij = 0; ij < dij; ij++) { + buf[ij] += eri[ij] * tdm2; + tmp += eri[ij] * tdm[ij]; + } + vkl[k*dl+l] += tmp; + eri += dij; + } } + + for (ij = 0, i = 0; i < di; i++) { + for (j = 0; j < dj; j++, ij++) { + vij[ij] += buf[j*di+i]; + } } + vij += dij; + vkl += dkl; + } + } +} +ADD_JKOP(nrs8_ji_s2kl, J, I, K, L, s8); + + +static void nrs8_lk_s1ij(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + nrs8_ji_s1kl(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); +} +ADD_JKOP(nrs8_lk_s1ij, L, K, I, J, s8); + +static void nrs8_lk_s2ij(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + nrs8_ji_s2kl(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); +} +ADD_JKOP(nrs8_lk_s2ij, L, K, I, J, s8); + + +static void nrs8_li_s1kj(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == k0 && j0 == l0) { + nrs4_li_s1kj (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (i0 == j0 || k0 == l0) { // i0==l0 => i0==k0==l0 + nrs4_li_s1kj (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + nrs4_jk_s1il (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + DECLARE(vkj, k, j); + LOCATE(vki, k, i); + LOCATE(vlj, l, j); + LOCATE(vli, l, i); + LOCATE(vik, i, k); + LOCATE(vil, i, l); + LOCATE(vjk, j, k); + LOCATE(vjl, j, l); + DEF_DM(l, i); + DEF_DM(l, j); + DEF_DM(k, i); + DEF_DM(k, j); + DEF_DM(j, l); + DEF_DM(j, k); + DEF_DM(i, l); + DEF_DM(i, k); + int i, j, k, l, ijkl, icomp; + double s, s0, s1, s2, s3, tmp0, tmp1, tmp2, tmp3; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + s0 = dmlj[l*dj+j]; + s1 = dmkj[k*dj+j]; + s2 = dmjl[j*dl+l]; + s3 = dmjk[j*dk+k]; + tmp0 = 0; + tmp1 = 0; + tmp2 = 0; + tmp3 = 0; + for (i = 0; i < di; i++, ijkl++) { + s = eri[ijkl]; + vki[k*di+i] += s * s0; + vli[l*di+i] += s * s1; + vik[i*dk+k] += s * s2; + vil[i*dl+l] += s * s3; + tmp0 += s * dmli[l*di+i]; + tmp1 += s * dmki[k*di+i]; + tmp2 += s * dmil[i*dl+l]; + tmp3 += s * dmik[i*dk+k]; + } + vkj[k*dj+j] += tmp0; + vlj[l*dj+j] += tmp1; + vjk[j*dk+k] += tmp2; // vkj, vjk may share memory + vjl[j*dl+l] += tmp3; // vlj, vjl may share memory + } } } + vkj += dkj; + vki += dki; + vlj += dlj; + vli += dli; + vik += dik; + vil += dil; + vjk += djk; + vjl += djl; + } + } +} +ADD_JKOP(nrs8_li_s1kj, L, I, K, J, s8); + +static void nrs8_li_s2kj(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == k0) { + nrs4_li_s2kj (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + if (j0 != l0) { + nrs4_jk_s2il(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } + } else if (i0 == j0 || k0 == l0) { // i0==l0 => i0==k0==l0 + nrs4_li_s2kj (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + nrs4_jk_s2il (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + int i, j, k, l, ijkl, icomp; + double s, tjl, tjk, sjk, sjl, skj, slj; + if (j0 < l0) { // j <= l < k < i + DECLARE(vkj, k, j); + LOCATE(vlj, l, j); + LOCATE(vik, i, k); + LOCATE(vil, i, l); + DEF_DM(l, i); + DEF_DM(k, i); + DEF_DM(j, l); + DEF_DM(j, k); + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + tjl = dmjl[j*dl+l]; + tjk = dmjk[j*dk+k]; + skj = 0; + slj = 0; + for (i = 0; i < di; i++, ijkl++) { + //vkj[k*dj+j] += eri[ijkl] * dmli[l*di+i]; + //vlj[l*dj+j] += eri[ijkl] * dmki[k*di+i]; + //vik[i*dk+k] += eri[ijkl] * dmjl[j*dl+l]; + //vil[i*dl+l] += eri[ijkl] * dmjk[j*dk+k]; + s = eri[ijkl]; + skj += s * dmli[l*di+i]; + slj += s * dmki[k*di+i]; + vik[i*dk+k] += s * tjl; + vil[i*dl+l] += s * tjk; + } + vkj[k*dj+j] += skj; + vlj[l*dj+j] += slj; + } } } + vkj += dkj; + vlj += dlj; + vik += dik; + vil += dil; + } + } else if (j0 == l0) { // j == l < k < i + DECLARE(vkj, k, j); + LOCATE(vlj, l, j); + LOCATE(vik, i, k); + LOCATE(vil, i, l); + LOCATE(vjl, j, l); + DEF_DM(l, i); + DEF_DM(k, i); + DEF_DM(j, l); + DEF_DM(j, k); + DEF_DM(i, k); + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + tjl = dmjl[j*dl+l]; + tjk = dmjk[j*dk+k]; + skj = 0; + slj = 0; + sjl = 0; + for (i = 0; i < di; i++, ijkl++) { + //vik[i*dk+k] += eri[ijkl] * dmjl[j*dl+l]; + //vil[i*dl+l] += eri[ijkl] * dmjk[j*dk+k]; + //vkj[k*dj+j] += eri[ijkl] * dmli[l*di+i]; + //vlj[l*dj+j] += eri[ijkl] * dmki[k*di+i]; + //vjl[j*dl+l] += eri[ijkl] * dmik[i*dk+k]; + s = eri[ijkl]; + vik[i*dk+k] += s * tjl; + vil[i*dl+l] += s * tjk; + skj += s * dmli[l*di+i]; + slj += s * dmki[k*di+i]; + sjl += s * dmik[i*dk+k]; + } + vlj[l*dj+j] += slj; + vkj[k*dj+j] += skj; + vjl[j*dl+l] += sjl; // vjl, vlj may share memory + } } } + vkj += dkj; + vlj += dlj; + vik += dik; + vil += dil; + vjl += djl; + } + } else if (j0 < k0) { // l < j < k < i + DECLARE(vkj, k, j); + LOCATE(vik, i, k); + LOCATE(vil, i, l); + LOCATE(vjl, j, l); + DEF_DM(l, i); + DEF_DM(j, l); + DEF_DM(j, k); + DEF_DM(i, k); + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + tjl = dmjl[j*dl+l]; + tjk = dmjk[j*dk+k]; + skj = 0; + sjl = 0; + for (i = 0; i < di; i++, ijkl++) { + //vik[i*dk+k] += eri[ijkl] * dmjl[j*dl+l]; + //vil[i*dl+l] += eri[ijkl] * dmjk[j*dk+k]; + //vkj[k*dj+j] += eri[ijkl] * dmli[l*di+i]; + //vjl[j*dl+l] += eri[ijkl] * dmik[i*dk+k]; + s = eri[ijkl]; + vik[i*dk+k] += s * tjl; + vil[i*dl+l] += s * tjk; + skj += s * dmli[l*di+i]; + sjl += s * dmik[i*dk+k]; + } + vkj[k*dj+j] += skj; + vjl[j*dl+l] += sjl; + } } } + vkj += dkj; + vik += dik; + vil += dil; + vjl += djl; + } + } else if (j0 == k0) { // l < j == k < i + DECLARE(vkj, k, j); + LOCATE(vik, i, k); + LOCATE(vil, i, l); + LOCATE(vjk, j, k); + LOCATE(vjl, j, l); + DEF_DM(l, i); + DEF_DM(i, l); + DEF_DM(j, l); + DEF_DM(j, k); + DEF_DM(i, k); + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + tjl = dmjl[j*dl+l]; + tjk = dmjk[j*dk+k]; + sjk = 0; + sjl = 0; + skj = 0; + for (i = 0; i < di; i++, ijkl++) { + //vik[i*dk+k] += eri[ijkl] * dmjl[j*dl+l]; + //vil[i*dl+l] += eri[ijkl] * dmjk[j*dk+k]; + //vkj[k*dj+j] += eri[ijkl] * dmli[l*di+i]; + //vjk[j*dk+k] += eri[ijkl] * dmil[i*dl+l]; + //vjl[j*dl+l] += eri[ijkl] * dmik[i*dk+k]; + s = eri[ijkl]; + vik[i*dk+k] += s * tjl; + vil[i*dl+l] += s * tjk; + skj += s * dmli[l*di+i]; + sjk += s * dmil[i*dl+l]; + sjl += s * dmik[i*dk+k]; + } + vjk[j*dk+k] += sjk; + vjl[j*dl+l] += sjl; + vkj[k*dj+j] += skj; // vjk, vkj may share memory + } } } + vkj += dkj; + vjk += djk; + vik += dik; + vil += dil; + vjl += djl; + } + } else { // l < k < j < i + DECLARE(vik, i, k); + LOCATE(vil, i, l); + LOCATE(vjk, j, k); + LOCATE(vjl, j, l); + DEF_DM(j, l); + DEF_DM(j, k); + DEF_DM(i, l); + DEF_DM(i, k); + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + tjl = dmjl[j*dl+l]; + tjk = dmjk[j*dk+k]; + sjk = 0; + sjl = 0; + for (i = 0; i < di; i++, ijkl++) { + //vik[i*dk+k] += eri[ijkl] * dmjl[j*dl+l]; + //vil[i*dl+l] += eri[ijkl] * dmjk[j*dk+k]; + //vjk[j*dk+k] += eri[ijkl] * dmil[i*dl+l]; + //vjl[j*dl+l] += eri[ijkl] * dmik[i*dk+k]; + s = eri[ijkl]; + vik[i*dk+k] += s * tjl; + vil[i*dl+l] += s * tjk; + sjk += s * dmil[i*dl+l]; + sjl += s * dmik[i*dk+k]; + } + vjk[j*dk+k] += sjk; + vjl[j*dl+l] += sjl; + } } } + vik += dik; + vil += dil; + vjk += djk; + vjl += djl; + } + } + } +} +ADD_JKOP(nrs8_li_s2kj, L, I, K, J, s8); + + +static void nrs8_jk_s1il(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + nrs8_li_s1kj(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); +} +ADD_JKOP(nrs8_jk_s1il, J, K, I, L, s8); + +static void nrs8_jk_s2il(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + nrs8_li_s2kj(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); +} +ADD_JKOP(nrs8_jk_s2il, J, K, I, L, s8); + + +/************************************************* + * For anti symmetrized integrals + *************************************************/ +static void nra2ij_ji_s1kl(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 > j0) { + DECLARE(v, k, l); + DEF_DM(i, j); + DEF_DM(j, i); + int dij = di * dj; + int i, j, k, l, ij, icomp; + double *tdm = eri + dij * dkl * ncomp; + double tmp; + + for (ij = 0, j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ij++) { + tdm[ij] = dmji[j*di+i] - dmij[i*dj+j]; + } + } + + for (icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + tmp = 0; +#pragma GCC ivdep + for (ij = 0; ij < dij; ij++) { + tmp += eri[ij] * tdm[ij]; + } + v[k*dl+l] += tmp; + eri += dij; + } } + v += dkl; + } + } else { + nrs1_ji_s1kl (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nra2ij_ji_s1kl, J, I, K, L, s2ij); + +static void nra2ij_ji_s2kl(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (k0 >= l0) { + nra2ij_ji_s1kl(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nra2ij_ji_s2kl, J, I, K, L, s2ij); + +static void nra2ij_lk_s1ij(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 > j0) { + DECLARE(vij, i, j); + LOCATE(vji, j, i); + DEF_DM(l, k); + int i, j, k, l, ij, icomp; + double *buf = eri + dij * dk * dl * ncomp; + + for (icomp = 0; icomp < ncomp; icomp++) { + + for (i = 0; i < dij; i++) { buf[i] = 0; } + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { +#pragma GCC ivdep + for (ij = 0; ij < dij; ij++) { + buf[ij] += eri[ij] * dmlk[l*dk+k]; + } + eri += dij; + } } + + for (ij = 0, j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ij++) { + vij[i*dj+j] += buf[ij]; + vji[ij] -= buf[ij]; + } } + vij += dij; + vji += dij; + } + } else { + nrs1_lk_s1ij (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nra2ij_lk_s1ij, L, K, I, J, s2ij); + +static void nra2ij_lk_s2ij(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + nra2ij_lk_s1ij(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); +} +ADD_JKOP(nra2ij_lk_s2ij, L, K, I, J, s2ij); + +static void nra2ij_lk_a2ij(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + nra2ij_lk_s1ij(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); +} +ADD_JKOP(nra2ij_lk_a2ij, L, K, I, J, s2ij); + +static void nra2ij_jk_s1il(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 > j0) { + DECLARE(vil, i, l); + DEF_DM(i, k); + DEF_DM(j, k); + LOCATE(vjl, j, l); + int i, j, k, l, ijkl, icomp; + + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vil[i*dl+l] += eri[ijkl] * dmjk[j*dk+k]; + vjl[j*dl+l] -= eri[ijkl] * dmik[i*dk+k]; + } } } } + vil += dil; + vjl += djl; + } + } else { + nrs1_jk_s1il (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nra2ij_jk_s1il, J, K, I, L, s2ij); + +static void nra2ij_jk_s2il(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (j0 >= l0) { + nra2ij_jk_s1il(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + nrs1_jk_s2il (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nra2ij_jk_s2il, J, K, I, L, s2ij); + +static void nra2ij_li_s1kj(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 > j0) { + DECLARE(vkj, k, j); + DEF_DM(l, i); + DEF_DM(l, j); + LOCATE(vki, k, i); + int i, j, k, l, ijkl, icomp; + + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vkj[k*dj+j] += eri[ijkl] * dmli[l*di+i]; + vki[k*di+i] -= eri[ijkl] * dmlj[l*dj+j]; + } } } } + vkj += dkj; + vki += dki; + } + } else { + nrs1_li_s1kj (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nra2ij_li_s1kj, L, I, K, J, s2ij); + +static void nra2ij_li_s2kj(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (k0 >= i0) { + nra2ij_li_s1kj(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + nrs1_li_s2kj (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nra2ij_li_s2kj, L, I, K, J, s2ij); + +static void nra2kl_ji_s1kl(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (k0 > l0) { + DECLARE(vkl, k, l); + LOCATE(vlk, l, k); + DEF_DM(j, i); + int dij = di * dj; + int k, l, ij, icomp; + double tmp; + + for (icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + tmp = 0; +#pragma GCC ivdep + for (ij = 0; ij < dij; ij++) { + tmp += eri[ij] * dmji[ij]; + } + vkl[k*dl+l] += tmp; + vlk[l*dk+k] -= tmp; + eri += dij; + } } + vkl += dkl; + vlk += dkl; + } + } else { + nrs1_ji_s1kl (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nra2kl_ji_s1kl, J, I, K, L, s2kl); + +static void nra2kl_ji_s2kl(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + nrs1_ji_s1kl(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); +} +ADD_JKOP(nra2kl_ji_s2kl, J, I, K, L, s2kl); + +static void nra2kl_ji_a2kl(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + nrs1_ji_s1kl(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); +} +ADD_JKOP(nra2kl_ji_a2kl, J, I, K, L, s2kl); + +static void nra2kl_lk_s1ij(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (k0 > l0) { + DECLARE(v, i, j); + DEF_DM(k, l); + DEF_DM(l, k); + int i, j, k, l, ij, icomp; + double *buf = eri + dij * dk * dl * ncomp; + double tdm; + + for (icomp = 0; icomp < ncomp; icomp++) { + + for (i = 0; i < dij; i++) { buf[i] = 0; } + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + tdm = dmlk[l*dk+k] - dmkl[k*dl+l]; +#pragma GCC ivdep + for (ij = 0; ij < dij; ij++) { + buf[ij] += eri[ij] * tdm; + } + eri += dij; + } } + + for (ij = 0, j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ij++) { + v[i*dj+j] += buf[ij]; + } } + v += dij; + } + } else { + nrs1_lk_s1ij (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nra2kl_lk_s1ij, L, K, I, J, s2kl); + +static void nra2kl_lk_s2ij(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 >= j0) { + nra2kl_lk_s1ij(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nra2kl_lk_s2ij, L, K, I, J, s2kl); + +static void nra2kl_jk_s1il(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (k0 > l0) { + DECLARE(vil, i, l); + DEF_DM(j, k); + DEF_DM(j, l); + LOCATE(vik, i, k); + int i, j, k, l, ijkl, icomp; + + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vil[i*dl+l] += eri[ijkl] * dmjk[j*dk+k]; + vik[i*dk+k] -= eri[ijkl] * dmjl[j*dl+l]; + } } } } + vik += dik; + vil += dil; + } + } else { + nrs1_jk_s1il (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nra2kl_jk_s1il, J, K, I, L, s2kl); + +static void nra2kl_jk_s2il(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 >= k0) { + nra2kl_jk_s1il(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + nrs1_jk_s2il (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nra2kl_jk_s2il, J, K, I, L, s2kl); + +static void nra2kl_li_s1kj(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (k0 > l0) { + DECLARE(vkj, k, j); + DEF_DM(l, i); + DEF_DM(k, i); + LOCATE(vlj, l, j); + int i, j, k, l, ijkl, icomp; + + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vkj[k*dj+j] += eri[ijkl] * dmli[l*di+i]; + vlj[l*dj+j] -= eri[ijkl] * dmki[k*di+i]; + } } } } + vkj += dkj; + vlj += dlj; + } + } else { + nrs1_li_s1kj (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nra2kl_li_s1kj, L, I, K, J, s2kl); + +static void nra2kl_li_s2kj(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (l0 >= j0) { + nra2kl_li_s1kj(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + nrs1_li_s2kj (eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } +} +ADD_JKOP(nra2kl_li_s2kj, L, I, K, J, s2kl); + +static void nra4ij_ji_s1kl(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == j0) { + nrs2kl_ji_s1kl(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 == l0) { + nra2ij_ji_s1kl(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + DECLARE(vkl, k, l); + LOCATE(vlk, l, k); + DEF_DM(i, j); + DEF_DM(j, i); + int dij = di * dj; + int i, j, k, l, ij, icomp; + double *tdm = eri + dij * dkl * ncomp; + double tmp; + + for (ij = 0, j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ij++) { + tdm[ij] = dmji[j*di+i] - dmij[i*dj+j]; + } + } + + for (icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + tmp = 0; +#pragma GCC ivdep + for (ij = 0; ij < dij; ij++) { + tmp += eri[ij] * tdm[ij]; + } + vkl[k*dl+l] += tmp; + vlk[l*dk+k] += tmp; + eri += dij; + } } + vkl += dkl; + vlk += dkl; + } + } +} +ADD_JKOP(nra4ij_ji_s1kl, J, I, K, L, s4); + +static void nra4ij_ji_s2kl(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + nra2ij_ji_s2kl(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); +} +ADD_JKOP(nra4ij_ji_s2kl, J, I, K, L, s4); + +static void nra4ij_lk_s1ij(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == j0) { + nrs2kl_lk_s1ij(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 == l0) { + nra2ij_lk_s1ij(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + DECLARE(vij, i, j); + LOCATE(vji, j, i); + DEF_DM(k, l); + DEF_DM(l, k); + int i, j, k, l, ij, icomp; + double *buf = eri + dij * dk * dl * ncomp; + double tdm; + + for (icomp = 0; icomp < ncomp; icomp++) { + + for (i = 0; i < dij; i++) { buf[i] = 0; } + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + tdm = dmlk[l*dk+k] + dmkl[k*dl+l]; +#pragma GCC ivdep + for (ij = 0; ij < dij; ij++) { + buf[ij] += eri[ij] * tdm; + } + eri += dij; + } } + + for (ij = 0, j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ij++) { + vij[i*dj+j] += buf[ij]; + vji[ij] -= buf[ij]; + } } + vij += dij; + vji += dij; + } + } +} +ADD_JKOP(nra4ij_lk_s1ij, L, K, I, J, s4); + +static void nra4ij_lk_s2ij(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + nrs2kl_lk_s1ij(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); +} +ADD_JKOP(nra4ij_lk_s2ij, L, K, I, J, s4); + +static void nra4ij_lk_a2ij(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + nrs2kl_lk_s1ij(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); +} +ADD_JKOP(nra4ij_lk_a2ij, L, K, I, J, s4); + +static void nra4ij_jk_s1il(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == j0) { + nrs2kl_jk_s1il(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 == l0) { + nra2ij_jk_s1il(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + DECLARE(vik, i, k); + LOCATE(vil, i, l); + LOCATE(vjk, j, k); + LOCATE(vjl, j, l); + DEF_DM(i, l); + DEF_DM(i, k); + DEF_DM(j, l); + DEF_DM(j, k); + int i, j, k, l, ijkl, icomp; + + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vjk[j*dk+k] -= eri[ijkl] * dmil[i*dl+l]; + vjl[j*dl+l] -= eri[ijkl] * dmik[i*dk+k]; + vik[i*dk+k] += eri[ijkl] * dmjl[j*dl+l]; + vil[i*dl+l] += eri[ijkl] * dmjk[j*dk+k]; + } } } } + vjk += djk; + vjl += djl; + vik += dik; + vil += dil; + } + } +} +ADD_JKOP(nra4ij_jk_s1il, J, K, I, L, s4); + +static void nra4ij_jk_s2il(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == j0) { + nrs2kl_jk_s2il(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 == l0) { + nra2ij_jk_s2il(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (i0 < l0) { + } else if (i0 < k0) { + if (j0 < l0) { // j < l <= i < k + DECLARE(v, i, l); + DEF_DM(j, k); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + v[i*dl+l] += eri[ijkl] * dmjk[j*dk+k]; + } } } } + v += dil; + } + } else { // l <= j < i < k + DECLARE(vil, i, l); + DEF_DM(i, k); + DEF_DM(j, k); + LOCATE(vjl, j, l); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vjl[j*dl+l] -= eri[ijkl] *dmik[i*dk+k]; + vil[i*dl+l] += eri[ijkl] *dmjk[j*dk+k]; + } } } } + vjl += djl; + vil += dil; + } + } + } else if (j0 < l0) { // j < l < k <= i + DECLARE(vil, i, l); + DEF_DM(j, k); + DEF_DM(j, l); + LOCATE(vik, i, k); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vil[i*dl+l] += eri[ijkl] * dmjk[j*dk+k]; + vik[i*dk+k] += eri[ijkl] * dmjl[j*dl+l]; + } } } } + vil += dil; + vik += dik; + } + } else if (j0 < k0) { // l <= j < k <= i + DECLARE(vjl, j, l); + LOCATE(vik, i, k); + LOCATE(vil, i, l); + DEF_DM(i, k); + DEF_DM(j, k); + DEF_DM(j, l); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vjl[j*dl+l] -= eri[ijkl] * dmik[i*dk+k]; + vil[i*dl+l] += eri[ijkl] * dmjk[j*dk+k]; + vik[i*dk+k] += eri[ijkl] * dmjl[j*dl+l]; + } } } } + vjl += djl; + vil += dil; + vik += dik; + } + } else { // l < k <= j < i + DECLARE(vjl, j, l); + LOCATE(vik, i, k); + LOCATE(vjk, j, k); + LOCATE(vil, i, l); + DEF_DM(i, l); + DEF_DM(i, k); + DEF_DM(j, l); + DEF_DM(j, k); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vjk[j*dk+k] -= eri[ijkl] * dmil[i*dl+l]; + vjl[j*dl+l] -= eri[ijkl] * dmik[i*dk+k]; + vik[i*dk+k] += eri[ijkl] * dmjl[j*dl+l]; + vil[i*dl+l] += eri[ijkl] * dmjk[j*dk+k]; + } } } } + vjk += djk; + vjl += djl; + vik += dik; + vil += dil; + } + } +} +ADD_JKOP(nra4ij_jk_s2il, J, K, I, L, s4); + +static void nra4ij_li_s1kj(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == j0) { + nrs2kl_li_s1kj(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 == l0) { + nra2ij_li_s1kj(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + DECLARE(vki, k, i); + LOCATE(vkj, k, j); + LOCATE(vli, l, i); + LOCATE(vlj, l, j); + DEF_DM(l, i); + DEF_DM(l, j); + DEF_DM(k, i); + DEF_DM(k, j); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vkj[k*dj+j] += eri[ijkl] * dmli[l*di+i]; + vki[k*di+i] -= eri[ijkl] * dmlj[l*dj+j]; + vlj[l*dj+j] += eri[ijkl] * dmki[k*di+i]; + vli[l*di+i] -= eri[ijkl] * dmkj[k*dj+j]; + } } } } + vkj += dkj; + vki += dki; + vlj += dlj; + vli += dli; + } + } +} +ADD_JKOP(nra4ij_li_s1kj, L, I, K, J, s4); + +static void nra4ij_li_s2kj(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == j0) { + nrs2kl_li_s2kj(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 == l0) { + nra2ij_li_s2kj(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 < j0) { + } else if (k0 < i0) { + if (l0 < j0) { // l < j < k < i + DECLARE(v, k, j); + DEF_DM(l, i); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + v[k*dj+j] += eri[ijkl] * dmli[l*di+i]; + } } } } + v += dkj; + } + } else { // j <= l < k < i + DECLARE(vkj, k, j); + LOCATE(vlj, l, j); + DEF_DM(l, i); + DEF_DM(k, i); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vkj[k*dj+j] += eri[ijkl] *dmli[l*di+i]; + vlj[l*dj+j] += eri[ijkl] *dmki[k*di+i]; + } } } } + vkj += dkj; + vlj += dlj; + } + } + } else if (l0 < j0) { // l < j < i <= k + DECLARE(vki, k, i); + LOCATE(vkj, k, j); + DEF_DM(l, i); + DEF_DM(l, j); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vkj[k*dj+j] += eri[ijkl] * dmli[l*di+i]; + vki[k*di+i] -= eri[ijkl] * dmlj[l*dj+j]; + } } } } + vkj += dkj; + vki += dki; + } + } else if (l0 < i0) { // j <= l < i <= k + DECLARE(vki, k, i); + LOCATE(vkj, k, j); + LOCATE(vlj, l, j); + DEF_DM(l, i); + DEF_DM(l, j); + DEF_DM(k, i); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vkj[k*dj+j] += eri[ijkl] * dmli[l*di+i]; + vki[k*di+i] -= eri[ijkl] * dmlj[l*dj+j]; + vlj[l*dj+j] += eri[ijkl] * dmki[k*di+i]; + } } } } + vkj += dkj; + vki += dki; + vlj += dlj; + } + } else { // j < i <= l < k + DECLARE(vki, k, i); + LOCATE(vkj, k, j); + LOCATE(vli, l, i); + LOCATE(vlj, l, j); + DEF_DM(l, i); + DEF_DM(l, j); + DEF_DM(k, i); + DEF_DM(k, j); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vkj[k*dj+j] += eri[ijkl] * dmli[l*di+i]; + vki[k*di+i] -= eri[ijkl] * dmlj[l*dj+j]; + vlj[l*dj+j] += eri[ijkl] * dmki[k*di+i]; + vli[l*di+i] -= eri[ijkl] * dmkj[k*dj+j]; + } } } } + vkj += dkj; + vki += dki; + vlj += dlj; + vli += dli; + } + } +} +ADD_JKOP(nra4ij_li_s2kj, L, I, K, J, s4); + +static void nra4kl_ji_s1kl(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == j0) { + nra2kl_ji_s1kl(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 == l0) { + nrs2ij_ji_s1kl(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + DECLARE(vkl, k, l); + LOCATE(vlk, l, k); + DEF_DM(i, j); + DEF_DM(j, i); + int dij = di * dj; + int i, j, k, l, ij, icomp; + double *tdm = eri + dij * dkl * ncomp; + double tmp; + + for (ij = 0, j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ij++) { + tdm[ij] = dmij[i*dj+j] + dmji[j*di+i]; + } + } + + for (icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + tmp = 0; +#pragma GCC ivdep + for (ij = 0; ij < dij; ij++) { + tmp += eri[ij] * tdm[ij]; + } + vkl[k*dl+l] += tmp; + vlk[l*dk+k] -= tmp; + eri += dij; + } } + vkl += dkl; + vlk += dkl; + } + } +} +ADD_JKOP(nra4kl_ji_s1kl, J, I, K, L, s4); + +static void nra4kl_ji_s2kl(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + nra2kl_ji_s2kl(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); +} +ADD_JKOP(nra4kl_ji_s2kl, J, I, K, L, s4); + +static void nra4kl_ji_a2kl(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + nra2kl_ji_s2kl(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); +} +ADD_JKOP(nra4kl_ji_a2kl, J, I, K, L, s4); + +static void nra4kl_lk_s1ij(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == j0) { + nra2kl_lk_s1ij(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 == l0) { + nrs2ij_lk_s1ij(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + DECLARE(vij, i, j); + LOCATE(vji, j, i); + DEF_DM(k, l); + DEF_DM(l, k); + int i, j, k, l, ij, icomp; + double *buf = eri + dij * dk * dl * ncomp; + double tdm; + + for (icomp = 0; icomp < ncomp; icomp++) { + + for (i = 0; i < dij; i++) { buf[i] = 0; } + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + tdm = dmlk[l*dk+k] - dmkl[k*dl+l]; +#pragma GCC ivdep + for (ij = 0; ij < dij; ij++) { + buf[ij] += eri[ij] * tdm; + } + eri += dij; + } } + + for (ij = 0, j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ij++) { + vij[i*dj+j] += buf[ij]; + vji[ij] += buf[ij]; + } } + vij += dij; + vji += dij; + } + } +} +ADD_JKOP(nra4kl_lk_s1ij, L, K, I, J, s4); + +static void nra4kl_lk_s2ij(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + nra2kl_lk_s1ij(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); +} +ADD_JKOP(nra4kl_lk_s2ij, L, K, I, J, s4); + +static void nra4kl_jk_s1il(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == j0) { + nra2kl_jk_s1il(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 == l0) { + nrs2ij_jk_s1il(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + DECLARE(vik, i, k); + LOCATE(vil, i, l); + LOCATE(vjk, j, k); + LOCATE(vjl, j, l); + DEF_DM(i, l); + DEF_DM(i, k); + DEF_DM(j, l); + DEF_DM(j, k); + int i, j, k, l, ijkl, icomp; + + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vjk[j*dk+k] -= eri[ijkl] * dmil[i*dl+l]; + vjl[j*dl+l] += eri[ijkl] * dmik[i*dk+k]; + vik[i*dk+k] -= eri[ijkl] * dmjl[j*dl+l]; + vil[i*dl+l] += eri[ijkl] * dmjk[j*dk+k]; + } } } } + vjk += djk; + vjl += djl; + vik += dik; + vil += dil; + } + } +} +ADD_JKOP(nra4kl_jk_s1il, J, K, I, L, s4); + +static void nra4kl_jk_s2il(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == j0) { + nra2kl_jk_s2il(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 == l0) { + nrs2ij_jk_s2il(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (i0 < l0) { + } else if (i0 < k0) { + if (j0 < l0) { // j < l <= i < k + DECLARE(v, i, l); + DEF_DM(j, k); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + v[i*dl+l] += eri[ijkl] * dmjk[j*dk+k]; + } } } } + v += dil; + } + } else { // l <= j < i < k + DECLARE(vil, i, l); + LOCATE(vjl, j, l); + DEF_DM(i, k); + DEF_DM(j, k); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vjl[j*dl+l] += eri[ijkl] * dmik[i*dk+k]; + vil[i*dl+l] += eri[ijkl] * dmjk[j*dk+k]; + } } } } + vjl += djl; + vil += dil; + } + } + } else if (j0 < l0) { // j < l < k <= i + DECLARE(vil, i, l); + LOCATE(vik, i, k); + DEF_DM(j, k); + DEF_DM(j, l); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vil[i*dl+l] += eri[ijkl] * dmjk[j*dk+k]; + vik[i*dk+k] -= eri[ijkl] * dmjl[j*dl+l]; + } } } } + vil += dil; + vik += dik; + } + } else if (j0 < k0) { // l <= j < k <= i + DECLARE(vjl, j, l); + LOCATE(vik, i, k); + LOCATE(vil, i, l); + DEF_DM(i, k); + DEF_DM(j, k); + DEF_DM(j, l); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vjl[j*dl+l] += eri[ijkl] * dmik[i*dk+k]; + vil[i*dl+l] += eri[ijkl] * dmjk[j*dk+k]; + vik[i*dk+k] -= eri[ijkl] * dmjl[j*dl+l]; + } } } } + vjl += djl; + vil += dil; + vik += dik; + } + } else { // l < k <= j < i + DECLARE(vjl, j, l); + LOCATE(vik, i, k); + LOCATE(vjk, j, k); + LOCATE(vil, i, l); + DEF_DM(i, l); + DEF_DM(i, k); + DEF_DM(j, l); + DEF_DM(j, k); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vjk[j*dk+k] -= eri[ijkl] * dmil[i*dl+l]; + vjl[j*dl+l] += eri[ijkl] * dmik[i*dk+k]; + vik[i*dk+k] -= eri[ijkl] * dmjl[j*dl+l]; + vil[i*dl+l] += eri[ijkl] * dmjk[j*dk+k]; + } } } } + vjk += djk; + vjl += djl; + vik += dik; + vil += dil; + } + } +} +ADD_JKOP(nra4kl_jk_s2il, J, K, I, L, s4); + +static void nra4kl_li_s1kj(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == j0) { + nra2kl_li_s1kj(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 == l0) { + nrs2ij_li_s1kj(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + DECLARE(vki, k, i); + LOCATE(vkj, k, j); + LOCATE(vli, l, i); + LOCATE(vlj, l, j); + DEF_DM(l, i); + DEF_DM(l, j); + DEF_DM(k, i); + DEF_DM(k, j); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vkj[k*dj+j] += eri[ijkl] * dmli[l*di+i]; + vki[k*di+i] += eri[ijkl] * dmlj[l*dj+j]; + vlj[l*dj+j] -= eri[ijkl] * dmki[k*di+i]; + vli[l*di+i] -= eri[ijkl] * dmkj[k*dj+j]; + } } } } + vkj += dkj; + vki += dki; + vlj += dlj; + vli += dli; + } + } +} +ADD_JKOP(nra4kl_li_s1kj, L, I, K, J, s4); + +static void nra4kl_li_s2kj(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == j0) { + nrs2kl_li_s2kj(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 == l0) { + nrs2ij_li_s2kj(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 < j0) { + } else if (k0 < i0) { + if (l0 < j0) { // l < j < k < i + DECLARE(v, k, j); + DEF_DM(l, i); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + v[k*dj+j] += eri[ijkl] * dmli[l*di+i]; + } } } } + v += dkj; + } + } else { // j <= l < k < i + DECLARE(vkj, k, j); + LOCATE(vlj, l, j); + DEF_DM(l, i); + DEF_DM(k, i); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vkj[k*dj+j] += eri[ijkl] * dmli[l*di+i]; + vlj[l*dj+j] -= eri[ijkl] * dmki[k*di+i]; + } } } } + vkj += dkj; + vlj += dlj; + } + } + } else if (l0 < j0) { // l < j < i <= k + DECLARE(vki, k, i); + LOCATE(vkj, k, j); + DEF_DM(l, i); + DEF_DM(l, j); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vkj[k*dj+j] += eri[ijkl] * dmli[l*di+i]; + vki[k*di+i] += eri[ijkl] * dmlj[l*dj+j]; + } } } } + vkj += dkj; + vki += dki; + } + } else if (l0 < i0) { // j <= l < i <= k + DECLARE(vki, k, i); + LOCATE(vkj, k, j); + LOCATE(vlj, l, j); + DEF_DM(l, i); + DEF_DM(l, j); + DEF_DM(k, i); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vkj[k*dj+j] += eri[ijkl] * dmli[l*di+i]; + vki[k*di+i] += eri[ijkl] * dmlj[l*dj+j]; + vlj[l*dj+j] -= eri[ijkl] * dmki[k*di+i]; + } } } } + vkj += dkj; + vki += dki; + vlj += dlj; + } + } else { // j < i <= l < k + DECLARE(vki, k, i); + LOCATE(vkj, k, j); + LOCATE(vli, l, i); + LOCATE(vlj, l, j); + DEF_DM(l, i); + DEF_DM(l, j); + DEF_DM(k, i); + DEF_DM(k, j); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vkj[k*dj+j] += eri[ijkl] * dmli[l*di+i]; + vki[k*di+i] += eri[ijkl] * dmlj[l*dj+j]; + vlj[l*dj+j] -= eri[ijkl] * dmki[k*di+i]; + vli[l*di+i] -= eri[ijkl] * dmkj[k*dj+j]; + } } } } + vkj += dkj; + vki += dki; + vlj += dlj; + vli += dli; + } + } +} +ADD_JKOP(nra4kl_li_s2kj, L, I, K, J, s4); + +/* + * aa4: 4-fold permutation symmetry with anti-symm for ij and anti-symm for kl + */ +static void nraa4_ji_s1kl(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == j0) { + nra2kl_ji_s1kl(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 == l0) { + nra2ij_ji_s1kl(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + DECLARE(vkl, k, l); + LOCATE(vlk, l, k); + DEF_DM(i, j); + DEF_DM(j, i); + int dij = di * dj; + int i, j, k, l, ij, icomp; + double *tdm = eri + dij * dkl * ncomp; + double tmp; + + for (ij = 0, j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ij++) { + tdm[ij] = dmji[j*di+i] - dmij[i*dj+j]; + } + } + + for (icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + tmp = 0; +#pragma GCC ivdep + for (ij = 0; ij < dij; ij++) { + tmp += eri[ij] * tdm[ij]; + } + vkl[k*dl+l] += tmp; + vlk[l*dk+k] -= tmp; + eri += dij; + } } + vkl += dkl; + vlk += dkl; + } + } +} +ADD_JKOP(nraa4_ji_s1kl, J, I, K, L, s4); + +static void nraa4_ji_s2kl(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + nra2ij_ji_s2kl(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); +} +ADD_JKOP(nraa4_ji_s2kl, J, I, K, L, s4); + +static void nraa4_lk_s1ij(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == j0) { + nra2kl_lk_s1ij(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 == l0) { + nra2ij_lk_s1ij(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + DECLARE(vij, i, j); + LOCATE(vji, j, i); + DEF_DM(k, l); + DEF_DM(l, k); + int i, j, k, l, ij, icomp; + double *buf = eri + dij * dk * dl * ncomp; + double tdm; + + for (icomp = 0; icomp < ncomp; icomp++) { + + for (i = 0; i < dij; i++) { buf[i] = 0; } + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + tdm = dmlk[l*dk+k] - dmkl[k*dl+l]; +#pragma GCC ivdep + for (ij = 0; ij < dij; ij++) { + buf[ij] += eri[ij] * tdm; + } + eri += dij; + } } + + for (ij = 0, j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ij++) { + vij[i*dj+j] += buf[ij]; + vji[ij] -= buf[ij]; + } } + vij += dij; + vji += dij; + } + } +} +ADD_JKOP(nraa4_lk_s1ij, L, K, I, J, s4); + +static void nraa4_lk_s2ij(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + nra2kl_lk_s1ij(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); +} +ADD_JKOP(nraa4_lk_s2ij, L, K, I, J, s4); + +static void nraa4_lk_a2ij(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + nra2kl_lk_s1ij(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); +} +ADD_JKOP(nraa4_lk_a2ij, L, K, I, J, s4); + +static void nraa4_jk_s1il(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == j0) { + nra2kl_jk_s1il(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 == l0) { + nra2ij_jk_s1il(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + DECLARE(vik, i, k); + LOCATE(vil, i, l); + LOCATE(vjk, j, k); + LOCATE(vjl, j, l); + DEF_DM(i, l); + DEF_DM(i, k); + DEF_DM(j, l); + DEF_DM(j, k); + int i, j, k, l, ijkl, icomp; + + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vjk[j*dk+k] += eri[ijkl] * dmil[i*dl+l]; + vjl[j*dl+l] -= eri[ijkl] * dmik[i*dk+k]; + vik[i*dk+k] -= eri[ijkl] * dmjl[j*dl+l]; + vil[i*dl+l] += eri[ijkl] * dmjk[j*dk+k]; + } } } } + vjk += djk; + vjl += djl; + vik += dik; + vil += dil; + } + } +} +ADD_JKOP(nraa4_jk_s1il, J, K, I, L, s4); + +static void nraa4_jk_s2il(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == j0) { + nra2kl_jk_s2il(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 == l0) { + nra2ij_jk_s2il(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (i0 < l0) { + } else if (i0 < k0) { + if (j0 < l0) { // j < l <= i < k + DECLARE(v, i, l); + DEF_DM(j, k); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + v[i*dl+l] += eri[ijkl] * dmjk[j*dk+k]; + } } } } + v += dil; + } + } else { // l <= j < i < k + DECLARE(vil, i, l); + LOCATE(vjl, j, l); + DEF_DM(i, k); + DEF_DM(j, k); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vjl[j*dl+l] -= eri[ijkl] * dmik[i*dk+k]; + vil[i*dl+l] += eri[ijkl] * dmjk[j*dk+k]; + } } } } + vjl += djl; + vil += dil; + } + } + } else if (j0 < l0) { // j < l < k <= i + DECLARE(vil, i, l); + LOCATE(vik, i, k); + DEF_DM(j, k); + DEF_DM(j, l); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vil[i*dl+l] += eri[ijkl] * dmjk[j*dk+k]; + vik[i*dk+k] -= eri[ijkl] * dmjl[j*dl+l]; + } } } } + vil += dil; + vik += dik; + } + } else if (j0 < k0) { // l <= j < k <= i + DECLARE(vjl, j, l); + LOCATE(vik, i, k); + LOCATE(vil, i, l); + DEF_DM(i, k); + DEF_DM(j, k); + DEF_DM(j, l); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vjl[j*dl+l] -= eri[ijkl] * dmik[i*dk+k]; + vil[i*dl+l] += eri[ijkl] * dmjk[j*dk+k]; + vik[i*dk+k] -= eri[ijkl] * dmjl[j*dl+l]; + } } } } + vjl += djl; + vil += dil; + vik += dik; + } + } else { // l < k <= j < i + DECLARE(vjl, j, l); + LOCATE(vik, i, k); + LOCATE(vjk, j, k); + LOCATE(vil, i, l); + DEF_DM(i, l); + DEF_DM(i, k); + DEF_DM(j, l); + DEF_DM(j, k); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vjk[j*dk+k] += eri[ijkl] * dmil[i*dl+l]; + vjl[j*dl+l] -= eri[ijkl] * dmik[i*dk+k]; + vik[i*dk+k] -= eri[ijkl] * dmjl[j*dl+l]; + vil[i*dl+l] += eri[ijkl] * dmjk[j*dk+k]; + } } } } + vjk += djk; + vjl += djl; + vik += dik; + vil += dil; + } + } +} +ADD_JKOP(nraa4_jk_s2il, J, K, I, L, s4); + +static void nraa4_li_s1kj(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == j0) { + nra2kl_li_s1kj(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 == l0) { + nra2ij_li_s1kj(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else { + DECLARE(vki, k, i); + LOCATE(vkj, k, j); + LOCATE(vli, l, i); + LOCATE(vlj, l, j); + DEF_DM(l, i); + DEF_DM(l, j); + DEF_DM(k, i); + DEF_DM(k, j); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vkj[k*dj+j] += eri[ijkl] * dmli[l*di+i]; + vki[k*di+i] -= eri[ijkl] * dmlj[l*dj+j]; + vlj[l*dj+j] -= eri[ijkl] * dmki[k*di+i]; + vli[l*di+i] += eri[ijkl] * dmkj[k*dj+j]; + } } } } + vkj += dkj; + vki += dki; + vlj += dlj; + vli += dli; + } + } +} +ADD_JKOP(nraa4_li_s1kj, L, I, K, J, s4); + +static void nraa4_li_s2kj(double *eri, double *dm, JKArray *out, int *shls, + int i0, int i1, int j0, int j1, + int k0, int k1, int l0, int l1) +{ + if (i0 == j0) { + nra2kl_li_s2kj(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 == l0) { + nra2ij_li_s2kj(eri, dm, out, shls, i0, i1, j0, j1, k0, k1, l0, l1); + } else if (k0 < j0) { + } else if (k0 < i0) { + if (l0 < j0) { // l < j < k < i + DECLARE(v, k, j); + DEF_DM(l, i); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + v[k*dj+j] += eri[ijkl] * dmli[l*di+i]; + } } } } + v += dkj; + } + } else { // j <= l < k < i + DECLARE(vkj, k, j); + LOCATE(vlj, l, j); + DEF_DM(l, i); + DEF_DM(k, i); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vkj[k*dj+j] += eri[ijkl] *dmli[l*di+i]; + vlj[l*dj+j] -= eri[ijkl] *dmki[k*di+i]; + } } } } + vkj += dkj; + vlj += dlj; + } + } + } else if (l0 < j0) { // l < j < i <= k + DECLARE(vki, k, i); + LOCATE(vkj, k, j); + DEF_DM(l, i); + DEF_DM(l, j); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vkj[k*dj+j] += eri[ijkl] * dmli[l*di+i]; + vki[k*di+i] -= eri[ijkl] * dmlj[l*dj+j]; + } } } } + vkj += dkj; + vki += dki; + } + } else if (l0 < i0) { // j <= l < i <= k + DECLARE(vki, k, i); + LOCATE(vkj, k, j); + LOCATE(vlj, l, j); + DEF_DM(l, i); + DEF_DM(l, j); + DEF_DM(k, i); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vkj[k*dj+j] += eri[ijkl] * dmli[l*di+i]; + vki[k*di+i] -= eri[ijkl] * dmlj[l*dj+j]; + vlj[l*dj+j] -= eri[ijkl] * dmki[k*di+i]; + } } } } + vkj += dkj; + vki += dki; + vlj += dlj; + } + } else { // j < i <= l < k + DECLARE(vki, k, i); + LOCATE(vkj, k, j); + LOCATE(vli, l, i); + LOCATE(vlj, l, j); + DEF_DM(l, i); + DEF_DM(l, j); + DEF_DM(k, i); + DEF_DM(k, j); + int i, j, k, l, ijkl, icomp; + for (ijkl = 0, icomp = 0; icomp < ncomp; icomp++) { + for (l = 0; l < dl; l++) { + for (k = 0; k < dk; k++) { + for (j = 0; j < dj; j++) { + for (i = 0; i < di; i++, ijkl++) { + vkj[k*dj+j] += eri[ijkl] * dmli[l*di+i]; + vki[k*di+i] -= eri[ijkl] * dmlj[l*dj+j]; + vlj[l*dj+j] -= eri[ijkl] * dmki[k*di+i]; + vli[l*di+i] += eri[ijkl] * dmkj[k*dj+j]; + } } } } + vkj += dkj; + vki += dki; + vlj += dlj; + vli += dli; + } + } +} +ADD_JKOP(nraa4_li_s2kj, L, I, K, J, s4); + diff --git a/pyscfadlib/pyscfadlib/vhf/nr_incore.c b/pyscfadlib/pyscfadlib/vhf/nr_incore.c new file mode 100644 index 00000000..b3472f02 --- /dev/null +++ b/pyscfadlib/pyscfadlib/vhf/nr_incore.c @@ -0,0 +1,806 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Incore version of non-relativistic integrals JK contraction + * ic in CVHFic... is short for incore + */ + +#include +#include +//#include +#include "config.h" +#include "cvhf.h" +#include "np_helper/np_helper.h" +#include "fblas.h" + + +/* + * J + */ +void CVHFics8_ij_s2kl_o0(double *eri, double *dm, double *vj, + int nao, int ic, int jc) +{ + int i, j, ij; + double dm_ij; + double vj_ij = 0; + + if (ic > jc) { + dm_ij = dm[ic*nao+jc] + dm[jc*nao+ic]; + } else if (ic == jc) { + dm_ij = dm[ic*nao+ic]; + } else { + return; + } + + for (i = 0, ij = 0; i < ic; i++) { + for (j = 0; j < i; j++, ij++) { + vj_ij += eri[ij] *(dm[i*nao+j]+dm[j*nao+i]); + vj[i*nao+j] += eri[ij] * dm_ij; + } + vj_ij += eri[ij] * dm[i*nao+i]; + vj[i*nao+i] += eri[ij] * dm_ij; + ij++; + } + // i == ic + for (j = 0; j < jc; j++, ij++) { + vj_ij += eri[ij] *(dm[i*nao+j]+dm[j*nao+i]); + vj[i*nao+j] += eri[ij] * dm_ij; + } + vj_ij += eri[ij] * dm_ij; + + vj[ic*nao+jc] += vj_ij; +} + +void CVHFics4_ij_s2kl_o0(double *eri, double *dm, double *vj, + int nao, int ic, int jc) +{ + int i, j, ij; + double dm_ij; + + if (ic > jc) { + dm_ij = dm[ic*nao+jc] + dm[jc*nao+ic]; + } else if (ic == jc) { + dm_ij = dm[ic*nao+ic]; + } else { + return; + } + + for (i = 0, ij = 0; i < nao; i++) { + for (j = 0; j <= i; j++, ij++) { + vj[i*nao+j] += eri[ij] * dm_ij; + } + } +} + +void CVHFics2kl_kl_s1ij_o0(double *eri, double *dm, double *vj, + int nao, int ic, int jc) +{ + int i, j, ij; + double vj_ij = 0; + for (i = 0, ij = 0; i < nao; i++) { + for (j = 0; j < i; j++, ij++) { + vj_ij += eri[ij] *(dm[i*nao+j]+dm[j*nao+i]); + } + vj_ij += eri[ij] * dm[i*nao+i]; + ij++; + } + vj[ic*nao+jc] += vj_ij; +} + + + +/* + * K + */ +void CVHFics8_jk_s1il_o0(double *eri, double *dm, double *vk, + int nao, int ic, int jc) +{ + int k, l, kl; + if (ic > jc) { + for (k = 0, kl = 0; k < ic; k++) { + for (l = 0; l < k; l++, kl++) { + vk[jc*nao+l] += eri[kl] * dm[ic*nao+k]; + vk[ic*nao+l] += eri[kl] * dm[jc*nao+k]; + vk[jc*nao+k] += eri[kl] * dm[ic*nao+l]; + vk[ic*nao+k] += eri[kl] * dm[jc*nao+l]; + vk[l*nao+jc] += eri[kl] * dm[k*nao+ic]; + vk[k*nao+jc] += eri[kl] * dm[l*nao+ic]; + vk[l*nao+ic] += eri[kl] * dm[k*nao+jc]; + vk[k*nao+ic] += eri[kl] * dm[l*nao+jc]; + } + vk[jc*nao+k] += eri[kl] * dm[ic*nao+k]; + vk[ic*nao+k] += eri[kl] * dm[jc*nao+k]; + vk[k*nao+jc] += eri[kl] * dm[k*nao+ic]; + vk[k*nao+ic] += eri[kl] * dm[k*nao+jc]; + kl++; + } + k = ic; + for (l = 0; l < jc; l++, kl++) { // l jc) { + // k < jc + for (k=0; k < jc; k++) { + for (l = 0; l < k; l++) { + vk[jc*nao+l] += eri[l] * dm[ic*nao+k]; + vk[jc*nao+k] += eri[l] * dm[ic*nao+l]; + vk[ic*nao+l] += eri[l] * dm[jc*nao+k]; + vk[ic*nao+k] += eri[l] * dm[jc*nao+l]; + } + // l = k + vk[jc*nao+k] += eri[k] * dm[ic*nao+k]; + vk[ic*nao+k] += eri[k] * dm[jc*nao+k]; + eri += k + 1; + } + // k = jc + for (l = 0; l < k; l++) { + vk[jc*nao+l ] += eri[l] * dm[ic*nao+jc]; + vk[ic*nao+l ] += eri[l] * dm[jc*nao+jc]; + vk[jc*nao+jc] += eri[l] *(dm[ic*nao+l] + dm[l*nao+ic]); + vk[ic*nao+jc] += eri[l] * dm[jc*nao+l]; + } + // l = k = jc + vk[jc*nao+jc] += eri[l] *(dm[ic*nao+jc] + dm[jc*nao+ic]); + vk[ic*nao+jc] += eri[l] * dm[jc*nao+jc]; + eri += k + 1; + // k > jc + for (k=jc+1; k < ic; k++) { + // l < jc + for (l = 0; l < jc; l++) { + vk[jc*nao+l] += eri[l] * dm[ic*nao+k]; + vk[ic*nao+l] += eri[l] * dm[jc*nao+k]; + vk[ic*nao+k] += eri[l] * dm[jc*nao+l]; + vk[k*nao+jc] += eri[l] * dm[l*nao+ic]; + } + // l = jc + vk[jc*nao+jc] += eri[l] *(dm[ic*nao+k] + dm[k*nao+ic]); + vk[ic*nao+jc] += eri[l] * dm[jc*nao+k]; + vk[ic*nao+k] += eri[l] * dm[jc*nao+jc]; + vk[k*nao+jc] += eri[l] * dm[jc*nao+ic]; + //eri += jc+1; + // l > jc + for (l = jc+1; l < k; l++) { + vk[ic*nao+l] += eri[l] * dm[jc*nao+k]; + vk[ic*nao+k] += eri[l] * dm[jc*nao+l]; + vk[l*nao+jc] += eri[l] * dm[k*nao+ic]; + vk[k*nao+jc] += eri[l] * dm[l*nao+ic]; + } + // l = k + vk[jc*nao+k] += eri[l] * dm[ic*nao+k]; + vk[ic*nao+k] += eri[l] * dm[jc*nao+k]; + vk[k*nao+jc] += eri[l] * dm[k*nao+ic]; + eri += k + 1; + } + // k = ic + for (l = 0; l < jc; l++) { + vk[jc*nao+l] += eri[l] * dm[ic*nao+ic]; + vk[ic*nao+l] += eri[l] * dm[jc*nao+ic]; + vk[ic*nao+ic] += eri[l] *(dm[jc*nao+l] + dm[l*nao+jc]); + vk[ic*nao+jc] += eri[l] * dm[l*nao+ic]; + } + // ic = k, jc = l; + vk[jc*nao+jc] += eri[l] * dm[ic*nao+ic]; + vk[ic*nao+jc] += eri[l] * dm[jc*nao+ic]; + vk[ic*nao+ic] += eri[l] * dm[jc*nao+jc]; + eri += jc + 1; + } else if (ic == jc) { + for (k = 0; k < ic-1; k+=2) { + for (l = 0; l < k; l++) { + vk[ic*nao+l] += eri[l] * dm[ic*nao+k]; + vk[ic*nao+k] += eri[l] * dm[ic*nao+l]; + vk[ic*nao+l ] += eri[l+k+1] * dm[ic*nao+k+1]; + vk[ic*nao+k+1] += eri[l+k+1] * dm[ic*nao+l ]; + } + vk[ic*nao+k] += eri[k] * dm[ic*nao+k]; + eri += k+1; + vk[ic*nao+k ] += eri[k] * dm[ic*nao+k+1]; + vk[ic*nao+k+1] += eri[k] * dm[ic*nao+k ]; + vk[ic*nao+k+1] += eri[k+1] * dm[ic*nao+k+1]; + eri += k+2; + } + for (; k < ic; k++) { + for (l = 0; l < k; l++) { + vk[ic*nao+l] += eri[l] * dm[ic*nao+k]; + vk[ic*nao+k] += eri[l] * dm[ic*nao+l]; + } + vk[ic*nao+k] += eri[k] * dm[ic*nao+k]; + eri += k+1; + } + for (l = 0; l < k; l++) { // l jc) { + for (k = 0, kl = 0; k < nao; k++) { + for (l = 0; l < k; l++, kl++) { + vk[jc*nao+l] += eri[kl] * dm[ic*nao+k]; + vk[jc*nao+k] += eri[kl] * dm[ic*nao+l]; + vk[ic*nao+l] += eri[kl] * dm[jc*nao+k]; + vk[ic*nao+k] += eri[kl] * dm[jc*nao+l]; + } + vk[jc*nao+k] += eri[kl] * dm[ic*nao+k]; + vk[ic*nao+k] += eri[kl] * dm[jc*nao+k]; + kl++; + } + } else if (ic == jc) { + for (k = 0, kl = 0; k < nao; k++) { + for (l = 0; l < k; l++, kl++) { + vk[ic*nao+l] += eri[kl] * dm[ic*nao+k]; + vk[ic*nao+k] += eri[kl] * dm[ic*nao+l]; + } + vk[ic*nao+k] += eri[kl] * dm[ic*nao+k]; + kl++; + } + } +} + +void CVHFics4_il_s1jk_o0(double *eri, double *dm, double *vk, + int nao, int ic, int jc) +{ + CVHFics4_jk_s1il_o0(eri, dm, vk, nao, ic, jc); +} + +void CVHFics4_jk_s2il_o0(double *eri, double *dm, double *vk, + int nao, int ic, int jc) +{ + int k, l, kl; + if (ic > jc) { + for (k = 0, kl = 0; k <= jc; k++) { + for (l = 0; l < k; l++, kl++) { + vk[jc*nao+l] += eri[kl] * dm[ic*nao+k]; + vk[jc*nao+k] += eri[kl] * dm[ic*nao+l]; + vk[ic*nao+l] += eri[kl] * dm[jc*nao+k]; + vk[ic*nao+k] += eri[kl] * dm[jc*nao+l]; + } + vk[jc*nao+k] += eri[kl] * dm[ic*nao+k]; + vk[ic*nao+k] += eri[kl] * dm[jc*nao+k]; + kl++; + } + for (k = jc+1; k <= ic; k++) { + for (l = 0; l <= jc; l++, kl++) { + vk[jc*nao+l] += eri[kl] * dm[ic*nao+k]; + vk[ic*nao+l] += eri[kl] * dm[jc*nao+k]; + vk[ic*nao+k] += eri[kl] * dm[jc*nao+l]; + } + for (l = jc+1; l < k; l++, kl++) { + vk[ic*nao+l] += eri[kl] * dm[jc*nao+k]; + vk[ic*nao+k] += eri[kl] * dm[jc*nao+l]; + } + vk[ic*nao+k] += eri[kl] * dm[jc*nao+k]; + kl++; + } + for (k = ic+1; k < nao; k++) { + for (l = 0, kl = k*(k+1)/2; l <= jc; l++, kl++) { + vk[jc*nao+l] += eri[kl] * dm[ic*nao+k]; + vk[ic*nao+l] += eri[kl] * dm[jc*nao+k]; + } + for (l = jc+1; l <= ic; l++, kl++) { + vk[ic*nao+l] += eri[kl] * dm[jc*nao+k]; + } + } + } else if (ic == jc) { + for (k = 0, kl = 0; k <= ic; k++) { + for (l = 0; l < k; l++, kl++) { + vk[ic*nao+l] += eri[kl] * dm[ic*nao+k]; + vk[ic*nao+k] += eri[kl] * dm[ic*nao+l]; + } + vk[ic*nao+k] += eri[kl] * dm[ic*nao+k]; + kl++; + } + for (k = ic+1; k < nao; k++) { + for (l = 0, kl = k*(k+1)/2; l <= ic; l++, kl++) { + vk[ic*nao+l] += eri[kl] * dm[ic*nao+k]; + } + } + } +} + +void CVHFics4_il_s2jk_o0(double *eri, double *dm, double *vk, + int nao, int ic, int jc) +{ + CVHFics4_jk_s2il_o0(eri, dm, vk, nao, ic, jc); +} + + + +/* + * einsum ijkl,ij->(s2)kl + * 8-fold symmetry for eri: i>=j,k>=l,ij>=kl + * input address eri of the first element for pair ij=ic*(ic+1)/2+jc + * i.e. ~ &eri_ao[ij*(ij+1)/2] + * dm can be non-Hermitian, + * output vk might not be Hermitian + * + * NOTE all _s2kl (nrs8_, nrs4_, nrs2kl_) assumes the tril part of eri + * being stored in C-order *contiguously*. so call CVHFunpack_nrblock2tril + * to generate eris + */ +void CVHFics8_ij_s2kl(double *eri, double *dm, double *vj, + int nao, int ic, int jc) +{ + CVHFics8_ij_s2kl_o0(eri, dm, vj, nao, ic, jc); +} +// tri_dm: fold upper triangular dm to lower triangle, +// tri_dm[i*(i+1)/2+j] = dm[i*nao+j] + dm[j*nao+i] for i > j +void CVHFics8_tridm_vj(double *eri, double *tri_dm, double *vj, + int nao, int ic, int jc) +{ + int i, j, ij; + double dm_ijc = tri_dm[ic*(ic+1)/2+jc]; + double vj_ij = 0; + const int INC1 = 1; + int i1; + + for (i = 0, ij = 0; i < ic; i++) { + i1 = i + 1; + vj_ij += ddot_(&i1, eri+ij, &INC1, tri_dm+ij, &INC1); + daxpy_(&i1, &dm_ijc, eri+ij, &INC1, vj+i*nao, &INC1); + ij += i1; + } + // i == ic + for (j = 0; j < jc; j++, ij++) { + vj_ij += eri[ij] * tri_dm[ij]; + vj[i*nao+j] += eri[ij] * dm_ijc; + } + vj_ij += eri[ij] * dm_ijc; + + vj[ic*nao+jc] += vj_ij; +} +void CVHFics8_jk_s1il(double *eri, double *dm, double *vk, + int nao, int ic, int jc) +{ + CVHFics8_jk_s1il_o0(eri, dm, vk, nao, ic, jc); +} +/* + * einsum ijkl,jk->(s2)il + * output vk should be Hermitian + */ +void CVHFics8_jk_s2il(double *eri, double *dm, double *vk, + int nao, int ic, int jc) +{ + CVHFics8_jk_s2il_o0(eri, dm, vk, nao, ic, jc); +} + + +/* + * einsum ijkl,jk->il + * 4-fold symmetry for eri: i>=j,k>=l + */ +void CVHFics4_jk_s1il(double *eri, double *dm, double *vk, + int nao, int ic, int jc) +{ + CVHFics4_jk_s1il_o0(eri, dm, vk, nao, ic, jc); +} +void CVHFics4_il_s1jk(double *eri, double *dm, double *vk, + int nao, int ic, int jc) +{ + CVHFics4_jk_s1il_o0(eri, dm, vk, nao, ic, jc); +} +/* + * output vk should be Hermitian + */ +void CVHFics4_jk_s2il(double *eri, double *dm, double *vk, + int nao, int ic, int jc) +{ + CVHFics4_jk_s2il_o0(eri, dm, vk, nao, ic, jc); +} +void CVHFics4_il_s2jk(double *eri, double *dm, double *vk, + int nao, int ic, int jc) +{ + CVHFics4_jk_s2il_o0(eri, dm, vk, nao, ic, jc); +} +void CVHFics4_ij_s2kl(double *eri, double *dm, double *vj, + int nao, int ic, int jc) +{ + CVHFics4_ij_s2kl_o0(eri, dm, vj, nao, ic, jc); +} +void CVHFics4_kl_s2ij(double *eri, double *dm, double *vj, + int nao, int ic, int jc) +{ + if (ic >= jc) { + CVHFics2kl_kl_s1ij_o0(eri, dm, vj, nao, ic, jc); + } +} + + +void CVHFics1_ij_s1kl(double *eri, double *dm, double *vj, + int nao, int ic, int jc) +{ + int i; + double dm_ij = dm[ic*nao+jc]; + for (i = 0; i < nao*nao; i++) { + vj[i] += eri[i] * dm_ij; + } +} +void CVHFics1_kl_s1ij(double *eri, double *dm, double *vj, + int nao, int ic, int jc) +{ + const int INC1 = 1; + int nn = nao * nao; + vj[ic*nao+jc] += ddot_(&nn, eri, &INC1, dm, &INC1); +} +void CVHFics1_jk_s1il(double *eri, double *dm, double *vk, + int nao, int ic, int jc) +{ + int k, l, kl; + for (k = 0, kl = 0; k < nao; k++) { + for (l = 0; l < nao; l++, kl++) { + vk[ic*nao+l] += eri[kl] * dm[jc*nao+k]; + } } +} +void CVHFics1_il_s1jk(double *eri, double *dm, double *vk, + int nao, int ic, int jc) +{ + int k, l, kl; + for (k = 0, kl = 0; k < nao; k++) { + for (l = 0; l < nao; l++, kl++) { + vk[jc*nao+k] += eri[kl] * dm[ic*nao+l]; + } } +} + + +void CVHFics2ij_ij_s1kl(double *eri, double *dm, double *vj, + int nao, int ic, int jc) +{ + int i; + double dm_ij; + if (ic > jc) { + dm_ij = dm[ic*nao+jc] + dm[jc*nao+ic]; + } else if (ic == jc) { + dm_ij = dm[ic*nao+ic]; + } else { + return; + } + + for (i = 0; i < nao*nao; i++) { + vj[i] += eri[i] * dm_ij; + } +} +void CVHFics2ij_kl_s2ij(double *eri, double *dm, double *vj, + int nao, int ic, int jc) +{ + if (ic < jc) { + return; + } + CVHFics1_kl_s1ij(eri, dm, vj, nao, ic, jc); +} +void CVHFics2ij_jk_s1il(double *eri, double *dm, double *vk, + int nao, int ic, int jc) +{ + int k, l, kl; + if (ic > jc) { + for (k = 0, kl = 0; k < nao; k++) { + for (l = 0; l < nao; l++, kl++) { + vk[jc*nao+l] += eri[kl] * dm[ic*nao+k]; + vk[ic*nao+l] += eri[kl] * dm[jc*nao+k]; + } + } + } else if (ic == jc) { + for (k = 0, kl = 0; k < nao; k++) { + for (l = 0; l < nao; l++, kl++) { + vk[ic*nao+l] += eri[kl] * dm[ic*nao+k]; + } + } + } +} +void CVHFics2ij_il_s1jk(double *eri, double *dm, double *vk, + int nao, int ic, int jc) +{ + int k, l, kl; + if (ic > jc) { + for (k = 0, kl = 0; k < nao; k++) { + for (l = 0; l < nao; l++, kl++) { + vk[jc*nao+k] += eri[kl] * dm[ic*nao+l]; + vk[ic*nao+k] += eri[kl] * dm[jc*nao+l]; + } + } + } else if (ic == jc) { + for (k = 0, kl = 0; k < nao; k++) { + for (l = 0; l < nao; l++, kl++) { + vk[ic*nao+k] += eri[kl] * dm[ic*nao+l]; + } + } + } +} + + +void CVHFics2kl_ij_s2kl(double *eri, double *dm, double *vj, + int nao, int ic, int jc) +{ + int i, j, ij; + double dm_ij = dm[ic*nao+jc]; + for (i = 0, ij = 0; i < nao; i++) { + for (j = 0; j <= i; j++, ij++) { + vj[i*nao+j] += eri[ij] * dm_ij; + } + } +} +void CVHFics2kl_kl_s1ij(double *eri, double *dm, double *vj, + int nao, int ic, int jc) +{ + CVHFics2kl_kl_s1ij_o0(eri, dm, vj, nao, ic, jc); +} +void CVHFics2kl_jk_s1il(double *eri, double *dm, double *vk, + int nao, int ic, int jc) +{ + int k, l, kl; + for (k = 0, kl = 0; k < nao; k++) { + for (l = 0; l < k; l++, kl++) { + vk[ic*nao+l] += eri[kl] * dm[jc*nao+k]; + vk[ic*nao+k] += eri[kl] * dm[jc*nao+l]; + } + vk[ic*nao+k] += eri[kl] * dm[jc*nao+k]; + kl++; + } +} +void CVHFics2kl_il_s1jk(double *eri, double *dm, double *vk, + int nao, int ic, int jc) +{ + int k, l, kl; + for (k = 0, kl = 0; k < nao; k++) { + for (l = 0; l < k; l++, kl++) { + vk[jc*nao+l] += eri[kl] * dm[ic*nao+k]; + vk[jc*nao+k] += eri[kl] * dm[ic*nao+l]; + } + vk[jc*nao+k] += eri[kl] * dm[ic*nao+k]; + kl++; + } +} + + +/************************************************** + * s8 8-fold symmetry: i>=j,k>=l,ij>=kl + * s4 4-fold symmetry: i>=j,k>=l + * s2ij 2-fold symmetry: i>=j + * s2kl 2-fold symmetry: k>=l + * s1 no permutation symmetry + **************************************************/ +typedef void (*FjkPtr)(double *eri, double *dm, double *vk, + int nao, int ic, int jc); +void CVHFnrs8_incore_drv(double *eri, double **dms, double **vjk, + int n_dm, int nao, void (**fjk)()) +{ +#pragma omp parallel default(none) \ + shared(eri, dms, vjk, n_dm, nao, fjk) + { + int i, j, ic; + size_t ij, off; + size_t npair = nao*(nao+1)/2; + size_t nn = nao * nao; + double *v_priv = calloc(nn*n_dm, sizeof(double)); + FjkPtr pf; + double *pv; +#pragma omp for nowait schedule(dynamic, 4) + for (ij = 0; ij < npair; ij++) { + i = (int)(sqrt(2*ij+.25) - .5 + 1e-7); + j = ij - i*(i+1)/2; + off = ij*(ij+1)/2; + for (ic = 0; ic < n_dm; ic++) { + pf = fjk[ic]; + pv = v_priv + ic*nn; + (*pf)(eri+off, dms[ic], pv, nao, i, j); + } + } +#pragma omp critical + { + for (ic = 0; ic < n_dm; ic++) { + pv = vjk[ic]; + for (i = 0; i < nn; i++) { + pv[i] += v_priv[ic*nn+i]; + } + } + } + free(v_priv); + } +} + +void CVHFnrs4_incore_drv(double *eri, double **dms, double **vjk, + int n_dm, int nao, void (**fjk)()) +{ +#pragma omp parallel default(none) \ + shared(eri, dms, vjk, n_dm, nao, fjk) + { + int i, j, ic; + size_t ij, off; + size_t npair = nao*(nao+1)/2; + size_t nn = nao * nao; + double *v_priv = calloc(nn*n_dm, sizeof(double)); + FjkPtr pf; + double *pv; +#pragma omp for nowait schedule(dynamic, 4) + for (ij = 0; ij < npair; ij++) { + i = (int)(sqrt(2*ij+.25) - .5 + 1e-7); + j = ij - i*(i+1)/2; + off = ij * npair; + for (ic = 0; ic < n_dm; ic++) { + pf = fjk[ic]; + pv = v_priv + ic*nn; + (*pf)(eri+off, dms[ic], pv, nao, i, j); + } + } +#pragma omp critical + { + for (ic = 0; ic < n_dm; ic++) { + pv = vjk[ic]; + for (i = 0; i < nn; i++) { + pv[i] += v_priv[ic*nn+i]; + } + } + } + free(v_priv); + } +} + +void CVHFnrs2ij_incore_drv(double *eri, double **dms, double **vjk, + int n_dm, int nao, void (**fjk)()) +{ +#pragma omp parallel default(none) \ + shared(eri, dms, vjk, n_dm, nao, fjk) + { + int i, j, ic; + size_t ij, off; + size_t npair = nao*(nao+1)/2; + size_t nn = nao * nao; + double *v_priv = calloc(nn*n_dm, sizeof(double)); + FjkPtr pf; + double *pv; +#pragma omp for nowait schedule(dynamic, 4) + for (ij = 0; ij < npair; ij++) { + i = (int)(sqrt(2*ij+.25) - .5 + 1e-7); + j = ij - i*(i+1)/2; + off = ij * nn; + for (ic = 0; ic < n_dm; ic++) { + pf = fjk[ic]; + pv = v_priv + ic*nn; + (*pf)(eri+off, dms[ic], pv, nao, i, j); + } + } +#pragma omp critical + { + for (ic = 0; ic < n_dm; ic++) { + pv = vjk[ic]; + for (i = 0; i < nn; i++) { + pv[i] += v_priv[ic*nn+i]; + } + } + } + free(v_priv); + } +} + +void CVHFnrs2kl_incore_drv(double *eri, double **dms, double **vjk, + int n_dm, int nao, void (**fjk)()) +{ +#pragma omp parallel default(none) \ + shared(eri, dms, vjk, n_dm, nao, fjk) + { + int i, j, ic; + size_t ij, off; + size_t npair = nao*(nao+1)/2; + size_t nn = nao * nao; + double *v_priv = calloc(nn*n_dm, sizeof(double)); + FjkPtr pf; + double *pv; +#pragma omp for nowait schedule(dynamic, 4) + for (ij = 0; ij < nn; ij++) { + i = ij / nao; + j = ij - i * nao; + off = ij * npair; + for (ic = 0; ic < n_dm; ic++) { + pf = fjk[ic]; + pv = v_priv + ic*nn; + (*pf)(eri+off, dms[ic], pv, nao, i, j); + } + } +#pragma omp critical + { + for (ic = 0; ic < n_dm; ic++) { + pv = vjk[ic]; + for (i = 0; i < nn; i++) { + pv[i] += v_priv[ic*nn+i]; + } + } + } + free(v_priv); + } +} + +void CVHFnrs1_incore_drv(double *eri, double **dms, double **vjk, + int n_dm, int nao, void (**fjk)()) +{ +#pragma omp parallel default(none) \ + shared(eri, dms, vjk, n_dm, nao, fjk) + { + int i, j, ic; + size_t ij, off; + size_t nn = nao * nao; + double *v_priv = calloc(nn*n_dm, sizeof(double)); + FjkPtr pf; + double *pv; +#pragma omp for nowait schedule(dynamic, 4) + for (ij = 0; ij < nn; ij++) { + i = ij / nao; + j = ij - i * nao; + off = ij * nn; + for (ic = 0; ic < n_dm; ic++) { + pf = fjk[ic]; + pv = v_priv + ic*nn; + (*pf)(eri+off, dms[ic], pv, nao, i, j); + } + } +#pragma omp critical + { + for (ic = 0; ic < n_dm; ic++) { + pv = vjk[ic]; + for (i = 0; i < nn; i++) { + pv[i] += v_priv[ic*nn+i]; + } + } + } + free(v_priv); + } +} diff --git a/pyscfadlib/pyscfadlib/vhf/nr_sgx_direct.c b/pyscfadlib/pyscfadlib/vhf/nr_sgx_direct.c new file mode 100644 index 00000000..f56a1b23 --- /dev/null +++ b/pyscfadlib/pyscfadlib/vhf/nr_sgx_direct.c @@ -0,0 +1,563 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +#include +#include +#include +//#include +#include "config.h" +#include "cint.h" +#include "nr_direct.h" +#include "gto/gto.h" + +#define MAX(I,J) ((I) > (J) ? (I) : (J)) +#define MIN(I,J) ((I) < (J) ? (I) : (J)) + +typedef struct { + int ncomp; + int v_dims[3]; + double *data; +} SGXJKArray; + +typedef struct { + SGXJKArray *(*allocate)(int *shls_slice, int *ao_loc, int ncomp, int ngrids); + //void (*contract)(double *eri, double *dm, SGXJKArray *vjk, + // int i0, int i1, int j0, int j1); + void (*contract)(double *eri, double *dm, SGXJKArray *vjk, + int i0, int i1, int j0, int j1, + int* inds, int ngrids); + void (*set0)(SGXJKArray *, int); + void (*send)(SGXJKArray *, int, double *); + void (*finalize)(SGXJKArray *, double *); + void (*sanity_check)(int *shls_slice); +} SGXJKOperator; + +#define BLKSIZE 312 + +// for grids integrals only +int _max_cache_size_sgx(int (*intor)(), int *shls_slice, int ncenter, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int i, n; + int i0 = shls_slice[0]; + int i1 = shls_slice[1]; + for (i = 1; i < ncenter; i++) { + i0 = MIN(i0, shls_slice[i*2 ]); + i1 = MAX(i1, shls_slice[i*2+1]); + } + int shls[4]; + int cache_size = 0; + for (i = i0; i < i1; i++) { + shls[0] = i; + shls[1] = i; + shls[2] = 0; + shls[3] = BLKSIZE; + n = (*intor)(NULL, NULL, shls, atm, natm, bas, nbas, env, NULL, NULL); + cache_size = MAX(cache_size, n); + } + return cache_size; +} + +#define DECLARE_ALL \ + int *atm = envs->atm; \ + int *bas = envs->bas; \ + double *env = envs->env; \ + int natm = envs->natm; \ + int nbas = envs->nbas; \ + int *ao_loc = envs->ao_loc; \ + int *shls_slice = envs->shls_slice; \ + CINTOpt *cintopt = envs->cintopt; \ + int ioff = ao_loc[shls_slice[0]]; \ + int joff = ao_loc[shls_slice[2]]; \ + int i0, j0, i1, j1, ish, jsh, idm; \ + ish = shls[0]; \ + jsh = shls[1]; + +int SGXnr_pj_prescreen(int *shls, CVHFOpt *opt, + int *atm, int *bas, double *env) +{ + if (opt == NULL) { + return 1; + } + int i = shls[0]; + int j = shls[1]; + int k = shls[2]; + int n = opt->nbas; + int nk = opt->ngrids; + assert(opt->q_cond); + assert(opt->dm_cond); + assert(i < n); + assert(j < n); + assert(k < nk); + return opt->q_cond[i*n+j] + * MAX(fabs(opt->dm_cond[j*nk+k]), fabs(opt->dm_cond[i*nk+k])) + > opt->direct_scf_cutoff; +} + +void SGXdot_nrk(int (*intor)(), SGXJKOperator **jkop, SGXJKArray **vjk, + double **dms, double *buf, double *cache, int n_dm, int* shls, + CVHFOpt *vhfopt, IntorEnvs *envs, + double* all_grids, int tot_grids) +{ + DECLARE_ALL; + + i0 = ao_loc[ish ] - ioff; + j0 = ao_loc[jsh ] - joff; + i1 = ao_loc[ish+1] - ioff; + j1 = ao_loc[jsh+1] - joff; + + int tmp_ngrids = 0; + int k; + int* inds = (int*) malloc(tot_grids*sizeof(int)); + + double *grids = env + (size_t) env[PTR_GRIDS]; + + if (vhfopt != NULL && vhfopt->dm_cond != NULL) { + for (k = 0; k < tot_grids; k++) { + shls[2] = k; + if (SGXnr_pj_prescreen(shls, vhfopt, atm, bas, env)) { + grids[3*tmp_ngrids+0] = all_grids[3*k+0]; + grids[3*tmp_ngrids+1] = all_grids[3*k+1]; + grids[3*tmp_ngrids+2] = all_grids[3*k+2]; + inds[tmp_ngrids] = k; + tmp_ngrids++; + } + } + env[NGRIDS] = tmp_ngrids; + } else { + for (k = 0; k < tot_grids; k++) { + shls[2] = k; + grids[3*tmp_ngrids+0] = all_grids[3*k+0]; + grids[3*tmp_ngrids+1] = all_grids[3*k+1]; + grids[3*tmp_ngrids+2] = all_grids[3*k+2]; + inds[tmp_ngrids] = k; + tmp_ngrids++; + } + env[NGRIDS] = tmp_ngrids; + } + + int grid0, grid1; + const int dims[] = {ao_loc[ish+1]-ao_loc[ish], ao_loc[jsh+1]-ao_loc[jsh], tmp_ngrids}; + for (grid0 = 0; grid0 < tmp_ngrids; grid0 += BLKSIZE) { + grid1 = MIN(grid0 + BLKSIZE, tmp_ngrids); + shls[2] = grid0; + shls[3] = grid1; + (*intor)(buf+grid0, dims, shls, atm, natm, bas, nbas, env, cintopt, cache); + } + //(*intor)(buf, NULL, shls, atm, natm, bas, nbas, env, cintopt, cache); + + for (idm = 0; idm < n_dm; idm++) { + jkop[idm]->contract(buf, dms[idm], vjk[idm], + i0, i1, j0, j1, inds, tmp_ngrids); + } + + free(inds); +} + + +void SGXnr_direct_drv(int (*intor)(), void (*fdot)(), SGXJKOperator **jkop, + double **dms, double **vjk, int n_dm, int ncomp, + int *shls_slice, int *ao_loc, + CINTOpt *cintopt, CVHFOpt *vhfopt, + int *atm, int natm, int *bas, int nbas, double *env, + int env_size, int aosym) +{ + + const int ish0 = shls_slice[0]; + const int ish1 = shls_slice[1]; + const int jsh0 = shls_slice[2]; + int nish = ish1 - ish0; + int di = GTOmax_shell_dim(ao_loc, shls_slice, 2); + int cache_size = _max_cache_size_sgx(intor, shls_slice, 2, + atm, natm, bas, nbas, env); + int npair; + if (aosym == 2) { + npair = nish * (nish+1) / 2; + } else { + npair = nish * nish; + } + + int (*fprescreen)(); + if (vhfopt != NULL) { + fprescreen = vhfopt->fprescreen; + } else { + fprescreen = CVHFnoscreen; + } + int ngrids = (int) env[NGRIDS]; + double* all_grids = env+(size_t)env[PTR_GRIDS]; + +#pragma omp parallel default(none) firstprivate(ish0, jsh0) \ + shared(intor, fdot, jkop, ao_loc, shls_slice, \ + dms, vjk, n_dm, ncomp, nbas, vhfopt, \ + atm, bas, env, natm, \ + nish, di, cache_size, fprescreen, \ + aosym, npair, cintopt, env_size, \ + ngrids, all_grids) +{ + int i, ij, ish, jsh; + int shls[4]; + double* tmp_env = (double*) malloc(env_size * sizeof(double)); + for (i = 0; i < env_size; i++) { + tmp_env[i] = env[i]; + } + IntorEnvs envs = {natm, nbas, atm, bas, tmp_env, shls_slice, ao_loc, NULL, + cintopt, ncomp}; + SGXJKArray *v_priv[n_dm]; + for (i = 0; i < n_dm; i++) { + v_priv[i] = jkop[i]->allocate(shls_slice, ao_loc, ncomp, ngrids); + } + double *buf = malloc(sizeof(double) * ngrids*di*di*ncomp); + double *cache = malloc(sizeof(double) * cache_size); +#pragma omp for nowait schedule(dynamic, 1) + for (ij = 0; ij < npair; ij++) { + if (aosym == 2) { + ish = (int)(sqrt(2*ij+.25) - .5 + 1e-7); + jsh = ij - ish*(ish+1)/2; + } else { + ish = ij / nish; + jsh = ij % nish; + } + shls[0] = ish + ish0; + shls[1] = jsh + jsh0; + if ((*fprescreen)(shls, vhfopt, atm, bas, env)) + { + (*fdot)(intor, jkop, v_priv, dms, buf, cache, n_dm, shls, + vhfopt, &envs, all_grids, ngrids); + } + } +#pragma omp critical +{ + for (i = 0; i < n_dm; i++) { + jkop[i]->finalize(v_priv[i], vjk[i]); + } +} + free(buf); + free(cache); + free(tmp_env); +} +} + + +void SGXsetnr_direct_scf(CVHFOpt *opt, int (*intor)(), CINTOpt *cintopt, + int *ao_loc, int *atm, int natm, + int *bas, int nbas, double *env) +{ + if (opt->q_cond != NULL) { + free(opt->q_cond); + } + nbas = opt->nbas; + double *q_cond = (double *)malloc(sizeof(double) * nbas*nbas); + opt->q_cond = q_cond; + + int shls_slice[] = {0, nbas}; + int cache_size = GTOmax_cache_size(intor, shls_slice, 1, + atm, natm, bas, nbas, env); +#pragma omp parallel default(none) \ + shared(intor, q_cond, ao_loc, atm, natm, bas, nbas, env, cache_size) +{ + double qtmp, tmp; + int ij, i, j, di, dj, ish, jsh; + int shls[2]; + di = 0; + for (ish = 0; ish < nbas; ish++) { + dj = ao_loc[ish+1] - ao_loc[ish]; + di = MAX(di, dj); + } + double *cache = malloc(sizeof(double) * (di*di + cache_size)); + double *buf = cache + cache_size; +#pragma omp for schedule(dynamic, 4) + for (ij = 0; ij < nbas*(nbas+1)/2; ij++) { + ish = (int)(sqrt(2*ij+.25) - .5 + 1e-7); + jsh = ij - ish*(ish+1)/2; + if (bas(ATOM_OF,ish) == bas(ATOM_OF,jsh)) { + // If two shells are on the same center, their + // overlap integrals may be zero due to symmetry. + // But their contributions to sgX integrals should + // be recognized. + q_cond[ish*nbas+jsh] = 1; + q_cond[jsh*nbas+ish] = 1; + continue; + } + + shls[0] = ish; + shls[1] = jsh; + qtmp = 1e-100; + if (0 != (*intor)(buf, NULL, shls, atm, natm, bas, nbas, env, + NULL, cache)) { + di = ao_loc[ish+1] - ao_loc[ish]; + dj = ao_loc[jsh+1] - ao_loc[jsh]; + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + tmp = fabs(buf[i+di*j]); + qtmp = MAX(qtmp, tmp); + } } + } + q_cond[ish*nbas+jsh] = qtmp; + q_cond[jsh*nbas+ish] = qtmp; + } + free(cache); +} +} + +void SGXsetnr_direct_scf_dm(CVHFOpt *opt, double *dm, int nset, int *ao_loc, + int *atm, int natm, int *bas, int nbas, double *env, + int ngrids) +{ + nbas = opt->nbas; + if (opt->dm_cond != NULL) { + free(opt->dm_cond); + } + opt->dm_cond = (double *)malloc(sizeof(double) * nbas*ngrids); + // nbas in the input arguments may different to opt->nbas. + // Use opt->nbas because it is used in the prescreen function + memset(opt->dm_cond, 0, sizeof(double)*nbas*ngrids); + opt->ngrids = ngrids; + + const size_t nao = ao_loc[nbas] - ao_loc[0]; + double dmax; + size_t i, j, jsh, iset; + double *pdm; + for (i = 0; i < ngrids; i++) { + for (jsh = 0; jsh < nbas; jsh++) { + dmax = 0; + for (iset = 0; iset < nset; iset++) { + pdm = dm + nao*ngrids*iset; + for (j = ao_loc[jsh]; j < ao_loc[jsh+1]; j++) { + dmax = MAX(dmax, fabs(pdm[i*nao+j])); + } + } + opt->dm_cond[jsh*ngrids+i] = dmax; + } } +} + +int SGXnr_ovlp_prescreen(int *shls, CVHFOpt *opt, + int *atm, int *bas, double *env) +{ + if (opt == NULL) { + return 1; + } + int i = shls[0]; + int j = shls[1]; + int n = opt->nbas; + assert(opt->q_cond); + assert(i < n); + assert(j < n); + return opt->q_cond[i*n+j] > opt->direct_scf_cutoff; +} + + +#define JTYPE1 1 +#define JTYPE2 2 +#define KTYPE1 3 + +#define ALLOCATE(label, task) \ +static SGXJKArray *SGXJKOperator_allocate_##label(int *shls_slice, int *ao_loc, \ + int ncomp, int ngrids) \ +{ \ + SGXJKArray *jkarray = malloc(sizeof(SGXJKArray)); \ + jkarray->v_dims[0] = ao_loc[shls_slice[1]] - ao_loc[shls_slice[0]]; \ + jkarray->v_dims[1] = ao_loc[shls_slice[3]] - ao_loc[shls_slice[2]]; \ + jkarray->v_dims[2] = ngrids; \ + if (task == JTYPE1) { \ + jkarray->data = calloc(ncomp * jkarray->v_dims[2], sizeof(double)); \ + } else if (task == JTYPE2) { \ + jkarray->data = calloc(ncomp * jkarray->v_dims[0] \ + * jkarray->v_dims[1], sizeof(double)); \ + } else { \ + jkarray->data = calloc(ncomp * jkarray->v_dims[0] \ + * jkarray->v_dims[2], sizeof(double)); \ + } \ + jkarray->ncomp = ncomp; \ + return jkarray; \ +} \ +static void SGXJKOperator_set0_##label(SGXJKArray *jkarray, int k) \ +{ } \ +static void SGXJKOperator_send_##label(SGXJKArray *jkarray, int k, double *out) \ +{ } \ +static void SGXJKOperator_final_##label(SGXJKArray *jkarray, double *out) \ +{ \ + int i, k, icomp; \ + int ni = jkarray->v_dims[0]; \ + double *data = jkarray->data; \ + int ngrids = jkarray->v_dims[2]; \ + if (task == JTYPE1) { \ + for (i = 0; i < jkarray->ncomp; i++) { \ + for (k = 0; k < ngrids; k++) { \ + out[i*ngrids+k] += data[i*ngrids+k]; \ + } } \ + } else if (task == JTYPE2) { \ + for (i = 0; i < jkarray->ncomp * jkarray->v_dims[0] * jkarray->v_dims[1]; i++) { \ + out[i] += data[i]; \ + } \ + } else { \ + for (icomp = 0; icomp < jkarray->ncomp; icomp++) { \ + for (i = 0; i < ni; i++) { \ + for (k = 0; k < ngrids; k++) { \ + out[i*ngrids+k] += data[i*ngrids+k]; \ + } } \ + out += ngrids * ni; \ + data += ngrids * ni; \ + } \ + } \ + SGXJKOperator_deallocate(jkarray); \ +} + +#define ADD_OP(fname, task, type) \ + ALLOCATE(fname, task) \ +SGXJKOperator SGX##fname = {SGXJKOperator_allocate_##fname, fname, \ + SGXJKOperator_set0_##fname, SGXJKOperator_send_##fname, \ + SGXJKOperator_final_##fname, \ + SGXJKOperator_sanity_check_##type} + +static void SGXJKOperator_deallocate(SGXJKArray *jkarray) +{ + free(jkarray->data); + free(jkarray); +} + +static void SGXJKOperator_sanity_check_s1(int *shls_slice) +{ +} +static void SGXJKOperator_sanity_check_s2(int *shls_slice) +{ + if (!((shls_slice[0] == shls_slice[2]) && + (shls_slice[1] == shls_slice[3]))) { + fprintf(stderr, "Fail at s2\n"); + exit(1); + }; +} + +static void nrs1_ijg_ji_g(double *eri, double *dm, SGXJKArray *out, + int i0, int i1, int j0, int j1, + int* inds, int pngrids) +{ + const int ncol = out->v_dims[0]; + int i, j, k, icomp; + double *data = out->data; + + int ij = 0; + for (icomp = 0; icomp < out->ncomp; icomp++) { + for (j = j0; j < j1; j++) { + for (i = i0; i < i1; i++, ij++) { + for (k = 0; k < pngrids; k++) { + data[inds[k]] += eri[ij*pngrids+k] * dm[j*ncol+i]; + } } } + data += out->v_dims[2]; + } +} +ADD_OP(nrs1_ijg_ji_g, JTYPE1, s1); + +static void nrs2_ijg_ji_g(double *eri, double *dm, SGXJKArray *out, + int i0, int i1, int j0, int j1, + int* inds, int pngrids) +{ + if (i0 == j0) { + return nrs1_ijg_ji_g(eri, dm, out, i0, i1, j0, j1, inds, pngrids); + } + + const int ncol = out->v_dims[0]; + int i, j, k, icomp; + double *data = out->data; + + int ij = 0; + for (icomp = 0; icomp < out->ncomp; icomp++) { + for (j = j0; j < j1; j++) { + for (i = i0; i < i1; i++, ij++) { + for (k = 0; k < pngrids; k++) { + data[inds[k]] += eri[ij*pngrids+k] * (dm[j*ncol+i] + dm[i*ncol+j]); + } } } + data += out->v_dims[2]; + } +} +ADD_OP(nrs2_ijg_ji_g, JTYPE1, s2); + +static void nrs1_ijg_g_ij(double *eri, double *dm, SGXJKArray *out, + int i0, int i1, int j0, int j1, + int* inds, int pngrids) +{ + int ni = out->v_dims[0]; + int nj = out->v_dims[1]; + int i, j, k, icomp; + double *data = out->data; + + int ij = 0; + for (icomp = 0; icomp < out->ncomp; icomp++) { + for (j = j0; j < j1; j++) { + for (i = i0; i < i1; i++, ij++) { + for (k = 0; k < pngrids; k++) { + data[i*nj+j] += eri[ij*pngrids+k] * dm[inds[k]]; + } } } + data += ni * nj; + } +} +ADD_OP(nrs1_ijg_g_ij, JTYPE2, s1); + +SGXJKOperator SGXnrs2_ijg_g_ij = {SGXJKOperator_allocate_nrs1_ijg_g_ij, + nrs1_ijg_g_ij, SGXJKOperator_set0_nrs1_ijg_g_ij, + SGXJKOperator_send_nrs1_ijg_g_ij, SGXJKOperator_final_nrs1_ijg_g_ij, + SGXJKOperator_sanity_check_s2}; + +static void nrs1_ijg_gj_gi(double *eri, double *dm, SGXJKArray *out, + int i0, int i1, int j0, int j1, + int* inds, int pngrids) +{ + double *data = out->data; + int i, j, k, icomp; + const int ngrids = out->v_dims[2]; + + int ij = 0; + for (icomp = 0; icomp < out->ncomp; icomp++) { + for (j = j0; j < j1; j++) { + for (i = i0; i < i1; i++, ij++) { + for (k = 0; k < pngrids; k++) { + data[i*ngrids+inds[k]] += eri[ij*pngrids+k] * dm[j*ngrids+inds[k]]; + } } } + data += out->v_dims[0] * out->v_dims[2]; + } +} +ADD_OP(nrs1_ijg_gj_gi, KTYPE1, s1); + +static void nrs2_ijg_gj_gi(double *eri, double *dm, SGXJKArray *out, + int i0, int i1, int j0, int j1, + int* inds, int pngrids) +{ + if (i0 == j0) { + return nrs1_ijg_gj_gi(eri, dm, out, i0, i1, j0, j1, inds, pngrids); + } + + double *data = out->data; + const int ngrids = out->v_dims[2]; + int i, j, k, icomp; + + int ij = 0; + for (icomp = 0; icomp < out->ncomp; icomp++) { + for (j = j0; j < j1; j++) { + for (i = i0; i < i1; i++, ij++) { + for (k = 0; k < pngrids; k++) { + data[i*ngrids+inds[k]] += eri[ij*pngrids+k] * dm[j*ngrids+inds[k]]; + } + for (k = 0; k < pngrids; k++) { + data[j*ngrids+inds[k]] += eri[ij*pngrids+k] * dm[i*ngrids+inds[k]]; + } + } } + data += out->v_dims[0] * out->v_dims[2]; + } +} +ADD_OP(nrs2_ijg_gj_gi, KTYPE1, s2); diff --git a/pyscfadlib/pyscfadlib/vhf/optimizer.c b/pyscfadlib/pyscfadlib/vhf/optimizer.c new file mode 100644 index 00000000..996bf4b6 --- /dev/null +++ b/pyscfadlib/pyscfadlib/vhf/optimizer.c @@ -0,0 +1,517 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +#include +#include "cint.h" +#include "cvhf.h" +#include "fblas.h" +#include "optimizer.h" +#include "nr_direct.h" +#include "np_helper/np_helper.h" +#include "gto/gto.h" + +#include + +int int2e_sph(); + +void CVHFinit_optimizer(CVHFOpt **opt, int *atm, int natm, + int *bas, int nbas, double *env) +{ + CVHFOpt *opt0 = (CVHFOpt *)malloc(sizeof(CVHFOpt)); + opt0->nbas = nbas; + opt0->ngrids = 0; + opt0->direct_scf_cutoff = 1e-14; + opt0->q_cond = NULL; + opt0->dm_cond = NULL; + opt0->fprescreen = &CVHFnoscreen; + opt0->r_vkscreen = &CVHFr_vknoscreen; + *opt = opt0; +} + +void CVHFdel_optimizer(CVHFOpt **opt) +{ + CVHFOpt *opt0 = *opt; + if (opt0 == NULL) { + return; + } + + if (opt0->q_cond != NULL) { + free(opt0->q_cond); + } + if (opt0->dm_cond != NULL) { + free(opt0->dm_cond); + } + + free(opt0); + *opt = NULL; +} + +int CVHFnoscreen(int *shls, CVHFOpt *opt, int *atm, int *bas, double *env) +{ + return 1; +} + +int CVHFnr_schwarz_cond(int *shls, CVHFOpt *opt, int *atm, int *bas, double *env) +{ + if (opt == NULL) { + return 1; + } + int i = shls[0]; + int j = shls[1]; + int k = shls[2]; + int l = shls[3]; + size_t n = opt->nbas; + assert(opt->q_cond); + assert(i < n); + assert(j < n); + assert(k < n); + assert(l < n); + double qijkl = opt->q_cond[i*n+j] * opt->q_cond[k*n+l]; + return qijkl > opt->direct_scf_cutoff; +} + +int CVHFnrs8_prescreen(int *shls, CVHFOpt *opt, int *atm, int *bas, double *env) +{ + if (opt == NULL) { + return 1; // no screen + } + int i = shls[0]; + int j = shls[1]; + int k = shls[2]; + int l = shls[3]; + size_t n = opt->nbas; + double *q_cond = opt->q_cond; + double *dm_cond = opt->dm_cond; + assert(q_cond); + assert(dm_cond); + assert(i < n); + assert(j < n); + assert(k < n); + assert(l < n); + double qijkl = q_cond[i*n+j] * q_cond[k*n+l]; + double direct_scf_cutoff = opt->direct_scf_cutoff; + return qijkl > direct_scf_cutoff + &&((4*dm_cond[j*n+i]*qijkl > direct_scf_cutoff) + || (4*dm_cond[l*n+k]*qijkl > direct_scf_cutoff) + || ( dm_cond[j*n+k]*qijkl > direct_scf_cutoff) + || ( dm_cond[j*n+l]*qijkl > direct_scf_cutoff) + || ( dm_cond[i*n+k]*qijkl > direct_scf_cutoff) + || ( dm_cond[i*n+l]*qijkl > direct_scf_cutoff)); +} + +int CVHFnrs8_vj_prescreen(int *shls, CVHFOpt *opt, int *atm, int *bas, double *env) +{ + if (opt == NULL) { + return 1; // no screen + } + int i = shls[0]; + int j = shls[1]; + int k = shls[2]; + int l = shls[3]; + size_t n = opt->nbas; + assert(opt->q_cond); + assert(opt->dm_cond); + assert(i < n); + assert(j < n); + assert(k < n); + assert(l < n); + double direct_scf_cutoff = opt->direct_scf_cutoff; + double qijkl = opt->q_cond[i*n+j] * opt->q_cond[k*n+l]; + return qijkl > direct_scf_cutoff + &&((4*qijkl*opt->dm_cond[j*n+i] > direct_scf_cutoff) + || (4*qijkl*opt->dm_cond[l*n+k] > direct_scf_cutoff)); +} + +int CVHFnrs8_vk_prescreen(int *shls, CVHFOpt *opt, int *atm, int *bas, double *env) +{ + if (opt == NULL) { + return 1; // no screen + } + int i = shls[0]; + int j = shls[1]; + int k = shls[2]; + int l = shls[3]; + size_t n = opt->nbas; + double *q_cond = opt->q_cond; + double *dm_cond = opt->dm_cond; + assert(q_cond); + assert(dm_cond); + assert(i < n); + assert(j < n); + assert(k < n); + assert(l < n); + double qijkl = q_cond[i*n+j] * q_cond[k*n+l]; + double direct_scf_cutoff = opt->direct_scf_cutoff; + return qijkl > direct_scf_cutoff + &&(( dm_cond[j*n+k]*qijkl > direct_scf_cutoff) + || ( dm_cond[j*n+l]*qijkl > direct_scf_cutoff) + || ( dm_cond[i*n+k]*qijkl > direct_scf_cutoff) + || ( dm_cond[i*n+l]*qijkl > direct_scf_cutoff)); +} + +int CVHFnrs8_vj_prescreen_block(CVHFOpt *opt, int *ishls, int *jshls, int *kshls, int *lshls) +{ + int i0 = ishls[0]; + int j0 = jshls[0]; + int k0 = kshls[0]; + int l0 = lshls[0]; + int i1 = ishls[1]; + int j1 = jshls[1]; + int k1 = kshls[1]; + int l1 = lshls[1]; + int i, j, k, l; + size_t n = opt->nbas; + double *q_cond = opt->q_cond; + double *dm_cond = opt->dm_cond; + double direct_scf_cutoff = opt->direct_scf_cutoff; + double rho, cutoff; + rho = 0; + for (j = j0; j < j1; j++) { +#pragma GCC ivdep + for (i = i0; i < i1; i++) { + rho += dm_cond[j*n+i] * q_cond[j*n+i]; + } } + + if (rho != 0) { + cutoff = 4 * direct_scf_cutoff / fabs(rho); + for (l = l0; l < l1; l++) { + for (k = k0; k < k1; k++) { + if (q_cond[l*n+k] > cutoff) { + return 1; + } + } } + } + + rho = 0; + for (l = l0; l < l1; l++) { +#pragma GCC ivdep + for (k = k0; k < k1; k++) { + rho += dm_cond[l*n+k] * q_cond[l*n+k]; + } } + + if (rho != 0) { + cutoff = 4 * direct_scf_cutoff / fabs(rho); + for (j = j0; j < j1; j++) { + for (i = i0; i < i1; i++) { + if (q_cond[j*n+i] > cutoff) { + return 1; + } + } } + } + return 0; +} + +int CVHFnrs8_vk_prescreen_block(CVHFOpt *opt, int *ishls, int *jshls, int *kshls, int *lshls) +{ + const double D0 = 0; + const double D1 = 1; + const char TRANS_N = 'N'; + const char TRANS_T = 'T'; + int i0 = ishls[0]; + int j0 = jshls[0]; + int k0 = kshls[0]; + int l0 = lshls[0]; + int i1 = ishls[1]; + int j1 = jshls[1]; + int k1 = kshls[1]; + int l1 = lshls[1]; + int di = i1 - i0; + int dj = j1 - j0; + int dk = k1 - k0; + int dl = l1 - l0; + int i; + int nbas = opt->nbas; + size_t n = opt->nbas; + double *q_cond = opt->q_cond; + double *dm_cond = opt->dm_cond; + double direct_scf_cutoff = opt->direct_scf_cutoff; + assert(di < 128); + assert(dj < 128); + assert(dk < 128); + assert(dl < 128); + double buf1[128*128]; + double buf2[128*128]; + + dgemm_(&TRANS_N, &TRANS_T, &di, &dk, &dj, &D1, q_cond+j0*n+i0, &nbas, dm_cond+j0*n+k0, &nbas, &D0, buf1, &di); + dgemm_(&TRANS_N, &TRANS_T, &dl, &di, &dk, &D1, q_cond+k0*n+l0, &nbas, buf1, &di, &D0, buf2, &dl); + for (i = 0; i < di * dl; i++) { + if (buf2[i] > direct_scf_cutoff) { + return 1; + } + } + + dgemm_(&TRANS_N, &TRANS_T, &di, &dl, &dj, &D1, q_cond+j0*n+i0, &nbas, dm_cond+j0*n+l0, &nbas, &D0, buf1, &di); + dgemm_(&TRANS_N, &TRANS_T, &dk, &di, &dl, &D1, q_cond+l0*n+k0, &nbas, buf1, &di, &D0, buf2, &dk); + for (i = 0; i < di * dk; i++) { + if (buf2[i] > direct_scf_cutoff) { + return 1; + } + } + + dgemm_(&TRANS_N, &TRANS_T, &dj, &dk, &di, &D1, q_cond+i0*n+j0, &nbas, dm_cond+i0*n+k0, &nbas, &D0, buf1, &dj); + dgemm_(&TRANS_N, &TRANS_T, &dl, &dj, &dk, &D1, q_cond+k0*n+l0, &nbas, buf1, &dj, &D0, buf2, &dl); + for (i = 0; i < dj * dl; i++) { + if (buf2[i] > direct_scf_cutoff) { + return 1; + } + } + + dgemm_(&TRANS_N, &TRANS_T, &dj, &dl, &di, &D1, q_cond+i0*n+j0, &nbas, dm_cond+i0*n+l0, &nbas, &D0, buf1, &dj); + dgemm_(&TRANS_N, &TRANS_T, &dk, &dj, &dl, &D1, q_cond+l0*n+k0, &nbas, buf1, &dj, &D0, buf2, &dk); + for (i = 0; i < dj * dk; i++) { + if (buf2[i] > direct_scf_cutoff) { + return 1; + } + } + return 0; +} + +int CVHFnrs8_prescreen_block(CVHFOpt *opt, int *ishls, int *jshls, int *kshls, int *lshls) +{ + return (CVHFnrs8_vj_prescreen_block(opt, ishls, jshls, kshls, lshls) || + CVHFnrs8_vk_prescreen_block(opt, ishls, jshls, kshls, lshls)); +} + +// return flag to decide whether transpose01324 +int CVHFr_vknoscreen(int *shls, CVHFOpt *opt, + double **dms_cond, int n_dm, double *dm_atleast, + int *atm, int *bas, double *env) +{ + int idm; + for (idm = 0; idm < n_dm; idm++) { + dms_cond[idm] = NULL; + } + *dm_atleast = 0; + return 1; +} + +int CVHFnr3c2e_vj_pass1_prescreen(int *shls, CVHFOpt *opt, + int *atm, int *bas, double *env) +{ + if (opt == NULL) { + return 1; // no screen + } + size_t n = opt->nbas; + int i = shls[0]; + int j = shls[1]; + // Be careful with the range of basis k, which is between nbas and + // nbas+nauxbas. See shls_slice in df_jk.get_j function. + int k = shls[2] - n; + assert(opt->q_cond); + assert(opt->dm_cond); + assert(i < n); + assert(j < n); + assert(k < n); + double direct_scf_cutoff = opt->direct_scf_cutoff; + double qijkl = opt->q_cond[i*n+j] * opt->q_cond[n*n+k]; + return qijkl > direct_scf_cutoff + && (4*qijkl*opt->dm_cond[j*n+i] > direct_scf_cutoff); +} + +int CVHFnr3c2e_vj_pass2_prescreen(int *shls, CVHFOpt *opt, + int *atm, int *bas, double *env) +{ + if (opt == NULL) { + return 1; // no screen + } + size_t n = opt->nbas; + int i = shls[0]; + int j = shls[1]; + // Be careful with the range of basis k, which is between nbas and + // nbas+nauxbas. See shls_slice in df_jk.get_j function. + int k = shls[2] - n; + assert(opt->q_cond); + assert(opt->dm_cond); + assert(i < n); + assert(j < n); + assert(k < n); + double direct_scf_cutoff = opt->direct_scf_cutoff; + double qijkl = opt->q_cond[i*n+j] * opt->q_cond[n*n+k]; + return qijkl > direct_scf_cutoff + && (4*qijkl*opt->dm_cond[k] > direct_scf_cutoff); +} + +int CVHFnr3c2e_schwarz_cond(int *shls, CVHFOpt *opt, + int *atm, int *bas, double *env) +{ + if (opt == NULL) { + return 1; // no screen + } + size_t n = opt->nbas; + int i = shls[0]; + int j = shls[1]; + // Be careful with the range of basis k, which is between nbas and + // nbas+nauxbas. See shls_slice in df_jk.get_j function. + int k = shls[2] - n; + assert(opt->q_cond); + assert(opt->dm_cond); + assert(i < n); + assert(j < n); + assert(k < n); + double qijkl = opt->q_cond[i*n+j] * opt->q_cond[n*n+k]; + return qijkl > opt->direct_scf_cutoff; +} + + +void CVHFset_direct_scf_cutoff(CVHFOpt *opt, double cutoff) +{ + opt->direct_scf_cutoff = cutoff; +} +double CVHFget_direct_scf_cutoff(CVHFOpt *opt) +{ + return opt->direct_scf_cutoff; +} + + +void CVHFsetnr_direct_scf(CVHFOpt *opt, int (*intor)(), CINTOpt *cintopt, + int *ao_loc, int *atm, int natm, + int *bas, int nbas, double *env) +{ + /* This memory is released in void CVHFdel_optimizer, Don't know + * why valgrind raises memory leak here */ + if (opt->q_cond != NULL) { + free(opt->q_cond); + } + // nbas in the input arguments may different to opt->nbas. + // Use opt->nbas because it is used in the prescreen function + nbas = opt->nbas; + opt->q_cond = (double *)malloc(sizeof(double) * nbas*nbas); + CVHFset_int2e_q_cond(intor, cintopt, opt->q_cond, ao_loc, + atm, natm, bas, nbas, env); +} + +/* + * Non-relativistic 2-electron integrals + */ +void CVHFset_int2e_q_cond(int (*intor)(), CINTOpt *cintopt, double *q_cond, + int *ao_loc, int *atm, int natm, + int *bas, int nbas, double *env) +{ + int shls_slice[] = {0, nbas}; + const int cache_size = GTOmax_cache_size(intor, shls_slice, 1, + atm, natm, bas, nbas, env); +#pragma omp parallel +{ + double qtmp, tmp; + size_t ij, i, j, di, dj, ish, jsh; + size_t Nbas = nbas; + int shls[4]; + double *cache = malloc(sizeof(double) * cache_size); + di = 0; + for (ish = 0; ish < nbas; ish++) { + dj = ao_loc[ish+1] - ao_loc[ish]; + di = MAX(di, dj); + } + double *buf = malloc(sizeof(double) * di*di*di*di); +#pragma omp for schedule(dynamic, 4) + for (ij = 0; ij < Nbas*(Nbas+1)/2; ij++) { + ish = (size_t)(sqrt(2*ij+.25) - .5 + 1e-7); + jsh = ij - ish*(ish+1)/2; + di = ao_loc[ish+1] - ao_loc[ish]; + dj = ao_loc[jsh+1] - ao_loc[jsh]; + shls[0] = ish; + shls[1] = jsh; + shls[2] = ish; + shls[3] = jsh; + qtmp = 1e-100; + if (0 != (*intor)(buf, NULL, shls, atm, natm, bas, nbas, env, + cintopt, cache)) { + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + tmp = fabs(buf[i+di*j+di*dj*i+di*dj*di*j]); + qtmp = MAX(qtmp, tmp); + } } + qtmp = sqrt(qtmp); + } + q_cond[ish*nbas+jsh] = qtmp; + q_cond[jsh*nbas+ish] = qtmp; + } + free(buf); + free(cache); +} +} + +void CVHFset_q_cond(CVHFOpt *opt, double *q_cond, int len) +{ + if (opt->q_cond != NULL) { + free(opt->q_cond); + } + opt->q_cond = (double *)malloc(sizeof(double) * len); + NPdcopy(opt->q_cond, q_cond, len); +} + +void CVHFsetnr_direct_scf_dm(CVHFOpt *opt, double *dm, int nset, int *ao_loc, + int *atm, int natm, int *bas, int nbas, double *env) +{ + if (opt->dm_cond != NULL) { // NOT reuse opt->dm_cond because nset may be diff in different call + free(opt->dm_cond); + } + // nbas in the input arguments may different to opt->nbas. + // Use opt->nbas because it is used in the prescreen function + nbas = opt->nbas; + opt->dm_cond = (double *)malloc(sizeof(double) * nbas*nbas); + NPdset0(opt->dm_cond, ((size_t)nbas)*nbas); + + const size_t nao = ao_loc[nbas]; + double dmax, tmp; + size_t i, j, ish, jsh, iset; + double *pdm; + for (ish = 0; ish < nbas; ish++) { + for (jsh = 0; jsh <= ish; jsh++) { + dmax = 0; + for (iset = 0; iset < nset; iset++) { + pdm = dm + nao*nao*iset; + for (i = ao_loc[ish]; i < ao_loc[ish+1]; i++) { + for (j = ao_loc[jsh]; j < ao_loc[jsh+1]; j++) { +// symmetrize dm_cond because nrs8_prescreen only tests the lower (or upper) +// triangular part of dm_cond. Without the symmetrization, some integrals may be +// incorrectly skipped. + tmp = fabs(pdm[i*nao+j]) + fabs(pdm[j*nao+i]); + dmax = MAX(dmax, tmp); + } } + } + opt->dm_cond[ish*nbas+jsh] = .5 * dmax; + opt->dm_cond[jsh*nbas+ish] = .5 * dmax; + } } +} + +void CVHFset_dm_cond(CVHFOpt *opt, double *dm_cond, int len) +{ + if (opt->dm_cond != NULL) { + free(opt->dm_cond); + } + opt->dm_cond = (double *)malloc(sizeof(double) * len); + NPdcopy(opt->dm_cond, dm_cond, len); +} + + + +/* + ************************************************* + */ +void CVHFnr_optimizer(CVHFOpt **vhfopt, int (*intor)(), CINTOpt *cintopt, + int *ao_loc, int *atm, int natm, + int *bas, int nbas, double *env) +{ + CVHFinit_optimizer(vhfopt, atm, natm, bas, nbas, env); + (*vhfopt)->fprescreen = &CVHFnrs8_prescreen; + CVHFsetnr_direct_scf(*vhfopt, intor, cintopt, ao_loc, + atm, natm, bas, nbas, env); +} diff --git a/pyscfadlib/pyscfadlib/vhf/optimizer.h b/pyscfadlib/pyscfadlib/vhf/optimizer.h new file mode 100644 index 00000000..a3d823a8 --- /dev/null +++ b/pyscfadlib/pyscfadlib/vhf/optimizer.h @@ -0,0 +1,65 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#if !defined(HAVE_DEFINED_CVHFOPT_H) +#define HAVE_DEFINED_CVHFOPT_H +typedef struct CVHFOpt_struct { + int nbas; + int ngrids; + double direct_scf_cutoff; + double *q_cond; + double *dm_cond; + int (*fprescreen)(int *shls, struct CVHFOpt_struct *opt, + int *atm, int *bas, double *env); + int (*r_vkscreen)(int *shls, struct CVHFOpt_struct *opt, + double **dms_cond, int n_dm, double *dm_atleast, + int *atm, int *bas, double *env); +} CVHFOpt; +#endif + +void CVHFinit_optimizer(CVHFOpt **opt, int *atm, int natm, + int *bas, int nbas, double *env); + +void CVHFdel_optimizer(CVHFOpt **opt); + +int CVHFnoscreen(int *shls, CVHFOpt *opt, int *atm, int *bas, double *env); +int CVHFnr_schwarz_cond(int *shls, CVHFOpt *opt, int *atm, int *bas, double *env); +int CVHFnrs8_prescreen(int *shls, CVHFOpt *opt, int *atm, int *bas, double *env); +int CVHFnrs8_vj_prescreen(int *shls, CVHFOpt *opt, int *atm, int *bas, double *env); +int CVHFnrs8_vk_prescreen(int *shls, CVHFOpt *opt, int *atm, int *bas, double *env); +int CVHFnrs8_prescreen_block(CVHFOpt *opt, int *ishls, int *jshls, int *kshls, int *lshls); +int CVHFnrs8_vj_prescreen_block(CVHFOpt *opt, int *ishls, int *jshls, int *kshls, int *lshls); +int CVHFnrs8_vk_prescreen_block(CVHFOpt *opt, int *ishls, int *jshls, int *kshls, int *lshls); + +int CVHFr_vknoscreen(int *shls, CVHFOpt *opt, + double **dms_cond, int n_dm, double *dm_atleast, + int *atm, int *bas, double *env); + +void CVHFsetnr_direct_scf(CVHFOpt *opt, int (*intor)(), CINTOpt *cintopt, + int *ao_loc, int *atm, int natm, + int *bas, int nbas, double *env); +void CVHFsetnr_direct_scf_dm(CVHFOpt *opt, double *dm, int nset, int *ao_loc, + int *atm, int natm, int *bas, int nbas, double *env); + +void CVHFnr_optimizer(CVHFOpt **vhfopt, int (*intor)(), CINTOpt *cintopt, + int *ao_loc, int *atm, int natm, + int *bas, int nbas, double *env); + +void CVHFset_int2e_q_cond(int (*intor)(), CINTOpt *cintopt, double *q_cond, + int *ao_loc, int *atm, int natm, + int *bas, int nbas, double *env); diff --git a/pyscfadlib/pyscfadlib/vhf/r_direct_dot.c b/pyscfadlib/pyscfadlib/vhf/r_direct_dot.c new file mode 100644 index 00000000..7b9f4a06 --- /dev/null +++ b/pyscfadlib/pyscfadlib/vhf/r_direct_dot.c @@ -0,0 +1,646 @@ +/* Copyright 2014-2018,2021 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +#include +#include +#include "fblas.h" +#include "time_rev.h" +#include "r_direct_dot.h" +#include "np_helper/np_helper.h" + +#define LOCIJKL \ +const int ish = shls[0]; \ +const int jsh = shls[1]; \ +const int ksh = shls[2]; \ +const int lsh = shls[3]; \ +const int istart = ao_loc[ish]; \ +const int jstart = ao_loc[jsh]; \ +const int kstart = ao_loc[ksh]; \ +const int lstart = ao_loc[lsh]; \ +const int iend = ao_loc[ish+1]; \ +const int jend = ao_loc[jsh+1]; \ +const int kend = ao_loc[ksh+1]; \ +const int lend = ao_loc[lsh+1]; \ +const int di = iend - istart; \ +const int dj = jend - jstart; \ +const int dk = kend - kstart; \ +const int dl = lend - lstart; +#define DMCOND(i,j) dm_cond[shls[i]*nbas+shls[j]] + +static void get_block(double complex *a, double complex *blk, + int n, int istart, int iend, int jstart, int jend) +{ + int i, j, k; + a = a + istart * n; + for (i = istart, k = 0; i < iend; i++) { + for (j = jstart; j < jend; j++, k++) { + blk[k] = a[j]; + } + a += n; + } +} +static void adbak_block(double complex *a, double complex *blk, + int n, int istart, int iend, int jstart, int jend) +{ + int i, j, k; + a = a + istart * n; + for (i = istart, k = 0; i < iend; i++) { + for (j = jstart; j < jend; j++, k++) { + a[j] += blk[k]; + } + a += n; + } +} +// T = transpose +static void get_blockT(double complex *a, double complex *blk, + int n, int istart, int iend, int jstart, int jend) +{ + int i, j, i1, j1; + int m = iend - istart; + a = a + istart * n; + for (i = istart, i1 = 0; i < iend; i++, i1++) { + for (j = jstart, j1 = 0; j < jend; j++, j1++) { + blk[j1*m+i1] = a[j]; + } + a += n; + } +} +static void adbak_blockT(double complex *a, double complex *blk, + int n, int istart, int iend, int jstart, int jend) +{ + int i, j, i1, j1; + int m = iend - istart; + a = a + istart * n; + for (i = istart, i1 = 0; i < iend; i++, i1++) { + for (j = jstart, j1 = 0; j < jend; j++, j1++) { + a[j] += blk[j1*m+i1]; + } + a += n; + } +} + +void CVHFrs1_ji_s1kl(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + if (dm_cond != NULL && DMCOND(1,0) < dm_atleast) { return; } + LOCIJKL; + int INC1 = 1; + char TRANST = 'T'; + int dij = di * dj; + int dkl = dk * dl; + double complex Z0 = 0; + double complex Z1 = 1; + // offsets = dij * dkl * ncomp * 2 because p0213 was initialized in + // eri[dij*dkl*ncomp:] when calling transpose01324 + double complex *sdm = eri + dij * dkl * ncomp * 2; + double complex *svj = sdm + dij; + int ic; + + get_block(dm, sdm, nao, jstart, jend, istart, iend); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svj, dkl); + zgemv_(&TRANST, &dij, &dkl, &Z1, eri, &dij, + sdm, &INC1, &Z0, svj, &INC1); + adbak_blockT(vj, svj, nao, kstart, kend, lstart, lend); + eri += dij*dkl; + vj += nao*nao; + } +} + +void CVHFrs1_lk_s1ij(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + if (dm_cond != NULL && DMCOND(3,2) < dm_atleast) { return; } + LOCIJKL; + int INC1 = 1; + char TRANSN = 'N'; + int dij = di * dj; + int dkl = dk * dl; + double complex Z0 = 0; + double complex Z1 = 1; + double complex *sdm = eri + dij * dkl * ncomp * 2; + double complex *svj = sdm + dkl; + int ic; + + get_block(dm, sdm, nao, lstart, lend, kstart, kend); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svj, dij); + zgemv_(&TRANSN, &dij, &dkl, &Z1, eri, &dij, + sdm, &INC1, &Z0, svj, &INC1); + adbak_blockT(vj, svj, nao, istart, iend, jstart, jend); + eri += dij*dkl; + vj += nao*nao; + } +} + +void CVHFrs1_jk_s1il(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + if (dm_cond != NULL && DMCOND(1,2) < dm_atleast) { return; } + LOCIJKL; + int INC1 = 1; + char TRANSN = 'N'; + int djk = dk * dj; + int dil = di * dl; + int dijk = djk * di; + double complex Z1 = 1; + double complex *sdm = eri + djk * dil * ncomp * 2; + double complex *svk = sdm + djk; + int l, ic; + + get_blockT(dm, sdm, nao, jstart, jend, kstart, kend); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svk, dil); + for (l = 0; l < dl; l++) { + zgemv_(&TRANSN, &di, &djk, &Z1, eri, &di, + sdm, &INC1, &Z1, svk+l*di, &INC1); + eri += dijk; + } + adbak_blockT(vk, svk, nao, istart, iend, lstart, lend); + vk += nao*nao; + } +} +void CVHFrs1_li_s1kj(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + if (dm_cond != NULL && DMCOND(3,0) < dm_atleast) { return; } + LOCIJKL; + int INC1 = 1; + char TRANST = 'T'; + int djk = dk * dj; + int dijk = djk * di; + double complex Z1 = 1; + double complex *svk = eri + dijk * dl * ncomp * 2; + int l, l0, ic; + + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svk, djk); + for (l = 0, l0 = lstart; l < dl; l++, l0++) { + zgemv_(&TRANST, &di, &djk, &Z1, eri, &di, + dm+l0*nao+istart, &INC1, &Z1, svk, &INC1); + eri += dijk; + } + adbak_block(vk, svk, nao, kstart, kend, jstart, jend); + vk += nao*nao; + } +} + +void CVHFrs2ij_ji_s1kl(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[0] >= shls[1]); + if (shls[0] == shls[1]) { + CVHFrs1_ji_s1kl(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + return; + } + if (dm_cond != NULL && DMCOND(1,0)+DMCOND(0,1) < dm_atleast) { return; } + LOCIJKL; + int INC1 = 1; + char TRANST = 'T'; + int dij = di * dj; + int dkl = dk * dl; + double complex Z0 = 0; + double complex Z1 = 1; + double complex *sdm = eri + dij * dkl * ncomp * 2; + double complex *svj = sdm + dij; + int ic; + + CVHFtimerev_ijplus(sdm, dm, tao, jstart, jend, istart, iend, nao); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svj, dkl); + zgemv_(&TRANST, &dij, &dkl, &Z1, eri, &dij, + sdm, &INC1, &Z0, svj, &INC1); + adbak_blockT(vj, svj, nao, kstart, kend, lstart, lend); + eri += dij*dkl; + vj += nao*nao; + } +} +void CVHFrs2ij_lk_s2ij(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[0] >= shls[1]); + CVHFrs1_lk_s1ij(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} + +void CVHFrs2ij_jk_s1il(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[0] >= shls[1]); + + CVHFrs1_jk_s1il(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + if (shls[0] == shls[1]) { + return; + } + if (dm_cond != NULL && DMCOND(0,2) < dm_atleast) { return; } + + LOCIJKL; + int INC1 = 1; + char TRANST = 'T'; + int dik = di * dk; + int djl = dj * dl; + double complex Z1 = 1; + double complex *p0213 = eri + dik * djl * ncomp; + double complex *sdm = p0213 + dik * djl * ncomp; + double complex *svk = sdm + dik; + int ic; + + CVHFtimerev_iT(sdm, dm, tao, istart, iend, kstart, kend, nao); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svk, djl); + zgemv_(&TRANST, &dik, &djl, &Z1, p0213, &dik, + sdm, &INC1, &Z1, svk, &INC1); + CVHFtimerev_adbak_iT(svk, vk, tao, jstart, jend, lstart, lend, nao); + eri += dik*djl; + p0213 += dik*djl; + vk += nao*nao; + } +} +void CVHFrs2ij_li_s1kj(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[0] >= shls[1]); + + CVHFrs1_li_s1kj(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + if (shls[0] == shls[1]) { + return; + } + if (dm_cond != NULL && DMCOND(3,1) < dm_atleast) { return; } + + LOCIJKL; + int INC1 = 1; + char TRANSN = 'N'; + int dik = di * dk; + int djl = dj * dl; + double complex Z1 = 1; + double complex *p0213 = eri + dik * djl * ncomp; + double complex *sdm = p0213 + dik * djl * ncomp; + double complex *svk = sdm + djl; + int ic; + + CVHFtimerev_j(sdm, dm, tao, lstart, lend, jstart, jend, nao); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svk, dik); + zgemv_(&TRANSN, &dik, &djl, &Z1, p0213, &dik, + sdm, &INC1, &Z1, svk, &INC1); + CVHFtimerev_adbak_j(svk, vk, tao, kstart, kend, istart, iend, nao); + eri += dik*djl; + p0213 += dik*djl; + vk += nao*nao; + } +} + +void CVHFrs2kl_ji_s2kl(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[2] >= shls[3]); + CVHFrs1_ji_s1kl(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} +void CVHFrs2kl_lk_s1ij(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[2] >= shls[3]); + if (shls[2] == shls[3]) { + CVHFrs1_lk_s1ij(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + return; + } + if (dm_cond != NULL && DMCOND(2,3)+DMCOND(3,2) < dm_atleast) { return; } + + LOCIJKL; + int INC1 = 1; + char TRANSN = 'N'; + int dij = di * dj; + int dkl = dk * dl; + double complex Z0 = 0; + double complex Z1 = 1; + double complex *sdm = eri + dij * dkl * ncomp * 2; + double complex *svj = sdm + dkl; + int ic; + + CVHFtimerev_ijplus(sdm, dm, tao, lstart, lend, kstart, kend, nao); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svj, dij); + zgemv_(&TRANSN, &dij, &dkl, &Z1, eri, &dij, + sdm, &INC1, &Z0, svj, &INC1); + adbak_blockT(vj, svj, nao, istart, iend, jstart, jend); + eri += dij*dkl; + vj += nao*nao; + } +} + +void CVHFrs2kl_jk_s1il(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[2] >= shls[3]); + + CVHFrs1_jk_s1il(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + if (shls[2] == shls[3]) { + return; + } + if (dm_cond != NULL && DMCOND(1,3) < dm_atleast) { return; } + + LOCIJKL; + int INC1 = 1; + char TRANSN = 'N'; + int dik = di * dk; + int djl = dj * dl; + double complex Z1 = 1; + double complex *p0213 = eri + dik * djl * ncomp; + double complex *sdm = p0213 + dik * djl * ncomp; + double complex *svk = sdm + djl; + int ic; + + CVHFtimerev_jT(sdm, dm, tao, jstart, jend, lstart, lend, nao); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svk, dik); + zgemv_(&TRANSN, &dik, &djl, &Z1, p0213, &dik, + sdm, &INC1, &Z1, svk, &INC1); + CVHFtimerev_adbak_jT(svk, vk, tao, istart, iend, kstart, kend, nao); + eri += dik*djl; + p0213 += dik*djl; + vk += nao*nao; + } +} +void CVHFrs2kl_li_s1kj(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[2] >= shls[3]); + + CVHFrs1_li_s1kj(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + if (shls[2] == shls[3]) { + return; + } + if (dm_cond != NULL && DMCOND(2,0) < dm_atleast) { return; } + + LOCIJKL; + int INC1 = 1; + char TRANST = 'T'; + int dik = di * dk; + int djl = dj * dl; + double complex Z1 = 1; + double complex *p0213 = eri + dik * djl * ncomp; + double complex *sdm = p0213 + dik * djl * ncomp; + double complex *svk = sdm + dik; + int ic; + + CVHFtimerev_i(sdm, dm, tao, kstart, kend, istart, iend, nao); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svk, dl*dj); + zgemv_(&TRANST, &dik, &djl, &Z1, p0213, &dik, + sdm, &INC1, &Z1, svk, &INC1); + CVHFtimerev_adbak_i(svk, vk, tao, lstart, lend, jstart, jend, nao); + eri += dik*djl; + p0213 += dik*djl; + vk += nao*nao; + } +} + +void CVHFrs4_ji_s2kl(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[0] >= shls[1]); + assert(shls[2] >= shls[3]); + CVHFrs2ij_ji_s1kl(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} +void CVHFrs4_lk_s2ij(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[0] >= shls[1]); + assert(shls[2] >= shls[3]); + CVHFrs2kl_lk_s1ij(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} + +void CVHFrs4_jk_s1il(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[0] >= shls[1]); + assert(shls[2] >= shls[3]); + + CVHFrs2kl_jk_s1il(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + if (shls[0] == shls[1]) { + return; + } + + LOCIJKL; + int INC1 = 1; + char TRANST = 'T'; + int djk = dj * dk; + int dik = di * dk; + int djl = dj * dl; + int dil = di * dl; + int dijk = dik * dj; + double complex Z1 = 1; + double complex *peri = eri; + double complex *pvk = vk; + double complex *p0213 = eri + dik * djl * ncomp; + double complex *sdm = p0213 + dik * djl * ncomp; + double complex *svk = sdm + dik + dil; + int l, ic; + + // tjtikl + if (dm_cond == NULL || DMCOND(0,2) > dm_atleast) { + CVHFtimerev_iT(sdm, dm, tao, istart, iend, kstart, kend, nao); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svk, djl); + zgemv_(&TRANST, &dik, &djl, &Z1, p0213, &dik, + sdm, &INC1, &Z1, svk, &INC1); + CVHFtimerev_adbak_iT(svk, pvk, tao, jstart, jend, + lstart, lend, nao); + peri += dik*djl; + p0213 += dik*djl; + pvk += nao*nao; + } + } + if (shls[2] == shls[3]) { + return; + } + + // tjtitltk + if (dm_cond == NULL || DMCOND(0,3) > dm_atleast) { + CVHFtimerev_blockT(sdm, dm, tao, istart, iend, lstart, lend, nao); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svk, djk); + for (l = 0; l < dl; l++) { + zgemv_(&TRANST, &di, &djk, &Z1, eri, &di, + sdm+l*di, &INC1, &Z1, svk, &INC1); + eri += dijk; + } + CVHFtimerev_adbak_blockT(svk, vk, tao, jstart, jend, + kstart, kend, nao); + vk += nao*nao; + } + } +} +// should be identical to CVHFrs4_jk_s1il +void CVHFrs4_li_s1kj(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[0] >= shls[1]); + assert(shls[2] >= shls[3]); + + CVHFrs2kl_li_s1kj(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + if (shls[0] == shls[1]) { + return; + } + + LOCIJKL; + int INC1 = 1; + char TRANSN = 'N'; + int dil = di * dl; + int djk = dj * dk; + int dik = di * dk; + int djl = dj * dl; + int dijk = dik * dj; + double complex Z1 = 1; + double complex *peri = eri; + double complex *pvk = vk; + double complex *p0213 = eri + dik * djl * ncomp; + double complex *sdm = p0213 + dik * djl * ncomp; + double complex *svk = sdm + djl + djk; + int l, ic; + + // tjtikl + if (dm_cond == NULL || DMCOND(3,1) > dm_atleast) { + CVHFtimerev_j(sdm, dm, tao, lstart, lend, jstart, jend, nao); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svk, dik); + zgemv_(&TRANSN, &dik, &djl, &Z1, p0213, &dik, + sdm, &INC1, &Z1, svk, &INC1); + CVHFtimerev_adbak_j(svk, pvk, tao, kstart, kend, + istart, iend, nao); + peri += dik*djl; + p0213 += dik*djl; + pvk += nao*nao; + } + } + if (shls[2] == shls[3]) { + return; + } + + // tjtitltk + if (dm_cond == NULL || DMCOND(2,1) > dm_atleast) { + CVHFtimerev_block(sdm, dm, tao, kstart, kend, jstart, jend,nao); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svk, dil); + for (l = 0; l < dl; l++) { + zgemv_(&TRANSN, &di, &djk, &Z1, eri, &di, + sdm, &INC1, &Z1, svk+l*di, &INC1); + eri += dijk; + } + CVHFtimerev_adbak_block(svk, vk, tao, lstart, lend, + istart, iend, nao); + vk += nao*nao; + } + } +} + +void CVHFrs8_ji_s2kl(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + CVHFrs4_ji_s2kl(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + if ((shls[0] != shls[2]) || (shls[1] != shls[3])) { + CVHFrs4_lk_s2ij(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + } +} +void CVHFrs8_lk_s2ij(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + CVHFrs4_lk_s2ij(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + if ((shls[0] != shls[2]) || (shls[1] != shls[3])) { + CVHFrs4_ji_s2kl(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + } +} + +void CVHFrs8_jk_s1il(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + CVHFrs4_jk_s1il(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + if ((shls[0] != shls[2]) || (shls[1] != shls[3])) { + CVHFrs4_li_s1kj(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + } +} +void CVHFrs8_li_s1kj(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + CVHFrs4_li_s1kj(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + if ((shls[0] != shls[2]) || (shls[1] != shls[3])) { + CVHFrs4_jk_s1il(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + } +} + diff --git a/pyscfadlib/pyscfadlib/vhf/r_direct_dot.h b/pyscfadlib/pyscfadlib/vhf/r_direct_dot.h new file mode 100644 index 00000000..6ccffc5c --- /dev/null +++ b/pyscfadlib/pyscfadlib/vhf/r_direct_dot.h @@ -0,0 +1,99 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +void CVHFrs1_ji_s1kl(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast); +void CVHFrs1_lk_s1ij(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast); +void CVHFrs1_jk_s1il(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast); +void CVHFrs1_li_s1kj(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast); +void CVHFrs2ij_ji_s1kl(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast); +void CVHFrs2ij_lk_s2ij(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast); +void CVHFrs2ij_jk_s1il(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast); +void CVHFrs2ij_li_s1kj(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast); +void CVHFrs2kl_ji_s2kl(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast); +void CVHFrs2kl_lk_s1ij(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast); +void CVHFrs2kl_jk_s1il(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast); +void CVHFrs2kl_li_s1kj(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast); +void CVHFrs4_ji_s2kl(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast); +void CVHFrs4_lk_s2ij(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast); +void CVHFrs4_jk_s1il(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast); +void CVHFrs4_li_s1kj(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast); +void CVHFrs8_ji_s2kl(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast); +void CVHFrs8_lk_s2ij(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast); +void CVHFrs8_jk_s1il(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast); +void CVHFrs8_li_s1kj(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast); + diff --git a/pyscfadlib/pyscfadlib/vhf/r_direct_o1.c b/pyscfadlib/pyscfadlib/vhf/r_direct_o1.c new file mode 100644 index 00000000..456366c1 --- /dev/null +++ b/pyscfadlib/pyscfadlib/vhf/r_direct_o1.c @@ -0,0 +1,322 @@ +/* Copyright 2014-2018,2021 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +#include +#include +//#include +#include "config.h" +#include "cint.h" +#include "optimizer.h" +#include "nr_direct.h" +#include "time_rev.h" +#include "np_helper/np_helper.h" +#include "gto/gto.h" + +#define MAX(X,Y) ((X) > (Y) ? (X) : (Y)) + +#define DECLARE_ALL \ + const int *atm = envs->atm; \ + const int *bas = envs->bas; \ + const double *env = envs->env; \ + const int natm = envs->natm; \ + const int nbas = envs->nbas; \ + const int *ao_loc = envs->ao_loc; \ + const int *shls_slice = envs->shls_slice; \ + const int *tao = envs->tao; \ + const CINTOpt *cintopt = envs->cintopt; \ + const int nao = ao_loc[nbas]; \ + const int di = ao_loc[ish+1] - ao_loc[ish]; \ + const int dj = ao_loc[jsh+1] - ao_loc[jsh]; \ + const int dim = GTOmax_shell_dim(ao_loc, shls_slice+4, 2); \ + double *cache = (double *)(buf + di * dj * dim * dim * ncomp); \ + int (*fprescreen)(); \ + int (*r_vkscreen)(); \ + if (vhfopt != NULL) { \ + fprescreen = vhfopt->fprescreen; \ + r_vkscreen = vhfopt->r_vkscreen; \ + } else { \ + fprescreen = CVHFnoscreen; \ + r_vkscreen = CVHFr_vknoscreen; \ + } + +static void transpose01324(double complex * __restrict__ a, + double complex * __restrict__ at, + int di, int dj, int dk, int dl, int ncomp) +{ + int i, j, k, l, m, ic; + int dij = di * dj; + int dijk = dij * dk; + double complex *pa; + + m = 0; + for (ic = 0; ic < ncomp; ic++) { + for (l = 0; l < dl; l++) { + for (j = 0; j < dj; j++) { + pa = a + j*di; + for (k = 0; k < dk; k++) { + for (i = 0; i < di; i++) { + at[m] = pa[i]; + m++; + } + pa += dij; + } + } + a += dijk; + } + } +} +/* + * for given ksh, lsh, loop all ish, jsh + */ +void CVHFdot_rs1(int (*intor)(), void (**fjk)(), + double complex **dms, double complex *vjk, double complex *buf, + int n_dm, int ncomp, int ish, int jsh, + CVHFOpt *vhfopt, IntorEnvs *envs) +{ + DECLARE_ALL; + const size_t nao2 = nao * nao; + int idm, ksh, lsh, dk, dl, dijkl; + int shls[4]; + double complex *pv; + double *dms_cond[n_dm+1]; + double dm_atleast; + void (*pf)(); + +// to make fjk compatible to C-contiguous dm array, put ksh, lsh inner loop + shls[0] = ish; + shls[1] = jsh; + + for (ksh = 0; ksh < nbas; ksh++) { + for (lsh = 0; lsh < nbas; lsh++) { + dk = ao_loc[ksh+1] - ao_loc[ksh]; + dl = ao_loc[lsh+1] - ao_loc[lsh]; + shls[2] = ksh; + shls[3] = lsh; + if ((*fprescreen)(shls, vhfopt, atm, bas, env)) { +// append buf.transpose(0,2,1,3) to eris, to reduce the cost of r_direct_dot + if ((*intor)(buf, NULL, shls, atm, natm, bas, nbas, env, + cintopt, cache)) { + dijkl = di * dj * dk * dl; + if ((*r_vkscreen)(shls, vhfopt, dms_cond, n_dm, + &dm_atleast, atm, bas, env)) { + transpose01324(buf, buf+dijkl*ncomp, + di, dj, dk, dl, ncomp); + } + pv = vjk; + for (idm = 0; idm < n_dm; idm++) { + pf = fjk[idm]; + (*pf)(buf, dms[idm], pv, nao, ncomp, + shls, ao_loc, tao, + dms_cond[idm], nbas, dm_atleast); + pv += nao2 * ncomp; + } + } + } + } } +} + +/* + * for given ish, jsh, loop all ksh > lsh + */ +static void dot_rs2sub(int (*intor)(), void (**fjk)(), + double complex **dms, double complex *vjk, double complex *buf, + int n_dm, int ncomp, int ish, int jsh, int ksh_count, + CVHFOpt *vhfopt, IntorEnvs *envs) +{ + DECLARE_ALL; + const size_t nao2 = nao * nao; + int idm, ksh, lsh, dk, dl, dijkl; + int shls[4]; + double complex *pv; + double *dms_cond[n_dm+1]; + double dm_atleast; + void (*pf)(); + + shls[0] = ish; + shls[1] = jsh; + + for (ksh = 0; ksh < ksh_count; ksh++) { + for (lsh = 0; lsh <= ksh; lsh++) { + dk = ao_loc[ksh+1] - ao_loc[ksh]; + dl = ao_loc[lsh+1] - ao_loc[lsh]; + shls[2] = ksh; + shls[3] = lsh; + if ((*fprescreen)(shls, vhfopt, atm, bas, env)) { + if ((*intor)(buf, NULL, shls, atm, natm, bas, nbas, env, + cintopt, cache)) { + dijkl = di * dj * dk * dl; + if ((*r_vkscreen)(shls, vhfopt, dms_cond, n_dm, + &dm_atleast, atm, bas, env)) { + transpose01324(buf, buf+dijkl*ncomp, + di, dj, dk, dl, ncomp); + } + pv = vjk; + for (idm = 0; idm < n_dm; idm++) { + pf = fjk[idm]; + (*pf)(buf, dms[idm], pv, nao, ncomp, + shls, ao_loc, tao, + dms_cond[idm], nbas, dm_atleast); + pv += nao2 * ncomp; + } + } + } + } } +} + +void CVHFdot_rs2ij(int (*intor)(), void (**fjk)(), + double complex **dms, double complex *vjk, double complex *buf, + int n_dm, int ncomp, int ish, int jsh, + CVHFOpt *vhfopt, IntorEnvs *envs) +{ + if (ish >= jsh) { + CVHFdot_rs1(intor, fjk, dms, vjk, buf, n_dm, ncomp, + ish, jsh, vhfopt, envs); + } +} + +void CVHFdot_rs2kl(int (*intor)(), void (**fjk)(), + double complex **dms, double complex *vjk, double complex *buf, + int n_dm, int ncomp, int ish, int jsh, + CVHFOpt *vhfopt, IntorEnvs *envs) +{ + dot_rs2sub(intor, fjk, dms, vjk, buf, n_dm, ncomp, + ish, jsh, envs->nbas, vhfopt, envs); +} + +void CVHFdot_rs4(int (*intor)(), void (**fjk)(), + double complex **dms, double complex *vjk, double complex *buf, + int n_dm, int ncomp, int ish, int jsh, + CVHFOpt *vhfopt, IntorEnvs *envs) +{ + if (ish >= jsh) { + dot_rs2sub(intor, fjk, dms, vjk, buf, n_dm, ncomp, + ish, jsh, envs->nbas, vhfopt, envs); + } +} + +void CVHFdot_rs8(int (*intor)(), void (**fjk)(), + double complex **dms, double complex *vjk, double complex *buf, + int n_dm, int ncomp, int ish, int jsh, + CVHFOpt *vhfopt, IntorEnvs *envs) +{ + if (ish < jsh) { + return; + } + DECLARE_ALL; + const size_t nao2 = nao * nao; + int idm, ksh, lsh, dk, dl, dijkl; + int shls[4]; + double complex *pv; + double *dms_cond[n_dm+1]; + double dm_atleast; + void (*pf)(); + +// to make fjk compatible to C-contiguous dm array, put ksh, lsh inner loop + shls[0] = ish; + shls[1] = jsh; + + for (ksh = 0; ksh <= ish; ksh++) { + for (lsh = 0; lsh <= ksh; lsh++) { +/* when ksh==ish, (lshj). + * These integrals are calculated in the next (ish,jsh) pair. To show + * that, we just need to prove that every elements in shell^4 appeared + * only once in fjk_s8. */ + if ((ksh == ish) && (lsh > jsh)) { + break; + } + dk = ao_loc[ksh+1] - ao_loc[ksh]; + dl = ao_loc[lsh+1] - ao_loc[lsh]; + shls[2] = ksh; + shls[3] = lsh; + if ((*fprescreen)(shls, vhfopt, atm, bas, env)) { + if ((*intor)(buf, NULL, shls, atm, natm, bas, nbas, env, + cintopt, cache)) { + dijkl = di * dj * dk * dl; + if ((*r_vkscreen)(shls, vhfopt, dms_cond, n_dm, + &dm_atleast, atm, bas, env)) { + transpose01324(buf, buf+dijkl*ncomp, + di, dj, dk, dl, ncomp); + } + pv = vjk; + for (idm = 0; idm < n_dm; idm++) { + pf = fjk[idm]; + (*pf)(buf, dms[idm], pv, nao, ncomp, + shls, ao_loc, tao, + dms_cond[idm], nbas, dm_atleast); + pv += nao2 * ncomp; + } + } + } + } } +} + +/* + * drv loop over ij, generate eris of kl for given ij, call fjk to + * calculate vj, vk. + * + * n_dm is the number of dms for one [array(ij|kl)], + * ncomp is the number of components that produced by intor + */ +void CVHFr_direct_drv(int (*intor)(), void (*fdot)(), void (**fjk)(), + double complex **dms, double complex *vjk, + int n_dm, int ncomp, int *shls_slice, int *ao_loc, + CINTOpt *cintopt, CVHFOpt *vhfopt, + int *atm, int natm, int *bas, int nbas, double *env) +{ + const size_t nao = ao_loc[nbas]; + int *tao = malloc(sizeof(int)*nao); + CVHFtimerev_map(tao, bas, nbas); + IntorEnvs envs = {natm, nbas, atm, bas, env, shls_slice, ao_loc, tao, + cintopt, ncomp}; + + const size_t nbas2 = ((size_t)nbas) * nbas; + const size_t jk_size = nao * nao * n_dm * ncomp; + NPzset0(vjk, jk_size); + + const size_t di = GTOmax_shell_dim(ao_loc, shls_slice, 4); + const size_t cache_size = GTOmax_cache_size(intor, shls_slice, 4, + atm, natm, bas, nbas, env); +#pragma omp parallel +{ + size_t i, j, ij; + double complex *v_priv = malloc(sizeof(double complex) * jk_size); + NPzset0(v_priv, jk_size); + size_t bufsize = di*di*di*di*ncomp; + bufsize = bufsize + di*di*8 + MAX(bufsize, (cache_size+1)/2); // /2 for double complex + double complex *buf = malloc(sizeof(double complex) * bufsize); +#pragma omp for nowait schedule(dynamic) + for (ij = 0; ij < nbas2; ij++) { + i = ij / nbas; + j = ij - i * nbas; + (*fdot)(intor, fjk, dms, v_priv, buf, n_dm, ncomp, i, j, + vhfopt, &envs); + } +#pragma omp critical + { + for (i = 0; i < jk_size; i++) { + vjk[i] += v_priv[i]; + } + } + free(v_priv); + free(buf); +} + free(tao); +} + diff --git a/pyscfadlib/pyscfadlib/vhf/rah_direct_dot.c b/pyscfadlib/pyscfadlib/vhf/rah_direct_dot.c new file mode 100644 index 00000000..90705cbd --- /dev/null +++ b/pyscfadlib/pyscfadlib/vhf/rah_direct_dot.c @@ -0,0 +1,390 @@ +/* Copyright 2014-2018,2021 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * ah in rah4_ ... means anti-hermitian for e1, hermitian for e2 + * ha in rha4_ ... means hermitian for e1, anti-hermitian for e2 + * aa in raa4_ ... means anti-hermitian for e1, anti-hermitian for e2 + */ + +#include +#include +#include +#include +#include "fblas.h" +#include "time_rev.h" +#include "r_direct_dot.h" +#include "np_helper/np_helper.h" + +#define LOCIJKL \ +const int ish = shls[0]; \ +const int jsh = shls[1]; \ +const int ksh = shls[2]; \ +const int lsh = shls[3]; \ +const int istart = ao_loc[ish]; \ +const int jstart = ao_loc[jsh]; \ +const int kstart = ao_loc[ksh]; \ +const int lstart = ao_loc[lsh]; \ +const int iend = ao_loc[ish+1]; \ +const int jend = ao_loc[jsh+1]; \ +const int kend = ao_loc[ksh+1]; \ +const int lend = ao_loc[lsh+1]; \ +const int di = iend - istart; \ +const int dj = jend - jstart; \ +const int dk = kend - kstart; \ +const int dl = lend - lstart; + + +// T = transpose +static void adbak_blockT(double complex *a, double complex *blk, + int n, int istart, int iend, int jstart, int jend) +{ + int i, j, i1, j1; + int m = iend - istart; + a = a + istart * n; + for (i = istart, i1 = 0; i < iend; i++, i1++) { + for (j = jstart, j1 = 0; j < jend; j++, j1++) { + a[j] += blk[j1*m+i1]; + } + a += n; + } +} + +void CVHFrah1_ji_s1kl(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + CVHFrs1_ji_s1kl(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} + +void CVHFrah1_lk_s1ij(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + CVHFrs1_lk_s1ij(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} + +void CVHFrah1_jk_s1il(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + CVHFrs1_jk_s1il(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} +void CVHFrah1_li_s1kj(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + CVHFrs1_li_s1kj(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} + +void CVHFrah2kl_ji_s2kl(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + CVHFrs2kl_ji_s2kl(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} +void CVHFrah2kl_lk_s1ij(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + CVHFrs2kl_lk_s1ij(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} + +void CVHFrah2kl_jk_s1il(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + CVHFrs2kl_jk_s1il(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} +void CVHFrah2kl_li_s1kj(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + CVHFrs2kl_li_s1kj(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} + +void CVHFrah2ij_ji_s1kl(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[0] >= shls[1]); + if (shls[0] == shls[1]) { + CVHFrs1_ji_s1kl(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + return; + } + LOCIJKL; + int INC1 = 1; + char TRANST = 'T'; + int dij = di * dj; + int dkl = dk * dl; + double complex Z0 = 0; + double complex Z1 = 1; + double complex *sdm = eri + dij * dkl * ncomp * 2; + double complex *svj = sdm + dij; + int ic; + + CVHFtimerev_ijminus(sdm, dm, tao, jstart, jend, istart, iend, nao); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svj, dkl); + zgemv_(&TRANST, &dij, &dkl, &Z1, eri, &dij, + sdm, &INC1, &Z0, svj, &INC1); + adbak_blockT(vj, svj, nao, kstart, kend, lstart, lend); + eri += dij*dkl; + vj += nao*nao; + } +} +void CVHFrah2ij_lk_s2ij(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[0] >= shls[1]); + CVHFrs1_lk_s1ij(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} + +void CVHFrah2ij_jk_s1il(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[0] >= shls[1]); + + CVHFrs1_jk_s1il(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + if (shls[0] == shls[1]) { + return; + } + + LOCIJKL; + int INC1 = 1; + char TRANST = 'T'; + int dik = di * dk; + int djl = dj * dl; + double complex Z1 = 1; + double complex Z_1 = -1; + double complex *p0213 = eri + dik * djl * ncomp; + double complex *sdm = p0213 + dik * djl * ncomp; + double complex *svk = sdm + dik; + int ic; + + CVHFtimerev_iT(sdm, dm, tao, istart, iend, kstart, kend, nao); + + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svk, djl); + zgemv_(&TRANST, &dik, &djl, &Z_1, p0213, &dik, + sdm, &INC1, &Z1, svk, &INC1); + CVHFtimerev_adbak_iT(svk, vk, tao, jstart, jend, lstart, lend, nao); + eri += dik*djl; + p0213 += dik*djl; + vk += nao*nao; + } +} +void CVHFrah2ij_li_s1kj(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[0] >= shls[1]); + + CVHFrs1_li_s1kj(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + if (shls[0] == shls[1]) { + return; + } + + LOCIJKL; + int INC1 = 1; + char TRANSN = 'N'; + int dik = di * dk; + int djl = dj * dl; + double complex Z1 = 1; + double complex Z_1 = -1; + double complex *p0213 = eri + dik * djl * ncomp; + double complex *sdm = p0213 + dik * djl * ncomp; + double complex *svk = sdm + djl; + int ic; + + CVHFtimerev_j(sdm, dm, tao, lstart, lend, jstart, jend, nao); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svk, dik); + zgemv_(&TRANSN, &dik, &djl, &Z_1, p0213, &dik, + sdm, &INC1, &Z1, svk, &INC1); + CVHFtimerev_adbak_j(svk, vk, tao, kstart, kend, istart, iend, nao); + eri += dik*djl; + p0213 += dik*djl; + vk += nao*nao; + } +} + +void CVHFrah4_ji_s2kl(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[0] >= shls[1]); + assert(shls[2] >= shls[3]); + CVHFrah2ij_ji_s1kl(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} +void CVHFrah4_lk_s2ij(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[0] >= shls[1]); + assert(shls[2] >= shls[3]); + CVHFrs2kl_lk_s1ij(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} + +void CVHFrah4_jk_s1il(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[0] >= shls[1]); + assert(shls[2] >= shls[3]); + + CVHFrs2kl_jk_s1il(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + if (shls[0] == shls[1]) { + return; + } + + LOCIJKL; + int INC1 = 1; + char TRANST = 'T'; + int djk = dj * dk; + int dik = di * dk; + int djl = dj * dl; + int dil = di * dl; + int dijk = dik * dj; + double complex Z1 = 1; + double complex Z_1 = -1; + double complex *peri = eri; + double complex *pvk = vk; + double complex *p0213 = eri + dik * djl * ncomp; + double complex *sdm = p0213 + dik * djl * ncomp; + double complex *svk = sdm + dik + dil; + int l, ic; + + // tjtikl + CVHFtimerev_iT(sdm, dm, tao, istart, iend, kstart, kend, nao); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svk, djl); + zgemv_(&TRANST, &dik, &djl, &Z_1, p0213, &dik, + sdm, &INC1, &Z1, svk, &INC1); + CVHFtimerev_adbak_iT(svk, pvk, tao, jstart, jend, lstart, lend, nao); + peri += dik*djl; + p0213 += dik*djl; + pvk += nao*nao; + } + if (shls[2] == shls[3]) { + return; + } + + // tjtitltk + CVHFtimerev_blockT(sdm, dm, tao, istart, iend, lstart, lend, nao); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svk, djk); + for (l = 0; l < dl; l++) { + zgemv_(&TRANST, &di, &djk, &Z_1, eri, &di, + sdm+l*di, &INC1, &Z1, svk, &INC1); + eri += dijk; + } + CVHFtimerev_adbak_blockT(svk, vk, tao, jstart, jend, kstart, kend, nao); + vk += nao*nao; + } +} +// should be identical to CVHFrs4_jk_s1il +void CVHFrah4_li_s1kj(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[0] >= shls[1]); + assert(shls[2] >= shls[3]); + + CVHFrs2kl_li_s1kj(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + if (shls[0] == shls[1]) { + return; + } + + LOCIJKL; + int INC1 = 1; + char TRANSN = 'N'; + int dil = di * dl; + int djk = dj * dk; + int dik = di * dk; + int djl = dj * dl; + int dijk = dik * dj; + double complex Z1 = 1; + double complex Z_1 = -1; + double complex *peri = eri; + double complex *pvk = vk; + double complex *p0213 = eri + dik * djl * ncomp; + double complex *sdm = p0213 + dik * djl * ncomp; + double complex *svk = sdm + djl + djk; + int l, ic; + + // tjtikl + CVHFtimerev_j(sdm, dm, tao, lstart, lend, jstart, jend, nao); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svk, dik); + zgemv_(&TRANSN, &dik, &djl, &Z_1, p0213, &dik, + sdm, &INC1, &Z1, svk, &INC1); + CVHFtimerev_adbak_j(svk, pvk, tao, kstart, kend, istart, iend, nao); + peri += dik*djl; + p0213 += dik*djl; + pvk += nao*nao; + } + if (shls[2] == shls[3]) { + return; + } + + // tjtitltk + CVHFtimerev_block(sdm, dm, tao, kstart, kend, jstart, jend, nao); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svk, dil); + for (l = 0; l < dl; l++) { + zgemv_(&TRANSN, &di, &djk, &Z_1, eri, &di, + sdm, &INC1, &Z1, svk+l*di, &INC1); + eri += dijk; + } + CVHFtimerev_adbak_block(svk, vk, tao, lstart, lend, istart, iend, nao); + vk += nao*nao; + } +} + + diff --git a/pyscfadlib/pyscfadlib/vhf/rha_direct_dot.c b/pyscfadlib/pyscfadlib/vhf/rha_direct_dot.c new file mode 100644 index 00000000..466419e3 --- /dev/null +++ b/pyscfadlib/pyscfadlib/vhf/rha_direct_dot.c @@ -0,0 +1,386 @@ +/* Copyright 2014-2018,2021 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * ah in rah4_ ... means anti-hermitian for e1, hermitian for e2 + * ha in rha4_ ... means hermitian for e1, anti-hermitian for e2 + * aa in raa4_ ... means anti-hermitian for e1, anti-hermitian for e2 + */ + +#include +#include +#include +#include +#include "fblas.h" +#include "time_rev.h" +#include "r_direct_dot.h" +#include "np_helper/np_helper.h" + +#define LOCIJKL \ +const int ish = shls[0]; \ +const int jsh = shls[1]; \ +const int ksh = shls[2]; \ +const int lsh = shls[3]; \ +const int istart = ao_loc[ish]; \ +const int jstart = ao_loc[jsh]; \ +const int kstart = ao_loc[ksh]; \ +const int lstart = ao_loc[lsh]; \ +const int iend = ao_loc[ish+1]; \ +const int jend = ao_loc[jsh+1]; \ +const int kend = ao_loc[ksh+1]; \ +const int lend = ao_loc[lsh+1]; \ +const int di = iend - istart; \ +const int dj = jend - jstart; \ +const int dk = kend - kstart; \ +const int dl = lend - lstart; + + +static void adbak_blockT(double complex *a, double complex *blk, + int n, int istart, int iend, int jstart, int jend) +{ + int i, j, i1, j1; + int m = iend - istart; + a = a + istart * n; + for (i = istart, i1 = 0; i < iend; i++, i1++) { + for (j = jstart, j1 = 0; j < jend; j++, j1++) { + a[j] += blk[j1*m+i1]; + } + a += n; + } +} +void CVHFrha1_ji_s1kl(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + CVHFrs1_ji_s1kl(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} + +void CVHFrha1_lk_s1ij(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + CVHFrs1_lk_s1ij(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} + +void CVHFrha1_jk_s1il(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + CVHFrs1_jk_s1il(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} +void CVHFrha1_li_s1kj(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + CVHFrs1_li_s1kj(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} + +void CVHFrha2ij_ji_s1kl(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + CVHFrs2ij_ji_s1kl(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} +void CVHFrha2ij_lk_s2ij(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + CVHFrs2ij_lk_s2ij(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} + +void CVHFrha2ij_jk_s1il(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + CVHFrs2ij_jk_s1il(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} +void CVHFrha2ij_li_s1kj(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + CVHFrs2ij_li_s1kj(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} + +void CVHFrha2kl_ji_s2kl(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[2] >= shls[3]); + CVHFrs1_ji_s1kl(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} +void CVHFrha2kl_lk_s1ij(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[2] >= shls[3]); + if (shls[2] == shls[3]) { + CVHFrs1_lk_s1ij(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + return; + } + LOCIJKL; + int INC1 = 1; + char TRANSN = 'N'; + int dij = di * dj; + int dkl = dk * dl; + double complex Z0 = 0; + double complex Z1 = 1; + double complex *sdm = eri + dij * dkl * ncomp * 2; + double complex *svj = sdm + dkl; + int ic; + + CVHFtimerev_ijminus(sdm, dm, tao, lstart, lend, kstart, kend, nao); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svj, dij); + zgemv_(&TRANSN, &dij, &dkl, &Z1, eri, &dij, + sdm, &INC1, &Z0, svj, &INC1); + adbak_blockT(vj, svj, nao, istart, iend, jstart, jend); + eri += dij*dkl; + vj += nao*nao; + } +} + +void CVHFrha2kl_jk_s1il(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[2] >= shls[3]); + + CVHFrs1_jk_s1il(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + if (shls[2] == shls[3]) { + return; + } + + LOCIJKL; + int INC1 = 1; + char TRANSN = 'N'; + int dik = di * dk; + int djl = dj * dl; + double complex Z1 = 1; + double complex Z_1 = -1; + double complex *p0213 = eri + dik * djl * ncomp; + double complex *sdm = p0213 + dik * djl * ncomp; + double complex *svk = sdm + djl; + int ic; + + CVHFtimerev_jT(sdm, dm, tao, jstart, jend, lstart, lend, nao); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svk, dik); + zgemv_(&TRANSN, &dik, &djl, &Z_1, p0213, &dik, + sdm, &INC1, &Z1, svk, &INC1); + CVHFtimerev_adbak_jT(svk, vk, tao, istart, iend, kstart, kend, nao); + eri += dik*djl; + p0213 += dik*djl; + vk += nao*nao; + } +} +void CVHFrha2kl_li_s1kj(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[2] >= shls[3]); + + CVHFrs1_li_s1kj(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + if (shls[2] == shls[3]) { + return; + } + + LOCIJKL; + int INC1 = 1; + char TRANST = 'T'; + int dik = di * dk; + int djl = dj * dl; + double complex Z1 = 1; + double complex Z_1 = -1; + double complex *p0213 = eri + dik * djl * ncomp; + double complex *sdm = p0213 + dik * djl * ncomp; + double complex *svk = sdm + dik; + int ic; + + CVHFtimerev_i(sdm, dm, tao, kstart, kend, istart, iend, nao); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svk, dl*dj); + zgemv_(&TRANST, &dik, &djl, &Z_1, p0213, &dik, + sdm, &INC1, &Z1, svk, &INC1); + CVHFtimerev_adbak_i(svk, vk, tao, lstart, lend, jstart, jend, nao); + eri += dik*djl; + p0213 += dik*djl; + vk += nao*nao; + } +} + +void CVHFrha4_ji_s2kl(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[0] >= shls[1]); + assert(shls[2] >= shls[3]); + CVHFrs2ij_ji_s1kl(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} +void CVHFrha4_lk_s2ij(double complex *eri, + double complex *dm, double complex *vj, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[0] >= shls[1]); + assert(shls[2] >= shls[3]); + CVHFrha2kl_lk_s1ij(eri, dm, vj, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); +} + +void CVHFrha4_jk_s1il(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[0] >= shls[1]); + assert(shls[2] >= shls[3]); + + CVHFrha2kl_jk_s1il(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + if (shls[0] == shls[1]) { + return; + } + + LOCIJKL; + int INC1 = 1; + char TRANST = 'T'; + int djk = dj * dk; + int dik = di * dk; + int djl = dj * dl; + int dil = di * dl; + int dijk = dik * dj; + double complex Z1 = 1; + double complex Z_1 = -1; + double complex *peri = eri; + double complex *pvk = vk; + double complex *p0213 = eri + dik * djl * ncomp; + double complex *sdm = p0213 + dik * djl * ncomp; + double complex *svk = sdm + dik + dil; + int l, ic; + + // tjtikl + CVHFtimerev_iT(sdm, dm, tao, istart, iend, kstart, kend, nao); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svk, djl); + zgemv_(&TRANST, &dik, &djl, &Z1, p0213, &dik, + sdm, &INC1, &Z1, svk, &INC1); + CVHFtimerev_adbak_iT(svk, pvk, tao, jstart, jend, lstart, lend, nao); + peri += dik*djl; + p0213 += dik*djl; + pvk += nao*nao; + } + if (shls[2] == shls[3]) { + return; + } + + // tjtitltk + CVHFtimerev_blockT(sdm, dm, tao, istart, iend, lstart, lend, nao); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svk, djk); + for (l = 0; l < dl; l++) { + zgemv_(&TRANST, &di, &djk, &Z_1, eri, &di, + sdm+l*di, &INC1, &Z1, svk, &INC1); + eri += dijk; + } + CVHFtimerev_adbak_blockT(svk, vk, tao, jstart, jend, kstart, kend, nao); + vk += nao*nao; + } +} +// should be identical to CVHFrs4_jk_s1il +void CVHFrha4_li_s1kj(double complex *eri, + double complex *dm, double complex *vk, + int nao, int ncomp, int *shls, int *ao_loc, int *tao, + double *dm_cond, int nbas, double dm_atleast) +{ + assert(shls[0] >= shls[1]); + assert(shls[2] >= shls[3]); + + CVHFrha2kl_li_s1kj(eri, dm, vk, nao, ncomp, shls, ao_loc, tao, + dm_cond, nbas, dm_atleast); + if (shls[0] == shls[1]) { + return; + } + + LOCIJKL; + int INC1 = 1; + char TRANSN = 'N'; + int dil = di * dl; + int djk = dj * dk; + int dik = di * dk; + int djl = dj * dl; + int dijk = dik * dj; + double complex Z1 = 1; + double complex Z_1 = -1; + double complex *peri = eri; + double complex *pvk = vk; + double complex *p0213 = eri + dik * djl * ncomp; + double complex *sdm = p0213 + dik * djl * ncomp; + double complex *svk = sdm + djl + djk; + int l, ic; + + // tjtikl + CVHFtimerev_j(sdm, dm, tao, lstart, lend, jstart, jend, nao); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svk, dik); + zgemv_(&TRANSN, &dik, &djl, &Z1, p0213, &dik, + sdm, &INC1, &Z1, svk, &INC1); + CVHFtimerev_adbak_j(svk, pvk, tao, kstart, kend, istart, iend, nao); + peri += dik*djl; + p0213 += dik*djl; + pvk += nao*nao; + } + if (shls[2] == shls[3]) { + return; + } + + // tjtitltk + CVHFtimerev_block(sdm, dm, tao, kstart, kend, jstart, jend, nao); + for (ic = 0; ic < ncomp; ic++) { + NPzset0(svk, dil); + for (l = 0; l < dl; l++) { + zgemv_(&TRANSN, &di, &djk, &Z_1, eri, &di, + sdm, &INC1, &Z1, svk+l*di, &INC1); + eri += dijk; + } + CVHFtimerev_adbak_block(svk, vk, tao, lstart, lend, istart, iend, nao); + vk += nao*nao; + } +} + diff --git a/pyscfadlib/pyscfadlib/vhf/rkb_screen.c b/pyscfadlib/pyscfadlib/vhf/rkb_screen.c new file mode 100644 index 00000000..7aa5ad45 --- /dev/null +++ b/pyscfadlib/pyscfadlib/vhf/rkb_screen.c @@ -0,0 +1,348 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +#include +#include +#include +#include "cint.h" +#include "cvhf.h" +#include "optimizer.h" +#include "np_helper/np_helper.h" +#include "gto/gto.h" + +#define LL 0 +#define SS 1 +#define SL 2 +#define LS 3 + + +int int2e_spinor(); +int int2e_spsp1spsp2_spinor(); + +int CVHFrkbllll_prescreen(int *shls, CVHFOpt *opt, + int *atm, int *bas, double *env) +{ + if (opt == NULL) { + return 1; // no screen + } + int i = shls[0]; + int j = shls[1]; + int k = shls[2]; + int l = shls[3]; + int n = opt->nbas; + assert(opt->q_cond); + assert(opt->dm_cond); + assert(i < n); + assert(j < n); + assert(k < n); + assert(l < n); + double qijkl = opt->q_cond[i*n+j] * opt->q_cond[k*n+l]; + double dmin = opt->direct_scf_cutoff / qijkl; + return qijkl > opt->direct_scf_cutoff + &&((opt->dm_cond[j*n+i] > dmin) + || (opt->dm_cond[l*n+k] > dmin) + || (opt->dm_cond[j*n+k] > dmin) + || (opt->dm_cond[j*n+l] > dmin) + || (opt->dm_cond[i*n+k] > dmin) + || (opt->dm_cond[i*n+l] > dmin)); +} + +int CVHFrkbllll_vkscreen(int *shls, CVHFOpt *opt, + double **dms_cond, int n_dm, double *dm_atleast, + int *atm, int *bas, double *env) +{ + int i = shls[0]; + int j = shls[1]; + int k = shls[2]; + int l = shls[3]; + int nbas = opt->nbas; + int idm; + double qijkl = opt->q_cond[i*nbas+j] * opt->q_cond[k*nbas+l]; + double *pdmscond = opt->dm_cond + nbas*nbas; + for (idm = 0; idm < (n_dm+1)/2; idm++) { +// note in _vhf.rdirect_mapdm, J and K share the same DM + dms_cond[idm*2+0] = pdmscond + idm*nbas*nbas; // for vj + dms_cond[idm*2+1] = pdmscond + idm*nbas*nbas; // for vk + } + *dm_atleast = opt->direct_scf_cutoff / qijkl; + return 1; +} + +int CVHFrkbssll_prescreen(int *shls, CVHFOpt *opt, + int *atm, int *bas, double *env) +{ + if (opt == NULL) { + return 1; // no screen + } + int i = shls[0]; + int j = shls[1]; + int k = shls[2]; + int l = shls[3]; + int n = opt->nbas; + assert(opt->q_cond); + assert(opt->dm_cond); + assert(i < n); + assert(j < n); + assert(k < n); + assert(l < n); + double *dmsl = opt->dm_cond + n*n*SL; + double qijkl = opt->q_cond[n*n*SS+i*n+j] * opt->q_cond[k*n+l]; + double dmin = opt->direct_scf_cutoff / qijkl; + return qijkl > opt->direct_scf_cutoff + &&((opt->dm_cond[n*n*SS+j*n+i] > dmin) + || (opt->dm_cond[l*n+k] > dmin) + || (dmsl[j*n+k] > dmin) + || (dmsl[j*n+l] > dmin) + || (dmsl[i*n+k] > dmin) + || (dmsl[i*n+l] > dmin)); +} + +// be careful with the order in dms_cond, the current order (dmll, dmss, dmsl) +// is consistent to the function _call_veff_ssll in dhf.py +int CVHFrkbssll_vkscreen(int *shls, CVHFOpt *opt, + double **dms_cond, int n_dm, double *dm_atleast, + int *atm, int *bas, double *env) +{ + int i = shls[0]; + int j = shls[1]; + int k = shls[2]; + int l = shls[3]; + int nbas = opt->nbas; + int idm; + double qijkl = opt->q_cond[nbas*nbas*SS+i*nbas+j] * opt->q_cond[k*nbas+l]; + double *pdmscond = opt->dm_cond + 4*nbas*nbas; + int nset = (n_dm+2) / 3; + double *dmscondll = pdmscond + nset*nbas*nbas*LL; + double *dmscondss = pdmscond + nset*nbas*nbas*SS; + double *dmscondsl = pdmscond + nset*nbas*nbas*SL; + for (idm = 0; idm < nset; idm++) { + dms_cond[nset*0+idm] = dmscondll + idm*nbas*nbas; + dms_cond[nset*1+idm] = dmscondss + idm*nbas*nbas; + dms_cond[nset*2+idm] = dmscondsl + idm*nbas*nbas; + } + *dm_atleast = opt->direct_scf_cutoff / qijkl; + return 1; +} + + +static void set_qcond(int (*intor)(), CINTOpt *cintopt, double *qcond, + int *ao_loc, int *atm, int natm, + int *bas, int nbas, double *env) +{ + int shls_slice[] = {0, nbas}; + const int cache_size = GTOmax_cache_size(intor, shls_slice, 1, + atm, natm, bas, nbas, env); +#pragma omp parallel +{ + double qtmp, tmp; + int i, j, ij, di, dj, ish, jsh; + int shls[4]; + double *cache = malloc(sizeof(double) * cache_size); + di = 0; + for (ish = 0; ish < nbas; ish++) { + dj = ao_loc[ish+1] - ao_loc[ish]; + di = MAX(di, dj); + } + double complex *buf = malloc(sizeof(double complex) * di*di*di*di); +#pragma omp for schedule(dynamic, 4) + for (ij = 0; ij < nbas*(nbas+1)/2; ij++) { + ish = (int)(sqrt(2*ij+.25) - .5 + 1e-7); + jsh = ij - ish*(ish+1)/2; + di = ao_loc[ish+1] - ao_loc[ish]; + dj = ao_loc[jsh+1] - ao_loc[jsh]; + shls[0] = ish; + shls[1] = jsh; + shls[2] = ish; + shls[3] = jsh; + qtmp = 1e-100; + if (0 != (*intor)(buf, NULL, shls, atm, natm, bas, nbas, env, cintopt, cache)) { + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + tmp = cabs(buf[i+di*j+di*dj*i+di*dj*di*j]); + qtmp = MAX(qtmp, tmp); + } } + qtmp = sqrt(qtmp); + } + qcond[ish*nbas+jsh] = qtmp; + qcond[jsh*nbas+ish] = qtmp; + } + free(buf); + free(cache); +} +} + +void CVHFrkbllll_direct_scf(CVHFOpt *opt, int (*intor)(), CINTOpt *cintopt, + int *ao_loc, int *atm, int natm, + int *bas, int nbas, double *env) +{ + if (opt->q_cond != NULL) { + free(opt->q_cond); + } + opt->q_cond = (double *)malloc(sizeof(double) * nbas*nbas); + + assert(intor == &int2e_spinor); + set_qcond(intor, cintopt, opt->q_cond, ao_loc, atm, natm, bas, nbas, env); +} + +void CVHFrkbssss_direct_scf(CVHFOpt *opt, int (*intor)(), CINTOpt *cintopt, + int *ao_loc, int *atm, int natm, + int *bas, int nbas, double *env) +{ + if (opt->q_cond != NULL) { + free(opt->q_cond); + } + opt->q_cond = (double *)malloc(sizeof(double) * nbas*nbas); + + assert(intor == &int2e_spsp1spsp2_spinor); + set_qcond(intor, cintopt, opt->q_cond, ao_loc, atm, natm, bas, nbas, env); +} + + +void CVHFrkbssll_direct_scf(CVHFOpt *opt, int (*intor)(), CINTOpt *cintopt, + int *ao_loc, int *atm, int natm, + int *bas, int nbas, double *env) +{ + if (opt->q_cond != NULL) { + free(opt->q_cond); + } + opt->q_cond = (double *)malloc(sizeof(double) * nbas*nbas*2); + + set_qcond(&int2e_spinor, NULL, opt->q_cond, ao_loc, atm, natm, bas, nbas, env); + set_qcond(&int2e_spsp1spsp2_spinor, NULL, opt->q_cond+nbas*nbas, ao_loc, + atm, natm, bas, nbas, env); +} + +static void set_dmcond(double *dmcond, double *dmscond, double complex *dm, + double direct_scf_cutoff, int nset, int *ao_loc, + int *atm, int natm, int *bas, int nbas, double *env) +{ + const size_t nao = ao_loc[nbas]; + double dmax, dmaxi, tmp; + int i, j, ish, jsh; + int iset; + double complex *pdm; + + for (ish = 0; ish < nbas; ish++) { + for (jsh = 0; jsh <= ish; jsh++) { + dmax = 0; + for (iset = 0; iset < nset; iset++) { + dmaxi = 0; + pdm = dm + nao*nao*iset; + for (i = ao_loc[ish]; i < ao_loc[ish+1]; i++) { + for (j = ao_loc[jsh]; j < ao_loc[jsh+1]; j++) { + tmp = cabs(pdm[i*nao+j]) + cabs(pdm[j*nao+i]); + dmaxi = MAX(dmaxi, tmp); + } } + dmscond[iset*nbas*nbas+ish*nbas+jsh] = .5 * dmaxi; + dmscond[iset*nbas*nbas+jsh*nbas+ish] = .5 * dmaxi; + dmax = MAX(dmax, dmaxi); + } + dmcond[ish*nbas+jsh] = .5 * dmax; + dmcond[jsh*nbas+ish] = .5 * dmax; + } } +} + +// dm_cond ~ 1+nset, dm_cond + dms_cond +void CVHFrkbllll_direct_scf_dm(CVHFOpt *opt, double complex *dm, int nset, + int *ao_loc, int *atm, int natm, + int *bas, int nbas, double *env) +{ + if (opt->dm_cond != NULL) { // NOT reuse opt->dm_cond because nset may be diff in different call + free(opt->dm_cond); + } + opt->dm_cond = (double *)malloc(sizeof(double)*nbas*nbas*(1+nset)); + NPdset0(opt->dm_cond, ((size_t)nbas)*nbas*(1+nset)); + // dmcond followed by dmscond which are max matrix element for each dm + set_dmcond(opt->dm_cond, opt->dm_cond+nbas*nbas, dm, + opt->direct_scf_cutoff, nset, ao_loc, atm, natm, bas, nbas, env); +} + +void CVHFrkbssss_direct_scf_dm(CVHFOpt *opt, double complex *dm, int nset, + int *ao_loc, int *atm, int natm, + int *bas, int nbas, double *env) +{ + if (opt->dm_cond != NULL) { + free(opt->dm_cond); + } + opt->dm_cond = (double *)malloc(sizeof(double)*nbas*nbas*(1+nset)); + NPdset0(opt->dm_cond, ((size_t)nbas)*nbas*(1+nset)); + set_dmcond(opt->dm_cond, opt->dm_cond+nbas*nbas, dm, + opt->direct_scf_cutoff, nset, ao_loc, atm, natm, bas, nbas, env); +} + +// the current order of dmscond (dmll, dmss, dmsl) is consistent to the +// function _call_veff_ssll in dhf.py +void CVHFrkbssll_direct_scf_dm(CVHFOpt *opt, double complex *dm, int nset, + int *ao_loc, int *atm, int natm, + int *bas, int nbas, double *env) +{ + if (opt->dm_cond != NULL) { + free(opt->dm_cond); + } + if (nset < 4) { + fprintf(stderr, "4 sets of DMs (dmll,dmss,dmsl,dmls) are " + "required to set rkb prescreening\n"); + exit(1); + } + nset = nset / 4; + int n2c = CINTtot_cgto_spinor(bas, nbas); + size_t nbas2 = nbas * nbas; + opt->dm_cond = (double *)malloc(sizeof(double)*nbas2*4*(1+nset)); + NPdset0(opt->dm_cond, nbas2*4*(1+nset)); + + // 4 types of dmcond (LL,SS,SL,LS) followed by 4 types of dmscond + double *dmcondll = opt->dm_cond + nbas2*LL; + double *dmcondss = opt->dm_cond + nbas2*SS; + double *dmcondsl = opt->dm_cond + nbas2*SL; + double *dmcondls = opt->dm_cond + nbas2*LS; + double *pdmscond = opt->dm_cond + nbas2*4; + double *dmscondll = pdmscond + nset*nbas2*LL; + double *dmscondss = pdmscond + nset*nbas2*SS; + double *dmscondsl = pdmscond + nset*nbas2*SL; + double *dmscondls = pdmscond + nset*nbas2*LS; + double complex *dmll = dm + n2c*n2c*LL*nset; + double complex *dmss = dm + n2c*n2c*SS*nset; + double complex *dmsl = dm + n2c*n2c*SL*nset; + double complex *dmls = dm + n2c*n2c*LS*nset; + + set_dmcond(dmcondll, dmscondll, dmll, + opt->direct_scf_cutoff, nset, ao_loc, atm, natm, bas, nbas, env); + set_dmcond(dmcondss, dmscondss, dmss, + opt->direct_scf_cutoff, nset, ao_loc, atm, natm, bas, nbas, env); + set_dmcond(dmcondsl, dmscondsl, dmsl, + opt->direct_scf_cutoff, nset, ao_loc, atm, natm, bas, nbas, env); + set_dmcond(dmcondls, dmscondls, dmls, + opt->direct_scf_cutoff, nset, ao_loc, atm, natm, bas, nbas, env); + + // aggregate dmcondls to dmcondsl + int i, j, n; + for (i = 0; i < nbas; i++) { + for (j = 0; j < nbas; j++) { + dmcondsl[i*nbas+j] = MAX(dmcondsl[i*nbas+j], dmcondls[j*nbas+i]); + } } + for (n = 0; n < nset; n++) { + for (i = 0; i < nbas; i++) { + for (j = 0; j < nbas; j++) { + dmscondsl[i*nbas+j] = MAX(dmscondsl[i*nbas+j], dmscondls[j*nbas+i]); + } } + dmscondsl += nbas2; + dmscondls += nbas2; + } +} diff --git a/pyscfadlib/pyscfadlib/vhf/test/test_nr_direct.py b/pyscfadlib/pyscfadlib/vhf/test/test_nr_direct.py new file mode 100644 index 00000000..3d8d058d --- /dev/null +++ b/pyscfadlib/pyscfadlib/vhf/test/test_nr_direct.py @@ -0,0 +1,293 @@ +#!/usr/bin/env python +# Copyright 2014-2018 The PySCF Developers. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import ctypes +import _ctypes +import unittest +import numpy +from pyscf import lib +from pyscf import scf +from pyscf import gto +from pyscf import ao2mo + +libcvhf2 = lib.load_library('libcvhf') + +mol = gto.Mole() +mol.verbose = 0 +mol.output = None#'out_h2o' +mol.atom = [ + ['O' , (0. , 0. , 0.)], + [1 , (0. , -0.757 , 0.587)], + [1 , (0. , 0.757 , 0.587)] ] + +mol.basis = 'cc-pvdz' + +mol.build() +rhf = scf.RHF(mol) +rhf.scf() + + +nao = mol.nao_nr() +npair = nao*(nao+1)//2 +c_atm = numpy.array(mol._atm, dtype=numpy.int32) +c_bas = numpy.array(mol._bas, dtype=numpy.int32) +c_env = numpy.array(mol._env) +natm = ctypes.c_int(c_atm.shape[0]) +nbas = ctypes.c_int(c_bas.shape[0]) +cvhfopt = lib.c_null_ptr() +cintopt = lib.c_null_ptr() +ao_loc = numpy.asarray(mol.ao_loc_nr(), dtype=numpy.int32) +# for each dm1, call namejk +def runjk(dm1, ncomp, intorname, filldot, *namejk): + fdrv = getattr(libcvhf2, 'CVHFnr_direct_drv') + intor = getattr(libcvhf2, intorname) + fdot = getattr(libcvhf2, filldot) + + njk = len(namejk) + if dm1.ndim == 2: + n_dm = 1 + dm1 = (dm1,) + else: + n_dm = dm1.shape[0] + + vjk = numpy.zeros((njk,n_dm*ncomp,nao,nao)) + fjk = (ctypes.c_void_p*(njk*n_dm))() + dmsptr = (ctypes.c_void_p*(njk*n_dm))() + vjkptr = (ctypes.c_void_p*(njk*n_dm))() + for i, symb in enumerate(namejk): + f1 = ctypes.c_void_p(_ctypes.dlsym(libcvhf2._handle, symb)) + for j in range(n_dm): + dmsptr[i*n_dm+j] = dm1[j].ctypes.data_as(ctypes.c_void_p) + vjkptr[i*n_dm+j] = vjk[i,j*ncomp].ctypes.data_as(ctypes.c_void_p) + fjk[i*n_dm+j] = f1 + shls_slice = (ctypes.c_int*8)(*([0, mol.nbas]*4)) + + fdrv(intor, fdot, fjk, dmsptr, vjkptr, + ctypes.c_int(njk*n_dm), ctypes.c_int(ncomp), + shls_slice, ao_loc.ctypes.data_as(ctypes.c_void_p), + cintopt, cvhfopt, + c_atm.ctypes.data_as(ctypes.c_void_p), natm, + c_bas.ctypes.data_as(ctypes.c_void_p), nbas, + c_env.ctypes.data_as(ctypes.c_void_p)) + if n_dm * ncomp == 1: + vjk = vjk.reshape(njk,nao,nao) + return vjk + +def runjks2(dm1, ncomp, intorname, filldot, *namejk): + vjk = runjk(dm1, ncomp, intorname, filldot, *namejk) + return [lib.hermi_triu(v, 1) for v in vjk] + +def makeri(fname, comp): + nao = mol.nao_nr() + eri = numpy.empty((comp,nao,nao,nao,nao)) + ip = 0 + for i in range(mol.nbas): + jp = 0 + for j in range(mol.nbas): + kp = 0 + for k in range(mol.nbas): + lp = 0 + for l in range(mol.nbas): + buf = gto.moleintor.getints_by_shell(fname, (i,j,k,l), mol._atm, + mol._bas, mol._env, comp) + di,dj,dk,dl = buf.shape[1:] + eri[:,ip:ip+di,jp:jp+dj,kp:kp+dk,lp:lp+dl] = buf + lp += dl + kp += dk + jp += dj + ip += di + return eri + + +class KnowValues(unittest.TestCase): + def test_direct_jk_s1(self): + numpy.random.seed(15) + + dm1 = numpy.random.random((nao,nao)) + dm1 = dm1 + dm1.T + vj0, vk0 = scf._vhf.incore(rhf._eri, dm1, 1) + vj1, vk1 = runjk(dm1, 1, 'int2e_sph', 'CVHFdot_nrs8', + 'CVHFnrs8_ji_s1kl', 'CVHFnrs8_jk_s1il') + self.assertTrue(numpy.allclose(vj0,vj1)) + self.assertTrue(numpy.allclose(vk0,vk1)) + + dm1 = numpy.array((dm1,dm1)) + vj1, vk1 = runjk(dm1, 1, 'int2e_sph', 'CVHFdot_nrs8', + 'CVHFnrs8_ji_s1kl', 'CVHFnrs8_jk_s1il') + self.assertTrue(numpy.allclose(vj0,vj1[0])) + self.assertTrue(numpy.allclose(vk0,vk1[0])) + self.assertTrue(numpy.allclose(vj0,vj1[1])) + self.assertTrue(numpy.allclose(vk0,vk1[1])) + + dm1 = numpy.random.random((nao,nao)) + eri1 = ao2mo.restore(1, rhf._eri, nao) + vj0 = numpy.einsum('ijkl,kl->ij', eri1, dm1) + vk0 = numpy.einsum('ijkl,jk->il', eri1, dm1) + vj1, vj2 = runjk(dm1, 1, 'int2e_sph', 'CVHFdot_nrs4', + 'CVHFnrs4_ji_s1kl', 'CVHFnrs4_jk_s1il') + self.assertTrue(numpy.allclose(vj0,vj1)) + self.assertTrue(numpy.allclose(vk0,vj2)) + + vk1 = runjk(dm1, 1, 'int2e_sph', 'CVHFdot_nrs4', + 'CVHFnrs4_li_s1kj', 'CVHFnrs4_jk_s1il') + self.assertTrue(numpy.allclose(vk0,vk1[0])) + self.assertTrue(numpy.allclose(vk0,vk1[1])) + + dm1 = dm1 + dm1.T + vk0 = numpy.einsum('ijkl,jk->il', eri1, dm1) + vk1 = runjk(dm1, 1, 'int2e_sph', 'CVHFdot_nrs4', + 'CVHFnrs4_li_s1kj', 'CVHFnrs4_jk_s1il', + 'CVHFnrs4_li_s1kj', 'CVHFnrs4_jk_s1il') + self.assertTrue(numpy.allclose(vk0,vk1[0])) + self.assertTrue(numpy.allclose(vk0,vk1[1])) + self.assertTrue(numpy.allclose(vk0,vk1[2])) + self.assertTrue(numpy.allclose(vk0,vk1[3])) + + dm1 = numpy.random.random((nao,nao)) + vj0 = numpy.einsum('ijkl,kl->ij', eri1, dm1) + vk0 = numpy.einsum('ijkl,jk->il', eri1, dm1) + vk1 = runjk(dm1, 1, 'int2e_sph', 'CVHFdot_nrs2kl', + 'CVHFnrs2kl_ji_s1kl', 'CVHFnrs2kl_lk_s1ij', + 'CVHFnrs2kl_jk_s1il', 'CVHFnrs2kl_li_s1kj') + self.assertTrue(numpy.allclose(vj0,vk1[0])) + self.assertTrue(numpy.allclose(vj0,vk1[1])) + self.assertTrue(numpy.allclose(vk0,vk1[2])) + self.assertTrue(numpy.allclose(vk0,vk1[3])) + + vk1 = runjk(dm1, 1, 'int2e_sph', 'CVHFdot_nrs2ij', + 'CVHFnrs2ij_ji_s1kl', 'CVHFnrs2ij_lk_s1ij', + 'CVHFnrs2ij_jk_s1il', 'CVHFnrs2ij_li_s1kj') + self.assertTrue(numpy.allclose(vj0,vk1[0])) + self.assertTrue(numpy.allclose(vj0,vk1[1])) + self.assertTrue(numpy.allclose(vk0,vk1[2])) + self.assertTrue(numpy.allclose(vk0,vk1[3])) + + vk1 = runjk(dm1, 1, 'int2e_sph', 'CVHFdot_nrs1', + 'CVHFnrs1_ji_s1kl', 'CVHFnrs1_lk_s1ij', + 'CVHFnrs1_jk_s1il', 'CVHFnrs1_li_s1kj') + self.assertTrue(numpy.allclose(vj0,vk1[0])) + self.assertTrue(numpy.allclose(vj0,vk1[1])) + self.assertTrue(numpy.allclose(vk0,vk1[2])) + self.assertTrue(numpy.allclose(vk0,vk1[3])) + + def test_direct_jk_ncomp_s1(self): + numpy.random.seed(15) + dm1 = numpy.random.random((nao,nao)) + dm1 = dm1 + dm1.T + eri0 = makeri('int2e_ip1_sph', 3) + vj0 = numpy.einsum('pijkl,ji->pkl', eri0, dm1) + vk0 = numpy.einsum('pijkl,li->pkj', eri0, dm1) + vj1, vk1 = runjk(dm1, 3, 'int2e_ip1_sph', 'CVHFdot_nrs1', + 'CVHFnrs1_ji_s1kl', 'CVHFnrs1_li_s1kj') + self.assertTrue(numpy.allclose(vj0,vj1)) + self.assertTrue(numpy.allclose(vk0,vk1)) + + vj1, vk1 = runjk(dm1, 3, 'int2e_ip1_sph', 'CVHFdot_nrs2kl', + 'CVHFnrs2kl_ji_s1kl', 'CVHFnrs2kl_li_s1kj') + self.assertTrue(numpy.allclose(vj0,vj1)) + self.assertTrue(numpy.allclose(vk0,vk1)) + + eri0 = makeri('int2e_ig1_sph', 3) + vj0 = numpy.einsum('pijkl,ji->pkl', eri0, dm1) + vk0 = numpy.einsum('pijkl,li->pkj', eri0, dm1) + vj1, vk1 = runjk(dm1, 3, 'int2e_ig1_sph', 'CVHFdot_nrs1', + 'CVHFnrs1_ji_s1kl', 'CVHFnrs1_li_s1kj') + self.assertTrue(numpy.allclose(vj0,vj1)) + self.assertTrue(numpy.allclose(vk0,vk1)) + + vj1, vk1 = runjk(dm1, 3, 'int2e_ig1_sph', 'CVHFdot_nrs2kl', + 'CVHFnrs2kl_ji_s1kl', 'CVHFnrs2kl_li_s1kj') + self.assertTrue(numpy.allclose(vj0,vj1)) + self.assertTrue(numpy.allclose(vk0,vk1)) + + vj1, vk1 = runjk(dm1, 3, 'int2e_ig1_sph', 'CVHFdot_nrs4', + 'CVHFnra4ij_ji_s1kl', 'CVHFnra4ij_li_s1kj') + self.assertTrue(numpy.allclose(vj0,vj1)) + self.assertTrue(numpy.allclose(vk0,vk1)) + + def test_direct_jk_s2(self): + numpy.random.seed(15) + + dm1 = numpy.random.random((nao,nao)) + dm1 = dm1 + dm1.T + vj0, vk0 = scf._vhf.incore(rhf._eri, dm1, 1) + vj1, vk1 = runjks2(dm1, 1, 'int2e_sph', 'CVHFdot_nrs8', + 'CVHFnrs8_ji_s2kl', 'CVHFnrs8_jk_s2il') + self.assertTrue(numpy.allclose(vj0,vj1)) + self.assertTrue(numpy.allclose(vk0,vk1)) + + eri1 = ao2mo.restore(1, rhf._eri, nao) + vj0 = numpy.einsum('ijkl,kl->ij', eri1, dm1) + vk0 = numpy.einsum('ijkl,jk->il', eri1, dm1) + vj1, vj2 = runjks2(dm1, 1, 'int2e_sph', 'CVHFdot_nrs4', + 'CVHFnrs4_ji_s2kl', 'CVHFnrs4_jk_s2il') + self.assertTrue(numpy.allclose(vj0,vj1)) + self.assertTrue(numpy.allclose(vk0,vj2)) + + vj1, vk1 = runjks2(dm1, 1, 'int2e_sph', 'CVHFdot_nrs4', + 'CVHFnrs4_li_s2kj', 'CVHFnrs4_jk_s2il') + self.assertTrue(numpy.allclose(vk0,vj1)) + self.assertTrue(numpy.allclose(vk0,vk1)) + + vk0 = numpy.einsum('ijkl,jk->il', eri1, dm1) + vk1 = runjks2(dm1, 1, 'int2e_sph', 'CVHFdot_nrs4', + 'CVHFnrs4_li_s2kj', 'CVHFnrs4_jk_s2il', + 'CVHFnrs4_li_s2kj', 'CVHFnrs4_jk_s2il') + self.assertTrue(numpy.allclose(vk0,vk1[0])) + self.assertTrue(numpy.allclose(vk0,vk1[1])) + self.assertTrue(numpy.allclose(vk0,vk1[2])) + self.assertTrue(numpy.allclose(vk0,vk1[3])) + + vj0 = numpy.einsum('ijkl,kl->ij', eri1, dm1) + vk0 = numpy.einsum('ijkl,jk->il', eri1, dm1) + vk1 = runjks2(dm1, 1, 'int2e_sph', 'CVHFdot_nrs2kl', + 'CVHFnrs2kl_ji_s2kl', 'CVHFnrs2kl_lk_s2ij', + 'CVHFnrs2kl_jk_s2il', 'CVHFnrs2kl_li_s2kj') + self.assertTrue(numpy.allclose(vj0,vk1[0])) + self.assertTrue(numpy.allclose(vj0,vk1[1])) + self.assertTrue(numpy.allclose(vk0,vk1[2])) + self.assertTrue(numpy.allclose(vk0,vk1[3])) + + vk1 = runjks2(dm1, 1, 'int2e_sph', 'CVHFdot_nrs2ij', + 'CVHFnrs2ij_ji_s2kl', 'CVHFnrs2ij_lk_s2ij', + 'CVHFnrs2ij_jk_s2il', 'CVHFnrs2ij_li_s2kj') + self.assertTrue(numpy.allclose(vj0,vk1[0])) + self.assertTrue(numpy.allclose(vj0,vk1[1])) + self.assertTrue(numpy.allclose(vk0,vk1[2])) + self.assertTrue(numpy.allclose(vk0,vk1[3])) + + vk1 = runjks2(dm1, 1, 'int2e_sph', 'CVHFdot_nrs1', + 'CVHFnrs1_ji_s2kl', 'CVHFnrs1_lk_s2ij', + 'CVHFnrs1_jk_s2il', 'CVHFnrs1_li_s2kj') + self.assertTrue(numpy.allclose(vj0,vk1[0])) + self.assertTrue(numpy.allclose(vj0,vk1[1])) + self.assertTrue(numpy.allclose(vk0,vk1[2])) + self.assertTrue(numpy.allclose(vk0,vk1[3])) + + vj0, vk0 = scf._vhf.incore(rhf._eri, dm1, 1) + vj1, vk1 = runjk(dm1, 1, 'int2e_sph', 'CVHFdot_nrs8', + 'CVHFnrs8_ji_s2kl', 'CVHFnrs8_jk_s2il') + vj1 = lib.hermi_triu(vj1, 1) + vk1 = lib.hermi_triu(vk1, 1) + self.assertTrue(numpy.allclose(vj0,vj1)) + self.assertTrue(numpy.allclose(vk0,vk1)) + + + +if __name__ == '__main__': + print('Full Tests for nr_direct') + unittest.main() + diff --git a/pyscfadlib/pyscfadlib/vhf/time_rev.c b/pyscfadlib/pyscfadlib/vhf/time_rev.c new file mode 100644 index 00000000..38581aa7 --- /dev/null +++ b/pyscfadlib/pyscfadlib/vhf/time_rev.c @@ -0,0 +1,652 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#include +#include +#include "cint.h" +#include "time_rev.h" + +/* index start from 1 */ +void CVHFtimerev_map(int *tao, int *bas, int nbas) +{ + int k, l, n, m, k0, dj, ib, kpa; + + k0 = 0; + k = 0; + for (ib = 0; ib < nbas; ib++) { + l = bas(ANG_OF,ib); + kpa = bas(KAPPA_OF,ib); + if (l%2 == 0) { + for (n = 0; n < bas(NCTR_OF,ib); n++) { + if (kpa >= 0) { + dj = 2 * l; + k0 = k; + for (m = 0; m < dj; m+=2) { + tao[k ] =-(k0+dj-m); + tao[k+1] = (k0+dj-m-1); + k += 2; + } + } + if (kpa <= 0) { + dj = 2 * l + 2; + k0 = k; + for (m = 0; m < dj; m+=2) { + tao[k ] =-(k0+dj-m); + tao[k+1] = (k0+dj-m-1); + k += 2; + } + } + } + } else { + for (n = 0; n < bas(NCTR_OF,ib); n++) { + if (kpa >= 0) { + dj = 2 * l; + k0 = k; + for (m = 0; m < dj; m+=2) { + tao[k ] = (k0+dj-m); + tao[k+1] =-(k0+dj-m-1); + k += 2; + } + } + if (kpa <= 0) { + dj = 2 * l + 2; + k0 = k; + for (m = 0; m < dj; m+=2) { + tao[k ] = (k0+dj-m); + tao[k+1] =-(k0+dj-m-1); + k += 2; + } + } + } + } + } +} + +/* + * time reverse mat_{i,j} to block_{Tj,Ti} + * mat[istart:iend,jstart:jend] -> block[:dj,:di] + */ +static void timerev_block_o1(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao) +{ + //const int di = iend - istart; + const int dj = jend - jstart; + int i, j, i0, j0, i1, j1; + double complex *pblock, *pmat; + double complex *pblock1, *pmat1; + + if ((tao[jstart]<0) == (tao[istart]<0)) { +BeginTimeRevLoop(i, j); + pblock = block + (i0-istart)*dj + (j0-jstart); + pblock1 = pblock + dj; + pmat = mat + (i1-1)*nao + (j1-1); + pmat1 = pmat - nao; + for (i = 0; i < i1-i0; i+=2) { + for (j = 0; j < j1-j0; j+=2) { + pblock [i*dj+j ] = pmat [-i*nao-j ]; + pblock [i*dj+j+1] =-pmat [-i*nao-j-1]; + pblock1[i*dj+j ] =-pmat1[-i*nao-j ]; + pblock1[i*dj+j+1] = pmat1[-i*nao-j-1]; + } } +EndTimeRevLoop(i, j); + } else { +BeginTimeRevLoop(i, j); + pblock = block + (i0-istart)*dj + (j0-jstart); + pblock1 = pblock + dj; + pmat = mat + (i1-1)*nao + (j1-1); + pmat1 = pmat - nao; + for (i = 0; i < i1-i0; i+=2) { + for (j = 0; j < j1-j0; j+=2) { + pblock [i*dj+j ] =-pmat [-i*nao-j ]; + pblock [i*dj+j+1] = pmat [-i*nao-j-1]; + pblock1[i*dj+j ] = pmat1[-i*nao-j ]; + pblock1[i*dj+j+1] =-pmat1[-i*nao-j-1]; + } } +EndTimeRevLoop(i, j); + } +} + +void CVHFtimerev_block(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao) +{ + timerev_block_o1(block, mat, tao, istart, iend, jstart, jend, nao); +} + +void CVHFtimerev_blockT(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao) +{ + const int di = iend - istart; + //const int dj = jend - jstart; + int i, j, i0, j0, i1, j1; + double complex *pblock, *pmat; + double complex *pblock1, *pmat1; + + if ((tao[jstart]<0) == (tao[istart]<0)) { +BeginTimeRevLoop(i, j); + pblock = block + (i0-istart) + (j0-jstart)*di; + pblock1 = pblock + di; + pmat = mat + (i1-1)*nao + (j1-1); + pmat1 = pmat - nao; + for (i = 0; i < i1-i0; i+=2) { + for (j = 0; j < j1-j0; j+=2) { + pblock [j*di+i ] = pmat [-i*nao-j ]; + pblock1[j*di+i ] =-pmat [-i*nao-j-1]; + pblock [j*di+i+1] =-pmat1[-i*nao-j ]; + pblock1[j*di+i+1] = pmat1[-i*nao-j-1]; + } } +EndTimeRevLoop(i, j); + } else { +BeginTimeRevLoop(i, j); + pblock = block + (i0-istart) + (j0-jstart)*di; + pblock1 = pblock + di; + pmat = mat + (i1-1)*nao + (j1-1); + pmat1 = pmat - nao; + for (i = 0; i < i1-i0; i+=2) { + for (j = 0; j < j1-j0; j+=2) { + pblock [j*di+i ] =-pmat [-i*nao-j ]; + pblock1[j*di+i ] = pmat [-i*nao-j-1]; + pblock [j*di+i+1] = pmat1[-i*nao-j ]; + pblock1[j*di+i+1] =-pmat1[-i*nao-j-1]; + } } +EndTimeRevLoop(i, j); + } +} + + +void CVHFtimerev_i(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao) +{ + //const int di = iend - istart; + const int dj = jend - jstart; + int i, j, i0, j0, i1, j1; + double complex *pblock, *pmat; + double complex *pblock1, *pmat1; + + if (tao[istart] < 0) { +BeginTimeRevLoop(i, j); + pblock = block + (i0-istart)*dj+(j0-jstart); + pblock1 = pblock + dj; + pmat = mat + (i1-1)*nao+j0; + pmat1 = pmat - nao; + for (i = 0; i < i1-i0; i+=2) { + for (j = 0; j < j1-j0; j++) { + pblock [i*dj+j] = pmat [-i*nao+j]; + pblock1[i*dj+j] =-pmat1[-i*nao+j]; + } } +EndTimeRevLoop(i, j); + } else { +BeginTimeRevLoop(i, j); + pblock = block + (i0-istart)*dj+(j0-jstart); + pblock1 = pblock + dj; + pmat = mat + (i1-1)*nao+j0; + pmat1 = pmat - nao; + for (i = 0; i < i1-i0; i+=2) { + for (j = 0; j < j1-j0; j++) { + pblock [i*dj+j] =-pmat [-i*nao+j]; + pblock1[i*dj+j] = pmat1[-i*nao+j]; + } } +EndTimeRevLoop(i, j); + } +} +void CVHFtimerev_iT(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao) +{ + const int di = iend - istart; + //const int dj = jend - jstart; + int i, j, i0, j0, i1, j1; + double complex *pblock, *pmat, *pmat1; + + if (tao[istart] < 0) { +BeginTimeRevLoop(i, j); + pblock = block + (i0-istart)+(j0-jstart)*di; + pmat = mat + (i1-1)*nao+j0; + pmat1 = pmat - nao; + for (i = 0; i < i1-i0; i+=2) { + for (j = 0; j < j1-j0; j++) { + pblock[j*di+i ] = pmat [-i*nao+j]; + pblock[j*di+i+1] =-pmat1[-i*nao+j]; + } } +EndTimeRevLoop(i, j); + } else { +BeginTimeRevLoop(i, j); + pblock = block + (i0-istart)+(j0-jstart)*di; + pmat = mat + (i1-1)*nao+j0; + pmat1 = pmat - nao; + for (i = 0; i < i1-i0; i+=2) { + for (j = 0; j < j1-j0; j++) { + pblock[j*di+i ] =-pmat [-i*nao+j]; + pblock[j*di+i+1] = pmat1[-i*nao+j]; + } } +EndTimeRevLoop(i, j); + } +} +void CVHFtimerev_j(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao) +{ + //const int di = iend - istart; + const int dj = jend - jstart; + int i, j, i0, j0, i1, j1; + double complex *pblock, *pmat; + + if (tao[jstart] < 0) { +BeginTimeRevLoop(i, j); + pblock = block + (i0-istart)*dj+(j0-jstart); + pmat = mat + i0*nao+(j1-1); + for (i = 0; i < i1-i0; i++) { + for (j = 0; j < j1-j0; j+=2) { + pblock[i*dj+j ] = pmat[i*nao-j ]; + pblock[i*dj+j+1] =-pmat[i*nao-j-1]; + } } +EndTimeRevLoop(i, j); + } else { +BeginTimeRevLoop(i, j); + pblock = block + (i0-istart)*dj+(j0-jstart); + pmat = mat + i0*nao+(j1-1); + for (i = 0; i < i1-i0; i++) { + for (j = 0; j < j1-j0; j+=2) { + pblock[i*dj+j ] =-pmat[i*nao-j ]; + pblock[i*dj+j+1] = pmat[i*nao-j-1]; + } } +EndTimeRevLoop(i, j); + } +} +void CVHFtimerev_jT(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao) +{ + const int di = iend - istart; + //const int dj = jend - jstart; + int i, j, i0, j0, i1, j1; + double complex *pblock, *pblock1, *pmat; + + if (tao[jstart] < 0) { +BeginTimeRevLoop(i, j); + pblock = block + (i0-istart)+(j0-jstart)*di; + pblock1 = pblock + di; + pmat = mat + i0*nao+(j1-1); + for (i = 0; i < i1-i0; i++) { + for (j = 0; j < j1-j0; j+=2) { + pblock [j*di+i] = pmat[i*nao-j ]; + pblock1[j*di+i] =-pmat[i*nao-j-1]; + } } +EndTimeRevLoop(i, j); + } else { +BeginTimeRevLoop(i, j); + pblock = block + (i0-istart)+(j0-jstart)*di; + pblock1 = pblock + di; + pmat = mat + i0*nao+(j1-1); + for (i = 0; i < i1-i0; i++) { + for (j = 0; j < j1-j0; j+=2) { + pblock [j*di+i] =-pmat[i*nao-j ]; + pblock1[j*di+i] = pmat[i*nao-j-1]; + } } +EndTimeRevLoop(i, j); + } +} + +/* + * mat_{i,j} += mat_{Tj,Ti} + */ +void CVHFtimerev_ijplus(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao) +{ + const int dj = jend - jstart; + int i, j, i0, j0, i1, j1; + double complex *mat0, *mat1; + double complex *pblock, *pmat; + double complex *pblock1, *pmat1; + + if ((tao[jstart]<0) == (tao[istart]<0)) { +BeginTimeRevLoop(i, j); + pblock = block + (i0-istart)*dj + (j0-jstart); + pblock1 = pblock + dj; + mat0 = mat + i0*nao+j0; + mat1 = mat0 + nao; + pmat = mat + (j1-1)*nao + (i1-1); + pmat1 = pmat - nao; + for (i = 0; i < i1-i0; i+=2) { + for (j = 0; j < j1-j0; j+=2) { + pblock [i*dj+j ] = mat0[i*nao+j ] + pmat [-j*nao-i ]; + pblock [i*dj+j+1] = mat0[i*nao+j+1] - pmat1[-j*nao-i ]; + pblock1[i*dj+j ] = mat1[i*nao+j ] - pmat [-j*nao-i-1]; + pblock1[i*dj+j+1] = mat1[i*nao+j+1] + pmat1[-j*nao-i-1]; + } } +EndTimeRevLoop(i, j); + } else { +BeginTimeRevLoop(i, j); + pblock = block + (i0-istart)*dj + (j0-jstart); + pblock1 = pblock + dj; + mat0 = mat + i0*nao+j0; + mat1 = mat0 + nao; + pmat = mat + (j1-1)*nao + (i1-1); + pmat1 = pmat - nao; + for (i = 0; i < i1-i0; i+=2) { + for (j = 0; j < j1-j0; j+=2) { + pblock [i*dj+j ] = mat0[i*nao+j ] - pmat [-j*nao-i ]; + pblock [i*dj+j+1] = mat0[i*nao+j+1] + pmat1[-j*nao-i ]; + pblock1[i*dj+j ] = mat1[i*nao+j ] + pmat [-j*nao-i-1]; + pblock1[i*dj+j+1] = mat1[i*nao+j+1] - pmat1[-j*nao-i-1]; + } } +EndTimeRevLoop(i, j); + } +} +/* + * mat_{i,j} -= mat_{Tj,Ti} + */ +void CVHFtimerev_ijminus(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao) +{ + const int dj = jend - jstart; + int i, j, i0, j0, i1, j1; + double complex *mat0, *mat1; + double complex *pblock, *pmat; + double complex *pblock1, *pmat1; + + if ((tao[jstart]<0) == (tao[istart]<0)) { +BeginTimeRevLoop(i, j); + pblock = block + (i0-istart)*dj + (j0-jstart); + pblock1 = pblock + dj; + mat0 = mat + i0*nao+j0; + mat1 = mat0 + nao; + pmat = mat + (j1-1)*nao + (i1-1); + pmat1 = pmat - nao; + for (i = 0; i < i1-i0; i+=2) { + for (j = 0; j < j1-j0; j+=2) { + pblock [i*dj+j ] = mat0[i*nao+j ] - pmat [-j*nao-i ]; + pblock [i*dj+j+1] = mat0[i*nao+j+1] + pmat1[-j*nao-i ]; + pblock1[i*dj+j ] = mat1[i*nao+j ] + pmat [-j*nao-i-1]; + pblock1[i*dj+j+1] = mat1[i*nao+j+1] - pmat1[-j*nao-i-1]; + } } +EndTimeRevLoop(i, j); + } else { +BeginTimeRevLoop(i, j); + pblock = block + (i0-istart)*dj + (j0-jstart); + pblock1 = pblock + dj; + mat0 = mat + i0*nao+j0; + mat1 = mat0 + nao; + pmat = mat + (j1-1)*nao + (i1-1); + pmat1 = pmat - nao; + for (i = 0; i < i1-i0; i+=2) { + for (j = 0; j < j1-j0; j+=2) { + pblock [i*dj+j ] = mat0[i*nao+j ] + pmat [-j*nao-i ]; + pblock [i*dj+j+1] = mat0[i*nao+j+1] - pmat1[-j*nao-i ]; + pblock1[i*dj+j ] = mat1[i*nao+j ] - pmat [-j*nao-i-1]; + pblock1[i*dj+j+1] = mat1[i*nao+j+1] + pmat1[-j*nao-i-1]; + } } +EndTimeRevLoop(i, j); + } +} + +void CVHFtimerev_adbak_block(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao) +{ + //const int di = iend - istart; + const int dj = jend - jstart; + int i, j, i0, j0, i1, j1; + double complex *pblock, *pmat; + double complex *pblock1, *pmat1; + + if ((tao[jstart]<0) == (tao[istart]<0)) { +BeginTimeRevLoop(i, j); + pblock = block + (i1-istart-1)*dj + (j1-jstart-1); + pblock1 = pblock - dj; + pmat = mat + i0*nao + j0; + pmat1 = pmat + nao; + for (i = 0; i < i1-i0; i+=2) { + for (j = 0; j < j1-j0; j+=2) { + pmat [i*nao+j ] += pblock [-i*dj-j ]; + pmat [i*nao+j+1] -= pblock [-i*dj-j-1]; + pmat1[i*nao+j ] -= pblock1[-i*dj-j ]; + pmat1[i*nao+j+1] += pblock1[-i*dj-j-1]; + } } +EndTimeRevLoop(i, j); + } else { +BeginTimeRevLoop(i, j); + pblock = block + (i1-istart-1)*dj + (j1-jstart-1); + pblock1 = pblock - dj; + pmat = mat + i0*nao + j0; + pmat1 = pmat + nao; + for (i = 0; i < i1-i0; i+=2) { + for (j = 0; j < j1-j0; j+=2) { + pmat [i*nao+j ] -= pblock [-i*dj-j ]; + pmat [i*nao+j+1] += pblock [-i*dj-j-1]; + pmat1[i*nao+j ] += pblock1[-i*dj-j ]; + pmat1[i*nao+j+1] -= pblock1[-i*dj-j-1]; + } } +EndTimeRevLoop(i, j); + } +} +void CVHFtimerev_adbak_blockT(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao) +{ + const int di = iend - istart; + //const int dj = jend - jstart; + int i, j, i0, j0, i1, j1; + double complex *pblock, *pmat; + double complex *pblock1, *pmat1; + + if ((tao[jstart]<0) == (tao[istart]<0)) { +BeginTimeRevLoop(i, j); + pblock = block + (i1-istart-1) + (j1-jstart-1)*di; + pblock1 = pblock - di; + pmat = mat + i0*nao + j0; + pmat1 = pmat + nao; + for (i = 0; i < i1-i0; i+=2) { + for (j = 0; j < j1-j0; j+=2) { + pmat [i*nao+j ] += pblock [-j*di-i ]; + pmat [i*nao+j+1] -= pblock1[-j*di-i ]; + pmat1[i*nao+j ] -= pblock [-j*di-i-1]; + pmat1[i*nao+j+1] += pblock1[-j*di-i-1]; + } } +EndTimeRevLoop(i, j); + } else { +BeginTimeRevLoop(i, j); + pblock = block + (i1-istart-1) + (j1-jstart-1)*di; + pblock1 = pblock - di; + pmat = mat + i0*nao + j0; + pmat1 = pmat + nao; + for (i = 0; i < i1-i0; i+=2) { + for (j = 0; j < j1-j0; j+=2) { + pmat [i*nao+j ] -= pblock [-j*di-i ]; + pmat [i*nao+j+1] += pblock1[-j*di-i ]; + pmat1[i*nao+j ] += pblock [-j*di-i-1]; + pmat1[i*nao+j+1] -= pblock1[-j*di-i-1]; + } } +EndTimeRevLoop(i, j); + } +} + + +void CVHFtimerev_adbak_i(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao) +{ + //const int di = iend - istart; + const int dj = jend - jstart; + int i, j, i0, j0, i1, j1; + double complex *pblock, *pmat; + double complex *pblock1, *pmat1; + + if (tao[istart] < 0) { +BeginTimeRevLoop(i, j); + pblock = block + (i1-istart-1)*dj+(j0-jstart); + pblock1 = pblock - dj; + pmat = mat + i0*nao + j0; + pmat1 = pmat + nao; + for (i = 0; i < i1-i0; i+=2) { + for (j = 0; j < j1-j0; j++) { + pmat [i*nao+j] -= pblock [-i*dj+j]; + pmat1[i*nao+j] += pblock1[-i*dj+j]; + } } +EndTimeRevLoop(i, j); + } else { +BeginTimeRevLoop(i, j); + pblock = block + (i1-istart-1)*dj+(j0-jstart); + pblock1 = pblock - dj; + pmat = mat + i0*nao + j0; + pmat1 = pmat + nao; + for (i = 0; i < i1-i0; i+=2) { + for (j = 0; j < j1-j0; j++) { + pmat [i*nao+j] += pblock [-i*dj+j]; + pmat1[i*nao+j] -= pblock1[-i*dj+j]; + } } +EndTimeRevLoop(i, j); + } +} +void CVHFtimerev_adbak_iT(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao) +{ + const int di = iend - istart; + //const int dj = jend - jstart; + int i, j, i0, j0, i1, j1; + double complex *pblock, *pmat, *pmat1; + + if (tao[istart] < 0) { +BeginTimeRevLoop(i, j); + pblock = block + (i1-istart-1)+(j0-jstart)*di; + pmat = mat + i0*nao + j0; + pmat1 = pmat + nao; + for (i = 0; i < i1-i0; i+=2) { + for (j = 0; j < j1-j0; j++) { + pmat [i*nao+j] -= pblock[j*di-i ]; + pmat1[i*nao+j] += pblock[j*di-i-1]; + } } +EndTimeRevLoop(i, j); + } else { +BeginTimeRevLoop(i, j); + pblock = block + (i1-istart-1)+(j0-jstart)*di; + pmat = mat + i0*nao + j0; + pmat1 = pmat + nao; + for (i = 0; i < i1-i0; i+=2) { + for (j = 0; j < j1-j0; j++) { + pmat [i*nao+j] += pblock[j*di-i ]; + pmat1[i*nao+j] -= pblock[j*di-i-1]; + } } +EndTimeRevLoop(i, j); + } +} +void CVHFtimerev_adbak_j(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao) +{ + //const int di = iend - istart; + const int dj = jend - jstart; + int i, j, i0, j0, i1, j1; + double complex *pblock, *pmat; + + if (tao[jstart] < 0) { +BeginTimeRevLoop(i, j); + pblock = block + (i0-istart)*dj+(j1-jstart-1); + pmat = mat + i0*nao + j0; + for (i = 0; i < i1-i0; i++) { + for (j = 0; j < j1-j0; j+=2) { + pmat[i*nao+j ] -= pblock[i*dj-j ]; + pmat[i*nao+j+1] += pblock[i*dj-j-1]; + } } +EndTimeRevLoop(i, j); + } else { +BeginTimeRevLoop(i, j); + pblock = block + (i0-istart)*dj+(j1-jstart-1); + pmat = mat + i0*nao + j0; + for (i = 0; i < i1-i0; i++) { + for (j = 0; j < j1-j0; j+=2) { + pmat[i*nao+j ] += pblock[i*dj-j ]; + pmat[i*nao+j+1] -= pblock[i*dj-j-1]; + } } +EndTimeRevLoop(i, j); + } +} +void CVHFtimerev_adbak_jT(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao) +{ + const int di = iend - istart; + //const int dj = jend - jstart; + int i, j, i0, j0, i1, j1; + double complex *pblock, *pblock1, *pmat; + + if (tao[jstart] < 0) { +BeginTimeRevLoop(i, j); + pblock = block + (i0-istart)+(j1-jstart-1)*di; + pblock1 = pblock - di; + pmat = mat + i0*nao + j0; + for (i = 0; i < i1-i0; i++) { + for (j = 0; j < j1-j0; j+=2) { + pmat[i*nao+j ] -= pblock [i-j*di]; + pmat[i*nao+j+1] += pblock1[i-j*di]; + } } +EndTimeRevLoop(i, j); + } else { +BeginTimeRevLoop(i, j); + pblock = block + (i0-istart)+(j1-jstart-1)*di; + pblock1 = pblock - di; + pmat = mat + i0*nao + j0; + for (i = 0; i < i1-i0; i++) { + for (j = 0; j < j1-j0; j+=2) { + pmat[i*nao+j ] += pblock [i-j*di]; + pmat[i*nao+j+1] -= pblock1[i-j*di]; + } } +EndTimeRevLoop(i, j); + } +} + +/* reorder the matrix elements, the smallest elements in the new matrix + * is time-reversal block. So the new matrix may have time-reversal + * symmetry + * b_{block(ib,jb)[j,i]} = a_{i0,j0} + * in each time-reversal symmetry block, elements are ordered in F-contiguous. + */ +void CVHFreblock_mat(double complex *a, double complex *b, + int *bloc, int nbloc, int nao) +{ + int ib, jb, i0, j0, di, dj, i, j; + double complex *pb, *pa; + + for (ib = 0; ib < nbloc; ib++) { + for (jb = 0; jb < nbloc; jb++) { + i0 = bloc[ib]; + j0 = bloc[jb]; + di = bloc[ib+1] - i0; + dj = bloc[jb+1] - j0; + pa = a + i0*nao + j0; + pb = b + i0*nao + di*j0; + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + pb[j*di+i] = pa[i*nao+j]; + } } + } } +} +/* + * a_{i0,j0} = b_{block(ib,jb)[j,i]} + */ +void CVHFunblock_mat(double complex *a, double complex *b, + int *bloc, int nbloc, int nao) +{ + int ib, jb, i0, j0, di, dj, i, j; + double complex *pb, *pa; + + for (ib = 0; ib < nbloc; ib++) { + for (jb = 0; jb < nbloc; jb++) { + i0 = bloc[ib]; + j0 = bloc[jb]; + di = bloc[ib+1] - i0; + dj = bloc[jb+1] - j0; + pa = a + i0*nao + j0; + pb = b + i0*nao + di*j0; + for (i = 0; i < di; i++) { + for (j = 0; j < dj; j++) { + pa[i*nao+j] = pb[j*di+i]; + } } + } } +} diff --git a/pyscfadlib/pyscfadlib/vhf/time_rev.h b/pyscfadlib/pyscfadlib/vhf/time_rev.h new file mode 100644 index 00000000..894070bf --- /dev/null +++ b/pyscfadlib/pyscfadlib/vhf/time_rev.h @@ -0,0 +1,64 @@ +/* Copyright 2014-2018 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + * + * Author: Qiming Sun + */ + +#define BeginTimeRevLoop(I, J) \ + for (I##0 = I##start; I##0 < I##end;) { \ + I##1 = abs(tao[I##0]); \ + for (J##0 = J##start; J##0 < J##end;) { \ + J##1 = abs(tao[J##0]); +#define EndTimeRevLoop(I, J) \ + J##0 = J##1; } \ + I##0 = I##1; } + +void CVHFtimerev_map(int *tao, int *bas, int nbas); + +void CVHFtimerev_block(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao); +void CVHFtimerev_blockT(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao); + +void CVHFtimerev_i(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao); +void CVHFtimerev_iT(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao); +void CVHFtimerev_j(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao); +void CVHFtimerev_jT(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao); +void CVHFtimerev_ijplus(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao); +void CVHFtimerev_ijminus(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao); + +void CVHFtimerev_adbak_block(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao); +void CVHFtimerev_adbak_blockT(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao); +void CVHFtimerev_adbak_i(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao); +void CVHFtimerev_adbak_iT(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao); +void CVHFtimerev_adbak_j(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao); +void CVHFtimerev_adbak_jT(double complex *block, double complex *mat, int *tao, + int istart, int iend, int jstart, int jend, int nao); + +void CVHFreblock_mat(double complex *a, double complex *b, + int *bloc, int nbloc, int nao); +void CVHFunblock_mat(double complex *a, double complex *b, + int *bloc, int nbloc, int nao); diff --git a/pyscfadlib/vjp/CMakeLists.txt b/pyscfadlib/pyscfadlib/vjp/CMakeLists.txt similarity index 93% rename from pyscfadlib/vjp/CMakeLists.txt rename to pyscfadlib/pyscfadlib/vjp/CMakeLists.txt index 919fab8c..7eb8fa86 100644 --- a/pyscfadlib/vjp/CMakeLists.txt +++ b/pyscfadlib/pyscfadlib/vjp/CMakeLists.txt @@ -7,7 +7,7 @@ add_library(cgto_vjp SHARED set_target_properties(cgto_vjp PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR} ) -target_link_libraries(cgto_vjp cgto np_helper cintad ${OPENMP_C_PROPERTIES}) +target_link_libraries(cgto_vjp cgto np_helper ${OPENMP_C_PROPERTIES}) #np_helper add_library(np_helper_vjp SHARED diff --git a/pyscfadlib/vjp/ao2mo/nr_ao2mo_vjp.c b/pyscfadlib/pyscfadlib/vjp/ao2mo/nr_ao2mo_vjp.c similarity index 99% rename from pyscfadlib/vjp/ao2mo/nr_ao2mo_vjp.c rename to pyscfadlib/pyscfadlib/vjp/ao2mo/nr_ao2mo_vjp.c index 4c2b0bac..08e42376 100644 --- a/pyscfadlib/vjp/ao2mo/nr_ao2mo_vjp.c +++ b/pyscfadlib/pyscfadlib/vjp/ao2mo/nr_ao2mo_vjp.c @@ -1,7 +1,7 @@ #include #include "config.h" -#include "pyscf/np_helper/np_helper.h" -#include "pyscf/vhf/fblas.h" +#include "np_helper/np_helper.h" +#include "vhf/fblas.h" #define MAX_THREADS 256 #define OUTPUTIJ 1 diff --git a/pyscfadlib/vjp/cc/ccsd_t.c b/pyscfadlib/pyscfadlib/vjp/cc/ccsd_t.c similarity index 99% rename from pyscfadlib/vjp/cc/ccsd_t.c rename to pyscfadlib/pyscfadlib/vjp/cc/ccsd_t.c index 4b303a5b..3a577217 100644 --- a/pyscfadlib/vjp/cc/ccsd_t.c +++ b/pyscfadlib/pyscfadlib/vjp/cc/ccsd_t.c @@ -1,5 +1,5 @@ #include -#include "pyscf/vhf/fblas.h" +#include "vhf/fblas.h" #include "ccsd_t.h" /* copied from pyscf */ diff --git a/pyscfadlib/vjp/cc/ccsd_t.h b/pyscfadlib/pyscfadlib/vjp/cc/ccsd_t.h similarity index 100% rename from pyscfadlib/vjp/cc/ccsd_t.h rename to pyscfadlib/pyscfadlib/vjp/cc/ccsd_t.h diff --git a/pyscfadlib/vjp/cc/ccsd_t_vjp.c b/pyscfadlib/pyscfadlib/vjp/cc/ccsd_t_vjp.c similarity index 99% rename from pyscfadlib/vjp/cc/ccsd_t_vjp.c rename to pyscfadlib/pyscfadlib/vjp/cc/ccsd_t_vjp.c index a2bc6105..66a887a3 100644 --- a/pyscfadlib/vjp/cc/ccsd_t_vjp.c +++ b/pyscfadlib/pyscfadlib/vjp/cc/ccsd_t_vjp.c @@ -1,7 +1,7 @@ #include #include "config.h" -#include "pyscf/np_helper/np_helper.h" -#include "pyscf/vhf/fblas.h" +#include "np_helper/np_helper.h" +#include "vhf/fblas.h" #include "ccsd_t.h" #define MAX_THREADS 256 diff --git a/pyscfadlib/vjp/cc/lno_ccsd_t.c b/pyscfadlib/pyscfadlib/vjp/cc/lno_ccsd_t.c similarity index 99% rename from pyscfadlib/vjp/cc/lno_ccsd_t.c rename to pyscfadlib/pyscfadlib/vjp/cc/lno_ccsd_t.c index c7879d39..ce591c23 100644 --- a/pyscfadlib/vjp/cc/lno_ccsd_t.c +++ b/pyscfadlib/pyscfadlib/vjp/cc/lno_ccsd_t.c @@ -1,6 +1,6 @@ #include #include "config.h" -#include "pyscf/vhf/fblas.h" +#include "vhf/fblas.h" #include "ccsd_t.h" static double lnoccsdt_get_energy(double *mat, double *w, double *v, diff --git a/pyscfadlib/vjp/cc/lno_ccsd_t_vjp.c b/pyscfadlib/pyscfadlib/vjp/cc/lno_ccsd_t_vjp.c similarity index 99% rename from pyscfadlib/vjp/cc/lno_ccsd_t_vjp.c rename to pyscfadlib/pyscfadlib/vjp/cc/lno_ccsd_t_vjp.c index c093c4d0..d0bd6a47 100644 --- a/pyscfadlib/vjp/cc/lno_ccsd_t_vjp.c +++ b/pyscfadlib/pyscfadlib/vjp/cc/lno_ccsd_t_vjp.c @@ -1,7 +1,7 @@ #include #include "config.h" -#include "pyscf/np_helper/np_helper.h" -#include "pyscf/vhf/fblas.h" +#include "np_helper/np_helper.h" +#include "vhf/fblas.h" #include "ccsd_t.h" #define MAX_THREADS 256 diff --git a/pyscfadlib/vjp/gto/fill_int2c_vjp.c b/pyscfadlib/pyscfadlib/vjp/gto/fill_int2c_vjp.c similarity index 99% rename from pyscfadlib/vjp/gto/fill_int2c_vjp.c rename to pyscfadlib/pyscfadlib/vjp/gto/fill_int2c_vjp.c index 6ad90fe5..949097f2 100644 --- a/pyscfadlib/vjp/gto/fill_int2c_vjp.c +++ b/pyscfadlib/pyscfadlib/vjp/gto/fill_int2c_vjp.c @@ -4,8 +4,8 @@ #include #include "config.h" #include "cint.h" -#include "pyscf/np_helper/np_helper.h" -#include "pyscf/gto/gto.h" +#include "np_helper/np_helper.h" +#include "gto/gto.h" #define IPOW(x, n) ((int) rint(pow(x, n))) diff --git a/pyscfadlib/vjp/gto/fill_int2e_vjp.c b/pyscfadlib/pyscfadlib/vjp/gto/fill_int2e_vjp.c similarity index 80% rename from pyscfadlib/vjp/gto/fill_int2e_vjp.c rename to pyscfadlib/pyscfadlib/vjp/gto/fill_int2e_vjp.c index 194fcde0..03dac6dc 100644 --- a/pyscfadlib/vjp/gto/fill_int2e_vjp.c +++ b/pyscfadlib/pyscfadlib/vjp/gto/fill_int2e_vjp.c @@ -1,11 +1,63 @@ +/* Copyright 2021 The PySCF Developers. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ #include #include "config.h" #include "cint.h" -#include "pyscf/gto/gto.h" -#include "pyscf/np_helper/np_helper.h" +#include "np_helper/np_helper.h" #define MAXTHREADS 256 +int GTOmax_shell_dim(const int *ao_loc, const int *shls_slice, int ncenter) +{ + int i; + int i0 = shls_slice[0]; + int i1 = shls_slice[1]; + int di = 0; + for (i = 1; i < ncenter; i++) { + i0 = MIN(i0, shls_slice[i*2 ]); + i1 = MAX(i1, shls_slice[i*2+1]); + } + for (i = i0; i < i1; i++) { + di = MAX(di, ao_loc[i+1]-ao_loc[i]); + } + return di; +} + +int GTOmax_cache_size(int (*intor)(), int *shls_slice, int ncenter, + int *atm, int natm, int *bas, int nbas, double *env) +{ + int i, n; + int i0 = shls_slice[0]; + int i1 = shls_slice[1]; + for (i = 1; i < ncenter; i++) { + i0 = MIN(i0, shls_slice[i*2 ]); + i1 = MAX(i1, shls_slice[i*2+1]); + } + int shls[4]; + int cache_size = 0; + for (i = i0; i < i1; i++) { + shls[0] = i; + shls[1] = i; + shls[2] = i; + shls[3] = i; + n = (*intor)(NULL, NULL, shls, atm, natm, bas, nbas, env, NULL, NULL); + cache_size = MAX(cache_size, n); + } + return cache_size; +} + static int no_prescreen() { return 1; diff --git a/pyscfadlib/vjp/gto/fill_nr_3c_vjp.c b/pyscfadlib/pyscfadlib/vjp/gto/fill_nr_3c_vjp.c similarity index 99% rename from pyscfadlib/vjp/gto/fill_nr_3c_vjp.c rename to pyscfadlib/pyscfadlib/vjp/gto/fill_nr_3c_vjp.c index 9f55615a..8565f84f 100644 --- a/pyscfadlib/vjp/gto/fill_nr_3c_vjp.c +++ b/pyscfadlib/pyscfadlib/vjp/gto/fill_nr_3c_vjp.c @@ -1,8 +1,8 @@ #include #include "config.h" #include "cint.h" -#include "pyscf/np_helper/np_helper.h" -#include "pyscf/gto/gto.h" +#include "np_helper/np_helper.h" +#include "gto/gto.h" #define BLKSIZE 8 #define MAXTHREADS 256 diff --git a/pyscfadlib/vjp/np_helper/pack_tril_vjp.c b/pyscfadlib/pyscfadlib/vjp/np_helper/pack_tril_vjp.c similarity index 97% rename from pyscfadlib/vjp/np_helper/pack_tril_vjp.c rename to pyscfadlib/pyscfadlib/vjp/np_helper/pack_tril_vjp.c index cb10b2a2..c42a7837 100644 --- a/pyscfadlib/vjp/np_helper/pack_tril_vjp.c +++ b/pyscfadlib/pyscfadlib/vjp/np_helper/pack_tril_vjp.c @@ -1,6 +1,6 @@ #include #include "config.h" -#include "pyscf/np_helper/np_helper.h" +#include "np_helper/np_helper.h" static void dsymm_triu(int n, double *tril, double *mat, int hermi) { diff --git a/pyscfadlib/vjp/vhf/df_jk_vjp.c b/pyscfadlib/pyscfadlib/vjp/vhf/df_jk_vjp.c similarity index 97% rename from pyscfadlib/vjp/vhf/df_jk_vjp.c rename to pyscfadlib/pyscfadlib/vjp/vhf/df_jk_vjp.c index 6d07a602..d87a65db 100644 --- a/pyscfadlib/vjp/vhf/df_jk_vjp.c +++ b/pyscfadlib/pyscfadlib/vjp/vhf/df_jk_vjp.c @@ -1,7 +1,7 @@ #include #include "config.h" -#include "pyscf/np_helper/np_helper.h" -#include "pyscf/vhf/fblas.h" +#include "np_helper/np_helper.h" +#include "vhf/fblas.h" #define MAX_THREADS 256 diff --git a/pyscfadlib/vjp/vhf/nr_incore_vjp.c b/pyscfadlib/pyscfadlib/vjp/vhf/nr_incore_vjp.c similarity index 100% rename from pyscfadlib/vjp/vhf/nr_incore_vjp.c rename to pyscfadlib/pyscfadlib/vjp/vhf/nr_incore_vjp.c diff --git a/pyscfadlib/setup.py b/pyscfadlib/setup.py new file mode 100644 index 00000000..1125265d --- /dev/null +++ b/pyscfadlib/setup.py @@ -0,0 +1,72 @@ +import os +from setuptools import setup, find_packages +from setuptools.command.build_py import build_py +from distutils.util import get_platform + +_dct = {} +with open('pyscfadlib/version.py') as f: + exec(f.read(), _dct) +__version__ = _dct['__version__'] + +class CMakeBuild(build_py): + def run(self): + self.plat_name = get_platform() + self.build_base = 'build' + self.build_lib = os.path.join(self.build_base, 'lib') + self.build_temp = os.path.join(self.build_base, f'temp.{self.plat_name}') + + self.announce('Configuring extensions', level=3) + src_dir = os.path.abspath(os.path.join(__file__, '..', 'pyscfadlib')) + cmd = ['cmake', f'-S{src_dir}', f'-B{self.build_temp}'] + configure_args = os.getenv('CMAKE_CONFIGURE_ARGS') + if configure_args: + cmd.extend(configure_args.split(' ')) + self.spawn(cmd) + + self.announce('Building binaries', level=3) + cmd = ['cmake', '--build', self.build_temp, '-j2'] + build_args = os.getenv('CMAKE_BUILD_ARGS') + if build_args: + cmd.extend(build_args.split(' ')) + if self.dry_run: + self.announce(' '.join(cmd)) + else: + self.spawn(cmd) + + super().run() + +from wheel.bdist_wheel import bdist_wheel +initialize_options = bdist_wheel.initialize_options +def initialize_with_default_plat_name(self): + initialize_options(self) + self.plat_name = get_platform() +bdist_wheel.initialize_options = initialize_with_default_plat_name + +setup( + name='pyscfadlib', + version=__version__, + description='Support library for PySCFAD', + author='Xing Zhang', + author_email='xzhang8@caltech.edu', + include_package_data=True, + packages=find_packages(), + python_requires='>=3.8', + cmdclass={'build_py': CMakeBuild}, + install_requires=[ + 'numpy>=1.17', + ], + url='https://github.com/fishjojo/pyscfad', + license='MIT', + classifiers=[ + "Development Status :: 3 - Alpha", + "Topic :: Scientific/Engineering", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: MIT License", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + ], + zip_safe=False, +) diff --git a/pyscfadlib/version.py b/pyscfadlib/version.py deleted file mode 100644 index 7fd229a3..00000000 --- a/pyscfadlib/version.py +++ /dev/null @@ -1 +0,0 @@ -__version__ = '0.2.0' diff --git a/setup.py b/setup.py index 22119ff6..d9fa4a6a 100644 --- a/setup.py +++ b/setup.py @@ -1,56 +1,10 @@ -import os -from setuptools import setup, find_packages, Extension -from setuptools.command.build_py import build_py -from setuptools.command.build_ext import build_ext +from setuptools import setup, find_packages _dct = {} with open('pyscfad/version.py') as f: exec(f.read(), _dct) __version__ = _dct['__version__'] -class CMakeBuildExt(build_ext): - def run(self): - extension = self.extensions[0] - assert extension.name == 'pyscfad_lib_placeholder' - self.build_cmake(extension) - - def build_cmake(self, extension): - self.announce('Configuring extensions', level=3) - src_dir = os.path.abspath(os.path.join(__file__, '..', 'pyscfad', 'lib')) - cmd = ['cmake', f'-S{src_dir}', f'-B{self.build_temp}'] - configure_args = os.getenv('CMAKE_CONFIGURE_ARGS') - if configure_args: - cmd.extend(configure_args.split(' ')) - self.spawn(cmd) - - self.announce('Building binaries', level=3) - cmd = ['cmake', '--build', self.build_temp, '-j'] - build_args = os.getenv('CMAKE_BUILD_ARGS') - if build_args: - cmd.extend(build_args.split(' ')) - if self.dry_run: - self.announce(' '.join(cmd)) - else: - self.spawn(cmd) - - # To remove the infix string like cpython-37m-x86_64-linux-gnu.so - # Python ABI updates since 3.5 - # https://www.python.org/dev/peps/pep-3149/ - def get_ext_filename(self, ext_name): - ext_path = ext_name.split('.') - filename = build_ext.get_ext_filename(self, ext_name) - name, ext_suffix = os.path.splitext(filename) - return os.path.join(*ext_path) + ext_suffix - -#from distutils.command.build import build -#build.sub_commands = ([c for c in build.sub_commands if c[0] == 'build_ext'] + -# [c for c in build.sub_commands if c[0] != 'build_ext']) - -class BuildExtFirst(build_py): - def run(self): - self.run_command("build_ext") - return super().run() - setup( name='pyscfad', version=__version__, @@ -60,16 +14,13 @@ def run(self): include_package_data=True, packages=find_packages(exclude=["examples","*test*"]), python_requires='>=3.8', - #ext_modules=[Extension('pyscfad_lib_placeholder', [])], - #cmdclass={'build_py': BuildExtFirst, - # 'build_ext': CMakeBuildExt}, install_requires=[ 'numpy>=1.17', 'scipy<1.12', 'jax>=0.3.25', 'jaxlib>=0.3.25', - 'pyscf @ git+https://github.com/fishjojo/pyscf.git@ad#egg=pyscf', - 'pyscf-properties @ git+https://github.com/fishjojo/properties.git@ad', + 'pyscf==2.3.0', + #'pyscf-properties @ git+https://github.com/fishjojo/properties.git@ad', ], url='https://github.com/fishjojo/pyscfad', license='MIT', @@ -78,11 +29,11 @@ def run(self): "Topic :: Scientific/Engineering", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", - "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", ], zip_safe=False, )