From 62d3e0ae26e92b985f0d9f40fef7c15bd5dac523 Mon Sep 17 00:00:00 2001 From: Anton Kozhevnikov Date: Thu, 4 Jan 2024 11:29:34 +0100 Subject: [PATCH] Update master branch (#948) * [update] bump version; add link to discourse.group (#930) * [refactor] get rid of template in radial_integrals_sum_L3() (#932) * apply @simonpintarelli proposed code change * get rid of one more tempale * default: -> throw, whitespace * fix * apply format --------- Co-authored-by: Simon Pintarelli * [fix] subspace initialization in test_lr_solver (#934) * [cmake] remove std::filesystem target (#936) std::filesystem is part of C++17 which is required via CXX_STANDARD, there is no need to check for it explicitly * [fix] compilation error for ~memory_pool+tests (#939) * Ci/rebuild base image (#942) * CI: rebuild base images / pin spack to v0.21 * CI: use anonymous environments instead of dev-build with SPEC * avoid creating partitions with empty intervals in COSTA `custom_layout` --------- Co-authored-by: Anton Kozhevnikov * [fix] truncate very small occupation numbers to 0 (#943) * [refactor] minor cleaups (#938) * minor cleaups * apply format * [cmake] add missing REQUIRED (#945) * [fix] scalar-relativistic radial solver (#941) Introduce a few fixes for the scalar-relativistic radial solver. * [feature] port lr_addusdens to sirius (#937) Use a different sequence of operations to compute G+q augmentation charge. --------- Co-authored-by: Simon Pintarelli Co-authored-by: Simon Pintarelli <1237199+simonpintarelli@users.noreply.github.com> --- CMakeLists.txt | 13 +- README.md | 1 + apps/atoms/atom.cpp | 2 +- apps/mini_app/CMakeLists.txt | 2 +- apps/tests/CMakeLists.txt | 2 +- apps/tests/test_enu.cpp | 65 +- apps/tests/test_lr_solver.cpp | 2 +- apps/tests/test_radial_solver.cpp | 38 +- ci/baseimage.cuda.Dockerfile | 74 +- ci/baseimage.rocm.Dockerfile | 15 +- ci/build.Dockerfile | 15 +- ci/cscs-daint.yml | 59 +- cmake/modules/FindFilesystem.cmake | 250 -- doc/doxygen.cfg | 2 +- spack/packages/sirius/fj.patch | 13 + spack/packages/sirius/package.py | 8 +- src/api/sirius.f90 | 101 + src/api/sirius_api.cpp | 126 + src/context/config.hpp | 12 + src/context/input_schema.json | 5 + src/context/simulation_context.cpp | 29 +- src/core/memory.hpp | 2 +- src/core/wf/wave_functions.hpp | 22 +- src/dft/smearing.cpp | 9 +- src/geometry/force.cpp | 2 +- src/hamiltonian/hamiltonian.cpp | 22 +- src/hamiltonian/hamiltonian.hpp | 3 +- src/hamiltonian/hamiltonian_k.cpp | 23 +- src/radial/radial_solver.hpp | 37 +- src/sirius.hpp | 4 +- src/testing.hpp | 2 +- src/unit_cell/atom.hpp | 93 +- src/unit_cell/atom_symmetry_class.cpp | 34 +- src/unit_cell/atom_type_base.hpp | 25 - src/unit_cell/unit_cell.cpp | 18 +- verification/test31/H.json | 4369 +++++++++++++++++++++++++ verification/test31/output_ref.json | 273 ++ verification/test31/sirius.json | 53 + 38 files changed, 5284 insertions(+), 541 deletions(-) delete mode 100644 cmake/modules/FindFilesystem.cmake create mode 100644 spack/packages/sirius/fj.patch create mode 100644 verification/test31/H.json create mode 100644 verification/test31/output_ref.json create mode 100644 verification/test31/sirius.json diff --git a/CMakeLists.txt b/CMakeLists.txt index ca15ed623..351abf174 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ include(CMakePackageConfigHelpers) project(SIRIUS DESCRIPTION "Domain specific library for electronic structure calculations" HOMEPAGE_URL "https://github.com/electronic-structure/SIRIUS" - VERSION 7.5.0 + VERSION 7.5.1 LANGUAGES CXX C) # for CUDA_ARCHITECTURES @@ -146,15 +146,6 @@ if(NOT SIRIUS_USE_FP32 STREQUAL "OFF") endif() endif() -find_package(Filesystem COMPONENTS Final Experimental) - -add_library(sirius::filesystem INTERFACE IMPORTED) - target_link_libraries(sirius::filesystem INTERFACE std::filesystem) - target_compile_definitions(sirius::filesystem INTERFACE - $<$:SIRIUS_STD_FILESYSTEM> - $<$:SIRIUS_STD_FILESYSTEM_EXPERIMENTAL> - ) - if (SIRIUS_USE_OPENMP) find_package(OpenMP REQUIRED) endif() @@ -215,7 +206,7 @@ if(SIRIUS_USE_ROCM) endif() if(SIRIUS_USE_MEMORY_POOL) - find_package(umpire) + find_package(umpire REQUIRED) endif() # check if git command exists diff --git a/README.md b/README.md index 471a1460b..44d6f55e3 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@

[![GitHub Releases](https://img.shields.io/github/release/electronic-structure/sirius.svg)](https://github.com/electronic-structure/SIRIUS/releases) +[![Forum](https://img.shields.io/badge/user_forum-discourse-blue.svg)](https://sirius-dsl.discourse.group/latest) [![Documentation](https://img.shields.io/badge/docs-doxygen-blue.svg)](https://electronic-structure.github.io/SIRIUS-doc) [![Licence](https://img.shields.io/badge/license-BSD-blue.svg)](https://raw.githubusercontent.com/electronic-structure/SIRIUS/master/LICENSE) [![Build](https://github.com/electronic-structure/SIRIUS/workflows/Build/badge.svg?branch=master)](https://github.com/electronic-structure/SIRIUS/actions) diff --git a/apps/atoms/atom.cpp b/apps/atoms/atom.cpp index c78ea537e..3b50e55d7 100644 --- a/apps/atoms/atom.cpp +++ b/apps/atoms/atom.cpp @@ -25,7 +25,7 @@ using namespace sirius; -double const rmin{1e-5}; +double const rmin{1e-6}; class Free_atom : public sirius::Atom_type { diff --git a/apps/mini_app/CMakeLists.txt b/apps/mini_app/CMakeLists.txt index 27d73b8e2..eb41b9c38 100644 --- a/apps/mini_app/CMakeLists.txt +++ b/apps/mini_app/CMakeLists.txt @@ -2,7 +2,7 @@ if(SIRIUS_USE_VCSQNM) find_package (Eigen3 3.3 REQUIRED NO_MODULE) endif() add_executable(sirius.scf sirius.scf.cpp) -target_link_libraries(sirius.scf PRIVATE sirius sirius::filesystem) +target_link_libraries(sirius.scf PRIVATE sirius) if(SIRIUS_USE_VCSQNM) target_link_libraries (sirius.scf PRIVATE Eigen3::Eigen sirius) endif() diff --git a/apps/tests/CMakeLists.txt b/apps/tests/CMakeLists.txt index 9cc5010ad..42878e5b9 100644 --- a/apps/tests/CMakeLists.txt +++ b/apps/tests/CMakeLists.txt @@ -4,7 +4,7 @@ test_mpi_grid;test_enu;test_eigen;test_gemm;test_gemm2;test_wf_inner;test_memop; test_mem_pool;test_mem_alloc;test_examples;test_bcast_v2;test_p2p_cyclic;\ test_wf_ortho;test_mixer;test_davidson;test_lapw_xc;test_phase;test_bessel;test_fp;test_pppw_xc;\ test_exc_vxc;test_atomic_orbital_index;test_sym;test_blacs;test_reduce;test_comm_split;test_wf_trans;\ -test_wf_fft;test_potrf;test_lr_solver") +test_wf_fft;test_potrf;test_lr_solver;test_radial_solver") foreach(_test ${_tests}) add_executable(${_test} ${_test}.cpp) diff --git a/apps/tests/test_enu.cpp b/apps/tests/test_enu.cpp index 4d2a6ee07..8810e6356 100644 --- a/apps/tests/test_enu.cpp +++ b/apps/tests/test_enu.cpp @@ -1,52 +1,61 @@ -#include +#include "sirius.hpp" +#include "testing.hpp" using namespace sirius; -void -test_enu(int zn__, int n__, int l__, double R__) +int +test_enu(cmd_args const& args__) { - auto rgrid = Radial_grid_factory(radial_grid_t::lin_exp, 1500, 1e-7, R__, 6.0); + auto rel = get_relativity_t(args__.value("rel", "none")); + auto zn = args__.value("zn", 1); + auto l = args__.value("l", 0); + auto n = args__.value("n", 1); + auto R = args__.value("R", 2.2); + + auto rgrid = Radial_grid_factory(radial_grid_t::lin_exp, 1500, 1e-7, R, 6.0); std::vector v(rgrid.num_points()); for (int ir = 0; ir < rgrid.num_points(); ir++) { - v[ir] = -double(zn__) / rgrid[ir]; + v[ir] = -double(zn) / rgrid[ir]; } - Enu_finder e(relativity_t::none, zn__, n__, l__, rgrid, v, -0.1); + Enu_finder e(rel, zn, n, l, rgrid, v, -0.1); - printf("Z: %i n: %i l: %i band energies (bottom, top, enu): %12.6f %12.6f %12.6f\n", zn__, n__, l__, e.ebot(), - e.etop(), e.enu()); + printf("Z: %i n: %i l: %i band energies (bottom, top, enu): %12.6f %12.6f %12.6f\n", zn, n, l, e.ebot(), e.etop(), + e.enu()); - Radial_solver solver(zn__, v, rgrid); + Radial_solver solver(zn, v, rgrid); std::vector p1, p2, p3, rdudr; std::array uderiv; - solver.solve(relativity_t::none, 0, l__, e.ebot(), p1, rdudr, uderiv); - solver.solve(relativity_t::none, 0, l__, e.etop(), p2, rdudr, uderiv); - solver.solve(relativity_t::none, 0, l__, e.enu(), p3, rdudr, uderiv); + int dme{0}; + + solver.solve(rel, dme, l, e.ebot(), p1, rdudr, uderiv); + solver.solve(rel, dme, l, e.etop(), p2, rdudr, uderiv); + solver.solve(rel, dme, l, e.enu(), p3, rdudr, uderiv); - // printf("uderiv: %12.6f %12.6f\n", uderiv[0], uderiv[1]); + printf("uderiv: %12.6f %12.6f\n", uderiv[0], uderiv[1]); - // FILE* fout = fopen("radial_solution.dat", "w"); - // for (int i = 0; i < rgrid.num_points(); i++) - //{ - // double x = rgrid[i]; - // fprintf(fout, "%18.12f %18.12f %18.12f %18.12f\n", x, p1[i] / x, p2[i] / x, p3[i] / x); - // } - // fclose(fout); + FILE* fout = fopen("radial_solution.dat", "w"); + for (int i = 0; i < rgrid.num_points(); i++) { + double x = rgrid[i]; + fprintf(fout, "%18.12f %18.12f %18.12f %18.12f\n", x, p1[i] / x, p2[i] / x, p3[i] / x); + } + fclose(fout); + return 0; } int main(int argn, char** argv) { + cmd_args args(argn, argv, + {{"rel=", "(string) type of scalar-relativistic equation"}, + {"zn=", "(int) nuclear charge"}, + {"l=", "(int) orbital quantum number"}, + {"n=", "(int) principal quantum number"}, + {"R=", "(double) muffin-tin radius"}}); + sirius::initialize(1); - for (int zn = 1; zn < 100; zn++) { - #pragma omp parallel for - for (int n = 1; n < 7; n++) { - for (int l = 0; l < n; l++) { - test_enu(zn, n, l, 1.5); - } - } - } + call_test("test_enu", test_enu, args); sirius::finalize(); } diff --git a/apps/tests/test_lr_solver.cpp b/apps/tests/test_lr_solver.cpp index 66335fb00..e0f1c2205 100644 --- a/apps/tests/test_lr_solver.cpp +++ b/apps/tests/test_lr_solver.cpp @@ -209,7 +209,7 @@ solve_lr(Simulation_context& ctx__, std::array vk__, Potential& pot__ Hamiltonian0 H0(pot__, true); auto Hk = H0(kp); /* initialize kp.spinor_wave_functions */ - sirius::initialize_subspace(Hk, kp, ctx__.unit_cell().num_ps_atomic_wf().first); + sirius::initialize_subspace>(Hk, kp, ctx__.unit_cell().num_ps_atomic_wf().first); /* create auxiliary wave-functions */ auto dpsi = wave_function_factory(ctx__, kp, wf::num_bands(ctx__.num_bands()), wf::num_mag_dims(0), false); diff --git a/apps/tests/test_radial_solver.cpp b/apps/tests/test_radial_solver.cpp index ee26aa1c3..23be9715b 100644 --- a/apps/tests/test_radial_solver.cpp +++ b/apps/tests/test_radial_solver.cpp @@ -1,12 +1,18 @@ -#include +#include "sirius.hpp" +#include "testing.hpp" using namespace sirius; -void -test_radial_solver() +int +test_radial_solver(cmd_args const& args__) { - Radial_grid_lin_exp rgrid(1500, 1e-7, 2.0); - int zn{38}; + auto rel = get_relativity_t(args__.value("rel", "none")); + auto zn = args__.value("zn", 1); + auto l = args__.value("l", 0); + auto dme = args__.value("dme", 0); + auto enu = args__.value("enu", -0.5); + + Radial_grid_lin_exp rgrid(1500, 1e-7, 3.0); std::vector v(rgrid.num_points()); for (int ir = 0; ir < rgrid.num_points(); ir++) { v[ir] = -zn * rgrid.x_inv(ir); @@ -15,10 +21,10 @@ test_radial_solver() Radial_solver rsolver(zn, v, rgrid); std::vector p, rdudr; std::array uderiv; - rsolver.solve(relativity_t::iora, 1, 2, -0.524233, p, rdudr, uderiv); + rsolver.solve(rel, dme, l, enu, p, rdudr, uderiv); std::stringstream s; - s << "radial_functions.dat"; + s << "radial_functions_" << args__.value("rel", "none") << ".dat"; FILE* fout = fopen(s.str().c_str(), "w"); for (int ir = 0; ir < rgrid.num_points(); ir++) { @@ -28,21 +34,21 @@ test_radial_solver() fprintf(fout, "\n"); } fclose(fout); + + return 0; } int main(int argn, char** argv) { - cmd_args args; - - args.parse_args(argn, argv); - if (args.exist("help")) { - printf("Usage: %s [options]\n", argv[0]); - args.print_help(); - return 0; - } + cmd_args args(argn, argv, + {{"rel=", "(string) type of scalar-relativistic equation"}, + {"zn=", "(int) nuclear charge"}, + {"l=", "(int) orbital quantum number"}, + {"enu=", "(double) energy of the equation"}, + {"dme=", "(int) energy derivative"}}); sirius::initialize(1); - test_radial_solver(); + call_test("test_radial_solver", test_radial_solver, args); sirius::finalize(); } diff --git a/ci/baseimage.cuda.Dockerfile b/ci/baseimage.cuda.Dockerfile index cbed039a7..aa97159c4 100644 --- a/ci/baseimage.cuda.Dockerfile +++ b/ci/baseimage.cuda.Dockerfile @@ -27,7 +27,7 @@ RUN wget https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cm tar zxvf cmake.tar.gz --strip-components=1 -C /usr # get latest version of spack -RUN git clone https://github.com/spack/spack.git +RUN git clone -b v0.21.0 https://github.com/spack/spack.git # set the location of packages built by spack RUN spack config add config:install_tree:root:/opt/local @@ -50,11 +50,9 @@ RUN yq -i '.compilers[0].compiler.paths.f77 = "/usr/bin/gfortran"' /root/.spack/ yq -i '.compilers[1].compiler.paths.fc = "/usr/bin/gfortran"' /root/.spack/linux/compilers.yaml # install MPICH -RUN spack install --only=dependencies mpich@${MPICH_VERSION} %gcc RUN spack install mpich@${MPICH_VERSION} %gcc # install openmpi -RUN spack install --only=dependencies openmpi %gcc RUN spack install openmpi %gcc # install libvdwxc @@ -71,28 +69,48 @@ RUN spack install nlcglib@master %gcc +cuda RUN echo $(spack find --format='{prefix.lib}' mpich) > /etc/ld.so.conf.d/mpich.conf RUN ldconfig -# install dependencies of several basic configurations - -RUN spack install --only=dependencies --fail-fast \ - "sirius@develop %gcc build_type=RelWithDebInfo +fortran +tests +apps +cuda +scalapack ^mpich ^spfft+single_precision+cuda ^intel-oneapi-mkl+cluster ^umpire+cuda~device_alloc" - -RUN spack install --only=dependencies --fail-fast \ - "sirius@develop %gcc build_type=RelWithDebInfo +tests +apps +cuda +scalapack +elpa ^mpich ^intel-oneapi-mkl+cluster ^elpa+cuda ^spfft+single_precision+cuda ^umpire+cuda~device_alloc" - -RUN spack install --only=dependencies --fail-fast \ - "sirius@develop %gcc build_type=RelWithDebInfo +tests +apps +cuda +magma ^mpich ^openblas ^magma+cuda ^umpire+cuda~device_alloc" - -RUN spack install --only=dependencies --fail-fast \ - "sirius@develop %gcc build_type=RelWithDebInfo +fortran +tests +apps +cuda +scalapack +single_precision ^mpich ^intel-oneapi-mkl+cluster ^umpire+cuda~device_alloc" - -RUN spack install --only=dependencies --fail-fast \ - "sirius@develop %gcc build_type=RelWithDebInfo +fortran +tests +apps +cuda +scalapack +vdwxc ^mpich ^openblas ^umpire+cuda~device_alloc" - -RUN spack install --only=dependencies --fail-fast \ - "sirius@develop %gcc build_type=RelWithDebInfo +fortran +tests +apps +vdwxc +cuda +nlcglib ^openblas ^mpich ^nlcglib +cuda ^umpire+cuda~device_alloc" - -RUN spack install --only=dependencies --fail-fast \ - "sirius@develop %gcc +tests +apps +scalapack +fortran build_type=RelWithDebInfo ^openblas ^openmpi ^umpire~cuda~device_alloc" - -RUN spack install --only=dependencies --fail-fast \ - "sirius@develop %clang build_type=RelWithDebInfo ~fortran +tests ^openblas%gcc ^libxc%gcc ^mpich%gcc ^umpire~cuda~device_alloc" \ No newline at end of file +# create environments for several configurations and install dependencies +RUN spack env create -d /sirius-env-clang && \ + spack -e /sirius-env-clang add "sirius@develop %clang build_type=RelWithDebInfo ~cuda ~fortran +tests ^openblas%gcc ^libxc%gcc ^mpich%gcc " && \ + spack -e /sirius-env-clang develop -p /sirius-src sirius@develop && \ + spack -e /sirius-env-clang install --only=dependencies --fail-fast + +RUN spack env create -d /sirius-env-cuda && \ + spack -e /sirius-env-cuda add "sirius@develop %gcc build_type=RelWithDebInfo +scalapack +tests +apps +cuda +magma ^netlib-scalapack ^mpich ^openblas threads=openmp" && \ + spack -e /sirius-env-cuda develop -p /sirius-src sirius@develop && \ + spack -e /sirius-env-cuda install --only=dependencies --fail-fast + +RUN spack env create -d /sirius-env-cuda-mkl-mpich && \ + spack -e /sirius-env-cuda-mkl-mpich add "sirius@develop %gcc build_type=RelWithDebInfo +tests +apps +cuda +scalapack +magma ^mpich ^intel-oneapi-mkl+cluster" && \ + spack -e /sirius-env-cuda-mkl-mpich develop -p /sirius-src sirius@develop && \ + spack -e /sirius-env-cuda-mkl-mpich install --only=dependencies --fail-fast + +RUN spack env create -d /sirius-env-elpa && \ + spack -e /sirius-env-elpa add "sirius@develop %gcc build_type=RelWithDebInfo +tests +apps +cuda +scalapack +elpa ^netlib-scalapack ^mpich ^openblas ^elpa+cuda" && \ + spack -e /sirius-env-elpa develop -p /sirius-src sirius@develop && \ + spack -e /sirius-env-elpa install --only=dependencies --fail-fast + +RUN spack env create -d /sirius-env-fp32 && \ + spack -e /sirius-env-fp32 add "sirius@develop %gcc build_type=RelWithDebInfo +tests +apps +cuda ^mpich ^openblas ^elpa+cuda ^spfft+single_precision+cuda" && \ + spack -e /sirius-env-fp32 develop -p /sirius-src sirius@develop && \ + spack -e /sirius-env-fp32 install --only=dependencies --fail-fast + +RUN spack env create -d /sirius-env-nlcg && \ + spack -e /sirius-env-nlcg add "sirius@develop %gcc build_type=RelWithDebInfo +fortran +tests +apps +cuda +nlcglib ^openblas ^mpich" && \ + spack -e /sirius-env-nlcg develop -p /sirius-src sirius@develop && \ + spack -e /sirius-env-nlcg install --only=dependencies --fail-fast + +RUN spack env create -d /sirius-env-openmpi && \ + spack -e /sirius-env-openmpi add "sirius@develop %gcc +tests +apps +scalapack +fortran build_type=RelWithDebInfo ^netlib-scalapack ^openblas ^openmpi" && \ + spack -e /sirius-env-openmpi develop -p /sirius-src sirius@develop && \ + spack -e /sirius-env-openmpi install --only=dependencies --fail-fast + +RUN spack env create -d /sirius-env-cuda-sequential && \ + spack -e /sirius-env-cuda-sequential add "sirius@develop %gcc +cuda +tests +apps +fortran build_type=RelWithDebInfo ^openblas ^openmpi" && \ + spack -e /sirius-env-cuda-sequential develop -p /sirius-src sirius@develop && \ + spack -e /sirius-env-cuda-sequential install --only=dependencies --fail-fast + +RUN spack env create -d /sirius-env-vdwxc-cuda && \ + spack -e /sirius-env-vdwxc-cuda add "sirius@develop %gcc build_type=RelWithDebInfo +fortran +tests +apps +vdwxc +cuda +nlcglib ^openblas ^mpich +cuda" && \ + spack -e /sirius-env-vdwxc-cuda develop -p /sirius-src sirius@develop && \ + spack -e /sirius-env-vdwxc-cuda install --only=dependencies --fail-fast diff --git a/ci/baseimage.rocm.Dockerfile b/ci/baseimage.rocm.Dockerfile index 2f243489a..7ca36a7bf 100644 --- a/ci/baseimage.rocm.Dockerfile +++ b/ci/baseimage.rocm.Dockerfile @@ -23,7 +23,7 @@ RUN wget https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cm tar zxvf cmake.tar.gz --strip-components=1 -C /usr # get latest version of spack -RUN git clone https://github.com/spack/spack.git +RUN git clone -b v0.21.0 https://github.com/spack/spack.git # set the location of packages built by spack RUN spack config add config:install_tree:root:/opt/local @@ -34,7 +34,9 @@ RUN spack config add packages:all:target:x86_64 # find gcc and clang compilers RUN spack compiler find -RUN spack external find --all +RUN spack external find --all --exclude ncurses +# workaround hip wants to call /usr/bin/llvm-config, but ubuntu renamed it to /usr/bin/llvm-config-14 +RUN ln -s /usr/bin/llvm-config-14 /usr/bin/llvm-config # install big packages RUN spack install --fail-fast hip%gcc @@ -42,8 +44,7 @@ RUN spack install --fail-fast rocblas%gcc RUN spack install --fail-fast rocsolver%gcc RUN spack install --fail-fast hipfft%gcc -ENV SPEC="sirius@develop %gcc build_type=Release +scalapack +fortran +tests +rocm ^openblas ^mpich ^spfft ^umpire+rocm~device_alloc" - -RUN spack spec $SPEC - -RUN spack install --fail-fast --only=dependencies $SPEC \ No newline at end of file +RUN spack env create -d /sirius-env-rocm && \ + spack -e /sirius-env-rocm add "sirius@develop %gcc build_type=Release +scalapack +fortran +tests +rocm ^openblas ^mpich ^spfft ^umpire+rocm~device_alloc" && \ + spack -e /sirius-env-rocm develop -p /sirius-src sirius@develop && \ + spack -e /sirius-env-rocm install --only=dependencies --fail-fast diff --git a/ci/build.Dockerfile b/ci/build.Dockerfile index 453c17e15..9d9e02bc4 100644 --- a/ci/build.Dockerfile +++ b/ci/build.Dockerfile @@ -1,20 +1,17 @@ ARG BASE_IMAGE FROM $BASE_IMAGE -ARG SPECDEV - -# show the spack's spec -RUN spack spec -I $SPECDEV - -RUN spack env create --with-view /opt/sirius sirius-env -RUN spack -e sirius-env add $SPECDEV +ARG ENVPATH # copy source files of the pull request into container COPY . /sirius-src # build SIRIUS -RUN spack --color always -e sirius-env dev-build --source-path /sirius-src $SPECDEV +RUN spack -e $ENVPATH install + +# # show the spack's spec +RUN spack -e $ENVPATH find -lcdv sirius # we need a fixed name for the build directory # here is a hacky workaround to link ./spack-build-{hash} to ./spack-build -RUN cd /sirius-src && ln -s $(find . -name "spack-build-*" -type d) spack-build +RUN cd /sirius-src && ln -s $(spack -e $ENVPATH location -b sirius) spack-build diff --git a/ci/cscs-daint.yml b/ci/cscs-daint.yml index a9500c30a..3ef40c4b6 100644 --- a/ci/cscs-daint.yml +++ b/ci/cscs-daint.yml @@ -27,15 +27,26 @@ build base rocm image: PERSIST_IMAGE_NAME: $CSCS_REGISTRY_PATH/base/sirius-ci DOCKER_BUILD_ARGS: '["ROCM_ARCH=gfx90a"]' +build cuda image mkl: + extends: .container-builder + needs: ["build base cuda image"] + stage: build + variables: + DOCKERFILE: ci/build.Dockerfile + PERSIST_IMAGE_NAME: discard + ENVPATH: "/sirius-env-cuda-mkl-mpich" + DOCKER_BUILD_ARGS: '["BASE_IMAGE=${BASE_IMAGE}", "ENVPATH=$ENVPATH"]' + build cuda image: extends: .container-builder needs: ["build base cuda image"] stage: build variables: + CSCS_REBUILD_POLICY: always DOCKERFILE: ci/build.Dockerfile PERSIST_IMAGE_NAME: $CSCS_REGISTRY_PATH/sirius/sirius-ci:$CI_COMMIT_SHA - SPEC: 'sirius@develop %gcc build_type=RelWithDebInfo +fortran +tests +apps +cuda +scalapack ^mpich ^spfft+single_precision+cuda ^intel-oneapi-mkl+cluster ^umpire+cuda~device_alloc' - DOCKER_BUILD_ARGS: '["BASE_IMAGE=${BASE_IMAGE}", "SPECDEV=$SPEC"]' + ENVPATH: "/sirius-env-cuda" + DOCKER_BUILD_ARGS: '["BASE_IMAGE=${BASE_IMAGE}", "ENVPATH=$ENVPATH"]' build rocm image: extends: .container-builder @@ -44,8 +55,8 @@ build rocm image: variables: DOCKERFILE: ci/build.Dockerfile PERSIST_IMAGE_NAME: discard - SPEC: 'sirius@develop %gcc build_type=RelWithDebInfo ~fortran+tests +apps +rocm +scalapack ^mpich ^openblas ^umpire+rocm~device_alloc' - DOCKER_BUILD_ARGS: '["BASE_IMAGE=${BASE_IMAGE}", "SPECDEV=$SPEC"]' + ENVPATH: "/sirius-env-rocm" + DOCKER_BUILD_ARGS: '["BASE_IMAGE=${BASE_IMAGE}", "ENVPATH=$ENVPATH"]' build elpa cuda image: extends: .container-builder @@ -54,8 +65,8 @@ build elpa cuda image: variables: DOCKERFILE: ci/build.Dockerfile PERSIST_IMAGE_NAME: discard - SPEC: 'sirius@develop %gcc build_type=RelWithDebInfo +tests +apps +cuda +scalapack +elpa ^mpich ^intel-oneapi-mkl+cluster ^elpa+cuda ^spfft+single_precision+cuda ^umpire+cuda~device_alloc' - DOCKER_BUILD_ARGS: '["BASE_IMAGE=${BASE_IMAGE}", "SPECDEV=$SPEC"]' + ENVPATH: "/sirius-env-elpa" + DOCKER_BUILD_ARGS: '["BASE_IMAGE=${BASE_IMAGE}", "ENVPATH=$ENVPATH"]' build sequential eigen-solver cuda image: extends: .container-builder @@ -64,8 +75,8 @@ build sequential eigen-solver cuda image: variables: DOCKERFILE: ci/build.Dockerfile PERSIST_IMAGE_NAME: discard - SPEC: 'sirius@develop %gcc build_type=RelWithDebInfo +tests +apps +cuda +magma ^mpich ^openblas ^magma+cuda ^umpire+cuda~device_alloc' - DOCKER_BUILD_ARGS: '["BASE_IMAGE=${BASE_IMAGE}", "SPECDEV=$SPEC"]' + ENVPATH: "/sirius-env-cuda-sequential" + DOCKER_BUILD_ARGS: '["BASE_IMAGE=${BASE_IMAGE}", "ENVPATH=$ENVPATH"]' build fp32 cuda image: extends: .container-builder @@ -74,8 +85,8 @@ build fp32 cuda image: variables: DOCKERFILE: ci/build.Dockerfile PERSIST_IMAGE_NAME: discard - SPEC: 'sirius@develop %gcc build_type=RelWithDebInfo +fortran +tests +apps +cuda +scalapack +single_precision ^mpich ^intel-oneapi-mkl+cluster ^umpire+cuda~device_alloc' - DOCKER_BUILD_ARGS: '["BASE_IMAGE=${BASE_IMAGE}", "SPECDEV=$SPEC"]' + ENVPATH: "/sirius-env-fp32" + DOCKER_BUILD_ARGS: '["BASE_IMAGE=${BASE_IMAGE}", "ENVPATH=$ENVPATH"]' build vdwxc cuda image: extends: .container-builder @@ -85,8 +96,8 @@ build vdwxc cuda image: DOCKERFILE: ci/build.Dockerfile PERSIST_IMAGE_NAME: discard # we can't use MKL here because vdwxc needs parallel FFT and MKL doesn't provide it - SPEC: 'sirius@develop %gcc build_type=RelWithDebInfo +fortran +tests +apps +cuda +scalapack +vdwxc ^mpich ^openblas ^umpire+cuda~device_alloc' - DOCKER_BUILD_ARGS: '["BASE_IMAGE=${BASE_IMAGE}", "SPECDEV=$SPEC"]' + ENVPATH: "/sirius-env-vdwxc-cuda" + DOCKER_BUILD_ARGS: '["BASE_IMAGE=${BASE_IMAGE}", "ENVPATH=$ENVPATH"]' build nlcg image: extends: .container-builder @@ -95,8 +106,8 @@ build nlcg image: variables: DOCKERFILE: ci/build.Dockerfile PERSIST_IMAGE_NAME: discard - SPEC: 'sirius@develop %gcc build_type=RelWithDebInfo +fortran +tests +apps +vdwxc +cuda +nlcglib ^openblas ^mpich ^nlcglib +cuda ^umpire+cuda~device_alloc' - DOCKER_BUILD_ARGS: '["BASE_IMAGE=${BASE_IMAGE}", "SPECDEV=$SPEC"]' + ENVPATH: "/sirius-env-nlcg" + DOCKER_BUILD_ARGS: '["BASE_IMAGE=${BASE_IMAGE}", "ENVPATH=$ENVPATH"]' build clang image: extends: .container-builder @@ -106,8 +117,8 @@ build clang image: DOCKERFILE: ci/build.Dockerfile PERSIST_IMAGE_NAME: discard # reuse openblas, libxc and spfft from gcc build - SPEC: 'sirius@develop %clang build_type=RelWithDebInfo ~fortran +tests ^openblas%gcc ^libxc%gcc ^mpich%gcc ^umpire~cuda~device_alloc' - DOCKER_BUILD_ARGS: '["BASE_IMAGE=${BASE_IMAGE}", "SPECDEV=$SPEC"]' + ENVPATH: "/sirius-env-nlcg" + DOCKER_BUILD_ARGS: '["BASE_IMAGE=${BASE_IMAGE}", "ENVPATH=$ENVPATH"]' build openmpi image: extends: .container-builder @@ -116,8 +127,8 @@ build openmpi image: variables: DOCKERFILE: ci/build.Dockerfile PERSIST_IMAGE_NAME: discard - SPEC: 'sirius@develop %gcc +tests +apps +scalapack +fortran build_type=RelWithDebInfo ^openblas ^openmpi ^umpire~cuda~device_alloc' - DOCKER_BUILD_ARGS: '["BASE_IMAGE=${BASE_IMAGE}", "SPECDEV=$SPEC"]' + ENVPATH: "/sirius-env-openmpi" + DOCKER_BUILD_ARGS: '["BASE_IMAGE=${BASE_IMAGE}", "ENVPATH=$ENVPATH"]' .run_tests: extends: .container-runner-daint-gpu @@ -150,7 +161,7 @@ gpu serial: SLURM_CONSTRAINT: gpu SLURM_CPUS_PER_TASK: 12 SLURM_NTASKS: 1 - SLURM_TIMELIMIT: "30:00" + SLURM_TIMELIMIT: "60:00" TEST_COMMAND: ctest -L gpu_serial gpu band parallel: @@ -160,8 +171,8 @@ gpu band parallel: SLURM_CONSTRAINT: gpu SLURM_CPUS_PER_TASK: 3 SLURM_NTASKS: 4 - SLURM_TIMELIMIT: "30:00" - TEST_COMMAND: ctest -L gpu_band_parallel + SLURM_TIMELIMIT: "60:00" + TEST_COMMAND: ctest -L gpu_band_parallel --timeout 3600 USE_MPI: 'YES' gpu k-point parallel: @@ -183,7 +194,7 @@ cpu single: SLURM_CPU_BIND: sockets SLURM_CPUS_PER_TASK: 12 SLURM_NTASKS: 1 - SLURM_TIMELIMIT: "30:00" + SLURM_TIMELIMIT: "60:00" TEST_COMMAND: ctest -L cpu_serial cpu band parallel: @@ -194,6 +205,6 @@ cpu band parallel: SLURM_CPU_BIND: sockets SLURM_CPUS_PER_TASK: 3 SLURM_NTASKS: 4 - SLURM_TIMELIMIT: "30:00" - TEST_COMMAND: ctest -L cpu_band_parallel + SLURM_TIMELIMIT: "60:00" + TEST_COMMAND: ctest -L cpu_band_parallel --timeout 3600 USE_MPI: 'YES' diff --git a/cmake/modules/FindFilesystem.cmake b/cmake/modules/FindFilesystem.cmake deleted file mode 100644 index c71493169..000000000 --- a/cmake/modules/FindFilesystem.cmake +++ /dev/null @@ -1,250 +0,0 @@ -# Distributed under the OSI-approved BSD 3-Clause License. See accompanying -# file Copyright.txt or https://cmake.org/licensing for details. - -#[=======================================================================[.rst: - -FindFilesystem -############## - -This module supports the C++17 standard library's filesystem utilities. Use the -:imp-target:`std::filesystem` imported target to - -Options -******* - -The ``COMPONENTS`` argument to this module supports the following values: - -.. find-component:: Experimental - :name: fs.Experimental - - Allows the module to find the "experimental" Filesystem TS version of the - Filesystem library. This is the library that should be used with the - ``std::experimental::filesystem`` namespace. - -.. find-component:: Final - :name: fs.Final - - Finds the final C++17 standard version of the filesystem library. - -If no components are provided, behaves as if the -:find-component:`fs.Final` component was specified. - -If both :find-component:`fs.Experimental` and :find-component:`fs.Final` are -provided, first looks for ``Final``, and falls back to ``Experimental`` in case -of failure. If ``Final`` is found, :imp-target:`std::filesystem` and all -:ref:`variables ` will refer to the ``Final`` version. - - -Imported Targets -**************** - -.. imp-target:: std::filesystem - - The ``std::filesystem`` imported target is defined when any requested - version of the C++ filesystem library has been found, whether it is - *Experimental* or *Final*. - - If no version of the filesystem library is available, this target will not - be defined. - - .. note:: - This target has ``cxx_std_17`` as an ``INTERFACE`` - :ref:`compile language standard feature `. Linking - to this target will automatically enable C++17 if no later standard - version is already required on the linking target. - - -.. _fs.variables: - -Variables -********* - -.. variable:: CXX_FILESYSTEM_IS_EXPERIMENTAL - - Set to ``TRUE`` when the :find-component:`fs.Experimental` version of C++ - filesystem library was found, otherwise ``FALSE``. - -.. variable:: CXX_FILESYSTEM_HAVE_FS - - Set to ``TRUE`` when a filesystem header was found. - -.. variable:: CXX_FILESYSTEM_HEADER - - Set to either ``filesystem`` or ``experimental/filesystem`` depending on - whether :find-component:`fs.Final` or :find-component:`fs.Experimental` was - found. - -.. variable:: CXX_FILESYSTEM_NAMESPACE - - Set to either ``std::filesystem`` or ``std::experimental::filesystem`` - depending on whether :find-component:`fs.Final` or - :find-component:`fs.Experimental` was found. - - -Examples -******** - -Using `find_package(Filesystem)` with no component arguments: - -.. code-block:: cmake - - find_package(Filesystem REQUIRED) - - add_executable(my-program main.cpp) - target_link_libraries(my-program PRIVATE std::filesystem) - - -#]=======================================================================] - - -if(TARGET std::filesystem) - # This module has already been processed. Don't do it again. - return() -endif() - -cmake_minimum_required(VERSION 3.10) - -include(CMakePushCheckState) -include(CheckIncludeFileCXX) - -# If we're not cross-compiling, try to run test executables. -# Otherwise, assume that compile + link is a sufficient check. -if(CMAKE_CROSSCOMPILING) - include(CheckCXXSourceCompiles) - macro(_cmcm_check_cxx_source code var) - check_cxx_source_compiles("${code}" ${var}) - endmacro() -else() - include(CheckCXXSourceRuns) - macro(_cmcm_check_cxx_source code var) - check_cxx_source_runs("${code}" ${var}) - endmacro() -endif() - -cmake_push_check_state() - -set(CMAKE_REQUIRED_QUIET ${Filesystem_FIND_QUIETLY}) - -# All of our tests required C++17 or later -set(_SAVE_CMAKE_CXX_STANDARD ${CMAKE_CXX_STANDARD}) -set(CMAKE_CXX_STANDARD 17) - -# Normalize and check the component list we were given -set(want_components ${Filesystem_FIND_COMPONENTS}) -if(Filesystem_FIND_COMPONENTS STREQUAL "") - set(want_components Final) -endif() - -# Warn on any unrecognized components -set(extra_components ${want_components}) -list(REMOVE_ITEM extra_components Final Experimental) -foreach(component IN LISTS extra_components) - message(WARNING "Extraneous find_package component for Filesystem: ${component}") -endforeach() - -# Detect which of Experimental and Final we should look for -set(find_experimental TRUE) -set(find_final TRUE) -if(NOT "Final" IN_LIST want_components) - set(find_final FALSE) -endif() -if(NOT "Experimental" IN_LIST want_components) - set(find_experimental FALSE) -endif() - -if(find_final) - check_include_file_cxx("filesystem" _CXX_FILESYSTEM_HAVE_HEADER) - mark_as_advanced(_CXX_FILESYSTEM_HAVE_HEADER) - if(_CXX_FILESYSTEM_HAVE_HEADER) - # We found the non-experimental header. Don't bother looking for the - # experimental one. - set(find_experimental FALSE) - endif() -else() - set(_CXX_FILESYSTEM_HAVE_HEADER FALSE) -endif() - -if(find_experimental) - check_include_file_cxx("experimental/filesystem" _CXX_FILESYSTEM_HAVE_EXPERIMENTAL_HEADER) - mark_as_advanced(_CXX_FILESYSTEM_HAVE_EXPERIMENTAL_HEADER) -else() - set(_CXX_FILESYSTEM_HAVE_EXPERIMENTAL_HEADER FALSE) -endif() - -if(_CXX_FILESYSTEM_HAVE_HEADER) - set(_have_fs TRUE) - set(_fs_header filesystem) - set(_fs_namespace std::filesystem) - set(_is_experimental FALSE) -elseif(_CXX_FILESYSTEM_HAVE_EXPERIMENTAL_HEADER) - set(_have_fs TRUE) - set(_fs_header experimental/filesystem) - set(_fs_namespace std::experimental::filesystem) - set(_is_experimental TRUE) -else() - set(_have_fs FALSE) -endif() - -set(CXX_FILESYSTEM_HAVE_FS ${_have_fs} CACHE BOOL "TRUE if we have the C++ filesystem headers") -set(CXX_FILESYSTEM_HEADER ${_fs_header} CACHE STRING "The header that should be included to obtain the filesystem APIs") -set(CXX_FILESYSTEM_NAMESPACE ${_fs_namespace} CACHE STRING "The C++ namespace that contains the filesystem APIs") -set(CXX_FILESYSTEM_IS_EXPERIMENTAL ${_is_experimental} CACHE BOOL "TRUE if the C++ filesystem library is the experimental version") - -set(_found FALSE) - -if(CXX_FILESYSTEM_HAVE_FS) - # We have some filesystem library available. Do link checks - string(CONFIGURE [[ - #include - #include <@CXX_FILESYSTEM_HEADER@> - - int main() { - auto cwd = @CXX_FILESYSTEM_NAMESPACE@::current_path(); - printf("%s", cwd.c_str()); - return EXIT_SUCCESS; - } - ]] code @ONLY) - - # Check a simple filesystem program without any linker flags - _cmcm_check_cxx_source("${code}" CXX_FILESYSTEM_NO_LINK_NEEDED) - - set(can_link ${CXX_FILESYSTEM_NO_LINK_NEEDED}) - - if(NOT CXX_FILESYSTEM_NO_LINK_NEEDED) - set(prev_libraries ${CMAKE_REQUIRED_LIBRARIES}) - # Add the libstdc++ flag - set(CMAKE_REQUIRED_LIBRARIES ${prev_libraries} -lstdc++fs) - _cmcm_check_cxx_source("${code}" CXX_FILESYSTEM_STDCPPFS_NEEDED) - set(can_link ${CXX_FILESYSTEM_STDCPPFS_NEEDED}) - if(NOT CXX_FILESYSTEM_STDCPPFS_NEEDED) - # Try the libc++ flag - set(CMAKE_REQUIRED_LIBRARIES ${prev_libraries} -lc++fs) - _cmcm_check_cxx_source("${code}" CXX_FILESYSTEM_CPPFS_NEEDED) - set(can_link ${CXX_FILESYSTEM_CPPFS_NEEDED}) - endif() - endif() - - if(can_link) - add_library(std::filesystem INTERFACE IMPORTED) - set_property(TARGET std::filesystem APPEND PROPERTY INTERFACE_COMPILE_FEATURES cxx_std_17) - set(_found TRUE) - - if(CXX_FILESYSTEM_NO_LINK_NEEDED) - # Nothing to add... - elseif(CXX_FILESYSTEM_STDCPPFS_NEEDED) - set_property(TARGET std::filesystem APPEND PROPERTY INTERFACE_LINK_LIBRARIES -lstdc++fs) - elseif(CXX_FILESYSTEM_CPPFS_NEEDED) - set_property(TARGET std::filesystem APPEND PROPERTY INTERFACE_LINK_LIBRARIES -lc++fs) - endif() - endif() -endif() - -cmake_pop_check_state() - -set(Filesystem_FOUND ${_found} CACHE BOOL "TRUE if we can run a program using std::filesystem" FORCE) - -if(Filesystem_FIND_REQUIRED AND NOT Filesystem_FOUND) - message(FATAL_ERROR "Cannot run simple program using std::filesystem") -endif() - -set(CMAKE_CXX_STANDARD ${_SAVE_CMAKE_CXX_STANDARD}) diff --git a/doc/doxygen.cfg b/doc/doxygen.cfg index ecb81b1c7..1699418c3 100644 --- a/doc/doxygen.cfg +++ b/doc/doxygen.cfg @@ -39,7 +39,7 @@ PROJECT_NAME = "SIRIUS" # control system is used. -PROJECT_NUMBER = "7.5.0" +PROJECT_NUMBER = "7.5.1" # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/spack/packages/sirius/fj.patch b/spack/packages/sirius/fj.patch new file mode 100644 index 000000000..567ced347 --- /dev/null +++ b/spack/packages/sirius/fj.patch @@ -0,0 +1,13 @@ +diff --git a/src/hamiltonian/hamiltonian.cpp b/src/hamiltonian/hamiltonian.cpp +index 54a91df..ea66ecf 100644 +--- a/src/hamiltonian/hamiltonian.cpp ++++ b/src/hamiltonian/hamiltonian.cpp +@@ -74,7 +74,7 @@ Hamiltonian0::Hamiltonian0(Potential& potential__, bool precompute_lapw__) + for (int j1 = 0; j1 <= j2; j1++) { + int lm1 = type.indexb(j1).lm; + int idxrf1 = type.indexb(j1).idxrf; +- hmt_[ia](j1, j2) = atom.radial_integrals_sum_L3(idxrf1, idxrf2, ++ hmt_[ia](j1, j2) = atom.template radial_integrals_sum_L3(idxrf1, idxrf2, + type.gaunt_coefs().gaunt_vector(lm1, lm2)); + hmt_[ia](j2, j1) = std::conj(hmt_[ia](j1, j2)); + } diff --git a/spack/packages/sirius/package.py b/spack/packages/sirius/package.py index 0e1e6203f..e6da96a84 100644 --- a/spack/packages/sirius/package.py +++ b/spack/packages/sirius/package.py @@ -21,6 +21,7 @@ class Sirius(CMakePackage, CudaPackage, ROCmPackage): version("develop", branch="develop") version("master", branch="master") + version("7.5.0", sha256="c583f88ffc02e9acac24e786bc35c7c32066882d2f70a1e0c14b5780b510365d") version("7.4.3", sha256="015679a60a39fa750c5d1bd8fb1ce73945524bef561270d8a171ea2fd4687fec") version("7.4.0", sha256="f9360a695a1e786d8cb9d6702c82dd95144a530c4fa7e8115791c7d1e92b020b") version("7.3.2", sha256="a256508de6b344345c295ad8642dbb260c4753cd87cc3dd192605c33542955d7") @@ -83,7 +84,7 @@ class Sirius(CMakePackage, CudaPackage, ROCmPackage): variant("python", default=False, description="Build Python bindings") variant("memory_pool", default=True, description="Build with memory pool") variant("elpa", default=False, description="Use ELPA") - variant("dlaf", default=False, when="@develop", description="Use DLA-Future") + variant("dlaf", default=False, when="@7.5.0:", description="Use DLA-Future") variant("vdwxc", default=False, description="Enable libvdwxc support") variant("scalapack", default=False, description="Enable scalapack support") variant("magma", default=False, description="Enable MAGMA support") @@ -101,9 +102,7 @@ class Sirius(CMakePackage, CudaPackage, ROCmPackage): variant( "profiler", default=True, description="Use internal profiler to measure execution time" ) - variant( - "nvtx", default=False, description="Use NVTX profiler" - ) + variant("nvtx", default=False, description="Use NVTX profiler") depends_on("cmake@3.23:", type="build") depends_on("mpi") @@ -188,6 +187,7 @@ class Sirius(CMakePackage, CudaPackage, ROCmPackage): depends_on("umpire+rocm~device_alloc", when="+rocm") patch("mpi_datatypes.patch", when="@:7.2.6") + patch("fj.patch", when="@7.3.2: %fj") def cmake_args(self): spec = self.spec diff --git a/src/api/sirius.f90 b/src/api/sirius.f90 index e9a010adb..f1e38a727 100644 --- a/src/api/sirius.f90 +++ b/src/api/sirius.f90 @@ -6059,6 +6059,107 @@ subroutine sirius_linear_solver_aux(handler,vkq,num_gvec_kq_loc,gvec_kq_loc,dpsi &nbnd_occ_ptr,tol_ptr,niter_ptr,error_code_ptr) end subroutine sirius_linear_solver +! +!> @brief Generate augmentation charge in case of complex density (linear response) +!> @param [in] handler DFT ground state handler. +!> @param [in] iat Index of atom type. +!> @param [in] num_atoms Total number of atoms. +!> @param [in] num_gvec_loc Local number of G-vectors +!> @param [in] num_spin_comp Number of spin components. +!> @param [in] qpw Augmentation operator for a givem atom type. +!> @param [in] ld1 Leading dimension of qpw array. +!> @param [in] phase_factors_q Phase factors exp(i*q*r_alpha) +!> @param [in] mill Miller indices (G-vectors in lattice coordinates) +!> @param [in] dens_mtrx Density matrix +!> @param [in] ld Leading dimension of density matrix. +!> @param [inout] rho_aug Resulting augmentation charge. +!> @param [out] error_code Error code +subroutine sirius_generate_rhoaug_q(handler,iat,num_atoms,num_gvec_loc,num_spin_comp,& +&qpw,ld1,phase_factors_q,mill,dens_mtrx,ld,rho_aug,error_code) +implicit none +! +type(sirius_ground_state_handler), target, intent(in) :: handler +integer, target, intent(in) :: iat +integer, target, intent(in) :: num_atoms +integer, target, intent(in) :: num_gvec_loc +integer, target, intent(in) :: num_spin_comp +complex(8), target, intent(in) :: qpw(ld1, num_gvec_loc) +integer, target, intent(in) :: ld1 +complex(8), target, intent(in) :: phase_factors_q(num_atoms) +integer, target, intent(in) :: mill(3, num_gvec_loc) +complex(8), target, intent(in) :: dens_mtrx(ld, num_atoms, num_spin_comp) +integer, target, intent(in) :: ld +complex(8), target, intent(inout) :: rho_aug(num_gvec_loc, num_spin_comp) +integer, optional, target, intent(out) :: error_code +! +type(C_PTR) :: handler_ptr +type(C_PTR) :: iat_ptr +type(C_PTR) :: num_atoms_ptr +type(C_PTR) :: num_gvec_loc_ptr +type(C_PTR) :: num_spin_comp_ptr +type(C_PTR) :: qpw_ptr +type(C_PTR) :: ld1_ptr +type(C_PTR) :: phase_factors_q_ptr +type(C_PTR) :: mill_ptr +type(C_PTR) :: dens_mtrx_ptr +type(C_PTR) :: ld_ptr +type(C_PTR) :: rho_aug_ptr +type(C_PTR) :: error_code_ptr +! +interface +subroutine sirius_generate_rhoaug_q_aux(handler,iat,num_atoms,num_gvec_loc,num_spin_comp,& +&qpw,ld1,phase_factors_q,mill,dens_mtrx,ld,rho_aug,error_code)& +&bind(C, name="sirius_generate_rhoaug_q") +use, intrinsic :: ISO_C_BINDING +type(C_PTR), value :: handler +type(C_PTR), value :: iat +type(C_PTR), value :: num_atoms +type(C_PTR), value :: num_gvec_loc +type(C_PTR), value :: num_spin_comp +type(C_PTR), value :: qpw +type(C_PTR), value :: ld1 +type(C_PTR), value :: phase_factors_q +type(C_PTR), value :: mill +type(C_PTR), value :: dens_mtrx +type(C_PTR), value :: ld +type(C_PTR), value :: rho_aug +type(C_PTR), value :: error_code +end subroutine +end interface +! +handler_ptr = C_NULL_PTR +handler_ptr = C_LOC(handler%handler_ptr_) +iat_ptr = C_NULL_PTR +iat_ptr = C_LOC(iat) +num_atoms_ptr = C_NULL_PTR +num_atoms_ptr = C_LOC(num_atoms) +num_gvec_loc_ptr = C_NULL_PTR +num_gvec_loc_ptr = C_LOC(num_gvec_loc) +num_spin_comp_ptr = C_NULL_PTR +num_spin_comp_ptr = C_LOC(num_spin_comp) +qpw_ptr = C_NULL_PTR +qpw_ptr = C_LOC(qpw) +ld1_ptr = C_NULL_PTR +ld1_ptr = C_LOC(ld1) +phase_factors_q_ptr = C_NULL_PTR +phase_factors_q_ptr = C_LOC(phase_factors_q) +mill_ptr = C_NULL_PTR +mill_ptr = C_LOC(mill) +dens_mtrx_ptr = C_NULL_PTR +dens_mtrx_ptr = C_LOC(dens_mtrx) +ld_ptr = C_NULL_PTR +ld_ptr = C_LOC(ld) +rho_aug_ptr = C_NULL_PTR +rho_aug_ptr = C_LOC(rho_aug) +error_code_ptr = C_NULL_PTR +if (present(error_code)) then +error_code_ptr = C_LOC(error_code) +endif +call sirius_generate_rhoaug_q_aux(handler_ptr,iat_ptr,num_atoms_ptr,num_gvec_loc_ptr,& +&num_spin_comp_ptr,qpw_ptr,ld1_ptr,phase_factors_q_ptr,mill_ptr,dens_mtrx_ptr,ld_ptr,& +&rho_aug_ptr,error_code_ptr) +end subroutine sirius_generate_rhoaug_q + ! !> @brief Generate D-operator matrix. !> @param [in] handler Ground state handler. diff --git a/src/api/sirius_api.cpp b/src/api/sirius_api.cpp index c3b1f4aff..69f2224ab 100644 --- a/src/api/sirius_api.cpp +++ b/src/api/sirius_api.cpp @@ -6251,6 +6251,132 @@ sirius_linear_solver(void* const* handler__, double const* vkq__, int const* num error_code__); } +/* +@api begin +sirius_generate_rhoaug_q: + doc: Generate augmentation charge in case of complex density (linear response) + arguments: + handler: + type: gs_handler + attr: in, required + doc: DFT ground state handler. + iat: + type: int + attr: in, required + doc: Index of atom type. + num_atoms: + type: int + attr: in, required + doc: Total number of atoms. + num_gvec_loc: + type: int + attr: in, required + doc: Local number of G-vectors + num_spin_comp: + type: int + attr: in, required + doc: Number of spin components. + qpw: + type: complex + attr: in, required, dimension(ldq, num_gvec_loc) + doc: Augmentation operator for a givem atom type. + ldq: + type: int + attr: in, required + doc: Leading dimension of qpw array. + phase_factors_q: + type: complex + attr: in, required, dimension(num_atoms) + doc: Phase factors exp(i*q*r_alpha) + mill: + type: int + attr: in, required, dimension(3, num_gvec_loc) + doc: Miller indices (G-vectors in lattice coordinates) + dens_mtrx: + type: complex + attr: in, required, dimension(ld, num_atoms, num_spin_comp) + doc: Density matrix + ldd: + type: int + attr: in, required + doc: Leading dimension of density matrix. + rho_aug: + type: complex + attr: inout, required, dimension(num_gvec_loc, num_spin_comp) + doc: Resulting augmentation charge. + error_code: + type: int + attr: out, optional + doc: Error code +@api end +*/ +void +sirius_generate_rhoaug_q(void* const* handler__, int const* iat__, int const* num_atoms__, int const* num_gvec_loc__, + int const* num_spin_comp__, std::complex const* qpw__, int const* ldq__, + std::complex const* phase_factors_q__, int const* mill__, + std::complex const* dens_mtrx__, int const* ldd__, std::complex* rho_aug__, + int* error_code__) +{ + using namespace sirius; + PROFILE("sirius_api::sirius_generate_rhoaug_q"); + call_sirius( + [&]() { + auto& gs = get_gs(handler__); + auto& sctx = gs.ctx(); + /* index of atom type */ + int iat = *iat__ - 1; + int num_beta = sctx.unit_cell().atom_type(iat).mt_basis_size(); + int num_gvec_loc = *num_gvec_loc__; + int num_spin_comp = *num_spin_comp__; + + mdarray, 2> qpw({*ldq__, num_gvec_loc}, const_cast*>(qpw__)); + mdarray mill({3, num_gvec_loc}, const_cast(mill__)); + mdarray, 3> dens_mtrx({*ldd__, *num_atoms__, num_spin_comp}, + const_cast*>(dens_mtrx__)); + mdarray, 2> rho_aug({num_gvec_loc, num_spin_comp}, rho_aug__); + + /* density matrix for all atoms of a given type */ + mdarray, 2> tmp2( + {num_beta * (num_beta + 1) / 2, sctx.unit_cell().atom_type(iat).num_atoms()}, + get_memory_pool(memory_t::host)); + + mdarray, 2> tmp1({sctx.unit_cell().atom_type(iat).num_atoms(), num_gvec_loc}, + get_memory_pool(memory_t::host)); + for (int is = 0; is < num_spin_comp; is++) { + PROFILE_START("sirius_generate_rhoaug_q:tmp2") + for (int i = 0; i < sctx.unit_cell().atom_type(iat).num_atoms(); i++) { + int ia = sctx.unit_cell().atom_type(iat).atom_id(i); + for (int j = 0; j < num_beta * (num_beta + 1) / 2; j++) { + tmp2(j, i) = dens_mtrx(j, ia, is); + } + } + PROFILE_STOP("sirius_generate_rhoaug_q:tmp2") + + PROFILE_START("sirius_generate_rhoaug_q:gemm") + la::wrap(la::lib_t::blas) + .gemm('T', 'N', sctx.unit_cell().atom_type(iat).num_atoms(), num_gvec_loc, + num_beta * (num_beta + 1) / 2, &la::constant>::one(), + tmp2.at(memory_t::host), tmp2.ld(), qpw.at(memory_t::host), qpw.ld(), + &la::constant>::zero(), tmp1.at(memory_t::host), tmp1.ld()); + PROFILE_STOP("sirius_generate_rhoaug_q:gemm") + + PROFILE_START("sirius_generate_rhoaug_q:sum") + #pragma omp parallel for + for (int ig = 0; ig < num_gvec_loc; ig++) { + std::complex z(0, 0); + for (int i = 0; i < sctx.unit_cell().atom_type(iat).num_atoms(); i++) { + int ia = sctx.unit_cell().atom_type(iat).atom_id(i); + z += tmp1(i, ig) * phase_factors_q__[ia] * + std::conj(sctx.gvec_phase_factor(r3::vector(&mill(0, ig)), ia)); + } + rho_aug(ig, is) += z * 2.0; + } + PROFILE_STOP("sirius_generate_rhoaug_q:sum") + } + }, + error_code__); +} + /* @api begin sirius_generate_d_operator_matrix: diff --git a/src/context/config.hpp b/src/context/config.hpp index 55a6dcc63..a3a45608c 100644 --- a/src/context/config.hpp +++ b/src/context/config.hpp @@ -886,6 +886,18 @@ class config_t } dict_["/control/ortho_rf"_json_pointer] = ortho_rf__; } + /// Save LAPW radial functions in text file for inspection. + inline auto save_rf() const + { + return dict_.at("/control/save_rf"_json_pointer).get(); + } + inline void save_rf(bool save_rf__) + { + if (dict_.contains("locked")) { + throw std::runtime_error(locked_msg); + } + dict_["/control/save_rf"_json_pointer] = save_rf__; + } /// Type of the output stream (stdout:, file:name) inline auto output() const { diff --git a/src/context/input_schema.json b/src/context/input_schema.json index 83018cf89..b670199ac 100644 --- a/src/context/input_schema.json +++ b/src/context/input_schema.json @@ -483,6 +483,11 @@ "default": false, "title": "Orthogonalize LAPW radial functions." }, + "save_rf": { + "type": "boolean", + "default": false, + "title": "Save LAPW radial functions in text file for inspection." + }, "output": { "type": "string", "default": "stdout:", diff --git a/src/context/simulation_context.cpp b/src/context/simulation_context.cpp index 1b23cf6ad..a57fe8d14 100644 --- a/src/context/simulation_context.cpp +++ b/src/context/simulation_context.cpp @@ -27,6 +27,7 @@ #include "core/env/env.hpp" #include "core/omp.hpp" #include "core/sirius_version.hpp" +#include "core/ostream_tools.hpp" #include "simulation_context.hpp" #include "symmetry/lattice.hpp" #include "symmetry/crystal_symmetry.hpp" @@ -390,8 +391,8 @@ Simulation_context::initialize() is_magma = false; } - int npr = cfg().control().mpi_grid_dims()[0]; - int npc = cfg().control().mpi_grid_dims()[1]; + int npr = mpi_grid_dims()[0]; + int npc = mpi_grid_dims()[1]; /* deduce the default eigen-value solver */ for (int i : {0, 1}) { @@ -491,7 +492,7 @@ Simulation_context::initialize() /* create G-vectors on the first call to update() */ update(); - ::sirius::print_memory_usage(this->out(), FILE_LINE); + print_memory_usage(this->out(), FILE_LINE); if (verbosity() >= 1 && comm().rank() == 0) { print_info(this->out()); @@ -530,11 +531,10 @@ Simulation_context::print_info(std::ostream& out__) const char buf[100]; strftime(buf, sizeof(buf), "%a, %e %b %Y %H:%M:%S", ptm); - os << "SIRIUS version : " << sirius::major_version() << "." << sirius::minor_version() << "." - << sirius::revision() << std::endl - << "git hash : " << sirius::git_hash() << std::endl - << "git branch : " << sirius::git_branchname() << std::endl - << "build time : " << sirius::build_date() << std::endl + os << "SIRIUS version : " << major_version() << "." << minor_version() << "." << revision() << std::endl + << "git hash : " << git_hash() << std::endl + << "git branch : " << git_branchname() << std::endl + << "build time : " << build_date() << std::endl << "start time : " << std::string(buf) << std::endl << std::endl << "number of MPI ranks : " << this->comm().size() << std::endl; @@ -1273,15 +1273,18 @@ Simulation_context::init_comm() PROFILE("sirius::Simulation_context::init_comm"); /* check MPI grid dimensions and set a default grid if needed */ - if (!cfg().control().mpi_grid_dims().size()) { + if (!mpi_grid_dims().size()) { mpi_grid_dims({1, 1}); } - if (cfg().control().mpi_grid_dims().size() != 2) { - RTE_THROW("wrong MPI grid"); + if (mpi_grid_dims().size() != 2) { + std::stringstream s; + auto g = mpi_grid_dims(); + s << "MPI grid for band parallelization " << g << " is not 2D"; + RTE_THROW(s); } - const int npr = cfg().control().mpi_grid_dims()[0]; - const int npc = cfg().control().mpi_grid_dims()[1]; + const int npr = mpi_grid_dims()[0]; + const int npc = mpi_grid_dims()[1]; const int npb = npr * npc; if (npb <= 0) { std::stringstream s; diff --git a/src/core/memory.hpp b/src/core/memory.hpp index 1567c90a5..4a4a94b42 100644 --- a/src/core/memory.hpp +++ b/src/core/memory.hpp @@ -361,7 +361,7 @@ class memory_pool return static_cast(memory_pool_allocator_.allocate(num_elements__ * sizeof(T))); #else - return allocate(num_elements__, M_); + return sirius::allocate(num_elements__, M_); #endif } diff --git a/src/core/wf/wave_functions.hpp b/src/core/wf/wave_functions.hpp index d653920ba..bee2943ab 100644 --- a/src/core/wf/wave_functions.hpp +++ b/src/core/wf/wave_functions.hpp @@ -25,6 +25,7 @@ #ifndef __WAVE_FUNCTIONS_HPP__ #define __WAVE_FUNCTIONS_HPP__ +#include #include #include #include @@ -634,18 +635,17 @@ class Wave_functions_mt : public Wave_functions_base /// Return COSTA layout for the muffin-tin part for a given spin index and band range. auto - grid_layout_mt(spin_index ispn__, band_range b__) + grid_layout_mt(spin_index ispn__, band_range b__) -> costa::grid_layout> { - std::vector rowsplit(comm_.size() + 1); - rowsplit[0] = 0; + std::vector rowsplit({0}); + std::vector owners; for (int i = 0; i < comm_.size(); i++) { - rowsplit[i + 1] = rowsplit[i] + mt_coeffs_distr_.counts[i]; + if (mt_coeffs_distr_.counts[i] > 0) { + rowsplit.push_back(rowsplit.back() + mt_coeffs_distr_.counts[i]); + owners.push_back(i); + } } std::vector colsplit({0, b__.size()}); - std::vector owners(comm_.size()); - for (int i = 0; i < comm_.size(); i++) { - owners[i] = i; - } costa::block_t localblock; localblock.data = this->num_mt_ ? this->data_[ispn__.get()].at(memory_t::host, this->num_pw_, b__.begin()) : nullptr; @@ -653,8 +653,10 @@ class Wave_functions_mt : public Wave_functions_base localblock.row = comm_.rank(); localblock.col = 0; - return costa::custom_layout>(comm_.size(), 1, rowsplit.data(), colsplit.data(), owners.data(), - 1, &localblock, 'C'); + int nlocal_blocks = this->num_mt_ ? 1 : 0; + + return costa::custom_layout>(rowsplit.size() - 1, 1, rowsplit.data(), colsplit.data(), + owners.data(), nlocal_blocks, &localblock, 'C'); } /// Compute checksum of the muffin-tin coefficients. diff --git a/src/dft/smearing.cpp b/src/dft/smearing.cpp index 9204f3b11..784bbfac0 100644 --- a/src/dft/smearing.cpp +++ b/src/dft/smearing.cpp @@ -74,11 +74,8 @@ cold::occupancy(double x__, double width__) double x = x__ / width__ - 1.0 / sqrt2; double x2 = x * x; double f = std::erf(x) / 2.0 + 0.5; - - if (x2 > 700) + if (x2 > 200) return f; - - // std::erf(x) / 2.0 + std::exp(-x2) / std::sqrt(2 * pi) + 0.5; return f + std::exp(-x2) / std::sqrt(2 * pi); } @@ -139,11 +136,13 @@ methfessel_paxton::occupancy(double x__, double width__, int n__) double z = -x__ / width__; double result{0}; result = 0.5 * (1 - std::erf(z)); - // todo s0 is missing for (int i = 1; i <= n__; ++i) { double A = mp_coefficients(i); result += A * sf::hermiteh(2 * i - 1, z) * std::exp(-z * z); } + if (result < 1e-30) { + return 0; + } return result; } diff --git a/src/geometry/force.cpp b/src/geometry/force.cpp index 103eeac19..3fb03bdbe 100644 --- a/src/geometry/force.cpp +++ b/src/geometry/force.cpp @@ -771,7 +771,7 @@ Force::add_ibs_force(K_point* kp__, Hamiltonian_k& Hk__, mdarray Hk__.set_fv_h_o_apw_lo(atom, ia, alm_row, alm_col, h, o); /* apply MT Hamiltonian to column coefficients */ - Hk__.H0().apply_hmt_to_apw(atom, kp__->num_gkvec_col(), alm_col, halm_col); + Hk__.H0().apply_hmt_to_apw(atom, spin_block_t::nm, kp__->num_gkvec_col(), alm_col, halm_col); /* apw-apw block of the overlap matrix */ la::wrap(la::lib_t::blas) diff --git a/src/hamiltonian/hamiltonian.cpp b/src/hamiltonian/hamiltonian.cpp index 5ed1d099e..c9c6fada1 100644 --- a/src/hamiltonian/hamiltonian.cpp +++ b/src/hamiltonian/hamiltonian.cpp @@ -74,8 +74,8 @@ Hamiltonian0::Hamiltonian0(Potential& potential__, bool precompute_lapw__) for (int j1 = 0; j1 <= j2; j1++) { int lm1 = type.indexb(j1).lm; int idxrf1 = type.indexb(j1).idxrf; - hmt_[ia](j1, j2) = atom.radial_integrals_sum_L3( - idxrf1, idxrf2, type.gaunt_coefs().gaunt_vector(lm1, lm2)); + hmt_[ia](j1, j2) = atom.radial_integrals_sum_L3(spin_block_t::nm, idxrf1, idxrf2, + type.gaunt_coefs().gaunt_vector(lm1, lm2)); hmt_[ia](j2, j1) = std::conj(hmt_[ia](j1, j2)); } } @@ -96,10 +96,9 @@ Hamiltonian0::~Hamiltonian0() } template -template void -Hamiltonian0::apply_hmt_to_apw(Atom const& atom__, int ngv__, mdarray, 2>& alm__, - mdarray, 2>& halm__) const +Hamiltonian0::apply_hmt_to_apw(Atom const& atom__, spin_block_t sblock__, int ngv__, + mdarray, 2>& alm__, mdarray, 2>& halm__) const { auto& type = atom__.type(); @@ -115,7 +114,7 @@ Hamiltonian0::apply_hmt_to_apw(Atom const& atom__, int ngv__, mdarray(idxrf1, idxrf2, type.gaunt_coefs().gaunt_vector(lm1, lm2)); + atom__.radial_integrals_sum_L3(sblock__, idxrf1, idxrf2, type.gaunt_coefs().gaunt_vector(lm1, lm2)); } } la::wrap(la::lib_t::blas) @@ -269,19 +268,8 @@ Hamiltonian0::apply_so_correction(wf::Wave_functions& psi__, std::vector; - -template void -Hamiltonian0::apply_hmt_to_apw(Atom const& atom__, int ngv__, - mdarray, 2>& alm__, - mdarray, 2>& halm__) const; - #ifdef SIRIUS_USE_FP32 template class Hamiltonian0; - -template void -Hamiltonian0::apply_hmt_to_apw(Atom const& atom__, int ngv__, - mdarray, 2>& alm__, - mdarray, 2>& halm__) const; #endif } // namespace sirius diff --git a/src/hamiltonian/hamiltonian.hpp b/src/hamiltonian/hamiltonian.hpp index 7ca2d2f41..028ddb05f 100644 --- a/src/hamiltonian/hamiltonian.hpp +++ b/src/hamiltonian/hamiltonian.hpp @@ -157,9 +157,8 @@ class Hamiltonian0 * \rangle \langle Y_{L_1} | R_{L_3} | Y_{L_2} \rangle * \f] */ - template void - apply_hmt_to_apw(Atom const& atom__, int ngv__, mdarray, 2>& alm__, + apply_hmt_to_apw(Atom const& atom__, spin_block_t sblock__, int ngv__, mdarray, 2>& alm__, mdarray, 2>& halm__) const; /// Add correction to LAPW overlap arising in the infinite-order relativistic approximation (IORA). diff --git a/src/hamiltonian/hamiltonian_k.cpp b/src/hamiltonian/hamiltonian_k.cpp index 53dff1a3d..995cb4363 100644 --- a/src/hamiltonian/hamiltonian_k.cpp +++ b/src/hamiltonian/hamiltonian_k.cpp @@ -250,7 +250,7 @@ Hamiltonian_k::get_h_o_diag_lapw() const kp_.alm_coeffs_loc().template generate(atom, alm); if (what & 1) { - H0_.template apply_hmt_to_apw(atom, kp_.num_gkvec_loc(), alm, halm); + H0_.apply_hmt_to_apw(atom, spin_block_t::nm, kp_.num_gkvec_loc(), alm, halm); } for (int xi = 0; xi < nmt; xi++) { @@ -436,7 +436,7 @@ Hamiltonian_k::set_fv_h_o(la::dmatrix>& h__, la::dmatrix(atom, alm_col_atom); /* can't copy alm to device how as it might be modified by the iora */ - H0_.template apply_hmt_to_apw(atom, kp_.num_gkvec_col(), alm_col_atom, halm_col_atom); + H0_.apply_hmt_to_apw(atom, spin_block_t::nm, kp_.num_gkvec_col(), alm_col_atom, halm_col_atom); if (pu == device_t::GPU) { halm_col_atom.copy_to(memory_t::device, acc::stream_id(tid)); } @@ -540,8 +540,8 @@ Hamiltonian_k::set_fv_h_o_apw_lo(Atom const& atom__, int ia__, mdarray(idxrf, idxrf1, - type.gaunt_coefs().gaunt_vector(lm1, lm)); + auto zsum = atom__.radial_integrals_sum_L3(spin_block_t::nm, idxrf, idxrf1, + type.gaunt_coefs().gaunt_vector(lm1, lm)); if (std::abs(zsum) > 1e-14) { for (int igkloc = 0; igkloc < kp_.num_gkvec_row(); igkloc++) { @@ -582,8 +582,8 @@ Hamiltonian_k::set_fv_h_o_apw_lo(Atom const& atom__, int ia__, mdarray(idxrf1, idxrf, - type.gaunt_coefs().gaunt_vector(lm, lm1)); + auto zsum = atom__.radial_integrals_sum_L3(spin_block_t::nm, idxrf1, idxrf, + type.gaunt_coefs().gaunt_vector(lm, lm1)); if (std::abs(zsum) > 1e-14) { for (int igkloc = 0; igkloc < kp_.num_gkvec_col(); igkloc++) { @@ -633,9 +633,8 @@ Hamiltonian_k::set_fv_h_o_lo_lo(la::dmatrix>& h__, la::dmatri int lm1 = kp.lo_basis_descriptor_row(irow).lm; int idxrf1 = kp.lo_basis_descriptor_row(irow).idxrf; - h__(kp.num_gkvec_row() + irow, kp.num_gkvec_col() + icol) += - atom.template radial_integrals_sum_L3( - idxrf1, idxrf2, atom.type().gaunt_coefs().gaunt_vector(lm1, lm2)); + h__(kp.num_gkvec_row() + irow, kp.num_gkvec_col() + icol) += atom.radial_integrals_sum_L3( + spin_block_t::nm, idxrf1, idxrf2, atom.type().gaunt_coefs().gaunt_vector(lm1, lm2)); if (lm1 == lm2) { int l = kp.lo_basis_descriptor_row(irow).l; @@ -691,12 +690,8 @@ Hamiltonian_k::set_fv_h_o_it(la::dmatrix>& h__, la::dmatrix s(radial_grid_); + for (int i = 0; i < nr; i++) { + s(i) = std::pow(p__[i], 2); + } + auto norm = 1.0 / std::sqrt(s.interpolate().integrate(0)); + for (int i = 0; i < nr; i++) { + p__[i] *= norm; + q__[i] *= norm; + } + } + for (int i = 0; i < nr; i++) { if (rel == relativity_t::none || rel == relativity_t::koelling_harmon || rel == relativity_t::zora) { double V = ve_(i) - zn_ * radial_grid_.x_inv(i); @@ -428,7 +441,7 @@ class Radial_solver double v1 = ll_half / M / std::pow(radial_grid_[i], 2); /* P' = 2MQ + \frac{P}{r} */ - dpdr__[i] = 2 * M * q__[i] + p__[i] * radial_grid_.x_inv(i); + dpdr__[i] = 2 * M * q__[i] + p__[i] * radial_grid_.x_inv(i) + chi_p__(i); /* Q' = (V - E + \frac{\ell(\ell + 1)}{2 M r^2}) P - \frac{Q}{r} */ dqdr__[i] = (V - enu__ + v1) * p__[i] - q__[i] * radial_grid_.x_inv(i) + chi_q__(i); @@ -674,7 +687,6 @@ class Radial_solver for (int i = 0; i < nr; i++) { chi_q(i) = -j * p[j - 1][i]; } - chi_q.interpolate(); } else if (rel__ == relativity_t::koelling_harmon) { double sq_alpha = std::pow(speed_of_light, -2); double ll_half = l__ * (l__ + 1) / 2.0; @@ -686,6 +698,15 @@ class Radial_solver chi_p(i) = sq_alpha * q[j - 1][i]; chi_q(i) = -p[j - 1][i] * (1 + 0.5 * sq_alpha * ll_half / std::pow(M * x, 2)); } + } else if (j == 2) { + for (int i = 0; i < nr; i++) { + double x = radial_grid_[i]; + double V = ve_(i) - zn_ * radial_grid_.x_inv(i); + double M = 1 + 0.5 * sq_alpha * (enu__ - V); + chi_p(i) = 2 * sq_alpha * q[j - 1][i]; + chi_q(i) = -2 * p[j - 1][i] * (1 + 0.5 * sq_alpha * ll_half / std::pow(M * x, 2)) + + p[j - 2][i] * (0.5 * ll_half * std::pow(sq_alpha, 2) / std::pow(M * x, 2) / M); + } } else { throw std::runtime_error("not implemented"); } @@ -714,11 +735,11 @@ class Radial_solver } else { throw std::runtime_error("not implemented"); } - chi_p.interpolate(); - chi_q.interpolate(); } else { throw std::runtime_error("not implemented"); } + chi_p.interpolate(); + chi_q.interpolate(); } switch (rel__) { diff --git a/src/sirius.hpp b/src/sirius.hpp index 9b7b2b00b..4506f545a 100644 --- a/src/sirius.hpp +++ b/src/sirius.hpp @@ -102,8 +102,8 @@ initialize(bool call_mpi_init__ = true) #endif if (mpi::Communicator::world().rank() == 0) { - std::printf("SIRIUS %i.%i.%i, git hash: %s\n", sirius::major_version(), sirius::minor_version(), - sirius::revision(), sirius::git_hash().c_str()); + std::printf("SIRIUS %i.%i.%i, git hash: %s\n", major_version(), minor_version(), revision(), + git_hash().c_str()); #if !defined(NDEBUG) std::printf("Warning! Compiled in 'debug' mode with assert statements enabled!\n"); #endif diff --git a/src/testing.hpp b/src/testing.hpp index 430787612..8a5e54606 100644 --- a/src/testing.hpp +++ b/src/testing.hpp @@ -190,7 +190,7 @@ inline auto create_simulation_context(nlohmann::json const& conf__, r3::matrix L__, int num_atoms__, std::vector> coord__, bool add_vloc__, bool add_dion__) { - auto ctx = std::make_unique(conf__); + auto ctx = std::make_unique(conf__); ctx->unit_cell().set_lattice_vectors(L__); if (num_atoms__) { diff --git a/src/unit_cell/atom.hpp b/src/unit_cell/atom.hpp index d050d874f..375912914 100644 --- a/src/unit_cell/atom.hpp +++ b/src/unit_cell/atom.hpp @@ -431,48 +431,61 @@ class Atom * \langle Y_{L_1} | R_{L_3} | Y_{L_2} \rangle * \f] */ - template - inline std::complex - radial_integrals_sum_L3(int idxrf1__, int idxrf2__, std::vector>> const& gnt__) const - { - std::complex zsum(0, 0); - - for (size_t i = 0; i < gnt__.size(); i++) { - switch (sblock) { - case spin_block_t::nm: { - /* just the Hamiltonian */ - zsum += gnt__[i].coef * h_radial_integrals_(gnt__[i].lm3, idxrf1__, idxrf2__); - break; - } - case spin_block_t::uu: { - /* h + Bz */ - zsum += gnt__[i].coef * (h_radial_integrals_(gnt__[i].lm3, idxrf1__, idxrf2__) + - b_radial_integrals_(gnt__[i].lm3, idxrf1__, idxrf2__, 0)); - break; - } - case spin_block_t::dd: { - /* h - Bz */ - zsum += gnt__[i].coef * (h_radial_integrals_(gnt__[i].lm3, idxrf1__, idxrf2__) - - b_radial_integrals_(gnt__[i].lm3, idxrf1__, idxrf2__, 0)); - break; - } - case spin_block_t::ud: { - /* Bx - i By */ - zsum += gnt__[i].coef * - std::complex(b_radial_integrals_(gnt__[i].lm3, idxrf1__, idxrf2__, 1), - -b_radial_integrals_(gnt__[i].lm3, idxrf1__, idxrf2__, 2)); - break; - } - case spin_block_t::du: { - /* Bx + i By */ - zsum += gnt__[i].coef * - std::complex(b_radial_integrals_(gnt__[i].lm3, idxrf1__, idxrf2__, 1), - b_radial_integrals_(gnt__[i].lm3, idxrf1__, idxrf2__, 2)); - break; - } + inline auto + radial_integrals_sum_L3(spin_block_t sblock, int idxrf1__, int idxrf2__, + std::vector>> const& gnt__) const + { + auto h_int = [this, idxrf1__, idxrf2__](int lm3) { return this->h_radial_integrals_(lm3, idxrf1__, idxrf2__); }; + auto b_int = [this, idxrf1__, idxrf2__](int lm3, int i) { + return this->b_radial_integrals_(lm3, idxrf1__, idxrf2__, i); + }; + /* just the Hamiltonian */ + auto nm = [h_int](const auto& gaunt_l3) { return gaunt_l3.coef * h_int(gaunt_l3.lm3); }; + /* h + Bz */ + auto uu = [h_int, b_int](const auto& gaunt_l3) { + return gaunt_l3.coef * (h_int(gaunt_l3.lm3) + b_int(gaunt_l3.lm3, 0)); + }; + /* h - Bz */ + auto dd = [h_int, b_int](const auto& gaunt_l3) { + return gaunt_l3.coef * (h_int(gaunt_l3.lm3) - b_int(gaunt_l3.lm3, 0)); + }; + /* Bx - i By */ + auto ud = [b_int](const auto& gaunt_l3) { + return gaunt_l3.coef * std::complex(b_int(gaunt_l3.lm3, 1), -b_int(gaunt_l3.lm3, 2)); + }; + /* Bx + i By */ + auto du = [b_int](const auto& gaunt_l3) { + return gaunt_l3.coef * std::complex(b_int(gaunt_l3.lm3, 1), b_int(gaunt_l3.lm3, 2)); + }; + + std::complex res{0}; + switch (sblock) { + case spin_block_t::nm: { + res = std::transform_reduce(gnt__.begin(), gnt__.end(), std::complex{0}, std::plus{}, nm); + break; + } + case spin_block_t::uu: { + res = std::transform_reduce(gnt__.begin(), gnt__.end(), std::complex{0}, std::plus{}, uu); + break; + } + case spin_block_t::dd: { + res = std::transform_reduce(gnt__.begin(), gnt__.end(), std::complex{0}, std::plus{}, dd); + break; + } + case spin_block_t::ud: { + res = std::transform_reduce(gnt__.begin(), gnt__.end(), std::complex{0}, std::plus{}, ud); + break; + } + case spin_block_t::du: { + res = std::transform_reduce(gnt__.begin(), gnt__.end(), std::complex{0}, std::plus{}, du); + break; + } + default: { + RTE_THROW("unknown value for spin_block_t"); } } - return zsum; + + return res; } inline int diff --git a/src/unit_cell/atom_symmetry_class.cpp b/src/unit_cell/atom_symmetry_class.cpp index ae4c70072..82672288f 100644 --- a/src/unit_cell/atom_symmetry_class.cpp +++ b/src/unit_cell/atom_symmetry_class.cpp @@ -552,24 +552,21 @@ Atom_symmetry_class::generate_radial_functions(relativity_t rel__) orthogonalize_radial_functions(); } - //** if (true) - //** { - //** std::stringstream s; - //** s << "radial_functions_" << id_ << ".dat"; - //** FILE* fout = fopen(s.str().c_str(), "w"); - - //** for (int ir = 0; ir atomic_levels_; - ///// Number of core electrons. - // double num_core_electrons_{0}; - - ///// Number of valence electrons. - // double num_valence_electrons_{0}; - /* forbid copy constructor */ Atom_type_base(Atom_type_base const& src) = delete; @@ -93,15 +87,6 @@ class Atom_type_base atomic_levels_.push_back(level); } } - ///* get the number of core electrons */ - // for (auto& e : atomic_levels_) { - // if (e.core) { - // num_core_electrons_ += e.occupancy; - // } - // } - - ///* get number of valence electrons */ - // num_valence_electrons_ = zn_ - num_core_electrons_; free_atom_radial_grid_ = Radial_grid_exp(2000 + 150 * zn(), 1e-7, 20.0 + 0.25 * zn(), 1.0); } @@ -188,16 +173,6 @@ class Atom_type_base { return atomic_levels_[idx]; } - - // inline double num_core_electrons() const - //{ - // return num_core_electrons_; - // } - - // inline double num_valence_electrons() const - //{ - // return num_valence_electrons_; - // } }; } // namespace sirius diff --git a/src/unit_cell/unit_cell.cpp b/src/unit_cell/unit_cell.cpp index 4ee74d219..2572c2dea 100644 --- a/src/unit_cell/unit_cell.cpp +++ b/src/unit_cell/unit_cell.cpp @@ -545,7 +545,23 @@ Unit_cell::generate_radial_functions(std::ostream& out__) } RTE_OUT(out__) << pout.flush(0); } - if (parameters_.verbosity() >= 4 && comm_.rank() == 0) { + if (parameters_.verbosity() >= 3) { + std::stringstream s; + for (int ic = 0; ic < num_atom_symmetry_classes(); ic++) { + s << "Atom symmetry class : " << ic << std::endl; + for (int l = 0; l < this->lmax_apw(); l++) { + for (int o = 0; o < atom_symmetry_class(ic).atom_type().aw_order(l); o++) { + s << "l = " << l << ", o = " << o << ", deriv ="; + for (int m = 0; m <= 2; m++) { + s << " " << atom_symmetry_class(ic).aw_surface_deriv(l, o, m); + } + s << std::endl; + } + } + } + RTE_OUT(out__) << s.str(); + } + if (parameters_.cfg().control().save_rf() && comm_.rank() == 0) { for (int ic = 0; ic < num_atom_symmetry_classes(); ic++) { atom_symmetry_class(ic).dump_lo(); } diff --git a/verification/test31/H.json b/verification/test31/H.json new file mode 100644 index 000000000..74a79659c --- /dev/null +++ b/verification/test31/H.json @@ -0,0 +1,4369 @@ +{ + "core": "", + "free_atom": { + "density": [ + 0.2730404032959547, + 0.27304040280776976, + 0.2730404023152205, + 0.27304040181826805, + 0.27304040131687285, + 0.2730404008109954, + 0.27304040030059534, + 0.2730403997856325, + 0.27304039926606605, + 0.2730403987418548, + 0.27304039821295706, + 0.2730403976793312, + 0.2730403971409348, + 0.27304039659772517, + 0.2730403960496594, + 0.273040395496694, + 0.27304039493878535, + 0.27304039437588906, + 0.2730403938079606, + 0.273040393234955, + 0.2730403926568268, + 0.2730403920735303, + 0.2730403914850192, + 0.2730403908912469, + 0.2730403902921665, + 0.27304038968773037, + 0.27304038907789063, + 0.27304038846259915, + 0.27304038784180706, + 0.2730403872154653, + 0.273040386583524, + 0.27304038594593344, + 0.2730403853026429, + 0.2730403846536015, + 0.27304038399875785, + 0.27304038333805986, + 0.2730403826714555, + 0.27304038199889175, + 0.27304038132031555, + 0.27304038063567293, + 0.2730403799449097, + 0.2730403792479713, + 0.27304037854480234, + 0.27304037783534735, + 0.2730403771195499, + 0.27304037639735346, + 0.27304037566870054, + 0.27304037493353367, + 0.27304037419179467, + 0.2730403734434245, + 0.27304037268836423, + 0.2730403719265538, + 0.2730403711579329, + 0.2730403703824408, + 0.2730403696000158, + 0.2730403688105964, + 0.2730403680141195, + 0.2730403672105223, + 0.2730403663997411, + 0.27304036558171174, + 0.2730403647563693, + 0.27304036392364844, + 0.2730403630834834, + 0.2730403622358073, + 0.27304036138055326, + 0.27304036051765335, + 0.27304035964703927, + 0.2730403587686422, + 0.2730403578823923, + 0.2730403569882196, + 0.2730403560860532, + 0.27304035517582165, + 0.27304035425745277, + 0.2730403533308738, + 0.27304035239601143, + 0.2730403514527917, + 0.27304035050113984, + 0.2730403495409802, + 0.2730403485722371, + 0.2730403475948336, + 0.27304034660869225, + 0.27304034561373497, + 0.27304034460988313, + 0.2730403435970569, + 0.27304034257517623, + 0.27304034154416024, + 0.2730403405039272, + 0.2730403394543947, + 0.27304033839547953, + 0.273040337327098, + 0.27304033624916524, + 0.27304033516159604, + 0.2730403340643041, + 0.27304033295720276, + 0.27304033184020404, + 0.27304033071321976, + 0.27304032957616026, + 0.27304032842893583, + 0.27304032727145544, + 0.27304032610362744, + 0.2730403249253592, + 0.27304032373655746, + 0.2730403225371282, + 0.27304032132697625, + 0.27304032010600576, + 0.2730403188741201, + 0.2730403176312217, + 0.2730403163772119, + 0.2730403151119916, + 0.27304031383546057, + 0.27304031254751754, + 0.2730403112480606, + 0.2730403099369868, + 0.2730403086141922, + 0.2730403072795722, + 0.2730403059330211, + 0.27304030457443185, + 0.27304030320369727, + 0.2730403018207085, + 0.2730403004253562, + 0.27304029901752963, + 0.27304029759711745, + 0.2730402961640071, + 0.273040294718085, + 0.27304029325923673, + 0.2730402917873467, + 0.27304029030229815, + 0.2730402888039737, + 0.2730402872922546, + 0.27304028576702094, + 0.27304028422815196, + 0.273040282675526, + 0.2730402811090197, + 0.27304027952850923, + 0.27304027793386937, + 0.27304027632497374, + 0.27304027470169484, + 0.2730402730639043, + 0.27304027141147225, + 0.27304026974426776, + 0.27304026806215886, + 0.2730402663650122, + 0.2730402646526935, + 0.273040262925067, + 0.27304026118199587, + 0.27304025942334204, + 0.2730402576489662, + 0.27304025585872793, + 0.2730402540524853, + 0.2730402522300951, + 0.27304025039141316, + 0.2730402485362939, + 0.2730402466645902, + 0.2730402447761538, + 0.2730402428708353, + 0.2730402409484836, + 0.27304023900894664, + 0.2730402370520705, + 0.2730402350777002, + 0.2730402330856795, + 0.27304023107585074, + 0.27304022904805436, + 0.27304022700213, + 0.27304022493791547, + 0.2730402228552473, + 0.2730402207539605, + 0.27304021863388866, + 0.2730402164948639, + 0.27304021433671666, + 0.27304021215927604, + 0.27304020996236955, + 0.27304020774582327, + 0.27304020550946145, + 0.2730402032531071, + 0.2730402009765813, + 0.273040198679704, + 0.2730401963622931, + 0.2730401940241651, + 0.2730401916651346, + 0.27304018928501494, + 0.27304018688361764, + 0.2730401844607521, + 0.2730401820162268, + 0.273040179549848, + 0.2730401770614202, + 0.27304017455074653, + 0.27304017201762787, + 0.2730401694618637, + 0.27304016688325167, + 0.27304016428158717, + 0.2730401616566645, + 0.2730401590082756, + 0.27304015633621065, + 0.2730401536402581, + 0.2730401509202041, + 0.2730401481758337, + 0.273040145406929, + 0.27304014261327103, + 0.2730401397946382, + 0.27304013695080753, + 0.2730401340815537, + 0.2730401311866492, + 0.273040128265865, + 0.27304012531896965, + 0.2730401223457295, + 0.27304011934590944, + 0.2730401163192715, + 0.2730401132655762, + 0.27304011018458146, + 0.27304010707604326, + 0.2730401039397155, + 0.27304010077534957, + 0.2730400975826949, + 0.27304009436149856, + 0.2730400911115055, + 0.27304008783245814, + 0.27304008452409684, + 0.2730400811861596, + 0.2730400778183819, + 0.27304007442049694, + 0.2730400709922357, + 0.27304006753332644, + 0.27304006404349546, + 0.27304006052246593, + 0.27304005696995937, + 0.2730400533856941, + 0.27304004976938634, + 0.27304004612074945, + 0.2730400424394947, + 0.27304003872533034, + 0.2730400349779621, + 0.27304003119709325, + 0.2730400273824243, + 0.273040023533653, + 0.2730400196504745, + 0.27304001573258135, + 0.27304001177966303, + 0.27304000779140636, + 0.2730400037674958, + 0.2730399997076122, + 0.27303999561143427, + 0.2730399914786374, + 0.2730399873088941, + 0.2730399831018744, + 0.2730399788572448, + 0.27303997457466916, + 0.27303997025380816, + 0.27303996589431967, + 0.27303996149585835, + 0.27303995705807577, + 0.27303995258062025, + 0.2730399480631375, + 0.2730399435052694, + 0.27303993890665496, + 0.27303993426692996, + 0.27303992958572676, + 0.2730399248626747, + 0.27303992009739964, + 0.27303991528952415, + 0.2730399104386672, + 0.27303990554444485, + 0.2730399006064691, + 0.2730398956243489, + 0.2730398905976898, + 0.27303988552609343, + 0.27303988040915805, + 0.27303987524647855, + 0.27303987003764596, + 0.27303986478224734, + 0.2730398594798668, + 0.2730398541300842, + 0.2730398487324756, + 0.2730398432866137, + 0.2730398377920669, + 0.27303983224840034, + 0.2730398266551745, + 0.27303982101194657, + 0.2730398153182695, + 0.27303980957369206, + 0.27303980377775944, + 0.27303979793001265, + 0.2730397920299883, + 0.273039786077219, + 0.27303978007123325, + 0.27303977401155544, + 0.27303976789770557, + 0.27303976172919925, + 0.2730397555055478, + 0.27303974922625845, + 0.27303974289083366, + 0.27303973649877156, + 0.2730397300495659, + 0.27303972354270584, + 0.2730397169776761, + 0.2730397103539563, + 0.2730397036710221, + 0.273039696928344, + 0.2730396901253878, + 0.27303968326161476, + 0.27303967633648135, + 0.2730396693494388, + 0.2730396622999336, + 0.2730396551874075, + 0.2730396480112971, + 0.273039640771034, + 0.27303963346604454, + 0.2730396260957502, + 0.27303961865956705, + 0.27303961115690634, + 0.2730396035871735, + 0.27303959594976906, + 0.273039588244088, + 0.27303958046952, + 0.27303957262544903, + 0.27303956471125407, + 0.27303955672630814, + 0.2730395486699785, + 0.27303954054162727, + 0.27303953234061046, + 0.2730395240662784, + 0.2730395157179759, + 0.27303950729504156, + 0.27303949879680817, + 0.2730394902226026, + 0.27303948157174573, + 0.2730394728435522, + 0.2730394640373306, + 0.2730394551523836, + 0.27303944618800746, + 0.2730394371434917, + 0.2730394280181201, + 0.27303941881116994, + 0.27303940952191186, + 0.27303940014961015, + 0.2730393906935221, + 0.2730393811528991, + 0.27303937152698504, + 0.27303936181501787, + 0.27303935201622814, + 0.2730393421298394, + 0.2730393321550687, + 0.27303932209112614, + 0.27303931193721415, + 0.2730393016925288, + 0.27303929135625854, + 0.2730392809275845, + 0.2730392704056806, + 0.2730392597897135, + 0.2730392490788422, + 0.2730392382722184, + 0.27303922736898606, + 0.27303921636828155, + 0.27303920526923336, + 0.27303919407096244, + 0.2730391827725818, + 0.2730391713731964, + 0.2730391598719032, + 0.2730391482677914, + 0.2730391365599417, + 0.2730391247474268, + 0.27303911282931104, + 0.2730391008046502, + 0.27303908867249194, + 0.2730390764318752, + 0.2730390640818305, + 0.2730390516213793, + 0.2730390390495349, + 0.27303902636530153, + 0.2730390135676743, + 0.2730390006556394, + 0.2730389876281742, + 0.2730389744842468, + 0.27303896122281596, + 0.2730389478428315, + 0.2730389343432333, + 0.2730389207229521, + 0.27303890698090916, + 0.2730388931160158, + 0.2730388791271738, + 0.27303886501327534, + 0.27303885077320217, + 0.27303883640582643, + 0.27303882191000994, + 0.2730388072846049, + 0.2730387925284523, + 0.2730387776403837, + 0.27303876261921955, + 0.2730387474637701, + 0.2730387321728349, + 0.27303871674520275, + 0.27303870117965173, + 0.27303868547494864, + 0.2730386696298497, + 0.2730386536430998, + 0.2730386375134325, + 0.2730386212395704, + 0.27303860482022424, + 0.2730385882540935, + 0.27303857153986594, + 0.2730385546762177, + 0.273038537661813, + 0.27303852049530397, + 0.27303850317533107, + 0.2730384857005223, + 0.2730384680694935, + 0.27303845028084794, + 0.27303843233317676, + 0.2730384142250583, + 0.2730383959550582, + 0.2730383775217292, + 0.2730383589236114, + 0.27303834015923145, + 0.2730383212271032, + 0.2730383021257269, + 0.27303828285358955, + 0.27303826340916476, + 0.27303824379091207, + 0.27303822399727773, + 0.2730382040266937, + 0.27303818387757833, + 0.2730381635483355, + 0.27303814303735485, + 0.2730381223430119, + 0.2730381014636674, + 0.2730380803976674, + 0.2730380591433434, + 0.2730380376990117, + 0.2730380160629739, + 0.273037994233516, + 0.27303797220890896, + 0.27303794998740827, + 0.27303792756725376, + 0.2730379049466696, + 0.27303788212386393, + 0.273037859097029, + 0.2730378358643408, + 0.2730378124239592, + 0.2730377887740273, + 0.27303776491267207, + 0.27303774083800325, + 0.27303771654811415, + 0.27303769204108036, + 0.27303766731496104, + 0.2730376423677977, + 0.273037617197614, + 0.2730375918024163, + 0.2730375661801933, + 0.27303754032891514, + 0.2730375142465345, + 0.2730374879309852, + 0.27303746138018276, + 0.2730374345920243, + 0.27303740756438777, + 0.2730373802951324, + 0.2730373527820983, + 0.27303732502310624, + 0.2730372970159571, + 0.2730372687584327, + 0.2730372402482949, + 0.27303721148328536, + 0.27303718246112546, + 0.2730371531795165, + 0.27303712363613925, + 0.27303709382865354, + 0.2730370637546982, + 0.2730370334118911, + 0.27303700279782916, + 0.2730369719100872, + 0.27303694074621865, + 0.27303690930375507, + 0.273036877580206, + 0.2730368455730586, + 0.2730368132797777, + 0.27303678069780535, + 0.27303674782456067, + 0.27303671465743984, + 0.273036681193816, + 0.27303664743103834, + 0.2730366133664326, + 0.2730365789973004, + 0.27303654432091967, + 0.27303650933454365, + 0.2730364740354011, + 0.2730364384206962, + 0.2730364024876077, + 0.27303636623328936, + 0.27303632965486996, + 0.2730362927494517, + 0.27303625551411176, + 0.27303621794590055, + 0.27303618004184244, + 0.27303614179893504, + 0.2730361032141495, + 0.27303606428442934, + 0.2730360250066909, + 0.27303598537782336, + 0.2730359453946875, + 0.27303590505411657, + 0.27303586435291516, + 0.2730358232878595, + 0.2730357818556968, + 0.27303574005314557, + 0.2730356978768944, + 0.27303565532360274, + 0.2730356123899001, + 0.2730355690723857, + 0.27303552536762843, + 0.2730354812721669, + 0.27303543678250797, + 0.2730353918951278, + 0.27303534660647116, + 0.27303530091295086, + 0.27303525481094754, + 0.2730352082968095, + 0.27303516136685246, + 0.27303511401735947, + 0.27303506624458, + 0.2730350180447299, + 0.2730349694139917, + 0.2730349203485134, + 0.2730348708444086, + 0.2730348208977563, + 0.2730347705046003, + 0.27303471966094917, + 0.2730346683627756, + 0.2730346166060167, + 0.27303456438657275, + 0.27303451170030774, + 0.2730344585430485, + 0.27303440491058467, + 0.27303435079866833, + 0.27303429620301317, + 0.27303424111929503, + 0.27303418554315084, + 0.27303412947017874, + 0.2730340728959373, + 0.2730340158159455, + 0.2730339582256822, + 0.2730339001205859, + 0.2730338414960545, + 0.27303378234744424, + 0.2730337226700706, + 0.27303366245920646, + 0.27303360171008284, + 0.27303354041788797, + 0.27303347857776733, + 0.27303341618482274, + 0.27303335323411215, + 0.27303328972064983, + 0.273033225639405, + 0.273033160985302, + 0.2730330957532199, + 0.27303302993799194, + 0.27303296353440537, + 0.2730328965372003, + 0.27303282894107067, + 0.27303276074066224, + 0.273032691930573, + 0.27303262250535326, + 0.2730325524595038, + 0.27303248178747697, + 0.273032410483675, + 0.2730323385424503, + 0.27303226595810476, + 0.2730321927248894, + 0.2730321188370037, + 0.27303204428859557, + 0.27303196907376026, + 0.27303189318654053, + 0.2730318166209256, + 0.27303173937085146, + 0.2730316614301993, + 0.27303158279279593, + 0.2730315034524129, + 0.2730314234027663, + 0.2730313426375158, + 0.2730312611502643, + 0.273031178934558, + 0.27303109598388475, + 0.27303101229167476, + 0.2730309278512993, + 0.2730308426560703, + 0.2730307566992399, + 0.2730306699740003, + 0.2730305824734823, + 0.2730304941907557, + 0.27303040511882826, + 0.27303031525064503, + 0.27303022457908827, + 0.2730301330969764, + 0.27303004079706394, + 0.2730299476720404, + 0.2730298537145301, + 0.27302975891709114, + 0.2730296632722154, + 0.2730295667723277, + 0.2730294694097848, + 0.2730293711768755, + 0.2730292720658194, + 0.27302917206876703, + 0.27302907117779773, + 0.2730289693849212, + 0.2730288666820754, + 0.2730287630611257, + 0.2730286585138653, + 0.27302855303201373, + 0.2730284466072168, + 0.2730283392310455, + 0.27302823089499545, + 0.27302812159048634, + 0.2730280113088609, + 0.27302790004138483, + 0.2730277877792459, + 0.2730276745135525, + 0.2730275602353341, + 0.2730274449355394, + 0.27302732860503703, + 0.2730272112346131, + 0.2730270928149723, + 0.27302697333673537, + 0.27302685279043964, + 0.27302673116653814, + 0.273026608455398, + 0.27302648464730045, + 0.27302635973244, + 0.27302623370092344, + 0.27302610654276893, + 0.273025978247906, + 0.27302584880617325, + 0.2730257182073193, + 0.27302558644100083, + 0.273025453496782, + 0.2730253193641337, + 0.27302518403243276, + 0.2730250474909613, + 0.2730249097289053, + 0.2730247707353541, + 0.27302463049929965, + 0.2730244890096356, + 0.2730243462551563, + 0.27302420222455553, + 0.27302405690642667, + 0.2730239102892609, + 0.27302376236144604, + 0.2730236131112671, + 0.2730234625269036, + 0.2730233105964297, + 0.27302315730781285, + 0.2730230026489131, + 0.273022846607482, + 0.2730226891711615, + 0.27302253032748314, + 0.27302237006386704, + 0.27302220836762114, + 0.27302204522593954, + 0.27302188062590205, + 0.27302171455447294, + 0.27302154699850006, + 0.2730213779447138, + 0.27302120737972585, + 0.27302103529002825, + 0.2730208616619922, + 0.27302068648186745, + 0.27302050973578046, + 0.2730203314097337, + 0.27302015148960496, + 0.27301996996114547, + 0.2730197868099792, + 0.2730196020216016, + 0.2730194155813786, + 0.27301922747454527, + 0.2730190376862047, + 0.2730188462013271, + 0.2730186530047478, + 0.2730184580811672, + 0.2730182614151484, + 0.2730180629911172, + 0.2730178627933596, + 0.2730176608060215, + 0.27301745701310726, + 0.2730172513984779, + 0.2730170439458502, + 0.273016834638796, + 0.2730166234607397, + 0.2730164103949576, + 0.2730161954245771, + 0.2730159785325743, + 0.2730157597017732, + 0.2730155389148447, + 0.2730153161543044, + 0.2730150914025118, + 0.27301486464166885, + 0.27301463585381824, + 0.27301440502084234, + 0.2730141721244617, + 0.2730139371462333, + 0.27301370006754927, + 0.2730134608696359, + 0.2730132195335512, + 0.27301297604018393, + 0.2730127303702527, + 0.27301248250430293, + 0.2730122324227068, + 0.2730119801056609, + 0.27301172553318515, + 0.27301146868512, + 0.27301120954112695, + 0.273010948080685, + 0.27301068428308983, + 0.27301041812745264, + 0.2730101495926972, + 0.2730098786575594, + 0.2730096053005852, + 0.2730093295001285, + 0.27300905123435015, + 0.27300877048121547, + 0.2730084872184933, + 0.27300820142375337, + 0.2730079130743654, + 0.2730076221474966, + 0.2730073286201103, + 0.27300703246896396, + 0.2730067336706075, + 0.273006432201381, + 0.27300612803741314, + 0.2730058211546196, + 0.2730055115287008, + 0.2730051991351397, + 0.27300488394920075, + 0.2730045659459267, + 0.27300424510013777, + 0.2730039213864293, + 0.27300359477916913, + 0.2730032652524965, + 0.2730029327803194, + 0.27300259733631294, + 0.27300225889391666, + 0.2730019174263329, + 0.27300157290652455, + 0.2730012253072132, + 0.2730008746008764, + 0.2730005207597456, + 0.27300016375580516, + 0.27299980356078785, + 0.2729994401461745, + 0.2729990734831912, + 0.2729987035428068, + 0.2729983302957309, + 0.27299795371241126, + 0.2729975737630315, + 0.2729971904175094, + 0.2729968036454933, + 0.27299641341636083, + 0.27299601969921555, + 0.2729956224628857, + 0.27299522167592055, + 0.2729948173065886, + 0.27299440932287455, + 0.2729939976924774, + 0.27299358238280724, + 0.27299316336098356, + 0.2729927405938314, + 0.27299231404788016, + 0.2729918836893595, + 0.2729914494841981, + 0.27299101139801973, + 0.27299056939614125, + 0.2729901234435696, + 0.2729896735049994, + 0.27298921954480954, + 0.2729887615270608, + 0.27298829941549313, + 0.27298783317352204, + 0.2729873627642369, + 0.2729868881503967, + 0.27298640929442847, + 0.2729859261584229, + 0.2729854387041324, + 0.2729849468929677, + 0.2729844506859948, + 0.2729839500439321, + 0.2729834449271468, + 0.2729829352956522, + 0.2729824211091043, + 0.2729819023267991, + 0.2729813789076688, + 0.2729808508102785, + 0.2729803179928237, + 0.2729797804131263, + 0.2729792380286312, + 0.2729786907964036, + 0.2729781386731251, + 0.27297758161509, + 0.27297701957820286, + 0.2729764525179741, + 0.2729758803895166, + 0.27297530314754276, + 0.27297472074635987, + 0.2729741331398678, + 0.2729735402815542, + 0.27297294212449136, + 0.27297233862133286, + 0.272971729724309, + 0.2729711153852238, + 0.2729704955554503, + 0.2729698701859277, + 0.2729692392271571, + 0.2729686026291972, + 0.2729679603416611, + 0.2729673123137115, + 0.2729666584940574, + 0.2729659988309496, + 0.2729653332721768, + 0.2729646617650616, + 0.27296398425645596, + 0.27296330069273744, + 0.27296261101980446, + 0.27296191518307267, + 0.2729612131274699, + 0.2729605047974328, + 0.27295979013690125, + 0.2729590690893147, + 0.272958341597608, + 0.2729576076042057, + 0.27295686705101896, + 0.27295611987943974, + 0.272955366030337, + 0.2729546054440516, + 0.2729538380603918, + 0.27295306381862816, + 0.2729522826574894, + 0.2729514945151568, + 0.27295069932926025, + 0.27294989703687206, + 0.2729490875745034, + 0.2729482708780981, + 0.2729474468830281, + 0.2729466155240888, + 0.2729457767354931, + 0.27294493045086665, + 0.27294407660324255, + 0.2729432151250562, + 0.27294234594813954, + 0.2729414690037162, + 0.2729405842223957, + 0.27293969153416825, + 0.2729387908683989, + 0.27293788215382236, + 0.27293696531853684, + 0.2729360402899993, + 0.2729351069950186, + 0.2729341653597506, + 0.2729332153096918, + 0.272932256769674, + 0.27293128966385755, + 0.27293031391572636, + 0.272929329448081, + 0.2729283361830334, + 0.27292733404199976, + 0.27292632294569535, + 0.27292530281412786, + 0.2729242735665907, + 0.27292323512165717, + 0.27292218739717383, + 0.272921130310254, + 0.2729200637772713, + 0.2729189877138533, + 0.2729179020348741, + 0.27291680665444845, + 0.2729157014859249, + 0.2729145864418782, + 0.2729134614341031, + 0.27291232637360757, + 0.2729111811706055, + 0.27291002573450873, + 0.27290885997392195, + 0.2729076837966336, + 0.27290649710960935, + 0.2729052998189853, + 0.27290409183005937, + 0.27290287304728506, + 0.27290164337426315, + 0.2729004027137342, + 0.27289915096757145, + 0.27289788803677223, + 0.2728966138214509, + 0.27289532822083057, + 0.2728940311332355, + 0.27289272245608287, + 0.27289140208587437, + 0.27289006991818865, + 0.272888725847673, + 0.2728873697680349, + 0.2728860015720334, + 0.27288462115147144, + 0.2728832283971864, + 0.27288182319904225, + 0.27288040544592046, + 0.27287897502571146, + 0.27287753182530583, + 0.27287607573058525, + 0.2728746066264135, + 0.2728731243966279, + 0.27287162892402944, + 0.2728701200903739, + 0.2728685977763628, + 0.27286706186163373, + 0.27286551222475075, + 0.27286394874319514, + 0.27286237129335594, + 0.2728607797505194, + 0.2728591739888601, + 0.2728575538814308, + 0.2728559193001522, + 0.27285427011580254, + 0.27285260619800894, + 0.27285092741523553, + 0.27284923363477354, + 0.2728475247227315, + 0.2728458005440243, + 0.27284406096236224, + 0.27284230584024094, + 0.27284053503893, + 0.2728387484184625, + 0.2728369458376239, + 0.2728351271539411, + 0.2728332922236705, + 0.27283144090178785, + 0.2728295730419761, + 0.27282768849661393, + 0.2728257871167648, + 0.27282386875216436, + 0.2728219332512092, + 0.2728199804609451, + 0.27281801022705454, + 0.27281602239384495, + 0.27281401680423634, + 0.27281199329974914, + 0.2728099517204914, + 0.27280789190514654, + 0.2728058136909611, + 0.27280371691373095, + 0.2728016014077895, + 0.2727994670059938, + 0.2727973135397119, + 0.27279514083881007, + 0.2727929487316381, + 0.2727907370450177, + 0.2727885056042272, + 0.2727862542329888, + 0.2727839827534549, + 0.2727816909861934, + 0.27277937875017433, + 0.27277704586275525, + 0.2727746921396672, + 0.2727723173950004, + 0.2727699214411889, + 0.2727675040889971, + 0.27276506514750376, + 0.27276260442408806, + 0.27276012172441383, + 0.2727576168524145, + 0.27275508961027806, + 0.2727525397984311, + 0.2727499672155235, + 0.27274737165841295, + 0.2727447529221481, + 0.2727421107999537, + 0.2727394450832136, + 0.2727367555614552, + 0.27273404202233187, + 0.2727313042516072, + 0.2727285420331385, + 0.2727257551488588, + 0.27272294337876085, + 0.2727201065008797, + 0.27271724429127486, + 0.27271435652401316, + 0.27271144297115163, + 0.2727085034027187, + 0.27270553758669636, + 0.2727025452890033, + 0.27269952627347493, + 0.2726964803018464, + 0.27269340713373275, + 0.27269030652661114, + 0.27268717823580124, + 0.27268402201444686, + 0.2726808376134958, + 0.2726776247816813, + 0.27267438326550164, + 0.2726711128092011, + 0.27266781315474947, + 0.2726644840418224, + 0.27266112520778074, + 0.27265773638765, + 0.27265431731410034, + 0.27265086771742486, + 0.27264738732551946, + 0.27264387586386096, + 0.272640333055486, + 0.2726367586209697, + 0.2726331522784032, + 0.27262951374337274, + 0.2726258427289368, + 0.2726221389456037, + 0.27261840210130966, + 0.2726146319013956, + 0.27261082804858444, + 0.2726069902429578, + 0.272603118181933, + 0.27259921156023925, + 0.2725952700698941, + 0.27259129340017907, + 0.27258728123761644, + 0.27258323326594386, + 0.2725791491660906, + 0.27257502861615224, + 0.27257087129136565, + 0.27256667686408453, + 0.27256244500375326, + 0.2725581753768811, + 0.27255386764701706, + 0.27254952147472333, + 0.2725451365175487, + 0.2725407124300029, + 0.27253624886352884, + 0.2725317454664761, + 0.2725272018840738, + 0.27252261775840264, + 0.2725179927283676, + 0.2725133264296696, + 0.2725086184947779, + 0.2725038685529008, + 0.27249907622995806, + 0.27249424114855053, + 0.2724893629279323, + 0.27248444118398046, + 0.2724794755291653, + 0.27247446557252136, + 0.27246941091961596, + 0.2724643111725194, + 0.2724591659297743, + 0.27245397478636385, + 0.2724487373336818, + 0.27244345315949964, + 0.2724381218479354, + 0.2724327429794215, + 0.2724273161306725, + 0.27242184087465204, + 0.27241631678054035, + 0.27241074341370086, + 0.2724051203356466, + 0.2723994471040063, + 0.27239372327249106, + 0.272387948390859, + 0.27238212200488093, + 0.27237624365630597, + 0.2723703128828252, + 0.27236432921803727, + 0.2723582921914113, + 0.2723522013282518, + 0.27234605614966156, + 0.27233985617250495, + 0.27233360090937075, + 0.2723272898685351, + 0.2723209225539231, + 0.2723144984650711, + 0.2723080170970885, + 0.27230147794061843, + 0.27229488048179934, + 0.272288224202225, + 0.2722815085789048, + 0.2722747330842247, + 0.2722678971859051, + 0.27226100034696166, + 0.2722540420256627, + 0.2722470216754895, + 0.2722399387450928, + 0.2722327926782515, + 0.27222558291383003, + 0.27221830888573545, + 0.27221097002287387, + 0.27220356574910715, + 0.2721960954832089, + 0.2721885586388201, + 0.27218095462440406, + 0.27217328284320164, + 0.2721655426931855, + 0.27215773356701434, + 0.27214985485198656, + 0.2721419059299936, + 0.2721338861774728, + 0.27212579496536005, + 0.2721176316590417, + 0.2721093956183068, + 0.2721010861972973, + 0.2720927027444603, + 0.2720842446024979, + 0.2720757111083168, + 0.272067101592979, + 0.2720584153816502, + 0.27204965179354856, + 0.27204081014189396, + 0.2720318897338549, + 0.27202288987049655, + 0.27201380984672763, + 0.27200464895124715, + 0.27199540646649034, + 0.27198608166857485, + 0.27197667382724483, + 0.27196718220581784, + 0.2719576060611266, + 0.27194794464346495, + 0.2719381971965301, + 0.2719283629573662, + 0.2719184411563061, + 0.27190843101691414, + 0.2718983317559268, + 0.2718881425831944, + 0.27187786270162123, + 0.2718674913071054, + 0.2718570275884792, + 0.27184647072744694, + 0.27183581989852434, + 0.2718250742689758, + 0.2718142329987529, + 0.27180329524043034, + 0.27179226013914287, + 0.2717811268325212, + 0.2717698944506271, + 0.27175856211588895, + 0.27174712894303493, + 0.27173559403902797, + 0.2717239565029983, + 0.271712215426176, + 0.27170036989182367, + 0.2716884189751678, + 0.27167636174332943, + 0.27166419725525487, + 0.27165192456164605, + 0.27163954270488844, + 0.2716270507189814, + 0.27161444762946535, + 0.27160173245334945, + 0.2715889041990383, + 0.2715759618662595, + 0.27156290444598746, + 0.2715497309203705, + 0.27153644026265406, + 0.2715230314371051, + 0.27150950339893576, + 0.27149585509422547, + 0.27148208545984287, + 0.2714681934233683, + 0.2714541779030136, + 0.27144003780754267, + 0.27142577203619084, + 0.27141137947858357, + 0.27139685901465566, + 0.27138220951456754, + 0.2713674298386224, + 0.2713525188371833, + 0.271337475350588, + 0.2713222982090637, + 0.2713069862326419, + 0.27129153823107105, + 0.2712759530037303, + 0.2712602293395411, + 0.27124436601687857, + 0.27122836180348253, + 0.2712122154563672, + 0.2711959257217309, + 0.27117949133486435, + 0.27116291102005824, + 0.27114618349051134, + 0.2711293074482357, + 0.2711122815839631, + 0.27109510457704983, + 0.2710777750953809, + 0.27106029179527275, + 0.27104265332137745, + 0.2710248583065829, + 0.27100690537191496, + 0.27098879312643753, + 0.27097052016715256, + 0.27095208507889773, + 0.2709334864342463, + 0.2709147227934019, + 0.27089579270409747, + 0.2708766947014892, + 0.27085742730805173, + 0.27083798903347284, + 0.27081837837454553, + 0.27079859381506133, + 0.27077863382570105, + 0.27075849686392683, + 0.2707381813738699, + 0.2707176857862217, + 0.2706970085181207, + 0.27067614797304057, + 0.2706551025406759, + 0.2706338705968286, + 0.27061245050329225, + 0.27059084060773564, + 0.27056903924358633, + 0.27054704472991287, + 0.27052485537130516, + 0.27050246945775586, + 0.27047988526453914, + 0.27045710105208937, + 0.2704341150658788, + 0.2704109255362943, + 0.27038753067851345, + 0.27036392869237874, + 0.2703401177622723, + 0.27031609605698825, + 0.2702918617296052, + 0.2702674129173574, + 0.270242747741505, + 0.27021786430720274, + 0.2701927607033688, + 0.27016743500255247, + 0.27014188526079946, + 0.2701161095175184, + 0.2700901057953445, + 0.2700638721000033, + 0.27003740642017343, + 0.2700107067273473, + 0.2699837709756924, + 0.26995659710191056, + 0.2699291830250963, + 0.26990152664659384, + 0.2698736258498549, + 0.26984547850029283, + 0.2698170824451376, + 0.2697884355132893, + 0.2697595355151703, + 0.26973038024257645, + 0.269700967468528, + 0.2696712949471183, + 0.26964136041336206, + 0.2696111615830431, + 0.2695806961525593, + 0.2695499617987689, + 0.2695189561788343, + 0.26948767693006387, + 0.26945612166975513, + 0.26942428799503476, + 0.2693921734826991, + 0.2693597756890517, + 0.2693270921497418, + 0.2692941203796001, + 0.26926085787247483, + 0.26922730210106555, + 0.26919345051675636, + 0.26915930054944803, + 0.2691248496073892, + 0.2690900950770058, + 0.2690550343227303, + 0.2690196646868293, + 0.26898398348922964, + 0.26894798802734377, + 0.2689116755758952, + 0.26887504338673995, + 0.26883808868869036, + 0.2688008086873345, + 0.26876320056485675, + 0.26872526147985665, + 0.2686869885671657, + 0.26864837893766463, + 0.268609429678098, + 0.26857013785088857, + 0.26853050049395005, + 0.2684905146205, + 0.2684501772188686, + 0.2684094852523105, + 0.2683684356588114, + 0.26832702535089614, + 0.26828525121543506, + 0.2682431101134484, + 0.2682005988799109, + 0.2681577143235536, + 0.26811445322666644, + 0.26807081234489766, + 0.26802678840705385, + 0.26798237811489833, + 0.2679375781429471, + 0.26789238513826547, + 0.2678467957202628, + 0.2678008064804862, + 0.26775441398241223, + 0.2677076147612395, + 0.26766040532367774, + 0.26761278214773726, + 0.26756474168251765, + 0.2675162803479935, + 0.26746739453480056, + 0.26741808060402084, + 0.26736833488696543, + 0.26731815368495726, + 0.2672675332691124, + 0.26721646988012, + 0.2671649597280222, + 0.26711299899199087, + 0.26706058382010567, + 0.26700771032912957, + 0.26695437460428323, + 0.2669005726990197, + 0.26684630063479603, + 0.2667915544008457, + 0.2667363299539488, + 0.26668062321820185, + 0.26662443008478615, + 0.2665677464117354, + 0.2665105680237019, + 0.26645289071172285, + 0.2663947102329837, + 0.266336022310583, + 0.26627682263329383, + 0.26621710685532607, + 0.266156870596087, + 0.2660961094399404, + 0.2660348189359664, + 0.26597299459771856, + 0.26591063190298136, + 0.26584772629352543, + 0.26578427317486414, + 0.2657202679160067, + 0.2656557058492124, + 0.26559058226974297, + 0.2655248924356149, + 0.26545863156734995, + 0.26539179484772585, + 0.2653243774215256, + 0.2652563743952865, + 0.2651877808370482, + 0.2651185917760995, + 0.265048802202726, + 0.2649784070679555, + 0.26490740128330326, + 0.26483577972051703, + 0.26476353721132095, + 0.2646906685471596, + 0.26461716847893996, + 0.2645430317167751, + 0.2644682529297251, + 0.26439282674553916, + 0.26431674775039615, + 0.26424001048864565, + 0.26416260946254755, + 0.26408453913201224, + 0.2640057939143399, + 0.2639263681839598, + 0.2638462562721685, + 0.26376545246686933, + 0.26368395101230996, + 0.2636017461088209, + 0.26351883191255365, + 0.26343520253521796, + 0.2633508520438206, + 0.2632657744604016, + 0.26317996376177366, + 0.26309341387925855, + 0.2630061186984253, + 0.2629180720588287, + 0.2628292677537463, + 0.2627396995299172, + 0.26264936108728065, + 0.2625582460787142, + 0.262466348109773, + 0.2623736607384294, + 0.26228017747481236, + 0.26218589178094814, + 0.2620907970705003, + 0.26199488670851184, + 0.26189815401114647, + 0.2618005922454316, + 0.2617021946290014, + 0.2616029543298408, + 0.26150286446603066, + 0.2614019181054928, + 0.2613001082657376, + 0.2611974279136111, + 0.26109386996504375, + 0.2609894272848008, + 0.26088409268623225, + 0.2607778589310265, + 0.26067071872896325, + 0.260562664737668, + 0.2604536895623696, + 0.2603437857556574, + 0.2602329458172413, + 0.2601211621937131, + 0.2600084272783083, + 0.25989473341067276, + 0.25978007287662813, + 0.25966443790794064, + 0.2595478206820927, + 0.2594302133220548, + 0.25931160789606145, + 0.2591919964173878, + 0.25907137084413084, + 0.25894972307899017, + 0.25882704496905384, + 0.25870332830558623, + 0.2585785648238177, + 0.25845274620273856, + 0.25832586406489483, + 0.2581979099761879, + 0.25806887544567686, + 0.2579387519253843, + 0.25780753081010555, + 0.25767520343722133, + 0.25754176108651433, + 0.2574071949799885, + 0.2572714962816934, + 0.25713465609755204, + 0.2569966654751925, + 0.2568575154037843, + 0.2567171968138785, + 0.2565757005772523, + 0.25643301750675906, + 0.25628913835618206, + 0.25614405382009303, + 0.2559977545337168, + 0.2558502310727997, + 0.25570147395348436, + 0.2555514736321885, + 0.2554002205054908, + 0.2552477049100217, + 0.2550939171223599, + 0.2549388473589346, + 0.2547824857759353, + 0.25462482246922585, + 0.25446584747426654, + 0.25430555076604244, + 0.2541439222589977, + 0.25398095180697805, + 0.2538166292031791, + 0.2536509441801038, + 0.25348388640952474, + 0.2533154455024569, + 0.2531456110091361, + 0.25297437241900667, + 0.25280171916071703, + 0.25262764060212267, + 0.2524521260503002, + 0.2522751647515673, + 0.2520967458915134, + 0.2519168585950391, + 0.25173549192640554, + 0.2515526348892921, + 0.2513682764268652, + 0.2511824054218564, + 0.25099501069665103, + 0.25080608101338764, + 0.25061560507406705, + 0.25042357152067357, + 0.25022996893530725, + 0.25003478584032623, + 0.2498380106985026, + 0.2496396319131888, + 0.24943963782849643, + 0.24923801672948837, + 0.2490347568423818, + 0.24882984633476593, + 0.2486232733158317, + 0.24841502583661534, + 0.2482050918902554, + 0.24799345941226397, + 0.2477801162808124, + 0.24756505031703072, + 0.24734824928532267, + 0.24712970089369504, + 0.2469093927941037, + 0.24668731258281368, + 0.24646344780077564, + 0.24623778593402038, + 0.24601031441406673, + 0.24578102061834936, + 0.24554989187066212, + 0.2453169154416189, + 0.24508207854913325, + 0.24484536835891502, + 0.24460677198498676, + 0.24436627649021775, + 0.2441238688868778, + 0.2438795361372102, + 0.2436332651540251, + 0.24338504280131282, + 0.2431348558948767, + 0.24288269120298867, + 0.24262853544706464, + 0.24237237530236178, + 0.24211419739869888, + 0.2418539883211966, + 0.24159173461104352, + 0.24132742276628277, + 0.24106103924262373, + 0.24079257045427616, + 0.24052200277481042, + 0.2402493225380404, + 0.23997451603893333, + 0.23969756953454313, + 0.23941846924497145, + 0.23913720135435354, + 0.23885375201187145, + 0.2385681073327946, + 0.23828025339954673, + 0.23799017626280217, + 0.2376978619426093, + 0.2374032964295431, + 0.23710646568588792, + 0.2368073556468475, + 0.23650595222178805, + 0.23620224129550904, + 0.23589620872954692, + 0.23558784036350908, + 0.23527712201644077, + 0.23496403948822236, + 0.23464857856100174, + 0.23433072500065777, + 0.23401046455829916, + 0.2336877829717961, + 0.23336266596734698, + 0.23303509926108032, + 0.23270506856069162, + 0.23237255956711728, + 0.2320375579762432, + 0.23170004948065195, + 0.23136001977140672, + 0.23101745453987196, + 0.23067233947957486, + 0.23032466028810278, + 0.22997440266904215, + 0.22962155233395548, + 0.22926609500440015, + 0.22890801641398584, + 0.22854730231047526, + 0.22818393845792503, + 0.22781791063886894, + 0.2274492046565447, + 0.22707780633716187, + 0.22670370153221492, + 0.22632687612084001, + 0.225947316012215, + 0.22556500714800642, + 0.22517993550485899, + 0.2247920870969346, + 0.22440144797849343, + 0.22400800424652526, + 0.223611742043426, + 0.2232126475597221, + 0.22281070703684405, + 0.222405906769947, + 0.22199823311078082, + 0.22158767247060965, + 0.22117421132318124, + 0.2207578362077462, + 0.2203385337321274, + 0.21991629057584172, + 0.21949109349327184, + 0.21906292931689, + 0.21863178496053434, + 0.2181976474227377, + 0.2177605037901086, + 0.21732034124076602, + 0.21687714704782754, + 0.2164309085829518, + 0.21598161331993374, + 0.21552924883835617, + 0.21507380282729477, + 0.21461526308907855, + 0.21415361754310575, + 0.21368885422971545, + 0.2132209613141143, + 0.2127499270903603, + 0.21227573998540195, + 0.2117983885631746, + 0.21131786152875212, + 0.21083414773255713, + 0.21034723617462733, + 0.20985711600893778, + 0.2093637765477824, + 0.20886720726621102, + 0.2083673978065249, + 0.2078643379828279, + 0.2073580177856373, + 0.2068484273865503, + 0.20633555714296775, + 0.20581939760287682, + 0.2052999395096884, + 0.20477717380713364, + 0.20425109164421631, + 0.20372168438022242, + 0.20318894358978615, + 0.20265286106801217, + 0.20211342883565434, + 0.20157063914435, + 0.20102448448190985, + 0.2004749575776623, + 0.19992205140785455, + 0.19936575920110602, + 0.1988060744439166, + 0.19824299088622788, + 0.19767650254703853, + 0.1971066037200703, + 0.19653328897948674, + 0.195956553185663, + 0.19537639149100647, + 0.19479279934582527, + 0.194205772504248, + 0.1936153070301902, + 0.19302139930336829, + 0.19242404602535965, + 0.19182324422570868, + 0.1912189912680767, + 0.19061128485643516, + 0.19000012304130107, + 0.18938550422601377, + 0.18876742717305098, + 0.18814589101038354, + 0.1875208952378681, + 0.18689243973367448, + 0.1862605247607478, + 0.18562515097330462, + 0.1849863194233584, + 0.18434403156727663, + 0.18369828927236428, + 0.18304909482347587, + 0.18239645092964943, + 0.1817403607307647, + 0.1810808278042217, + 0.18041785617163839, + 0.17975145030556425, + 0.17908161513620807, + 0.1784083560581803, + 0.17773167893724237, + 0.17705159011706598, + 0.17636809642599643, + 0.17568120518381966, + 0.1749909242085286, + 0.1742972618230873, + 0.1736002268621909, + 0.17289982867901624, + 0.1721960771519629, + 0.17148898269137935, + 0.1707785562462737, + 0.17006480931100332, + 0.16934775393194185, + 0.16862740271412066, + 0.16790376882783967, + 0.16717686601524584, + 0.16644670859687408, + 0.1657133114781496, + 0.1649766901558449, + 0.16423686072449062, + 0.1634938398827339, + 0.16274764493964203, + 0.16199829382094727, + 0.16124580507522696, + 0.16049019788001803, + 0.15973149204785791, + 0.15896970803225113, + 0.15820486693355476, + 0.15743699050477875, + 0.156666101157297, + 0.1558922219664649, + 0.15511537667713762, + 0.15433558970908445, + 0.15355288616229631, + 0.15276729182217821, + 0.15197883316462427, + 0.15118753736096893, + 0.15039343228281046, + 0.14959654650669957, + 0.148796909318689, + 0.14799455071874057, + 0.14718950142497964, + 0.14638179287779612, + 0.1455714572437842, + 0.14475852741951536, + 0.14394303703513966, + 0.1431250204578084, + 0.14230451279491468, + 0.1414815498971434, + 0.1406561683613261, + 0.13982840553309528, + 0.13899829950933143, + 0.13816588914039696, + 0.13733121403215048, + 0.1364943145477381, + 0.13565523180915143, + 0.13481400769854932, + 0.1339706848593369, + 0.13312530669699466, + 0.13227791737965214, + 0.13142856183840002, + 0.13057728576733574, + 0.12972413562333396, + 0.1288691586255379, + 0.12801240275456485, + 0.12715391675141968, + 0.12629375011611094, + 0.1254319531059616, + 0.12456857673361264, + 0.12370367276470846, + 0.12283729371526207, + 0.1219694928486926, + 0.12110032417253005, + 0.1202298424347814, + 0.11935810311995212, + 0.11848516244471888, + 0.11761107735324684, + 0.11673590551214635, + 0.11585970530506425, + 0.11498253582690578, + 0.1141044568776799, + 0.1132255289559638, + 0.11234581325198563, + 0.11146537164031423, + 0.11058426667215762, + 0.10970256156726245, + 0.10882032020541244, + 0.1079376071175204, + 0.10705448747631112, + 0.1061710270865923, + 0.10528729237510853, + 0.1044033503799764, + 0.10351926873969872, + 0.10263511568175339, + 0.10175096001075569, + 0.10086687109619308, + 0.0999829188597286, + 0.0990991737620716, + 0.09821570678941666, + 0.09733258943944725, + 0.09644989370690524, + 0.0955676920687235, + 0.09468605746872583, + 0.09380506330188954, + 0.09292478339817437, + 0.09204529200591798, + 0.09116666377479872, + 0.09028897373836853, + 0.08941229729615548, + 0.0885367101953427, + 0.08766228851202093, + 0.08678910863202219, + 0.08591724723133591, + 0.08504678125611229, + 0.08417778790225633, + 0.08331034459461771, + 0.08244452896578279, + 0.08158041883447176, + 0.08071809218354846, + 0.07985762713765027, + 0.07899910194044184, + 0.07814259493150351, + 0.07728818452285822, + 0.07643594917515001, + 0.07558596737347707, + 0.07473831760289264, + 0.07389307832358125, + 0.07305032794572068, + 0.07221014480404037, + 0.07137260713208529, + 0.07053779303620065, + 0.06970578046924374, + 0.06887664720403919, + 0.06805047080658876, + 0.06722732860904838, + 0.06640729768248697, + 0.06559045480943898, + 0.06477687645626856, + 0.06396663874535571, + 0.06315981742712297, + 0.06235648785191656, + 0.061556724941758796, + 0.06076060316198746, + 0.05996819649279906, + 0.05917957840071424, + 0.05839482180998089, + 0.057613999073934205, + 0.05683718194633152, + 0.056064441552680505, + 0.0552958483615795, + 0.05453147215608849, + 0.053771382005152406, + 0.053015646235093236, + 0.05226433240119334, + 0.05151750725938913, + 0.050775236738096176, + 0.050037585910185534, + 0.04930461896513245, + 0.0485763991813596, + 0.04785298889879366, + 0.04713444949165858, + 0.046420841341525736, + 0.04571222381064299, + 0.045008655215564214, + 0.04431019280109937, + 0.043616892714610285, + 0.042928809980668954, + 0.042245998476103816, + 0.041568510905453444, + 0.04089639877684988, + 0.04022971237835199, + 0.03956850075475203, + 0.03891281168487378, + 0.03826269165938518, + 0.0376181858591451, + 0.03697933813410503, + 0.03634619098278594, + 0.03571878553234914, + 0.0350971615192832, + 0.034481357270723025, + 0.03387140968642224, + 0.033267354221396435, + 0.03266922486925568, + 0.03207705414624387, + 0.03149087307600143, + 0.030910711175070108, + 0.03033659643915315, + 0.029768555330148997, + 0.029206612763972108, + 0.028650792099176363, + 0.028101115126394304, + 0.027557602058605475, + 0.027020271522247778, + 0.026489140549181733, + 0.025964224569520668, + 0.025445537405336463, + 0.024933091265251374, + 0.024426896739924445, + 0.02392696279844076, + 0.02343329678561267, + 0.0229459044201971, + 0.022464789794037366, + 0.02198995537213324, + 0.021521401993644152, + 0.021059128873828947, + 0.020603133606924215, + 0.02015341216996459, + 0.01970995892754364, + 0.019272766637517195, + 0.01884182645764742, + 0.01841712795318591, + 0.017998659105393666, + 0.017586406320993224, + 0.01718035444255059, + 0.01678048675977908, + 0.016386785021760886, + 0.015999229450078232, + 0.015617798752846466, + 0.015242470139640151, + 0.014873219337301962, + 0.014510020606625004, + 0.014152846759895428, + 0.013801669179284071, + 0.013456457836073722, + 0.01311718131070786, + 0.012783806813646204, + 0.012456300207011016, + 0.012134626027008764, + 0.011818747507108597, + 0.011508626601960668, + 0.011204224012035356, + 0.01090549920896377, + 0.010612410461559935, + 0.010324914862503023, + 0.010042968355659588, + 0.009766525764022123, + 0.009495540818242455, + 0.009229966185736243, + 0.008969753500334812, + 0.008714853392460057, + 0.008465215519797108, + 0.008220788598440476, + 0.007981520434486439, + 0.00774735795604647, + 0.007518247245654658, + 0.007294133573042181, + 0.007074961428251183, + 0.00686067455506118, + 0.0066512159846987984, + 0.006446528069803642, + 0.006246552518621342, + 0.0060512304293952055, + 0.005860502324927682, + 0.005674308187282484, + 0.005492587492598768, + 0.005315279245987591, + 0.005142322016481816, + 0.004973653972010262, + 0.004809212914366735, + 0.00464893631414494, + 0.004492761345609932, + 0.004340624921477697, + 0.004192463727573323, + 0.004048214257339583, + 0.003907812846167394, + 0.003771195705519732, + 0.0036382989568213317, + 0.00350905866508607, + 0.0033834108722553173, + 0.00326129163021949, + 0.0031426370334967407, + 0.0030273832515423263, + 0.0029154665606628822, + 0.0028068233755103754, + 0.00270139028013067, + 0.002599104058542855, + 0.0024999017248250053, + 0.0024037205526836196, + 0.002310498104483961, + 0.0022201722597194116, + 0.002132681242898533, + 0.0020479636508290893, + 0.0019659584792794476, + 0.001886605148997744, + 0.001809843531070656, + 0.0017356139716040602, + 0.0016638573157086662, + 0.0015945149307746483, + 0.0015275287290199258, + 0.0014628411892980368, + 0.0014003953781517536, + 0.0013401349701001848, + 0.0012820042671475443, + 0.0012259482175029127, + 0.001171912433501242, + 0.0011198432087166715, + 0.0010696875342605403, + 0.0010213931142569704, + 0.0009749083804903701, + 0.0009301825062199185, + 0.0008871654191572276, + 0.0008458078136043762, + 0.0008060611617504778, + 0.0007678777241261836, + 0.0007312105592162146, + 0.00069601353223139, + 0.0006622413230424497, + 0.0006298494332790769, + 0.0005987941925985463, + 0.0005690327641293822, + 0.0005405231490966111, + 0.0005132241906359023, + 0.00048709557680516537, + 0.0004620978428029895, + 0.000438192372404327, + 0.0004153413986247596, + 0.0003935080036255848, + 0.000372656117872977, + 0.00035275051856516106, + 0.0003337568273425959, + 0.00031564150729686735, + 0.00029837185929485285, + 0.0002819160176354258, + 0.00026624294505682715, + 0.0002513224271133571, + 0.00023712506594087714, + 0.00022362227343113828, + 0.00021078626383558134, + 0.00019859004581979626, + 0.00018700741399032034, + 0.00017601293991597805, + 0.00016558196266628142, + 0.0001556905788898953, + 0.0001463156324564276, + 0.0001374347036851158, + 0.0001290260981842081, + 0.00012106883532501406, + 0.00011354263637477432, + 0.00010642791231251655, + 9.970575135217969e-05, + 9.335790619722945e-05, + 8.736678105094911e-05, + 8.171541840647677e-05, + 7.638748564050273e-05, + 7.136726143436215e-05, + 6.663962204596346e-05, + 6.219002745575067e-05, + 5.800450740952693e-05, + 5.406964738060049e-05, + 5.0372574473288755e-05, + 4.690094328934984e-05, + 4.364292177842929e-05, + 4.058717709304307e-05, + 3.772286146807711e-05, + 3.503959814416249e-05, + 3.2527467353657444e-05, + 3.017699238730602e-05, + 2.797912575895039e-05, + 2.592523548497563e-05, + 2.4007091494412004e-05, + 2.2216852184890846e-05, + 2.0547051138869186e-05, + 1.899058401376147e-05, + 1.7540695618826587e-05, + 1.619096719085264e-05, + 1.4935303879885056e-05, + 1.376792245542065e-05, + 1.2683339242690919e-05, + 1.1676358297842216e-05, + 1.0742059830016063e-05, + 9.87578887753385e-06, + 9.07314424459744e-06, + 8.329967704141042e-06, + 7.64233347169459e-06, + 7.00653795437336e-06, + 6.419089778367544e-06, + 5.876700097588826e-06, + 5.3762731854332795e-06, + 4.914897310942366e-06, + 4.489835899993324e-06, + 4.098518981516843e-06, + 3.7385349181408384e-06, + 3.407622420079768e-06, + 3.103662840540086e-06, + 2.8246727503913854e-06, + 2.5687967893596396e-06, + 2.3343007905373924e-06, + 2.1195651745698445e-06, + 1.923078609474563e-06, + 1.743431931677584e-06, + 1.5793123235055203e-06, + 1.4294977420593947e-06, + 1.2928515941115397e-06, + 1.1683176514125039e-06, + 1.0549152005673953e-06, + 9.517344214441602e-07, + 8.579319879048111e-07, + 7.727268845070002e-07, + 6.95396432705127e-07, + 6.252725199875373e-07, + 5.617380253168527e-07, + 5.042234341952221e-07, + 4.5220363665204754e-07, + 4.0519490144897493e-07, + 3.6275201981367404e-07, + 3.244656120493832e-07, + 2.899595904202536e-07, + 2.588887717813045e-07, + 2.309366335063674e-07, + 2.0581320636520262e-07, + 1.832530981117892e-07, + 1.6301364166797942e-07, + 1.4487316191924534e-07, + 1.2862935528110167e-07, + 1.1409777634447599e-07, + 1.0111042606534422e-07, + 8.951443612670804e-08, + 7.917084426883639e-08, + 6.995345555555763e-08, + 6.174778471928671e-08, + 5.44500749046913e-08, + 4.796638830937513e-08, + 4.2211764399213476e-08, + 3.710944155500327e-08, + 3.2590138185404197e-08, + 2.859138951803456e-08, + 2.5056936455494135e-08, + 2.1936163055517095e-08, + 1.9183579363861627e-08, + 1.6758346494605578e-08, + 1.4623841014754195e-08, + 1.2747255848209397e-08, + 1.1099235067890139e-08, + 9.653540093883586e-09, + 8.386744959760696e-09, + 7.277958448404483e-09, + 6.30857103280038e-09, + 5.462024686079783e-09, + 4.723603748662541e-09, + 4.080245158567406e-09, + 3.5203664638491045e-09, + 3.0337101437053705e-09, + 2.61120286710977e-09, + 2.244828414952438e-09, + 1.927513083678211e-09, + 1.6530224754155709e-09, + 1.415868661703112e-09, + 1.21122678527394e-09, + 1.0348602370967184e-09, + 8.830536141405249e-10, + 7.525527272955878e-10, + 6.405109886998201e-10, + 5.444415635660352e-10, + 4.621747236462495e-10, + 3.918198878818538e-10, + 3.317318807463044e-10, + 2.804809804627051e-10, + 2.3682636784702884e-10, + 1.9969262215645748e-10, + 1.6814894318013936e-10, + 1.413908090593456e-10, + 1.1872380712483297e-10, + 9.954940054580033e-11, + 8.335241694588381e-11, + 6.969006650180584e-11, + 5.818231653668199e-11, + 4.850346738532795e-11, + 4.037479046888062e-11, + 3.355810419058886e-11, + 2.785017656744113e-11, + 2.307785555071594e-11, + 1.9093838864199033e-11, + 1.5773004996833233e-11, + 1.3009235816585907e-11, + 1.071266920800672e-11, + 8.807327255489258e-12, + 7.229071870394782e-12, + 5.923845460616505e-12, + 4.846159328446239e-12, + 3.9577970147249465e-12, + 3.2267038376234145e-12, + 2.6260374521792466e-12, + 2.1333574270585955e-12, + 1.729934639253469e-12, + 1.4001637633848964e-12, + 1.131064314403269e-12, + 9.118576221372145e-13, + 7.336088018082864e-13, + 5.88924262096613e-13, + 4.716965849299483e-13, + 3.7688973990161664e-13, + 3.0035858003423255e-13, + 2.386974214872213e-13, + 1.8911325299257658e-13, + 1.4931976491351618e-13, + 1.1744894500875744e-13, + 9.197746907442953e-14, + 7.166552924357205e-14, + 5.550609938269826e-14, + 4.268294328866231e-14, + 3.2535933936800604e-14, + 2.4532476756787607e-14, + 1.8244022024695964e-14, + 1.3326815529108162e-14, + 9.506176804580424e-15, + 6.563713864104261e-15, + 4.326986130592336e-15, + 2.6612148940589454e-15, + 1.4627187791696853e-15, + 6.538162069821416e-16, + 1.7899740606883023e-16, + 0.0 + ], + "radial_grid": [ + 1e-07, + 1.0089397933893211e-07, + 1.0179595066844862e-07, + 1.0270598543529407e-07, + 1.0362415572493222e-07, + 1.0455053426725598e-07, + 1.0548519444234838e-07, + 1.0642821028629534e-07, + 1.0737965649705005e-07, + 1.0833960844034995e-07, + 1.0930814215568664e-07, + 1.1028533436232903e-07, + 1.1127126246540047e-07, + 1.1226600456201005e-07, + 1.1326963944743901e-07, + 1.1428224662138204e-07, + 1.1530390629424462e-07, + 1.1633469939349683e-07, + 1.1737470757008348e-07, + 1.1842401320489201e-07, + 1.19482699415278e-07, + 1.2055085006164893e-07, + 1.2162854975410712e-07, + 1.227158838591516e-07, + 1.2381293850644038e-07, + 1.2491980059561266e-07, + 1.2603655780317264e-07, + 1.2716329858943425e-07, + 1.2830011220552835e-07, + 1.2944708870047249e-07, + 1.3060431892830386e-07, + 1.317718945552759e-07, + 1.3294990806711947e-07, + 1.3413845277636878e-07, + 1.3533762282975273e-07, + 1.365475132156526e-07, + 1.3776821977162612e-07, + 1.3899983919199906e-07, + 1.402424690355244e-07, + 1.4149620773311027e-07, + 1.4276115459561673e-07, + 1.4403740982172247e-07, + 1.4532507450586167e-07, + 1.4662425064623178e-07, + 1.479350411528731e-07, + 1.4925754985582055e-07, + 1.505918815133279e-07, + 1.5193814182016618e-07, + 1.5329643741599582e-07, + 1.5466687589381385e-07, + 1.560495658084763e-07, + 1.5744461668529738e-07, + 1.5885213902872482e-07, + 1.6027224433109333e-07, + 1.617050450814561e-07, + 1.6315065477449518e-07, + 1.6460918791951163e-07, + 1.6608076004949602e-07, + 1.6756548773027994e-07, + 1.6906348856976948e-07, + 1.7057488122726108e-07, + 1.720997854228408e-07, + 1.736383219468675e-07, + 1.7519061266954092e-07, + 1.7675678055055524e-07, + 1.7833694964883877e-07, + 1.7993124513238115e-07, + 1.8153979328814794e-07, + 1.8316272153208408e-07, + 1.8480015841920667e-07, + 1.8645223365378818e-07, + 1.8811907809963051e-07, + 1.8980082379043075e-07, + 1.9149760394024016e-07, + 1.93209552954016e-07, + 1.9493680643826798e-07, + 1.966795012118002e-07, + 1.9843777531654844e-07, + 2.002117680285149e-07, + 2.0200161986880056e-07, + 2.0380747261473581e-07, + 2.0562946931111126e-07, + 2.0746775428150838e-07, + 2.0932247313973153e-07, + 2.1119377280134243e-07, + 2.1308180149529772e-07, + 2.1498670877569003e-07, + 2.1690864553359485e-07, + 2.1884776400902267e-07, + 2.2080421780297828e-07, + 2.2277816188962757e-07, + 2.247697526285736e-07, + 2.2677914777724183e-07, + 2.2880650650337673e-07, + 2.3085198939764927e-07, + 2.3291575848637803e-07, + 2.3499797724436328e-07, + 2.370988106078363e-07, + 2.3921842498752416e-07, + 2.4135698828183144e-07, + 2.435146698901398e-07, + 2.4569164072622645e-07, + 2.4788807323180224e-07, + 2.501041413901714e-07, + 2.523400207400131e-07, + 2.545958883892859e-07, + 2.5687192302925677e-07, + 2.5916830494865594e-07, + 2.6148521604795753e-07, + 2.6382283985378826e-07, + 2.661813615334651e-07, + 2.685609679096625e-07, + 2.7096184747521096e-07, + 2.7338419040802814e-07, + 2.7582818858618274e-07, + 2.7829403560309393e-07, + 2.8078192678286597e-07, + 2.8329205919576027e-07, + 2.858246316738058e-07, + 2.8837984482654836e-07, + 2.9095790105694223e-07, + 2.935590045773819e-07, + 2.9618336142587844e-07, + 2.988311794823804e-07, + 3.0150266848524007e-07, + 3.0419804004782715e-07, + 3.0691750767529115e-07, + 3.0966128678147364e-07, + 3.1242959470597137e-07, + 3.1522265073135203e-07, + 3.180406761005245e-07, + 3.2088389403426327e-07, + 3.237525297488904e-07, + 3.266468104741155e-07, + 3.2956696547103487e-07, + 3.3251322605029153e-07, + 3.3548582559039773e-07, + 3.384849995562217e-07, + 3.415109855176388e-07, + 3.4456402316834996e-07, + 3.4764435434486827e-07, + 3.5075222304567536e-07, + 3.5388787545054886e-07, + 3.570515599400625e-07, + 3.602435271152615e-07, + 3.6346402981751226e-07, + 3.667133231485309e-07, + 3.699916644905902e-07, + 3.732993135269071e-07, + 3.7663653226221295e-07, + 3.800035850435076e-07, + 3.834007385809979e-07, + 3.868282619692252e-07, + 3.902864267083803e-07, + 3.9377550672580964e-07, + 3.9729577839771365e-07, + 4.008475205710387e-07, + 4.0443101458556547e-07, + 4.0804654429619394e-07, + 4.116943960954284e-07, + 4.15374858936063e-07, + 4.1908822435406977e-07, + 4.228347864916926e-07, + 4.26614842120746e-07, + 4.304286906661234e-07, + 4.342766342295146e-07, + 4.381589776133363e-07, + 4.420760283448757e-07, + 4.4602809670065047e-07, + 4.5001549573098654e-07, + 4.540385412848145e-07, + 4.5809755203468957e-07, + 4.621928495020335e-07, + 4.6632475808260335e-07, + 4.70493605072187e-07, + 4.7469972069252913e-07, + 4.789434381174888e-07, + 4.832250934994303e-07, + 4.875450259958507e-07, + 4.919035777962448e-07, + 4.963010941492112e-07, + 5.00737923389799e-07, + 5.052144169671016e-07, + 5.097309294720938e-07, + 5.142878186657209e-07, + 5.188854455072373e-07, + 5.235241741827978e-07, + 5.282043721343071e-07, + 5.329264100885238e-07, + 5.376906620864279e-07, + 5.424975055128478e-07, + 5.473473211263549e-07, + 5.522404930894229e-07, + 5.571774089988593e-07, + 5.621584599165062e-07, + 5.671840404002188e-07, + 5.722545485351172e-07, + 5.773703859651205e-07, + 5.825319579247613e-07, + 5.877396732712854e-07, + 5.929939445170377e-07, + 5.982951878621386e-07, + 6.036438232274513e-07, + 6.090402742878446e-07, + 6.144849685057534e-07, + 6.199783371650384e-07, + 6.255208154051489e-07, + 6.311128422555904e-07, + 6.367548606707026e-07, + 6.424473175647447e-07, + 6.481906638472972e-07, + 6.53985354458979e-07, + 6.598318484074843e-07, + 6.657306088039409e-07, + 6.716821028995952e-07, + 6.776868021228224e-07, + 6.837451821164703e-07, + 6.898577227755353e-07, + 6.960249082851762e-07, + 7.022472271590668e-07, + 7.085251722780925e-07, + 7.14859240929392e-07, + 7.212499348457477e-07, + 7.2769776024533e-07, + 7.342032278717952e-07, + 7.407668530347417e-07, + 7.473891556505298e-07, + 7.540706602834646e-07, + 7.60811896187348e-07, + 7.676133973474005e-07, + 7.744757025225612e-07, + 7.813993552881623e-07, + 7.883849040789871e-07, + 7.95432902232713e-07, + 8.025439080337416e-07, + 8.097184847574217e-07, + 8.169572007146673e-07, + 8.242606292969746e-07, + 8.316293490218413e-07, + 8.390639435785922e-07, + 8.46565001874614e-07, + 8.541331180820033e-07, + 8.617688916846331e-07, + 8.694729275256381e-07, + 8.772458358553256e-07, + 8.850882323795144e-07, + 8.930007383083066e-07, + 9.009839804052942e-07, + 9.090385910372059e-07, + 9.171652082239982e-07, + 9.253644756893943e-07, + 9.33637042911875e-07, + 9.419835651761239e-07, + 9.504047036249348e-07, + 9.589011253115806e-07, + 9.67473503252654e-07, + 9.761225164813754e-07, + 9.84848850101383e-07, + 9.936531953409999e-07, + 1.0025362496079874e-06, + 1.0114987165447876e-06, + 1.0205413060842615e-06, + 1.0296647345059229e-06, + 1.038869724492676e-06, + 1.0481570051880614e-06, + 1.0575273122540125e-06, + 1.0669813879291274e-06, + 1.0765199810874652e-06, + 1.086143847297863e-06, + 1.0958537488837881e-06, + 1.1056504549837224e-06, + 1.1155347416120858e-06, + 1.1255073917207078e-06, + 1.1355691952608446e-06, + 1.1457209492457539e-06, + 1.1559634578138283e-06, + 1.166297532292289e-06, + 1.1767239912614575e-06, + 1.187243660619592e-06, + 1.1978573736483123e-06, + 1.2085659710786035e-06, + 1.2193703011574101e-06, + 1.230271219714832e-06, + 1.2412695902319107e-06, + 1.2523662839090316e-06, + 1.26356217973493e-06, + 1.2748581645563204e-06, + 1.2862551331481436e-06, + 1.2977539882844413e-06, + 1.3093556408098723e-06, + 1.3210610097118544e-06, + 1.332871022193367e-06, + 1.3447866137463886e-06, + 1.356808728226006e-06, + 1.3689383179251744e-06, + 1.38117634365015e-06, + 1.393523774796601e-06, + 1.4059815894263892e-06, + 1.41855077434505e-06, + 1.4312323251799568e-06, + 1.4440272464591831e-06, + 1.456936551691079e-06, + 1.469961263444547e-06, + 1.483102413430047e-06, + 1.496361042581315e-06, + 1.5097382011378208e-06, + 1.523234948727959e-06, + 1.53685235445298e-06, + 1.5505914969716818e-06, + 1.5644534645858465e-06, + 1.5784393553264521e-06, + 1.5925502770406436e-06, + 1.6067873474794928e-06, + 1.6211516943865354e-06, + 1.6356444555870985e-06, + 1.6502667790784365e-06, + 1.6650198231206579e-06, + 1.6799047563284801e-06, + 1.6949227577637952e-06, + 1.7100750170290615e-06, + 1.725362734361542e-06, + 1.7407871207283679e-06, + 1.7563493979224716e-06, + 1.7720507986593567e-06, + 1.7878925666747524e-06, + 1.8038759568231284e-06, + 1.8200022351770908e-06, + 1.8362726791276773e-06, + 1.8526885774855337e-06, + 1.8692512305830102e-06, + 1.885961950377156e-06, + 1.902822060553649e-06, + 1.919832896631641e-06, + 1.93699580606955e-06, + 1.9543121483717938e-06, + 1.9717832951964777e-06, + 1.989410630464049e-06, + 2.007195550466917e-06, + 2.0251394639800552e-06, + 2.0432437923725986e-06, + 2.061509969720422e-06, + 2.079939442919749e-06, + 2.098533671801751e-06, + 2.117294129248192e-06, + 2.1362223013080937e-06, + 2.155319687315448e-06, + 2.174587800007985e-06, + 2.1940281656469943e-06, + 2.2136423241382308e-06, + 2.233431829153883e-06, + 2.253398248255652e-06, + 2.273543163018916e-06, + 2.2938681691580087e-06, + 2.314374876652622e-06, + 2.335064909875332e-06, + 2.3559399077202704e-06, + 2.377001523732947e-06, + 2.3982514262412203e-06, + 2.4196912984874623e-06, + 2.441322838761878e-06, + 2.463147760537041e-06, + 2.485167792603611e-06, + 2.507384679207282e-06, + 2.5298001801869454e-06, + 2.5524160711140838e-06, + 2.575234143433427e-06, + 2.598256204604847e-06, + 2.621484078246537e-06, + 2.6449196042794555e-06, + 2.6685646390730785e-06, + 2.6924210555924408e-06, + 2.716490743546495e-06, + 2.7407756095378045e-06, + 2.7652775772135627e-06, + 2.7899985874179756e-06, + 2.8149405983459897e-06, + 2.840105585698414e-06, + 2.8654955428384157e-06, + 2.8911124809494114e-06, + 2.9169584291943878e-06, + 2.943035434876624e-06, + 2.9693455636018714e-06, + 2.9958908994419705e-06, + 3.0226735450999282e-06, + 3.04969562207649e-06, + 3.0769592708381702e-06, + 3.104466650986821e-06, + 3.13221994143068e-06, + 3.1602213405569815e-06, + 3.1884730664060854e-06, + 3.2169773568471705e-06, + 3.24573646975551e-06, + 3.2747526831913074e-06, + 3.304028295580164e-06, + 3.333565625895121e-06, + 3.363367013840366e-06, + 3.393434820036558e-06, + 3.423771426207813e-06, + 3.454379235370373e-06, + 3.4852606720229444e-06, + 3.5164181823387556e-06, + 3.5478542343593175e-06, + 3.5795713181899174e-06, + 3.6115719461968762e-06, + 3.643858653206544e-06, + 3.6764339967061016e-06, + 3.70930055704613e-06, + 3.7424609376450154e-06, + 3.775917765195168e-06, + 3.8096736898710792e-06, + 3.843731385539261e-06, + 3.87809354997003e-06, + 3.912762905051222e-06, + 3.94774219700378e-06, + 3.983034196599298e-06, + 4.0186416993794976e-06, + 4.05456752587766e-06, + 4.090814521842059e-06, + 4.12738555846136e-06, + 4.164283532592072e-06, + 4.201511366987998e-06, + 4.239072010531754e-06, + 4.276968438468365e-06, + 4.315203652640918e-06, + 4.353780681728373e-06, + 4.3927025814854425e-06, + 4.431972434984659e-06, + 4.47159335286059e-06, + 4.511568473556225e-06, + 4.551900963571594e-06, + 4.5925940177145744e-06, + 4.633650859353977e-06, + 4.67507474067485e-06, + 4.716868942936117e-06, + 4.759036776730473e-06, + 4.801581582246623e-06, + 4.84450672953388e-06, + 4.887815618769088e-06, + 4.93151168052598e-06, + 4.975598376046907e-06, + 5.020079197517007e-06, + 5.06495766834084e-06, + 5.1102373434214635e-06, + 5.155921809442047e-06, + 5.202014685149953e-06, + 5.248519621643407e-06, + 5.2954403026606984e-06, + 5.3427804448719684e-06, + 5.390543798173631e-06, + 5.438734145985389e-06, + 5.4873553055499465e-06, + 5.536411128235356e-06, + 5.5859054998401185e-06, + 5.635842340900964e-06, + 5.686225607003404e-06, + 5.737059289095084e-06, + 5.7883474138018785e-06, + 5.840094043746878e-06, + 5.8923032778721824e-06, + 5.944979251763578e-06, + 5.998126137978147e-06, + 6.051748146374758e-06, + 6.1058495244475575e-06, + 6.160434557662402e-06, + 6.215507569796337e-06, + 6.27107292328008e-06, + 6.327135019543569e-06, + 6.383698299364629e-06, + 6.440767243220707e-06, + 6.498346371643811e-06, + 6.556440245578551e-06, + 6.615053466743451e-06, + 6.674190677995453e-06, + 6.733856563697664e-06, + 6.794055850090447e-06, + 6.854793305665763e-06, + 6.916073741544916e-06, + 6.977902011859639e-06, + 7.040283014136591e-06, + 7.103221689685321e-06, + 7.166723023989653e-06, + 7.230792047102612e-06, + 7.295433834044856e-06, + 7.360653505206677e-06, + 7.4264562267536105e-06, + 7.4928472110356236e-06, + 7.559831717000035e-06, + 7.627415050608051e-06, + 7.69560256525509e-06, + 7.764399662194797e-06, + 7.833811790966931e-06, + 7.903844449829007e-06, + 7.974503186191809e-06, + 8.04579359705885e-06, + 8.117721329469678e-06, + 8.19029208094722e-06, + 8.263511599949084e-06, + 8.337385686322886e-06, + 8.411920191765699e-06, + 8.487121020287541e-06, + 8.562994128679081e-06, + 8.63954552698344e-06, + 8.716781278972303e-06, + 8.79470750262622e-06, + 8.873330370619209e-06, + 8.952656110807737e-06, + 9.032691006724001e-06, + 9.113441398073695e-06, + 9.194913681238158e-06, + 9.277114309781067e-06, + 9.36004979495963e-06, + 9.443726706240324e-06, + 9.52815167181933e-06, + 9.613331379147507e-06, + 9.699272575460161e-06, + 9.78598206831149e-06, + 9.873466726113793e-06, + 9.96173347868159e-06, + 1.0050789317780485e-05, + 1.0140641297681042e-05, + 1.0231296535717526e-05, + 1.0322762212851716e-05, + 1.0415045574241707e-05, + 1.0508153929815788e-05, + 1.0602094654851527e-05, + 1.0696875190559924e-05, + 1.0792503044674888e-05, + 1.08889857920479e-05, + 1.0986331075248059e-05, + 1.1084546605167461e-05, + 1.1183640161631955e-05, + 1.1283619594017462e-05, + 1.1384492821871673e-05, + 1.1486267835541412e-05, + 1.1588952696805563e-05, + 1.1692555539513618e-05, + 1.1797084570230036e-05, + 1.1902548068884239e-05, + 1.2008954389426525e-05, + 1.2116311960489785e-05, + 1.2224629286057127e-05, + 1.2333914946135513e-05, + 1.244417759743543e-05, + 1.2555425974056526e-05, + 1.266766888817951e-05, + 1.2780915230764158e-05, + 1.2895173972253622e-05, + 1.3010454163284924e-05, + 1.3126764935405915e-05, + 1.3244115501798634e-05, + 1.3362515158009025e-05, + 1.34819732826833e-05, + 1.3602499338310829e-05, + 1.3724102871973709e-05, + 1.3846793516102948e-05, + 1.3970580989241492e-05, + 1.4095475096814093e-05, + 1.4221485731903936e-05, + 1.4348622876036325e-05, + 1.4476896599969382e-05, + 1.4606317064491678e-05, + 1.4736894521227157e-05, + 1.4868639313447136e-05, + 1.5001561876889695e-05, + 1.513567274058621e-05, + 1.527098252769542e-05, + 1.5407501956344955e-05, + 1.5545241840480246e-05, + 1.5684213090721176e-05, + 1.5824426715226298e-05, + 1.596589382056488e-05, + 1.6108625612596574e-05, + 1.62526333973591e-05, + 1.6397928581963877e-05, + 1.6544522675499483e-05, + 1.6692427289943396e-05, + 1.6841654141081743e-05, + 1.6992215049437424e-05, + 1.7144121941206316e-05, + 1.7297386849202012e-05, + 1.7452021913809046e-05, + 1.760803938394441e-05, + 1.776545161802791e-05, + 1.7924271084961045e-05, + 1.8084510365114785e-05, + 1.8246182151325955e-05, + 1.8409299249902716e-05, + 1.8573874581639037e-05, + 1.8739921182838063e-05, + 1.8907452206344802e-05, + 1.9076480922587976e-05, + 1.9247020720631246e-05, + 1.9419085109233675e-05, + 1.9592687717919855e-05, + 1.9767842298059556e-05, + 1.9944562723956897e-05, + 2.0122862993949412e-05, + 2.0302757231516944e-05, + 2.048425968640026e-05, + 2.0667384735729885e-05, + 2.0852146885164902e-05, + 2.1038560770042063e-05, + 2.1226641156534924e-05, + 2.141640294282359e-05, + 2.160786116027489e-05, + 2.1801030974632893e-05, + 2.1995927687220308e-05, + 2.219256673615049e-05, + 2.2390963697550407e-05, + 2.25911342867943e-05, + 2.279309435974864e-05, + 2.2996859914028098e-05, + 2.320244709026268e-05, + 2.3409872173376292e-05, + 2.3619151593876675e-05, + 2.3830301929157e-05, + 2.404333990480881e-05, + 2.4258282395947007e-05, + 2.4475146428546584e-05, + 2.469394918079118e-05, + 2.491470798443386e-05, + 2.513744032616995e-05, + 2.5362163849022304e-05, + 2.5588896353738686e-05, + 2.5817655800201843e-05, + 2.6048460308852262e-05, + 2.6281328162123345e-05, + 2.6516277805889683e-05, + 2.675332785092816e-05, + 2.6992497074392242e-05, + 2.723380442129917e-05, + 2.7477269006030746e-05, + 2.7722910113847465e-05, + 2.7970747202415997e-05, + 2.8220799903350508e-05, + 2.8473088023767843e-05, + 2.8727631547856293e-05, + 2.8984450638458684e-05, + 2.9243565638669456e-05, + 2.9504997073446225e-05, + 2.9768765651235372e-05, + 3.003489226561251e-05, + 3.0303397996937613e-05, + 3.0574304114024615e-05, + 3.084763207582628e-05, + 3.1123403533133944e-05, + 3.140164033029264e-05, + 3.1682364506931236e-05, + 3.196559829970834e-05, + 3.225136414407378e-05, + 3.253968467604557e-05, + 3.283058273400309e-05, + 3.312408136049607e-05, + 3.3420203804069976e-05, + 3.371897352110738e-05, + 3.402041417768605e-05, + 3.43245496514537e-05, + 3.46314040335192e-05, + 3.494100163036098e-05, + 3.525336696575231e-05, + 3.556852478270407e-05, + 3.588650004542441e-05, + 3.6207317941296345e-05, + 3.6531003882873006e-05, + 3.6857583509890386e-05, + 3.718708269129847e-05, + 3.751952752731025e-05, + 3.7854944351469365e-05, + 3.8193359732735765e-05, + 3.8534800477590416e-05, + 3.88792936321588e-05, + 3.9226866484353066e-05, + 3.9577546566033634e-05, + 3.9931361655190226e-05, + 4.02883397781419e-05, + 4.064850921175727e-05, + 4.101189848569427e-05, + 4.13785363846602e-05, + 4.174845195069159e-05, + 4.212167448545474e-05, + 4.249823355256696e-05, + 4.287815897993804e-05, + 4.3261480862133164e-05, + 4.3648229562756675e-05, + 4.403843571685739e-05, + 4.443213023335501e-05, + 4.4829344297488584e-05, + 4.523010937328689e-05, + 4.5634457206060484e-05, + 4.60424198249165e-05, + 4.6454029545295605e-05, + 4.686931897153198e-05, + 4.728832099943569e-05, + 4.771106881889851e-05, + 4.8137595916523155e-05, + 4.856793607827552e-05, + 4.9002123392161075e-05, + 4.944019225092498e-05, + 4.988217735477658e-05, + 5.032811371413777e-05, + 5.077803665241639e-05, + 5.123198180880439e-05, + 5.168998514110058e-05, + 5.215208292855911e-05, + 5.2618311774763135e-05, + 5.3088708610524415e-05, + 5.35633106968084e-05, + 5.404215562768585e-05, + 5.452528133331092e-05, + 5.501272608292533e-05, + 5.550452848788997e-05, + 5.600072750474342e-05, + 5.650136243828751e-05, + 5.7006472944700976e-05, + 5.7516099034680484e-05, + 5.803028107661029e-05, + 5.8549059799759435e-05, + 5.907247629750825e-05, + 5.960057203060356e-05, + 6.013338883044252e-05, + 6.067096890238642e-05, + 6.121335482910364e-05, + 6.176058957394304e-05, + 6.231271648433678e-05, + 6.286977929523405e-05, + 6.343182213256569e-05, + 6.399888951673901e-05, + 6.457102636616468e-05, + 6.514827800081454e-05, + 6.573069014581191e-05, + 6.631830893505298e-05, + 6.691118091486147e-05, + 6.750935304767584e-05, + 6.811287271576883e-05, + 6.872178772500096e-05, + 6.93361463086072e-05, + 6.995599713101792e-05, + 7.058138929171318e-05, + 7.121237232911229e-05, + 7.184899622449799e-05, + 7.249131140597514e-05, + 7.313936875246551e-05, + 7.379321959773788e-05, + 7.44529157344745e-05, + 7.511850941837326e-05, + 7.579005337228723e-05, + 7.646760079040112e-05, + 7.715120534244443e-05, + 7.784092117794301e-05, + 7.853680293050818e-05, + 7.923890572216479e-05, + 7.994728516771687e-05, + 8.066199737915333e-05, + 8.138309897009295e-05, + 8.211064706026828e-05, + 8.28446992800505e-05, + 8.358531377501462e-05, + 8.433254921054486e-05, + 8.508646477648191e-05, + 8.584712019181136e-05, + 8.661457570939439e-05, + 8.738889212074013e-05, + 8.817013076082115e-05, + 8.895835351293234e-05, + 8.975362281359218e-05, + 9.05560016574888e-05, + 9.136555360246971e-05, + 9.218234277457675e-05, + 9.300643387312509e-05, + 9.383789217582832e-05, + 9.467678354396966e-05, + 9.552317442761825e-05, + 9.637713187089328e-05, + 9.723872351727435e-05, + 9.810801761496014e-05, + 9.898508302227379e-05, + 9.986998921311764e-05, + 0.00010076280628247669, + 0.00010166360495197026, + 0.00010257245657545447, + 0.00010348943314467407, + 0.00010441460729496545, + 0.00010534805231100958, + 0.00010628984213263733, + 0.00010724005136068671, + 0.00010819875526291148, + 0.00010916602977994367, + 0.00011014195153130876, + 0.00011112659782149533, + 0.0001121200466460777, + 0.00011312237669789462, + 0.00011413366737328278, + 0.00011515399877836547, + 0.00011618345173539812, + 0.00011722210778917079, + 0.00011827004921346673, + 0.00011932735901758003, + 0.00012039412095289046, + 0.00012147041951949827, + 0.0001225563399729168, + 0.00012365196833082596, + 0.00012475739137988648, + 0.0001258726966826134, + 0.00012699797258431268, + 0.00012813330822007902, + 0.00012927879352185676, + 0.00013043451922556293, + 0.00013160057687827478, + 0.0001327770588454821, + 0.0001339640583184025, + 0.00013516166932136403, + 0.00013636998671925267, + 0.0001375891062250273, + 0.00013881912440730045, + 0.00014006013869798808, + 0.0001413122474000278, + 0.00014257554969516475, + 0.00014385014565180846, + 0.00014513613623295927, + 0.00014643362330420633, + 0.00014774270964179568, + 0.00014906349894077168, + 0.00015039609582319152, + 0.00015174060584641146, + 0.00015309713551144884, + 0.000154465792271418, + 0.0001558466845400423, + 0.00015723992170024105, + 0.00015864561411279413, + 0.00016006387312508455, + 0.00016149481107991738, + 0.00016293854132441916, + 0.00016439517821901687, + 0.00016586483714649557, + 0.0001673476345211387, + 0.0001688436877979492, + 0.00017035311548195396, + 0.00017187603713758986, + 0.00017341257339817506, + 0.0001749628459754653, + 0.00017652697766929362, + 0.00017810509237729848, + 0.00017969731510473737, + 0.0001813037719743895, + 0.0001829245902365452, + 0.00018455989827908604, + 0.00018620982563765525, + 0.00018787450300591747, + 0.00018955406224591183, + 0.00019124863639849665, + 0.00019295835969388868, + 0.00019468336756229442, + 0.00019642379664463845, + 0.00019817978480338763, + 0.0001999514711334701, + 0.00020173899597329423, + 0.0002035425009158644, + 0.00020536212881999802, + 0.00020719802382164002, + 0.00020905033134528098, + 0.000210919198115477, + 0.0002128047721684707, + 0.00021470720286391847, + 0.0002166266408967208, + 0.00021856323830896025, + 0.00022051714850194337, + 0.00022248852624835285, + 0.00022447752770450775, + 0.00022648431042273173, + 0.00022850903336383365, + 0.00023055185690969992, + 0.00023261294287599702, + 0.00023469245452499048, + 0.00023679055657847638, + 0.0002389074152308304, + 0.0002410431981621709, + 0.0002431980745516417, + 0.0002453722150908142, + 0.0002475657919972062, + 0.00024977897902792495, + 0.00025201195149343, + 0.000254264886271421, + 0.0002565379618208468, + 0.00025883135819604255, + 0.00026114525706099267, + 0.0002634798417037192, + 0.0002658352970508015, + 0.0002682118096820243, + 0.00027060956784515767, + 0.0002730287614708669, + 0.00027546958218775853, + 0.0002779322233375598, + 0.0002804168799904323, + 0.00028292374896042496, + 0.0002854530288210631, + 0.00028800491992107943, + 0.000290579624400282, + 0.0002931773462055668, + 0.00029579829110707416, + 0.0002984426667144858, + 0.00030111068249347146, + 0.00030380254978228035, + 0.00030651848180848296, + 0.00030925869370585933, + 0.00031202340253144083, + 0.000314812827282705, + 0.0003176271889149205, + 0.00032046671035865053, + 0.00032333161653741243, + 0.00032622213438549224, + 0.000329138492865922, + 0.00033208092298861566, + 0.00033504965782866906, + 0.0003380449325448202, + 0.00034106698439807765, + 0.0003441160527705154, + 0.0003471923791842327, + 0.0003502962073204866, + 0.00035342778303899434, + 0.00035658735439740894, + 0.0003597751716709665, + 0.0003629914873723122, + 0.00036623655627150323, + 0.00036951063541618704, + 0.00037281398415196467, + 0.0003761468641429326, + 0.0003795095393924116, + 0.0003829022762638563, + 0.0003863253435019557, + 0.0003897790122539218, + 0.0003932635560909657, + 0.0003967792510299688, + 0.000400326375555346, + 0.0004039052106411067, + 0.0004075160397731086, + 0.00041115914897151424, + 0.0004148348268134488, + 0.000418543364455856, + 0.00042228505565856283, + 0.00042606019680754804, + 0.00042986908693842124, + 0.00043371202776010704, + 0.0004375893236787456, + 0.0004415012818218065, + 0.000445448212062414, + 0.0004494304270438942, + 0.0004534482422045411, + 0.0004575019758026007, + 0.00046159194894148227, + 0.0004657184855951929, + 0.00046988191263400164, + 0.0004740825598503288, + 0.0004783207599848709, + 0.0004825968487529589, + 0.00048691116487114796, + 0.0004912640500840499, + 0.0004956558491914021, + 0.0005000869100753819, + 0.00050455758372816, + 0.0005090682242797044, + 0.0005136191890258338, + 0.0005182108384565157, + 0.0005228435362844239, + 0.0005275176494737482, + 0.0005322335482692641, + 0.0005369916062256568, + 0.0005417922002371135, + 0.0005466357105671792, + 0.0005515225208788747, + 0.0005564530182650897, + 0.0005614275932792432, + 0.0005664466399662237, + 0.0005715105558935971, + 0.0005766197421831014, + 0.0005817746035424223, + 0.0005869755482972459, + 0.0005922229884236071, + 0.0005975173395805199, + 0.000602859021142907, + 0.000608248456234813, + 0.0006136860717629254, + 0.0006191722984503902, + 0.0006247075708709281, + 0.0006302923274832584, + 0.0006359270106658332, + 0.0006416120667518746, + 0.0006473479460647319, + 0.0006531351029535516, + 0.0006589739958292696, + 0.0006648650872009188, + 0.0006708088437122675, + 0.0006768057361787849, + 0.0006828562396249309, + 0.0006889608333217868, + 0.0006951200008250175, + 0.0007013342300131782, + 0.0007076040131263548, + 0.0007139298468051584, + 0.0007203122321300664, + 0.0007267516746611103, + 0.000733248684477924, + 0.0007398037762201477, + 0.0007464174691281956, + 0.0007530902870843819, + 0.0007598227586544203, + 0.0007666154171292951, + 0.0007734688005674995, + 0.0007803834518376592, + 0.0007873599186615325, + 0.0007943987536573997, + 0.0008015005143838313, + 0.0008086657633838569, + 0.0008158950682295264, + 0.0008231890015668648, + 0.0008305481411612344, + 0.0008379730699431, + 0.0008454643760542066, + 0.0008530226528941629, + 0.0008606484991674467, + 0.0008683425189308332, + 0.0008761053216412379, + 0.0008839375222039947, + 0.0008918397410215671, + 0.0008998126040426859, + 0.000907856742811935, + 0.000915972794519775, + 0.0009241614020530213, + 0.000932423214045761, + 0.0009407588849307361, + 0.0009491690749911853, + 0.0009576544504131399, + 0.0009662156833381977, + 0.0009748534519167622, + 0.000983568440361765, + 0.0009923613390028561, + 0.001001232844341091, + 0.0010101836591041031, + 0.0010192144923017626, + 0.0010283260592823425, + 0.0010375190817891807, + 0.0010467942880178546, + 0.0010561524126738561, + 0.0010655941970307927, + 0.001075120388989108, + 0.0010847317431353174, + 0.0010944290208017857, + 0.0011042129901270299, + 0.0011140844261165704, + 0.0011240441107043134, + 0.0011340928328144925, + 0.0011442313884241643, + 0.0011544605806262528, + 0.0011647812196931677, + 0.001175194123140985, + 0.0011857001157942104, + 0.0011963000298511053, + 0.001206994704949612, + 0.0012177849882338665, + 0.0012286717344212946, + 0.001239655805870319, + 0.0012507380726486724, + 0.0012619194126023098, + 0.0012732007114249482, + 0.001284582862728223, + 0.0012960667681124764, + 0.0013076533372381677, + 0.0013193434878979323, + 0.0013311381460892864, + 0.0013430382460879692, + 0.0013550447305219523, + 0.0013671585504461058, + 0.0013793806654175385, + 0.001391712043571596, + 0.0014041536616985549, + 0.0014167065053209992, + 0.0014293715687718751, + 0.001442149855273266, + 0.001455042377015849, + 0.0014680501552390777, + 0.0014811742203120766, + 0.0014944156118152558, + 0.0015077753786226606, + 0.00152125457898505, + 0.0015348542806137356, + 0.001548575560765138, + 0.001562419506326131, + 0.0015763872139001325, + 0.0015904797898939676, + 0.0016046983506055113, + 0.001619044022312106, + 0.0016335179413597923, + 0.0016481212542532985, + 0.0016628551177468726, + 0.0016777206989359056, + 0.0016927191753493803, + 0.0017078517350431466, + 0.0017231195766940228, + 0.0017385239096947625, + 0.001754065954249829, + 0.0017697469414720657, + 0.0017855681134802096, + 0.001801530723497283, + 0.0018176360359498638, + 0.001833885326568237, + 0.0018502798824874655, + 0.0018668210023493213, + 0.0018835099964051704, + 0.001900348186619754, + 0.0019173369067759067, + 0.0019344775025802038, + 0.0019517713317695575, + 0.001969219764218778, + 0.0019868241820490623, + 0.0020045859797374888, + 0.0020225065642274723, + 0.0020405873550402125, + 0.0020588297843871293, + 0.002077235297283332, + 0.0020958053516620507, + 0.0021145414184901437, + 0.0021334449818846083, + 0.0021525175392301415, + 0.0021717606012977494, + 0.0021911756923644154, + 0.0022107643503338566, + 0.002230528126858319, + 0.0022504685874615024, + 0.0022705873116625665, + 0.0022908858931012448, + 0.0023113659396640815, + 0.002332029073611788, + 0.002352876931707768, + 0.002373911165347736, + 0.0023951334406905485, + 0.002416545438790177, + 0.002438148855728868, + 0.0024599454027514948, + 0.0024819368064010992, + 0.0025041248086556775, + 0.0025265111670661334, + 0.002549097654895518, + 0.0025718860612594877, + 0.0025948781912680232, + 0.002618075866168416, + 0.0026414809234895247, + 0.0026650952171873555, + 0.0026889206177918793, + 0.0027129590125552256, + 0.0027372123056011665, + 0.0027616824180759494, + 0.0027863712883004705, + 0.002811280871923808, + 0.0028364131420781586, + 0.002861770089535093, + 0.002887353722863277, + 0.002913166068587563, + 0.002939209171349518, + 0.002965485094069381, + 0.0029919959181094677, + 0.00301874374343906, + 0.0030457306888007117, + 0.003072958891878106, + 0.0031004305094653748, + 0.003128147717637944, + 0.0031561127119249044, + 0.0031843277074829176, + 0.0032127949392717066, + 0.0032415166622310533, + 0.0032704951514594418, + 0.003299732702394267, + 0.003329231630993659, + 0.0033589942739199363, + 0.0033890229887246874, + 0.003419320154035547, + 0.0034498881697445677, + 0.003480729457198348, + 0.003511846459389827, + 0.003543241641151792, + 0.0035749174893521295, + 0.003606876513090802, + 0.00363912124389863, + 0.0036716542359377744, + 0.003704478066204085, + 0.0037375953347312226, + 0.003771008664796612, + 0.0038047207031292342, + 0.0038387341201192755, + 0.0038730516100296806, + 0.003907675891209526, + 0.003942609706309371, + 0.003977855822498511, + 0.004013417031684156, + 0.004049296150732588, + 0.004085496021692312, + 0.0041220195120191365, + 0.00415886951480334, + 0.004196048948998829, + 0.004233560759654358, + 0.0042714079181468065, + 0.004309593422416542, + 0.004348120297204925, + 0.004386991594293852, + 0.004426210392747529, + 0.00446577979915636, + 0.004505702947883022, + 0.0045459830013107536, + 0.00458662315009383, + 0.004627626613410348, + 0.004668996639217162, + 0.004710736504507199, + 0.0047528495155690275, + 0.004795339008248752, + 0.00483820834821425, + 0.004881460931221765, + 0.004925100183384933, + 0.004969129561446103, + 0.005013552553050201, + 0.005058372677020975, + 0.005103593483639732, + 0.005149218554926558, + 0.005195251504924051, + 0.0052416959799836335, + 0.005288555659054325, + 0.005335834253974198, + 0.005383535509764391, + 0.00543166320492576, + 0.005480221151738176, + 0.005529213196562493, + 0.005578643220145272, + 0.0056285151379261095, + 0.005678832900347838, + 0.0057296004931694285, + 0.005780821937781718, + 0.005832501291525943, + 0.005884642648015123, + 0.005937250137458368, + 0.005990327926987967, + 0.0060438802209895216, + 0.0060979112614349745, + 0.00615242532821862, + 0.006207426739496123, + 0.006262919852026555, + 0.006318909061517552, + 0.00637539880297343, + 0.00643239355104654, + 0.0064898978203916996, + 0.00654791616602381, + 0.006606453183678661, + 0.006665513510176959, + 0.006725101823791672, + 0.00678522284461852, + 0.006845881334949913, + 0.006907082099652176, + 0.006968829986546149, + 0.007031129886791179, + 0.00709398673527256, + 0.007157405510992484, + 0.007221391237464349, + 0.007285948983110736, + 0.007351083861664883, + 0.007416801032575743, + 0.007483105701416677, + 0.007550003120297778, + 0.007617498588281973, + 0.007685597451804662, + 0.0077543051050972915, + 0.007823626990614624, + 0.007893568599465836, + 0.007964135471849479, + 0.00803533319749238, + 0.008107167416092319, + 0.008179643817764823, + 0.00825276814349388, + 0.00832654618558669, + 0.00840098378813248, + 0.008476086847465404, + 0.00855186131263169, + 0.00862831318586075, + 0.008705448523040704, + 0.00878327343419806, + 0.008861794083981708, + 0.008941016692151216, + 0.009020947534069504, + 0.009101592941199993, + 0.009182959301608028, + 0.009265053060466951, + 0.009347880720568627, + 0.009431448842838534, + 0.009515764046855463, + 0.009600833011375865, + 0.009686662474862943, + 0.00977325923602031, + 0.009860630154330611, + 0.009948782150598839, + 0.010037722207500563, + 0.010127457370135021, + 0.010217994746583168, + 0.010309341508470795, + 0.010401504891536479, + 0.010494492196204831, + 0.01058831078816475, + 0.010682968098952866, + 0.010778471626542217, + 0.010874828935936146, + 0.01097204765976763, + 0.011070135498903741, + 0.011169100223055733, + 0.011268949671394477, + 0.011369691753171405, + 0.01147133444834503, + 0.011573885808213016, + 0.011677353956050041, + 0.011781747087751104, + 0.011887073472480839, + 0.011993341453328503, + 0.012100559447968845, + 0.012208735949328888, + 0.012317879526260643, + 0.012427998824219967, + 0.012539102565951223, + 0.012651199552178338, + 0.012764298662301889, + 0.01287840885510246, + 0.012993539169450286, + 0.013109698725021199, + 0.01322689672301914, + 0.013345142446904825, + 0.013464445263131218, + 0.013584814621885438, + 0.01370626005783733, + 0.013828791190894705, + 0.01395241772696534, + 0.014077149458725919, + 0.014202996266397528, + 0.014329968118528425, + 0.014458075072783632, + 0.01458732727674162, + 0.014717734968698102, + 0.014849308478477024, + 0.014982058228248907, + 0.01511599473335624, + 0.015251128603146513, + 0.015387470541812616, + 0.01552503134924069, + 0.015663821921865606, + 0.01580385325353421, + 0.015945136436375962, + 0.016087682661681705, + 0.01623150322079011, + 0.01637660950598208, + 0.016523013011383158, + 0.01667072533387396, + 0.01681975817400892, + 0.016970123336942908, + 0.017121832733366482, + 0.0172748983804493, + 0.01742933240279204, + 0.017585147033386806, + 0.01774235461458609, + 0.017900967599080563, + 0.018060998550885284, + 0.01822246014633503, + 0.018385365175088413, + 0.018549726541140926, + 0.018715557263847143, + 0.01888287047895191, + 0.019051679439631056, + 0.019221997517540942, + 0.01939383820387781, + 0.019567215110446408, + 0.01974214197073821, + 0.01991863264101926, + 0.020096701101427725, + 0.02027636145708144, + 0.020457627939194947, + 0.020640514906206962, + 0.020825036844917662, + 0.021011208371636232, + 0.02119904423333864, + 0.021388559308835733, + 0.02157976860995197, + 0.02177268728271431, + 0.02196733060855208, + 0.022163714005507457, + 0.022361853029456702, + 0.02256176337534242, + 0.022763460878416693, + 0.02296696151549564, + 0.023172281406224668, + 0.023379436814355534, + 0.02358844414903457, + 0.023799319966102486, + 0.024012080969405797, + 0.02422674401211989, + 0.024443326098084226, + 0.02466184438314891, + 0.02488231617653386, + 0.02510475894219984, + 0.02532919030023183, + 0.025555628028234707, + 0.025784090062741426, + 0.02601459450063399, + 0.026247159600576636, + 0.026481803784462337, + 0.026718545638871983, + 0.026957403916546656, + 0.027198397537873068, + 0.027441545592382228, + 0.027686867340261767, + 0.02793438221388126, + 0.0281841098193317, + 0.028436069937978467, + 0.028690282528028292, + 0.028946767726110125, + 0.02920554584887017, + 0.029466637394581427, + 0.029730063044767035, + 0.029995843665838757, + 0.03026400031074974, + 0.030534554220662206, + 0.030807526826629898, + 0.031082939751295946, + 0.03136081481060526, + 0.03164117401553285, + 0.03192403957382727, + 0.03220943389176981, + 0.03249737957594924, + 0.03278789943505252, + 0.033081016481671735, + 0.03337675393412662, + 0.03367513521830393, + 0.03397618396951304, + 0.03427992403435806, + 0.03458637947262686, + 0.034895574559196736, + 0.03520753378595762, + 0.03552228186375164, + 0.035839843724330814, + 0.0361602445223319, + 0.0364835096372689, + 0.036809664675543405, + 0.037138735472472886, + 0.03747074809433745, + 0.03780572884044415, + 0.03814370424521043, + 0.03848470108026599, + 0.03882874635657337, + 0.039175867326567505, + 0.03952609148631441, + 0.03987944657768947, + 0.04023596059057451, + 0.040595661765075126, + 0.04095857859375767, + 0.04132473982390615, + 0.04169417445979934, + 0.04206691176500818, + 0.04244298126471417, + 0.04282241274804756, + 0.04320523627044735, + 0.043591482156041965, + 0.04398118100005128, + 0.04437436367121009, + 0.044771061314213226, + 0.04517130535218294, + 0.0455751274891574, + 0.045982559712602455, + 0.04639363429594526, + 0.04680838380113075, + 0.04722684108120092, + 0.04764903928289708, + 0.048075011849285844, + 0.048504792522407636, + 0.04893841534594987, + 0.049375914667943464, + 0.049817325143483644, + 0.050262681737475036, + 0.05071201972740118, + 0.05116537470611934, + 0.05162278258467926, + 0.05208427959516816, + 0.052549902293580614, + 0.05301968756271426, + 0.0534936726150913, + 0.05397189499590611, + 0.05445439258599967, + 0.0549412036048595, + 0.05543236661364758, + 0.055927920518254716, + 0.05642790457238231, + 0.05693235838065176, + 0.05744132190174147, + 0.05795483545155255, + 0.05847293970640155, + 0.058995675706243034, + 0.05952308485792025, + 0.06005520893844511, + 0.06059209009830735, + 0.06113377086481324, + 0.06168029414545479, + 0.062231703231307736, + 0.0627880418004612, + 0.0633493539214774, + 0.0639156840568824, + 0.06448707706668795, + 0.0650635782119454, + 0.06564523315833014, + 0.06623208797975945, + 0.06682418916204186, + 0.06742158360655945, + 0.06802431863398295, + 0.06863244198801999, + 0.06924600183919748, + 0.06986504678867649, + 0.07048962587210253, + 0.0711197885634897, + 0.07175558477913953, + 0.07239706488159497, + 0.07304427968362959, + 0.07369728045227306, + 0.07435611891287125, + 0.07502084725318413, + 0.07569151812751945, + 0.07636818466090356, + 0.07705090045328958, + 0.077739719583803, + 0.07843469661502599, + 0.07913588659731845, + 0.07984334507317925, + 0.08055712808164577, + 0.08127729216273279, + 0.08200389436191113, + 0.08273699223462619, + 0.08347664385085764, + 0.08422290779971828, + 0.08497584319409564, + 0.08573550967533423, + 0.0865019674179599, + 0.08727527713444627, + 0.08805550008002382, + 0.08884269805753262, + 0.08963693342231682, + 0.09043826908716471, + 0.09124676852729181, + 0.09206249578536904, + 0.09288551547659553, + 0.09371589279381672, + 0.09455369351268923, + 0.09539898399688991, + 0.09625183120337329, + 0.09711230268767529, + 0.09798046660926436, + 0.0988563917369405, + 0.09974014745428236, + 0.1006318037651441, + 0.10153143129919924, + 0.10243910131753617, + 0.10335488571830272, + 0.10427885704240127, + 0.10521108847923492, + 0.10615165387250469, + 0.10710062772605966, + 0.10805808520979727, + 0.10902410216561853, + 0.10999875511343546, + 0.11098212125723213, + 0.11197427849118041, + 0.11297530540580968, + 0.11398528129423312, + 0.11500428615842724, + 0.11603240071556999, + 0.11706970640443413, + 0.11811628539183831, + 0.11917222057915548, + 0.1202375956088795, + 0.12131249487125167, + 0.12239700351094379, + 0.12349120743380369, + 0.12459519331365974, + 0.1257090485991864, + 0.12683286152083106, + 0.12796672109780372, + 0.129110717145127, + 0.13026494028075158, + 0.1314294819327338, + 0.13260443434647798, + 0.13378989059204335, + 0.13498594457151586, + 0.13619269102644763, + 0.13741022554535975, + 0.13863864457131533, + 0.13987804540955848, + 0.14112852623522204, + 0.14239018610110438, + 0.14366312494551498, + 0.14494744360019218, + 0.1462432437982882, + 0.14755062818242906, + 0.14886970031284458, + 0.15020056467557164, + 0.15154332669073065, + 0.1528980927208759, + 0.1542649700794219, + 0.15564406703914174, + 0.1570354928407454, + 0.15843935770153192, + 0.15985577282412042, + 0.16128485040525836, + 0.16272670364470865, + 0.1641814467542177, + 0.1656491949665603, + 0.16713006454466878, + 0.16862417279084208, + 0.17013163805603745, + 0.17165257974924525, + 0.17318711834694717, + 0.17473537540266085, + 0.17629747355656616, + 0.17787353654522126, + 0.17946368921136344, + 0.18106805751379845, + 0.18268676853737756, + 0.18431995050306413, + 0.18596773277809148, + 0.1876302458862082, + 0.18930762151801847, + 0.19099999254141342, + 0.1927074930120956, + 0.19443025818419785, + 0.1961684245209966, + 0.197922129705723, + 0.19969151265246668, + 0.2014767135171808, + 0.2032778737087839, + 0.20509513590036102, + 0.20692864404046507, + 0.20877854336451881, + 0.2106449804063211, + 0.2125281030096513, + 0.21442806033998202, + 0.2163450028962944, + 0.21827908252299943, + 0.22023045242196573, + 0.2221992671646544, + 0.22418568270436506, + 0.2261898563885861, + 0.22821194697146033, + 0.23025211462635997, + 0.23231052095857402, + 0.23438732901810932, + 0.2364827033126056, + 0.23859680982036854, + 0.24072981600351384, + 0.24288189082123463, + 0.24505320474318423, + 0.2472439297629794, + 0.24945423941182382, + 0.25168430877225584, + 0.253934314492014, + 0.2562044347980316, + 0.2584948495105539, + 0.260805740057382, + 0.2631372894882441, + 0.2654896824892945, + 0.2678631053977453, + 0.27025774621662324, + 0.27267379462966357, + 0.27511144201633503, + 0.2775708814669993, + 0.28005230779820617, + 0.28255591756812415, + 0.28508190909211334, + 0.2876304824584302, + 0.2902018395440794, + 0.2927961840308045, + 0.2954137214212217, + 0.2980546590550979, + 0.3007192061257746, + 0.30340757369673976, + 0.3061199747183439, + 0.30885662404467024, + 0.3116177384505529, + 0.31440353664874854, + 0.31721423930726034, + 0.3200500690668173, + 0.3229112505585127, + 0.32579801042159323, + 0.3287105773214143, + 0.33164918196755233, + 0.3346140571320797, + 0.3376054376680031, + 0.3406235605278658, + 0.34366866478252, + 0.34674099164005967, + 0.3498407844649303, + 0.35296828879720493, + 0.3561237523720343, + 0.35930742513927016, + 0.36251955928326357, + 0.3657604092428438, + 0.36903023173146854, + 0.3723292857575613, + 0.3756578326450275, + 0.3790161360539544, + 0.3824044620014957, + 0.38582307888294287, + 0.38927225749298827, + 0.39275227104717036, + 0.39626339520351883, + 0.39980590808438937, + 0.40338009029849387, + 0.4069862249631282, + 0.4106245977265976, + 0.41429549679084665, + 0.41799921293428316, + 0.42173603953481464, + 0.42550627259308654, + 0.42931021075592907, + 0.43314815534001316, + 0.43702041035571765, + 0.4409272825312143, + 0.44486908133675834, + 0.44884611900920623, + 0.4528587105767473, + 0.45690717388385793, + 0.46099182961647844, + 0.46511300132741407, + 0.4692710154619683, + 0.47346620138379547, + 0.4776988914009935, + 0.4819694207924262, + 0.4862781278342815, + 0.49062535382686495, + 0.4950114431216399, + 0.4994367431484973, + 0.5039016044432805, + 0.508406380675551, + 0.5129514286766031, + 0.5175371084677293, + 0.5221637832887365, + 0.5268318196267242, + 0.5315415872451075, + 0.5362934592129107, + 0.5410878119343187, + 0.5459250251784915, + 0.5508054821096473, + 0.555729569317412, + 0.5606976768474463, + 0.565710198232335, + 0.5707675305227642, + 0.5758700743189709, + 0.5810182338024757, + 0.5862124167680983, + 0.5914530346562588, + 0.5967405025855729, + 0.6020752393857277, + 0.6074576676306624, + 0.6128882136720397, + 0.6183673076730181, + 0.6238953836423258, + 0.6294728794686383, + 0.6351002369552692, + 0.6407779018551585, + 0.6465063239061865, + 0.6522859568667976, + 0.6581172585519426, + 0.6640006908693437, + 0.6699367198560808, + 0.675925815715514, + 0.6819684528545193, + 0.6880651099210738, + 0.6942162698421691, + 0.7004224198620635, + 0.706684051580879, + 0.7130016609935391, + 0.7193757485290644, + 0.7258068190902027, + 0.7322953820934298, + 0.7388419515092993, + 0.7454470459031556, + 0.7521111884762097, + 0.7588349071069825, + 0.7656187343931239, + 0.7724632076935922, + 0.7793688691712255, + 0.7863362658356854, + 0.793365949586787, + 0.8004584772582157, + 0.8076144106616333, + 0.814834316631187, + 0.8221187670683987, + 0.829468338987474, + 0.8368836145610057, + 0.8443651811660896, + 0.8519136314308514, + 0.859529563281388, + 0.8672135799891373, + 0.874966290218654, + 0.88278830807583, + 0.8906802531565365, + 0.8986427505957044, + 0.9066764311168417, + 0.9147819310819916, + 0.9229598925421493, + 0.9312109632881064, + 0.939535796901773, + 0.9479350528079464, + 0.956409396326545, + 0.9649594987253081, + 0.9735860372729755, + 0.9822896952929241, + 0.9910711622173024, + 0.9999311336416399, + 1.0088703113799462, + 1.0178894035203034, + 1.0269891244809524, + 1.0361701950668922, + 1.045433342526963, + 1.054779300611462, + 1.0642088096302615, + 1.0737226165114517, + 1.0833214748605058, + 1.0930061450199713, + 1.1027773941297088, + 1.1126359961876426, + 1.1225827321110822, + 1.1326183897985753, + 1.1427437641923206, + 1.1529596573411351, + 1.1632668784639855, + 1.1736662440140946, + 1.1841585777436014, + 1.194744710768822, + 1.2054254816360799, + 1.21620173638813, + 1.2270743286311738, + 1.238044119602474, + 1.2491119782385849, + 1.2602787812441643, + 1.271545413161433, + 1.2829127664402358, + 1.2943817415087344, + 1.3059532468447326, + 1.3176281990476353, + 1.329407522911065, + 1.3412921514960994, + 1.353283026205193, + 1.3653810968567432, + 1.3775873217603276, + 1.3899026677926138, + 1.4023281104739433, + 1.4148646340456181, + 1.4275132315478438, + 1.4402749048984043, + 1.4531506649720207, + 1.4661415316804256, + 1.479248534053152, + 1.4924727103190407, + 1.5058151079884934, + 1.5192767839364296, + 1.532858804486014, + 1.5465622454931214, + 1.5603881924315548, + 1.5743377404790297, + 1.5884119946039204, + 1.6026120696527992, + 1.6169390904387282, + 1.6313941918303678, + 1.6459785188418705, + 1.660693226723578, + 1.6755394810535327, + 1.6905184578297987, + 1.7056313435636314, + 1.720879335373441, + 1.7362636410796324, + 1.7517854793002754, + 1.7674460795476334, + 1.7832466823255557, + 1.7991885392277351, + 1.8152729130368663, + 1.8315010778246477, + 1.8478743190527196, + 1.8643939336744841, + 1.8810612302378382, + 1.8978775289888232, + 1.9148441619762195, + 1.9319624731570355, + 1.9492338185029818, + 1.9666595661078765, + 1.9842410962960138, + 2.0019798017315007, + 2.019877087528571, + 2.037934371362901, + 2.056153083583882, + 2.074534667327938, + 2.0930805786328346, + 2.1117922865530137, + 2.1306712732759605, + 2.1497190342396055, + 2.1689370782507993, + 2.1883269276048, + 2.207890118205875, + 2.227628199688961, + 2.2475427355424062, + 2.267635303231826, + 2.2879074943250446, + 2.308360914618191, + 2.3289971842628625, + 2.349817937894484, + 2.3708248247617827, + 2.392019508857427, + 2.413403669049839, + 2.4349789992161694, + 2.4567472083764987, + 2.478710020829177, + 2.5008691762874307, + 2.523226430017163, + 2.545783552975992, + 2.56854233195353, + 2.5915045697129147, + 2.6146720851336305, + 2.638046713355552, + 2.661630305924329, + 2.6854247309380495, + 2.7094318731952094, + 2.733653634344017, + 2.7580919330330143, + 2.782748705063084, + 2.8076259035407496, + 2.8327254990329114, + 2.8580494797229283, + 2.8835998515681087, + 2.909378638458606, + 2.935387882377725, + 2.9616296435637, + 2.988106000672849, + 3.014819050944256, + 3.041770910365888, + 3.0689637138422072, + 3.0963996153632816, + 3.124080788175397, + 3.1520094249532336, + 3.1801877379735095, + 3.2086179592902466, + 3.237302340911568, + 3.266243154978084, + 3.295442693942874, + 3.324903270753065, + 3.3546272190330764, + 3.3846168932694263, + 3.414874668997262, + 3.445402942988525, + 3.4762041334418026, + 3.5072806801738783, + 3.5386350448129837, + 3.570269710993824, + 3.6021871845542615, + 3.634389993733839, + 3.666880689374036, + 3.699661845120333, + 3.7327360576260564, + 3.766105946758104, + 3.7997741558044162, + 3.8337433516833914, + 3.868016225155126, + 3.902595491034556, + 3.9374838884065024, + 3.9726841808426303, + 4.00819915662039, + 4.044031628943828, + 4.080184436166467, + 4.116660442016121, + 4.153462535821738, + 4.190593632742272, + 4.2280566739975844, + 4.265854627101465, + 4.303990486096633, + 4.342467271791942, + 4.3812880320016525, + 4.420455841786855, + 4.459973803699048, + 4.499845048025894, + 4.540072733039207, + 4.58066004524507, + 4.621610199636281, + 4.66292643994701, + 4.70461203890974, + 4.746670298514508, + 4.789104550270447, + 4.831918155469724, + 4.875114505453735, + 4.918697021881775, + 4.96266915700207, + 5.007034393925227, + 5.051796246900144, + 5.09695826159237, + 5.142524015365002, + 5.1884971175619885, + 5.234881209794082, + 5.2816799662272835, + 5.328897093873873, + 5.376536332886062, + 5.424601456852232, + 5.473096273095902, + 5.522024622977246, + 5.571390382197408, + 5.621197461105506, + 5.671449805008368, + 5.722151394483051, + 5.773306245692134, + 5.824918410701901, + 5.876991977803231, + 5.929531071835491, + 5.982539854513263, + 6.036022524755993, + 6.089983319020603, + 6.144426511637048, + 6.199356415146952, + 6.254777380645131, + 6.3106937981243, + 6.367110096822803, + 6.424030745575462, + 6.481460253167556, + 6.539403168691959, + 6.597864081909539, + 6.656847623612636, + 6.716358465991929, + 6.7764013230065165, + 6.83698095075732, + 6.898102147863817, + 6.95976975584414, + 7.021988659498635, + 7.08476378729671, + 7.14810011176729, + 7.212002649892676, + 7.276476463505955, + 7.341526659691945, + 7.407158391191785, + 7.473376856811018, + 7.5401873018314465, + 7.607595018426604, + 7.67560534608097, + 7.744223672012906, + 7.813455431601376, + 7.883306108816565, + 7.9537812366541605, + 8.024886397573711, + 8.096627223940796, + 8.169009398473182, + 8.242038654690958, + 8.315720777370679, + 8.39006160300366, + 8.465067020258193, + 8.54074297044606, + 8.61709544799315, + 8.69413050091427, + 8.771854231292242, + 8.85027279576122, + 8.929392405994458, + 9.009219329196224, + 9.089759888598321, + 9.171020463960932, + 9.253007492077982, + 9.335727467287004, + 9.419186941983543, + 9.503392527140269, + 9.588350892830526, + 9.674068768756747, + 9.76055294478352, + 9.847810271475417, + 9.935847660639647, + 10.024672085873517, + 10.114290583116924, + 10.20471025120955, + 10.295938252453254, + 10.3879818131794, + 10.480848224321251, + 10.57454484199152, + 10.669079088065017, + 10.764458450766648, + 10.860690485264438, + 10.957782814268072, + 11.055743128632686, + 11.154579187968073, + 11.254298821253334, + 11.354909927456998, + 11.456420476162819, + 11.558838508200907, + 11.662172136284756, + 11.766429545653843, + 11.871618994721997, + 11.977748815731557, + 12.084827415413361, + 12.192863275652764, + 12.301864954161346, + 12.411841085154883, + 12.522800380037259, + 12.634751628090509, + 12.747703697171032, + 12.861665534412001, + 12.976646166932204, + 13.092654702550908, + 13.209700330509442, + 13.327792322199047, + 13.446940031895291, + 13.567152897499033, + 13.68844044128398, + 13.81081227065109, + 13.934278078889417, + 14.05884764594404, + 14.18453083919073, + 14.311337614217551, + 14.439278015613452, + 14.568362177764007, + 14.698600325654024, + 14.830002775677585, + 14.962579936455207, + 15.096342309658324, + 15.231300490841141, + 15.367465170279898, + 15.504847133819794, + 15.643457263729157, + 15.783306539561577, + 15.924406039025584, + 16.066766938862134, + 16.210400515729944, + 16.355318147098686, + 16.50153131215037, + 16.649051592688412, + 16.7978906740552, + 16.948060346057666, + 17.09957250390117, + 17.25243914913177, + 17.406672390586813, + 17.562284445354265, + 17.719287639740227, + 17.877694410245464, + 18.037517304550487, + 18.198768982509478, + 18.361462217153107, + 18.52560989570025, + 18.691225020578976, + 18.85832071045627, + 19.02691020127731, + 19.197006847313904, + 19.36862412222228, + 19.54177562011038, + 19.716475056614602, + 19.892736269986447, + 20.070573222188386, + 20.25 + ] + }, + "lo": [ + { + "basis": [ + { + "auto": 1, + "dme": 0, + "enu": -0.0818827, + "n": 1 + }, + { + "auto": 1, + "dme": 1, + "enu": -0.0818827, + "n": 1 + } + ], + "l": 0 + }, + { + "basis": [ + { + "auto": 1, + "dme": 1, + "enu": -0.0818827, + "n": 1 + }, + { + "auto": 1, + "dme": 2, + "enu": -0.0818827, + "n": 1 + } + ], + "l": 0 + } + ], + "mass": 1.00794, + "name": "hydrogen", + "nrmt": 1000, + "number": 1, + "rinf": 15.096342309658324, + "rmin": 1e-07, + "rmt": 0.65, + "symbol": "H", + "valence": [ + { + "basis": [ + { + "auto": 0, + "dme": 0, + "enu": 0.15 + }, + { + "auto": 0, + "dme": 1, + "enu": 0.15 + } + ] + } + ] +} \ No newline at end of file diff --git a/verification/test31/output_ref.json b/verification/test31/output_ref.json new file mode 100644 index 000000000..ee2314252 --- /dev/null +++ b/verification/test31/output_ref.json @@ -0,0 +1,273 @@ +{ + "comm_world_size": 1, + "context": { + "chemical_formula": "H", + "config": { + "control": { + "beta_chunk_size": 256, + "beta_on_device": false, + "cyclic_block_size": 4, + "fft_mode": "parallel", + "gen_evp_solver_name": "lapack", + "gvec_chunk_size": 500000, + "mpi_grid_dims": [ + 1, + 1 + ], + "num_bands_to_print": 10, + "ortho_rf": false, + "output": "stdout:", + "print_forces": false, + "print_neighbors": false, + "print_stress": false, + "processing_unit": "cpu", + "reduce_gvec": false, + "rmt_max": 2.0, + "save_rf": false, + "spglib_tolerance": 1e-06, + "std_evp_solver_name": "lapack", + "use_second_variation": true, + "verbosity": 2, + "verification": 0 + }, + "hubbard": { + "constrained_calculation": false, + "constraint_beta_mixing": 0.4, + "constraint_error": 1e-06, + "constraint_max_iteration": 10, + "constraint_method": "energy", + "constraint_strength": 1.0, + "hubbard_subspace_method": "none", + "local": [], + "local_constraint": [], + "nonlocal": [], + "simplified": false + }, + "iterative_solver": { + "converge_by_energy": 1, + "early_restart": 0.5, + "empty_states_tolerance": 0, + "energy_tolerance": 0.01, + "extra_ortho": false, + "init_eval_old": true, + "init_subspace": "lcao", + "locking": true, + "min_num_res": 0, + "num_singular": -1, + "num_steps": 20, + "relative_tolerance": 0, + "residual_tolerance": 1e-06, + "subspace_size": 2, + "type": "exact" + }, + "locked": true, + "mixer": { + "beta": 0.5, + "beta0": 0.15, + "beta_scaling_factor": 1.0, + "linear_mix_rms_tol": 1000000.0, + "max_history": 8, + "type": "anderson", + "use_hartree": false + }, + "nlcg": { + "T": 300.0, + "kappa": 0.3, + "maxiter": 300, + "processing_unit": "", + "restart": 10, + "tau": 0.1, + "tol": 1e-09 + }, + "parameters": { + "auto_rmt": 1, + "aw_cutoff": 7.0, + "core_relativity": "dirac", + "density_tol": 1e-07, + "electronic_structure_method": "full_potential_lapwlo", + "energy_tol": 1e-10, + "extra_charge": 0, + "gamma_point": false, + "gk_cutoff": 3.5, + "hubbard_correction": false, + "lmax_apw": 8, + "lmax_pot": 8, + "lmax_rho": 8, + "molecule": false, + "ngridk": [ + 2, + 2, + 2 + ], + "nn_radius": -1, + "num_bands": -1, + "num_dft_iter": 100, + "num_fv_states": 4, + "num_mag_dims": 0, + "precision_gs": "auto", + "precision_hs": "fp64", + "precision_wf": "fp64", + "pw_cutoff": 12.0, + "reduce_aux_bf": 0, + "shiftk": [ + 0, + 0, + 0 + ], + "smearing": "gaussian", + "smearing_width": 0.001, + "so_correction": false, + "use_ibz": true, + "use_scf_correction": true, + "use_symmetry": true, + "valence_relativity": "koelling_harmon", + "vk": [], + "xc_dens_tre": -1, + "xc_functionals": [ + "XC_LDA_X", + "XC_LDA_C_PW" + ] + }, + "settings": { + "always_update_wf": true, + "auto_enu_tol": 0, + "fft_grid_size": [ + 45, + 45, + 45 + ], + "fp32_to_fp64_rms": 0, + "itsol_tol_min": 1e-13, + "itsol_tol_ratio": 0, + "itsol_tol_scale": [ + 0.1, + 0.5 + ], + "min_occupancy": 1e-14, + "mixer_rms_min": 1e-16, + "nprii_aug": 20, + "nprii_beta": 20, + "nprii_rho_core": 20, + "nprii_vloc": 200, + "radial_grid": "exponential, 1.0", + "sht_coverage": 0 + }, + "unit_cell": { + "atom_coordinate_units": "lattice", + "atom_files": { + "H": "H.json" + }, + "atom_types": [ + "H" + ], + "atoms": { + "H": [ + [ + 0.0, + 0.0, + 0.0 + ] + ] + }, + "lattice_vectors": [ + [ + 10.0, + 0.0, + 0.0 + ], + [ + 0.0, + 10.0, + 0.0 + ], + [ + 0.0, + 0.0, + 10.0 + ] + ], + "lattice_vectors_scale": 1.0 + }, + "vcsqnm": { + "alpha0": 0.01, + "eps_subsp": 0.001, + "forces_tol": 0.0001, + "initial_step_size": -0.1, + "lattice_weight": 2.0, + "nhist_max": 10, + "num_steps": 300, + "stress_tol": 1e-05 + } + }, + "fft_coarse_grid": [ + 25, + 25, + 25 + ], + "mpi_grid": [ + 1, + 1 + ], + "num_atoms": 1, + "omega": 1000.0 + }, + "counters": { + "band_evp_work_count": 0.0, + "local_operator_num_applied": 0 + }, + "git_hash": "45daf4be830963500ca5a5b9c4dc82568403ce5a", + "ground_state": { + "band_gap": 0.0, + "converged": true, + "core_leakage": 0.0, + "efermi": -0.2298403438953336, + "energy": { + "bxc": 0.0, + "core_eval_sum": 0.0, + "entropy_sum": -0.00012385178400429667, + "enuc": -0.4589705409889052, + "eval_sum": -0.23151798232276094, + "ewald": 0.0, + "exc": -0.22925662057186147, + "kin": 0.41451797864506473, + "scf_correction": 1.134052851625711e-09, + "total": -0.4473155606452849, + "veff": -0.6460359609678257, + "vha": -0.3472127577272715, + "vxc": -0.2988232032409234 + }, + "etot_history": [ + -0.4483122874557121, + -0.4468102014783399, + -0.44744486410499285, + -0.4472608984539097, + -0.4473115567653132, + -0.4473145862427188, + -0.44731432549887507, + -0.4473155569336346, + -0.447315560660926, + -0.44731556042865306, + -0.44731556064583344, + -0.4473155606452849 + ], + "num_scf_iterations": 11, + "rho_min": 1.6481154494965074e-06, + "rms_history": [ + 0.0032485690090753973, + 0.001611581144538327, + 0.00036576350591347037, + 0.0006336149056173956, + 0.00010944037630716328, + 3.9302207607731513e-05, + 2.7889210231190184e-05, + 1.33552381643973e-07, + 3.2562360240589686e-09, + 7.288281920310186e-09, + 1.291474397044996e-10, + 3.578490283314564e-11 + ], + "scf_time": 21.640383 + }, + "task": 0, + "threads_per_rank": 10 +} \ No newline at end of file diff --git a/verification/test31/sirius.json b/verification/test31/sirius.json new file mode 100644 index 000000000..358708841 --- /dev/null +++ b/verification/test31/sirius.json @@ -0,0 +1,53 @@ +{ + "control" : { + "processing_unit" : "cpu", + "std_evp_solver_name" : "lapack", + "gen_evp_solver_name" : "lapack", + "verbosity" : 2, + "verification" : 0, + "rmt_max": 2.0 + }, + "parameters" : { + "electronic_structure_method" : "full_potential_lapwlo", + "smearing_width" : 0.001, + "valence_relativity" : "koelling_harmon", + "xc_functionals": ["XC_LDA_X", "XC_LDA_C_PW"], + "num_fv_states" : 4, + "pw_cutoff" : 12.00, + "aw_cutoff": 7.00, + "use_symmetry": true, + "ngridk" : [2,2,2], + "density_tol" : 1e-7, + "energy_tol" : 1e-10, + "num_dft_iter" : 100 + }, + + + "unit_cell" : { + + "lattice_vectors" : [ [1, 0, 0], + [0, 1, 0], + [0, 0, 1] + ], + "lattice_vectors_scale" : 10, + + "atom_types" : ["H"], + + "atom_files" : { + "H" : "H.json" + }, + + "atoms" : { + "H" : [ + [0, 0, 0] + ] + } + }, + + "mixer" : { + "beta" : 0.5, + "type" : "anderson", + "max_history" : 8 + } + +}