diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..1be9c699 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,194 @@ +name: CI +on: [push, pull_request] + +env: + CI: "ON" + HOMEBREW_NO_ANALYTICS: "ON" + HOMEBREW_NO_AUTO_UPDATE: "ON" + HOMEBREW_NO_BOTTLE_SOURCE_FALLBACK: "ON" + HOMEBREW_NO_GITHUB_API: "ON" + HOMEBREW_NO_INSTALL_CLEANUP: "ON" + BUILD_DIR: _build + INSTALL_DIR: _install + +jobs: + gcc-build: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest] + config: [Debug] + version: [11] + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up python + uses: actions/setup-python@v4 + with: + python-version: '3.x' + + # Note: xcode version 14.0 (default on macos-latest @ 2022-11-23) fails to link gfortran compiled + # code. Therefore, 14.1 is selected below (which seems to be installed.) + - name: Install GCC (OSX) + if: ${{ contains(matrix.os, 'macos') }} + run: | + brew install gcc@${{ matrix.version }} openblas + ln -s /usr/local/bin/gfortran-${{ matrix.version }} /usr/local/bin/gfortran + ln -s /usr/local/bin/gcc-${{ matrix.version }} /usr/local/bin/gcc + ln -s /usr/local/bin/g++-${{ matrix.version }} /usr/local/bin/g++ + echo "PKG_CONFIG_PATH=/usr/local/opt/openblas/lib/pkgconfig" >> $GITHUB_ENV + xcversion select 14.1 + + - name: Install GCC (Linux) + if: ${{ contains(matrix.os, 'ubuntu') }} + run: | + sudo add-apt-repository ppa:ubuntu-toolchain-r/test + sudo apt-get update + sudo apt-get install -y gcc-${{ matrix.version}} gfortran-${{ matrix.version }} + sudo update-alternatives \ + --install /usr/bin/gcc gcc /usr/bin/gcc-${{ matrix.version }} 100 \ + --slave /usr/bin/gfortran gfortran /usr/bin/gfortran-${{ matrix.version }} \ + --slave /usr/bin/gcov gcov /usr/bin/gcov-${{ matrix.version }} + + - name: Set Compiler (Linux) + if: contains(matrix.os, 'ubuntu') + run: | + echo "FC=gfortran" >> $GITHUB_ENV + echo "CC=gcc" >> $GITHUB_ENV + + - name: Set Compiler (OSX) + if: contains(matrix.os, 'macos') + run: | + echo "FC=gfortran-${{ matrix.version }}" >> $GITHUB_ENV + echo "CC=gcc-${{ matrix.version }}" >> $GITHUB_ENV + + - name: Compile and Install libXC + run: | + git clone https://gitlab.com/libxc/libxc.git + cd libxc/ + git checkout 6.1.0 + FC=gfortran CC=gcc cmake -H. -B ${BUILD_DIR} -DENABLE_FORTRAN=True -DCMAKE_INSTALL_PREFIX=${PWD}/${BUILD_DIR}/${INSTALL_DIR} + cd ${BUILD_DIR} + make -j + make install + cd ../../ + + - name: Set libXC search path + if: contains(matrix.os, 'ubuntu') || contains(matrix.os, 'macos') + run: | + echo "CMAKE_PREFIX_PATH=./libxc/${BUILD_DIR}/${INSTALL_DIR}/" >> $GITHUB_ENV + + - name: Install requirements (pip) + run: | + pip3 install --upgrade pip + pip3 install wheel + pip3 install cmake fypp numpy scipy + + - name: Configure build + run: | + cmake -B ${BUILD_DIR} -DCMAKE_INSTALL_PREFIX=${PWD}/${BUILD_DIR}/${INSTALL_DIR} -DCMAKE_BUILD_TYPE=Debug . + + - name: Build project + run: cmake --build ${BUILD_DIR} + + - name: Run regression tests + run: | + pushd ${BUILD_DIR} + ctest -j 2 --output-on-failure + popd + + - name: Install project + run: | + cmake --install ${BUILD_DIR} + + intel-build: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + fc: [ifort] + cc: [icc] + env: + FC: ${{ matrix.fc }} + CC: ${{ matrix.cc }} + APT_PACKAGES: >- + intel-oneapi-compiler-fortran + intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic + intel-oneapi-mkl + intel-oneapi-mkl-devel + CMAKE_OPTIONS: >- + -DCMAKE_BUILD_TYPE=RelWithDebInfo + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: 3.x + + - name: Add Intel repository + if: contains(matrix.os, 'ubuntu') + run: | + wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB + sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB + rm GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB + echo "deb https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list + sudo apt-get update + + - name: Install Intel oneAPI compiler + if: contains(matrix.os, 'ubuntu') + run: | + sudo apt-get update + sudo apt-get install ${APT_PACKAGES} + source /opt/intel/oneapi/setvars.sh + printenv >> $GITHUB_ENV + + - name: Compile and install libXC + if: contains(matrix.os, 'ubuntu') + run: | + git clone https://gitlab.com/libxc/libxc.git + cd libxc/ + git checkout 6.1.0 + cmake -H. -B ${BUILD_DIR} -DENABLE_FORTRAN=True -DCMAKE_INSTALL_PREFIX=${PWD}/${BUILD_DIR}/${INSTALL_DIR} + cd ${BUILD_DIR} + make -j + make install + cd ../../ + + - name: Set libXC search path + if: contains(matrix.os, 'ubuntu') + run: | + echo "CMAKE_PREFIX_PATH=./libxc/${BUILD_DIR}/${INSTALL_DIR}/" >> $GITHUB_ENV + + - name: Install requirements (pip) + run: | + pip3 install --upgrade pip + pip3 install wheel + pip3 install cmake fypp numpy scipy + + - name: Set extra CMake flags (Linux) + run: | + echo "CMAKE_OPTIONS=${CMAKE_OPTIONS}" >> $GITHUB_ENV + + - name: Configure build + run: | + cmake -B ${BUILD_DIR} -DCMAKE_INSTALL_PREFIX=${PWD}/${BUILD_DIR}/${INSTALL_DIR} . + + - name: Build project + run: cmake --build ${BUILD_DIR} + + - name: Run regression tests + run: | + pushd ${BUILD_DIR} + ctest -j 2 --output-on-failure + popd + + - name: Install project + run: | + cmake --install ${BUILD_DIR} diff --git a/CMakeLists.txt b/CMakeLists.txt index cd25337c..0c43e8eb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,15 @@ cmake_minimum_required(VERSION 3.16) -project(SkProgs VERSION 22.1 LANGUAGES Fortran) +project(SkProgs VERSION 0.2 LANGUAGES Fortran) +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules) +include(SkProgsUtils) + +skprogs_ensure_out_of_source_build() +skprogs_load_build_settings() +skprogs_setup_build_type() +skprogs_load_toolchain_settings() +skprogs_setup_global_compiler_flags() include(GNUInstallDirs) @@ -20,33 +29,61 @@ endif() #################### External dependencies #################### find_package(Libxc QUIET) + +if (Libxc_FOUND AND Libxc_VERSION VERSION_LESS "6.0.0") + message(FATAL_ERROR "SkProgs requires libXC version >=6.0.0 to work properly.") +endif() + if (NOT Libxc_FOUND) message(STATUS "Libxc: No CMake export file found, trying to find with pkg-config") find_package(PkgConfig QUIET) - pkg_check_modules(pc_libxc REQUIRED libxc) - pkg_check_modules(pc_libxcf90 REQUIRED libxcf90) + pkg_check_modules(pc_libxc REQUIRED libxc>=6.0.0) + pkg_check_modules(pc_libxcf03 REQUIRED libxcf03>=6.0.0) add_library(Libxc::xc INTERFACE IMPORTED) target_link_libraries(Libxc::xc INTERFACE ${pc_libxc_LINK_LIBRARIES}) target_include_directories(Libxc::xc INTERFACE ${pc_libxc_INCLUDE_DIRS}) - add_library(Libxc::xcf90 INTERFACE IMPORTED) - target_link_libraries(Libxc::xcf90 INTERFACE ${pc_libxcf90_LINK_LIBRARIES}) - target_include_directories(Libxc::xc INTERFACE ${pc_libxcf90_INCLUDE_DIRS}) -elseif(NOT TARGET Libxc::xcf90) - message(FATAL_ERROR "Libxc CMake export file found, but target Libxc::xcf90 is missing " + add_library(Libxc::xcf03 INTERFACE IMPORTED) + target_link_libraries(Libxc::xcf03 INTERFACE ${pc_libxcf03_LINK_LIBRARIES}) + target_include_directories(Libxc::xc INTERFACE ${pc_libxcf03_INCLUDE_DIRS}) +elseif(NOT TARGET Libxc::xcf03) + message(FATAL_ERROR "Libxc CMake export file found, but target Libxc::xcf03 is missing " "(maybe Libxc was built without the -DENABLE_FORTRAN=True switch?") endif() +find_package(CustomBlas REQUIRED) +find_package(CustomLapack REQUIRED) + find_package(Python3 COMPONENTS Interpreter REQUIRED) set(PYTHON_INTERPRETER "${Python3_EXECUTABLE}") set(PYTHON_VERSION_MAJOR_MINOR "${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}") + +#################### Preprocessor details ##################### + +set(FYPP "${PROJECT_SOURCE_DIR}/external/fypp/bin/fypp" CACHE FILEPATH "Fypp preprocessor") +skprogs_add_fypp_defines(FYPP_FLAGS) + +set(FYPP_CONFIG_FLAGS "${FYPP_FLAGS}") +# Make sure, the line-marker option is not set +list(REMOVE_ITEM FYPP_CONFIG_FLAGS "-n") +set(FYPP_BUILD_FLAGS "${FYPP_FLAGS}" "$,-DDEBUG=1,-DDEBUG=0>") + +set(PYTHON_INTERPRETER "python3" CACHE STRING + "Python interpreter to use for installing and test python components") + #################### Add source components #################### -add_subdirectory(common/lib) +add_subdirectory(common) add_subdirectory(slateratom) add_subdirectory(sktwocnt) add_subdirectory(sktools) -#################### Extra install #################### +########################### Testing ########################### + +string(CONFIGURE "${TEST_RUNNER_TEMPLATE}" TEST_RUNNER) +enable_testing() +add_subdirectory(test) + +######################## Extra install ######################## configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/utils/export/skprogs-activate.sh.in @@ -56,4 +93,3 @@ configure_file( install( PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/skprogs-activate.sh" DESTINATION "${CMAKE_INSTALL_BINDIR}/") - diff --git a/README.rst b/README.rst index acc801a5..39c18294 100644 --- a/README.rst +++ b/README.rst @@ -14,26 +14,29 @@ risk! Installing ========== +|build status| + Prerequisites ------------- -* Fortran 2003 compiler +* Fortran 2003 compliant compiler * CMake (>= 3.16) -* Python3 +* Python3 (>= 3.2) + +* LAPACK/BLAS libraries (or compatible equivalents) + +* libXC library with f03 interface (version >=6.0.0) -* LibXC library with f90 interface (tested with version 4.3.4, version 5.x does - not work due to inteface changes in LibXC) - Building the code ----------------- Follow the usual CMake build workflow: -* Configure the project, specify your compiler (e.g. ``gfortran``), the install - location (e.g. ``$HOME/opt/skprogs``) and the build directory +* Configure the project, specify your compilers (e.g. ``gfortran``), + the install location (e.g. ``$HOME/opt/skprogs``) and the build directory (e.g. ``_build``):: FC=gfortran cmake -DCMAKE_INSTALL_PREFIX=$HOME/opt/skprogs -B _build . @@ -44,18 +47,54 @@ Follow the usual CMake build workflow: with autotools) in order to guide the library search:: CMAKE_PREFIX_PATH=YOUR_LIBXC_INSTALL_FOLDER FC=gfortan cmake [...] - + PKG_CONFIG_PATH=FOLDER_WITH_LIBXC_PC_FILES FC=gfortran cmake [...] * If the configuration was successful, build the code :: cmake --build _build -- -j -* If the build was successful, install the code :: +* After successful build, you should test the code by running :: + + pushd _build + ctest -j + popd + +* If the tests were successful, install the package via :: cmake --install _build +Advanced build configuration +============================ + +Controlling the toolchain file selection +---------------------------------------- + +You can override the toolchain file, and select a different provided case, +passing the ``-DTOOLCHAIN`` option with the relevant name, e.g.:: + + -DTOOLCHAIN=gnu + +or :: + + -DTOOLCHAIN=intel + +or by setting the toolchain name in the ``SKPROGS_TOOLCHAIN`` environment +variable. If you want to load an external toolchain file instead of one from the +source tree, you can specify the file path with the ``-DTOOLCHAIN_FILE`` option +:: + + -DTOOLCHAIN_FILE=/some/path/myintel.cmake + +or with the ``SKPROGS_TOOLCHAIN_FILE`` environment variable. + +Similarly, you can also use an alternative build config file instead of +`config.cmake` in the source tree by specifying it with the +``-DBUILD_CONFIG_FILE`` option or by defining the ``SKPROGS_BUILD_CONFIG_FILE`` +environment variable. + + Generating SK-files =================== @@ -94,3 +133,7 @@ General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. See the files `COPYING `_ and `COPYING.LESSER `_ for the detailed licensing conditions. + + +.. |build status| image:: https://img.shields.io/github/actions/workflow/status/dftbplus/skprogs/build.yml + :target: https://github.com/dftbplus/skprogs/actions/ diff --git a/cmake/Modules/CustomLibraryFinder.cmake b/cmake/Modules/CustomLibraryFinder.cmake new file mode 100644 index 00000000..e50081e8 --- /dev/null +++ b/cmake/Modules/CustomLibraryFinder.cmake @@ -0,0 +1,31 @@ +# Finds customized libraries. +# +# The customized list of libraries can contain library names, file names or linker options. +# Libraries are searched for by the find_library() function, file names are checked on existence and +# linker options (names starting with "-") are added unchanged. +# +# libs [in]: List of libraries to find. +# libdirs [in]: Directories to look up for the libraries. +# find_quietly [in]: Whether the libraries should be found quietly. +# libs_found [out]: Contains the list of the detected libraries with their full path. If any of +# the libraries/files could not be found, the corresponding entry is replaced by +# "_libpath-NOT_FOUND". +# +function(find_custom_libraries libs libdirs find_quietly libs_found) + + set(_libs) + foreach(_lib IN LISTS libs) + if(_lib MATCHES "^[ ]*-.*" OR EXISTS "${_lib}") + list(APPEND _libs ${_lib}) + else() + find_library(_libpath ${_lib} HINTS ${libdirs}) + list(APPEND _libs ${_libpath}) + if(NOT _libpath AND NOT find_quietly) + message(WARNING "Could not find library '${_lib}' (path hints '${libdirs}'") + endif() + unset(_libpath CACHE) + endif() + endforeach() + set(${libs_found} "${_libs}" PARENT_SCOPE) + +endfunction() diff --git a/cmake/Modules/FindCustomBlas.cmake b/cmake/Modules/FindCustomBlas.cmake new file mode 100644 index 00000000..6ec8e9c2 --- /dev/null +++ b/cmake/Modules/FindCustomBlas.cmake @@ -0,0 +1,126 @@ +# Distributed under the OSI-approved BSD 2-Clause License. +# +# Copyright (C) 2021 DFTB+ developers group +# + +#[=======================================================================[.rst: +FindCustomBlas +---------------- + +Finds the BLAS library + +This is a wrapper around CMakes FindBLAS module with the additional +possibility to customize the library name manually. In latter case the module will +check the existence of those libraries and stop if they are not found. + +Note: The module is named FindBlas (and not FindBLAS) to avoid name +collision with CMakes built-in FindBLAS module. + + +Imported Targets +^^^^^^^^^^^^^^^^ + +This module provides the following imported target, if found: + +``BLAS::BLAS`` + The BLAS library + + +Result Variables +^^^^^^^^^^^^^^^^ + +This module will define the following variable: + +``BLAS_FOUND`` + True if the system has the BLAS library + + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may be set to influence the library detection: + +``BLAS_DETECTION`` + Whether BLAS libraries should be detected (default: True). If set to False, + the settings in ``BLAS_LIBRARY`` will be used without any further checks. + +``BLAS_LIBRARY`` + Customized BLAS library/libraries to use (instead of autodetected ones). If + no BLAS library is required (e.g. the linker automatically links it) set + ``BLAS_LIBRARY="NONE"``. If not set or empty, the built-in BLAS finder + (the findBLAS module) will be invoked. Otherwise, the listed libraries + will be checked for existence (unless disabled in ``BLAS_DETECTION``) and + the variable is overwritten to contain the libraries with their with full + path. + +``BLAS_LIBRARY_DIR`` + Directories which should be looked up in order to find the customized libraries. + +``BLAS_LINKER_FLAG`` + Flags to use when linking BLAS + +Additionally, the cache variables of the built-in FindBLAS modules may used to +influence the BLAS detection if the built-in module is invoked. + +#]=======================================================================] + +include(FindPackageHandleStandardArgs) +include(CustomLibraryFinder) + +if(TARGET BLAS::BLAS) + + set(CUSTOMBLAS_FOUND True) + set(CustomBlas_FOUND True) + set(BLAS_FOUND True) + set(Blas_FOUND True) + +else() + + option(BLAS_DETECTION "Whether BLAS library should be detected" TRUE) + + if(BLAS_DETECTION) + # BLAS has either not been found yet or it was found by an older built-in findBLAS module. + # which does not provide the imported target BLAS::BLAS + + if("${BLAS_LIBRARY}" STREQUAL "") + + # No user customized BLAS library, try built-in finder + if(NOT BLAS_FOUND) + find_package(BLAS) + endif() + set(BLAS_LIBRARY "${BLAS_LIBRARIES}" CACHE STRING "BLAS library to link" FORCE) + set(BLAS_LINKER_FLAG "${BLAS_LINKER_FLAGS}" CACHE STRING + "Linker flags to use when linking BLAS" FORCE) + + elseif(NOT "${BLAS_LIBRARY}" STREQUAL "NONE") + + # BLAS explicitely set by the user, search for those libraries + find_custom_libraries("${BLAS_LIBRARY}" "${BLAS_LIBRARY_DIR}" + "${CustomBlas_FIND_QUIETLY}" _libs) + set(BLAS_LIBRARY "${_libs}" CACHE STRING "List of BLAS libraries to link" FORCE) + unset(_libs) + + endif() + + set(BLAS_DETECTION False CACHE BOOL "Whether BLAS libraries should be detected" FORCE) + + endif() + + find_package_handle_standard_args(CustomBlas REQUIRED_VARS BLAS_LIBRARY) + + set(BLAS_FOUND ${CUSTOMBLAS_FOUND}) + set(Blas_FOUND ${CUSTOMBLAS_FOUND}) + + if (BLAS_FOUND AND NOT TARGET BLAS::BLAS) + add_library(BLAS::BLAS INTERFACE IMPORTED) + if(NOT "${BLAS_LIBRARY}" STREQUAL "NONE") + target_link_libraries(BLAS::BLAS INTERFACE "${BLAS_LIBRARY}") + endif() + if(NOT "${BLAS_LINKER_FLAG}" STREQUAL "") + target_link_options(BLAS::BLAS INTERFACE "${BLAS_LINKER_FLAG}") + endif() + endif() + + mark_as_advanced(BLAS_DETECTION BLAS_LIBRARY BLAS_LIBRARY_DIR BLAS_LINKER_FLAG) + +endif() diff --git a/cmake/Modules/FindCustomLapack.cmake b/cmake/Modules/FindCustomLapack.cmake new file mode 100644 index 00000000..7486c0a6 --- /dev/null +++ b/cmake/Modules/FindCustomLapack.cmake @@ -0,0 +1,129 @@ +# Distributed under the OSI-approved BSD 2-Clause License. +# +# Copyright (C) 2021 DFTB+ developers group +# + +#[=======================================================================[.rst: +FindCustomLapack +---------------- + +Finds the LAPACK library + +This is a wrapper around CMakes FindLAPACK module with the additional +possibility to customize the library name manually. In latter case the module will +check the existence of those libraries and stop if they are not found. + +Note: The module is named FindLapack (and not FindLAPACK) to avoid name +collision with CMakes built-in FindLAPACK module. + + +Imported Targets +^^^^^^^^^^^^^^^^ + +This module provides the following imported target, if found: + +``LAPACK::LAPACK`` + The LAPACK library + + +Result Variables +^^^^^^^^^^^^^^^^ + +This module will define the following variable: + +``LAPACK_FOUND`` + True if the system has the LAPACK library + + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may be set to influence the library detection: + +``LAPACK_DETECTION`` + Whether LAPACK libraries should be detected (default: True). If set to False, + the settings in ``LAPACK_LIBRARY`` will be used without any further checks. + +``LAPACK_LIBRARY`` + Customized LAPACK library/libraries to use (instead of autodetected ones). If + no LAPACK library is required (e.g. the linker automatically links it) set + ``LAPACK_LIBRARY="NONE"``. If not set or empty, the built-in LAPACK finder + (the findLAPACK module) will be invoked. Otherwise, the listed libraries + will be checked for existence (unless disabled in ``LAPACK_DETECTION``) and + the variable is overwritten to contain the libraries with their with full + path. + +``LAPACK_LIBRARY_DIR`` + Directories which should be looked up in order to find the customized libraries. + +``LAPACK_LINKER_FLAG`` + Flags to use when linking LAPACK + +Additionally, the cache variables of the built-in FindLAPACK modules may used to +influence the LAPACK detection if the built-in module is invoked. + +#]=======================================================================] + +include(FindPackageHandleStandardArgs) +include(CustomLibraryFinder) + +if(TARGET LAPACK::LAPACK) + + set(CUSTOMLAPACK_FOUND True) + set(CustomLapack_FOUND True) + set(LAPACK_FOUND True) + set(Lapack_FOUND True) + +else() + + option(LAPACK_DETECTION "Whether LAPACK library should be detected" TRUE) + + if(LAPACK_DETECTION) + # LAPACK has either not been found yet or it was found by an older built-in findLAPACK module. + # which does not provide the imported target LAPACK::LAPACK + + if("${LAPACK_LIBRARY}" STREQUAL "") + + # No user customized LAPACK library, try built-in finder + if(NOT LAPACK_FOUND) + find_package(LAPACK) + endif() + set(LAPACK_LIBRARY "${LAPACK_LIBRARIES}" CACHE STRING "LAPACK library to link" FORCE) + set(LAPACK_LINKER_FLAG "${LAPACK_LINKER_FLAGS}" CACHE STRING + "Linker flags to use when linking LAPACK" FORCE) + + elseif(NOT "${LAPACK_LIBRARY}" STREQUAL "NONE") + + # LAPACK explicitely set by the user, search for those libraries + find_custom_libraries("${LAPACK_LIBRARY}" "${LAPACK_LIBRARY_DIR}" + "${CustomLapack_FIND_QUIETLY}" _libs) + set(LAPACK_LIBRARY "${_libs}" CACHE STRING "List of LAPACK libraries to link" FORCE) + unset(_libs) + + endif() + + set(LAPACK_DETECTION False CACHE BOOL "Whether LAPACK libraries should be detected" FORCE) + + endif() + + find_package_handle_standard_args(CustomLapack REQUIRED_VARS LAPACK_LIBRARY) + + set(LAPACK_FOUND ${CUSTOMLAPACK_FOUND}) + set(Lapack_FOUND ${CUSTOMLAPACK_FOUND}) + + if (LAPACK_FOUND AND NOT TARGET LAPACK::LAPACK) + add_library(LAPACK::LAPACK INTERFACE IMPORTED) + if(NOT "${LAPACK_LIBRARY}" STREQUAL "NONE") + target_link_libraries(LAPACK::LAPACK INTERFACE "${LAPACK_LIBRARY}") + endif() + if(NOT "${LAPACK_LINKER_FLAG}" STREQUAL "") + target_link_options(LAPACK::LAPACK INTERFACE "${LAPACK_LINKER_FLAG}") + endif() + if(TARGET BLAS::BLAS) + target_link_libraries(LAPACK::LAPACK INTERFACE BLAS::BLAS) + endif() + endif() + + mark_as_advanced(LAPACK_DETECTION LAPACK_LIBRARY LAPACK_LIBRARY_DIR LAPACK_LINKER_FLAG) + +endif() diff --git a/cmake/SkProgsUtils.cmake b/cmake/SkProgsUtils.cmake new file mode 100644 index 00000000..dd57ebbc --- /dev/null +++ b/cmake/SkProgsUtils.cmake @@ -0,0 +1,217 @@ +include(FetchContent) + +# Replaces the extension of a given file +# +# Args: +# oldext [in]: Old extension +# newext [in]: New extension +# fname [in]: File name in which extension should be replaced. +# newfname [out]: File name after extension replacement. +# +function(skprogs_replace_extension oldext newext fname newfname) + + string(REGEX REPLACE "\\.${oldext}$" ".${newext}" _newfname ${fname}) + set(${newfname} ${_newfname} PARENT_SCOPE) + +endfunction() + + +# Registers files for preprocessing +# +# Args: +# preproc [in]: Preprocessor to use +# preprocopts [in]: Preprocessor command line arguments (but not in/out file) +# oldext [in]: Extension of the unpreprocessed files. +# newext [in]: Extension of the preprocessed files. +# oldfiles [in]: List of unpreprocessed file names. +# newfiles [out]: List of preprocessed file names. +# +function(skprogs_preprocess preproc preprocopts oldext newext oldfiles newfiles) + + set(_newfiles) + foreach(oldfile IN LISTS oldfiles) + skprogs_replace_extension(${oldext} ${newext} ${oldfile} newfile) + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${newfile} + COMMAND ${preproc} ${preprocopts} ${CMAKE_CURRENT_SOURCE_DIR}/${oldfile} ${CMAKE_CURRENT_BINARY_DIR}/${newfile} + MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/${oldfile}) + list(APPEND _newfiles ${CMAKE_CURRENT_BINARY_DIR}/${newfile}) + endforeach() + set(${newfiles} ${_newfiles} PARENT_SCOPE) + +endfunction() + + +# Build -D command line arguments for Fypp preprocessor based on current configuration +# +# Args: +# fyppflags [inout]: Current Fypp flags on enter, with -D options extended flags on exit. +# +function (skprogs_add_fypp_defines fyppflags) + + set(_fyppflags "${${fyppflags}}") + set(${fyppflags} ${_fyppflags} PARENT_SCOPE) + +endfunction() + +# Stops the code if the source and the build folders are identical. +# +function(skprogs_ensure_out_of_source_build) + + get_filename_component(srcdir "${CMAKE_CURRENT_SOURCE_DIR}" REALPATH) + get_filename_component(bindir "${CMAKE_CURRENT_BINARY_DIR}" REALPATH) + + if("${srcdir}" STREQUAL "${bindir}") + message(FATAL_ERROR + "It is not allowed to configure and build SkProgs from its source folder. Please, create a \ +separate build directory and invoke CMake from that directory. See the INSTALL.rst file for \ +detailed build instructions.") + endif() + +endfunction() + + +# Makes sure, that a compiler has been already defined for a given language +# +# Args: +# language [in]: The language to look at. +# +function(skprogs_ensure_compiler_def language) + + if(NOT DEFINED CMAKE_${language}_COMPILER) + message(FATAL_ERROR "Undefined ${language} compiler. The automatic detection of compilers, \ +flags and libraries is disabled. You must provide configuration parameters explicitely (e.g. in a \ +toolchain file). See the INSTALL.rst file for detailed instructions.") + endif() + +endfunction() + + +# Loads global build settings (either from config.cmake or from user defined file) +# +macro (skprogs_load_build_settings) + + if(NOT DEFINED BUILD_CONFIG_FILE) + if(DEFINED ENV{SKPROGS_BUILD_CONFIG_FILE} + AND NOT "$ENV{SKPROGS_BUILD_CONFIG_FILE}" STREQUAL "") + set(BUILD_CONFIG_FILE "$ENV{SKPROGS_BUILD_CONFIG_FILE}") + else() + set(BUILD_CONFIG_FILE "${CMAKE_CURRENT_SOURCE_DIR}/config.cmake") + endif() + endif() + message(STATUS "Reading global build config file: ${BUILD_CONFIG_FILE}") + include(${BUILD_CONFIG_FILE}) + +endmacro() + + +# Sets up the build type. +function (skprogs_setup_build_type) + + set(default_build_type "RelWithDebInfo") + get_property(_multiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) + if(_multiConfig) + set(CMAKE_CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo;Coverage") + message(STATUS "Build type: Multi-Config (build type selected at the build step)") + else() + if(NOT CMAKE_BUILD_TYPE) + message(STATUS "Build type: ${default_build_type} (default single-config)") + set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING "Build type" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY HELPSTRING "Choose the type of build") + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Release" "RelWithDebInfo" "Coverage") + else() + message(STATUS "Build type: ${CMAKE_BUILD_TYPE} (manually selected single-config)") + endif() + endif() + +endfunction() + + +# Tries to guess which toolchain to load based on the environment. +# +# Args: +# toolchain [out]: Name of the selected toolchain or undefined if it could not be selected +# +function(skprogs_guess_toolchain toolchain) + + if("${CMAKE_Fortran_COMPILER_ID}" STREQUAL "GNU") + set(_toolchain "gnu") + elseif("${CMAKE_Fortran_COMPILER_ID}" STREQUAL "Intel") + set(_toolchain "intel") + elseif("${CMAKE_Fortran_COMPILER_ID}" STREQUAL "NAG") + set(_toolchain "nag") + else() + set(_toolchain "generic") + endif() + + set(${toolchain} "${_toolchain}" PARENT_SCOPE) + +endfunction() + + +# Loads toolchain settings. +# +macro(skprogs_load_toolchain_settings) + + if(NOT DEFINED TOOLCHAIN_FILE AND NOT "$ENV{SKPROGS_TOOLCHAIN_FILE}" STREQUAL "") + set(TOOLCHAIN_FILE "$ENV{SKPROGS_TOOLCHAIN_FILE}") + endif() + if(NOT DEFINED TOOLCHAIN AND NOT "$ENV{SKPROGS_TOOLCHAIN}" STREQUAL "") + set(TOOLCHAIN "$ENV{SKPROGS_TOOLCHAIN}") + endif() + if(NOT DEFINED TOOLCHAIN_FILE OR TOOLCHAIN_FILE STREQUAL "") + if(NOT DEFINED TOOLCHAIN OR TOOLCHAIN STREQUAL "") + skprogs_guess_toolchain(TOOLCHAIN) + endif() + set(TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/sys/${TOOLCHAIN}.cmake) + endif() + message(STATUS "Reading build environment specific toolchain file: ${TOOLCHAIN_FILE}") + include(${TOOLCHAIN_FILE}) +endmacro() + + +# Sets up the global compiler flags +# +macro(skprogs_setup_global_compiler_flags) + + if(CMAKE_BUILD_TYPE) + set(_buildtypes ${CMAKE_BUILD_TYPE}) + else() + set(_buildtypes ${CMAKE_CONFIGURATION_TYPES}) + endif() + foreach(_buildtype IN LISTS _buildtypes) + foreach (lang IN ITEMS Fortran) + string(TOUPPER "${_buildtype}" _buildtype_upper) + set(CMAKE_${lang}_FLAGS " ${${lang}_FLAGS}") + set(CMAKE_${lang}_FLAGS_${_buildtype_upper} " ${${lang}_FLAGS_${_buildtype_upper}}") + message(STATUS "Flags for ${lang}-compiler (build type: ${_buildtype}): " + "${CMAKE_${lang}_FLAGS} ${CMAKE_${lang}_FLAGS_${_buildtype_upper}}") + endforeach() + endforeach() + unset(_buildtypes) + unset(_buildtype) + unset(_buildtype_upper) +endmacro() + + +# Checks whether the current compiler fullfills minimal version requirements. +# +# +# Arguments: +# lang [in]: Language for which the compiler should be checked (e.g. Fortran, C, CXX) +# compiler_versions [in]: List with alternating compiler ids and minimal version numbers, e.g. +# "Intel;19.0;GNU;9.0". If the compiler is amoung the listed ones and its version number is +# less than the specified one, a fatal error message will be issued. Otherwise the function +# returns silently. +# +function (skprogs_check_minimal_compiler_version lang compiler_versions) + while(compiler_versions) + list(POP_FRONT compiler_versions compiler version) + if("${CMAKE_${lang}_COMPILER_ID}" STREQUAL "${compiler}" + AND CMAKE_${lang}_COMPILER_VERSION VERSION_LESS "${version}") + message(FATAL_ERROR "${compiler} ${lang} compiler is too old " + "(found \"${CMAKE_${lang}_COMPILER_VERSION}\", required >= \"${version}\")") + endif() + endwhile() +endfunction() diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt new file mode 100644 index 00000000..3ea7a419 --- /dev/null +++ b/common/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(lib) diff --git a/common/include/LICENSE b/common/include/LICENSE new file mode 100644 index 00000000..39a18bb4 --- /dev/null +++ b/common/include/LICENSE @@ -0,0 +1,14 @@ +DFTB+: general package for performing fast atomistic simulations +Copyright (C) 2006 - 2021 DFTB+ developers group + +This program is free software: you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) any +later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program. If not, see . diff --git a/common/include/common.fypp b/common/include/common.fypp new file mode 100644 index 00000000..917f43d9 --- /dev/null +++ b/common/include/common.fypp @@ -0,0 +1,68 @@ +#!-------------------------------------------------------------------------------------------------! +#! DFTB+: general package for performing fast atomistic simulations ! +#! Copyright (C) 2006 - 2020 DFTB+ developers group ! +#! ! +#! See the LICENSE file for terms of usage and distribution. ! +#!-------------------------------------------------------------------------------------------------! +#:mute +#:if not defined('_COMMON_FYPP_') +#:set _COMMON_FYPP_ + +#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +#! Default values for all preprocessor variables +#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +#:if not defined('DEBUG') + #:set DEBUG = 0 +#:endif + +#:set WITH_ASSERT = defined('WITH_ASSERT') or DEBUG > 0 +#:set WITH_MPI = defined('WITH_MPI') + +#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +#! ASSERT and DEBUG related macros +#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +#! Check a condition if WITH_ASSERT is True and call assertError if condition is False. +#:def ASSERT(cond) + #:if WITH_ASSERT + if (.not. (${cond}$)) then + call assertError("${_FILE_}$", ${_LINE_}$) + end if + #:endif +#:enddef ASSERT + + +#! Insert code if DEBUG level is greater than zero. +#:def DEBUG_CODE(code) + #:if DEBUG > 0 + $:code + #:endif +#:enddef DEBUG_CODE + +#:endif + + +#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +#! Misc macros +#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +#! Gives a Fortran logical values corresponding to a bool expr. +#:def FORTRAN_LOGICAL(expr) +#{if expr}#.true.#{else}#.false.#{endif}# +#:enddef FORTRAN_LOGICAL + +#! Returns the suffix for a dummy argument for a given rank +#:def FORTRAN_ARG_DIM_SUFFIX(rank) +#{if rank == 0}##{else}#(${":" + ",:" * (rank - 1)}$)#{endif}# +#:enddef + + +#! Macro for automated deallocations +#:def SAFE_DEALLOC(*args) + #:for arg in args + if (allocated(${arg}$)) deallocate(${arg}$) + #:endfor +#:enddef + +#:endmute diff --git a/common/include/error.fypp b/common/include/error.fypp new file mode 100644 index 00000000..b63680a8 --- /dev/null +++ b/common/include/error.fypp @@ -0,0 +1,62 @@ +#!-------------------------------------------------------------------------------------------------! +#! DFTB+: general package for performing fast atomistic simulations ! +#! Copyright (C) 2006 - 2020 DFTB+ developers group ! +#! ! +#! See the LICENSE file for terms of usage and distribution. ! +#!-------------------------------------------------------------------------------------------------! + +#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +#! Error string handling wrappers for returns from routinese +#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + +#! Macro to return an error flag if return variable available or throw +#! an error and shut down otherwise +#:def ERROR_HANDLING(errVar, errNumber, msg) + block + use dftbp_accuracy, only : lc + use dftbp_message + !> Error handling string + character(lc) :: stringTmp + + write(stringTmp,"(A)")${msg}$ + if (present(${errVar}$)) then + ${errVar}$ = ${errNumber}$ + call warning(stringTmp) + return + else + call error(stringTmp) + end if + end block +#:enddef ERROR_HANDLING + + +#! Macro to return an error flag if return variable available or throw +#! an error and shut down otherwise +#:def FORMATTED_ERROR_HANDLING(errVar, errNumber, formating, *variables) + block + use dftbp_accuracy, only : lc + use dftbp_message + !> Error handling string + character(lc) :: stringTmp + + write(stringTmp,${formating}$) ${ ",".join(variables) }$ + if (present(${errVar}$)) then + ${errVar}$ = ${errNumber}$ + call warning(stringTmp) + return + else + call error(stringTmp) + end if + end block +#:enddef FORMATTED_ERROR_HANDLING + + +#! Propagation of error handling, for now it just returns when in error +#:def HANDLE_ERROR(errVar) + if (present(${errVar}$)) then + if (${errVar}$ /= 0) then + return + end if + end if +#:enddef diff --git a/common/lib/CMakeLists.txt b/common/lib/CMakeLists.txt index 16577963..931c9f05 100644 --- a/common/lib/CMakeLists.txt +++ b/common/lib/CMakeLists.txt @@ -1,11 +1,34 @@ +file(TO_NATIVE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../" projectdir) + +# +# General options for all targets +# +set(fypp_flags ${FYPP_BUILD_FLAGS}) +list(APPEND fypp_flags -I${CMAKE_CURRENT_SOURCE_DIR}/../include -DRELEASE="'${RELEASE}'") + set(sources-f90 accuracy.F90 + anglib.F90 constants.F90 + coordtrans.F90 + eigensolver.F90 + fdiff.F90 fifo.F90 + fifobase.F90 fifo_real1.F90 fifo_real2.F90 - fifobase.F90 - taggedout.F90) + gridgenerator.F90 + interpolation.F90 + lebedev_laikov.F90 + lebedev_laikov_f77.f + message.F90 + partition.F90 + poisson.F90 + quadrature.F90 + sphericalharmonics.F90 + splines.F90 + taggedout.F90 + utils.F90) add_library(skprogs-common ${sources-f90}) diff --git a/common/lib/accuracy.F90 b/common/lib/accuracy.F90 index e20221ac..19ce9a94 100644 --- a/common/lib/accuracy.F90 +++ b/common/lib/accuracy.F90 @@ -8,7 +8,7 @@ module common_accuracy implicit none private - public :: dp, cp, sc, mc, lc + public :: dp, cp, r8, r4, rdp, rsp, sc, mc, lc !> precision of the real data type integer, parameter :: dp = real64 @@ -16,6 +16,22 @@ module common_accuracy !> precision of the complex data type integer, parameter :: cp = dp + !> parameter for real with 8 byte + !! (use those only for interfacing F77 routines) + integer, parameter :: r8 = kind(1.0d0) + + !> parameter for real with 4 byte + !! (use those only for interfacing F77 routines) + integer, parameter :: r4 = kind(1.0) + + !> parameter for real with 8 byte + !! (use those only for interfacing F77 routines) + integer, parameter :: rdp = kind(1.0d0) + + !> parameter for real with 4 byte + !! (use those only for interfacing F77 routines) + integer, parameter :: rsp = kind(1.0) + !> length of a short string integer, parameter :: sc = 10 diff --git a/common/lib/anglib.F90 b/common/lib/anglib.F90 new file mode 100755 index 00000000..57f4e30f --- /dev/null +++ b/common/lib/anglib.F90 @@ -0,0 +1,486 @@ +!> Module that contains subroutines for the calculation of Gaunt coefficients for real and complex +!! spherical harmonics. +module common_anglib + + use common_accuracy, only : dp + + implicit none + private + + public :: initGaunt, freeGaunt, realGaunt + + !> true, if Gaunt is initialized + logical :: tGauntInit_ = .false. + + !> maximum 1st dimension of storeGaunt_ + integer :: iGauMax1_ + + !> maximum 2nd dimension of storeGaunt_ + integer :: iGauMax2_ + + !> array that stores Gaunts + real(dp), allocatable :: storeGaunt_(:,:) + + !> transformation complx -> real Gaunt + complex(dp), allocatable :: uMat_(:,:) + + +contains + + !> Initializes the calculation of Gaunt coefficients, precalculates non-zero values and stores + !! these in array storeGaunt_. The transformation matrix from complex to real spherical harmonics + !! is set up. + !! + !! @desc implements the index function approach of Pinchon et al., IJQC 107, pp. 2186 (2007) + !! @note allows computation of Gaunts with angular momenta up to lMax, lMax, 2lMax in any order + subroutine initGaunt(lMax) + + !> maximum of angular momenta of the two STOs to be fourier transformed + integer, intent(in) :: lMax + + !! 1st and 2nd index of storeGaunt_ + integer :: i1, i2 + + !! angular momentum quantum numbers + integer :: j1, j2, j3 + + !! magnetic quantum numbers + integer :: m2, m3 + + !! upper boundary for m2 + integer :: bMax + + !! index of transformation matrix uMat_ + integer :: jj + + !! 1/sqrt(2) + real(dp), parameter :: rs2 = 0.7071067811865475_dp + + if (tGauntInit_) then + print *, 'Gaunt already initialized' + stop + else + tGauntInit_ = .true. + write(*, '(A,I4)') "==> Initializing anglib: lMax = ", lMax + end if + + call indexGaunt(2 * lMax, lMax, lMax, lMax, lMax, iGauMax1_, iGauMax2_) + + allocate(storeGaunt_(iGauMax1_,iGauMax2_)) + storeGaunt_(:,:) = 0.0_dp + + do j3 = 0, lMax + do j2 = j3, lMax + do j1 = j2, 2 * lMax + if (mod(j1 + j2 + j3, 2) /= 0 .or. j1 > j2 + j3 .or. j2 > j1 + j3 .or. j3 > j1 + j2) cycle + do m3 = 0, j3 + if (j1 == j2) then + bMax = - (m3 + 1) / 2 + elseif (m3 == 0) then + bMax = 0 + elseif (j2 == j3) then + bMax = min(j1 - m3, m3) + else + bMax = min(j1 - m3, j2) + end if + do m2 = - j2, bMax + call indexGaunt(j1, j2, j3, m2, m3, i1, i2) + !! phase definition of Pinchon differs from usual one + !! g_Pinchon(j1, m1, j2, m2, j3, m3) = - 1^m3 g(j1, m1, j2, m2, j3, - m3) + if (mod(m3, 2) == 0) then + storeGaunt_(i1, i2) = gaunt(j1, - m2 - m3, j2, m2, j3, - m3) + else + storeGaunt_(i1, i2) = - gaunt(j1, - m2 - m3, j2, m2, j3, - m3) + end if + end do + end do + end do + end do + end do + + !! Setup of matrix for the transformation of gaunt coefficients based on complex spherical + !! harmonics to real harmonics, see realGaunt for details. + allocate(uMat_(-2*lMax:2*lMax, -2*lMax:2*lMax)) + uMat_(:,:) = (0.0_dp, 0.0_dp) + uMat_(0, 0) = (1.0_dp, 0.0_dp) + + do jj = 1, 2 * lMax + uMat_( jj, jj) = (1.0_dp, 0.0_dp) * rs2 + uMat_( jj, -jj) = (1.0_dp, 0.0_dp) * rs2 * real((-1)**jj, dp) + uMat_(-jj, jj) = (0.0_dp, 1.0_dp) * rs2 * (- 1.0_dp) + uMat_(-jj, -jj) = (0.0_dp, 1.0_dp) * rs2 * real((-1)**jj, dp) + end do + + end subroutine initGaunt + + + !> Frees an initialized Gaunt. + subroutine freeGaunt() + + if (tGauntInit_) then + deallocate(storeGaunt_) + deallocate(uMat_) + tGauntInit_ = .false. + else + write(*,*) 'freeGaunt: Gaunt not yet initialized!' + stop + end if + + end subroutine freeGaunt + + + !> Implements the index function of Pinchon et al., IJQC 107, pp. 2186 (2007). + !! + !! @note Restrictions exist for the allowed parameter ranges, see Pinchon (e.g. j1 >= j2 >= j3). + !! These are not checked by the code! + subroutine indexGaunt(j1, j2, j3, m2, m3, ind1, ind2) + + !> angular momentum quantum numbers + integer, intent(in) :: j1, j2, j3 + + !> magnetic quantum numbers + integer, intent(in) :: m2, m3 + + !> corresponding first index in storeGaunt_(:,:) + integer, intent(out) :: ind1 + + !> corresponding second index in storeGaunt_(:,:) + integer, intent(out) :: ind2 + + if (mod(j1, 2) == 0) then + ind1 = (j1 * (3 * j1**3 + (32 * j1**2 - (12 * j1 + 32)))& + & - 48 * (j2 * (j1 + 1) * (j1 - j2 - 2) - j3 * j3)) / 192 + m3 + 1 + else + ind1 = (j1 * (3 * j1**3 + (32 * j1**2 + (18 * j1 + 64)))& + & - 48 * (j1 * j2 * (j1 - j2 - 1) - j3 * j3) + 219) / 192 + m3 + end if + + ind2 = j2 + m2 + 1 + + end subroutine indexGaunt + + + !> Retrieves Gaunt coefficients \int Y_l1m1 Y_l2m2 Y_l3m3 dOmega for complex spherical + !! harmonics Y_lm from precomputed array storeGaunt_ using the index function indexGaunt. + !! + !! @note Requires initialization with previous call to initGaunt(lMax). + function getGaunt(j1, m1, j2, m2, j3, m3) result(res) + + !> angular momentum quantum numbers + integer, intent(in) :: j1, j2, j3 + + !> magnetic quantum numbers + integer, intent(in) :: m1, m2, m3 + + !! angular momentum quantum numbers in standard order + integer :: l1, l2, l3 + + !! magnetic quantum numbers in standard order + integer :: n1, n2, n3 + + !! 1st and 2nd index in storeGaunt_(:,:) + integer :: ind1, ind2 + + !! resulting Gaunt coefficient + real(dp) :: res + + if (.not. tGauntInit_) then + print *, 'getGaunt: Gaunt not yet initialized!' + stop + end if + + if ((mod(j1 + j2 + j3, 2) /= 0) .or. (m1+m2-m3 /= 0) .or. (j1 > j2+j3) .or. (j2 > j1+j3)& + & .or. (j3 > j1+j2) .or. (abs(m1) > j1) .or. (abs(m2) > j2) .or. (abs(m3) > j3)) then + res = 0.0_dp + return + end if + + l1 = j1 + l2 = j2 + l3 = j3 + n1 = m1 + n2 = m2 + n3 = - m3 + + !! bring quantum numbers in standard order, with m3 > 0 + if (l2 == max(l1, l2, l3)) then + call iSwap(l1, l2) + call iSwap(n1, n2) + elseif (l3 > l1) then + call iSwap(l1, l3) + call iSwap(n1, n3) + end if + if (l2 == min(l1, l2, l3)) then + call iSwap(l2, l3) + call iSwap(n2, n3) + end if + if (n3 < 0) then + n1 = - n1 + n2 = - n2 + n3 = - n3 + end if + + call indexGaunt(l1, l2, l3, n2, n3, ind1, ind2) + if (l1 == l2) then + if (n2 > - (n3 + 1) / 2) then + call indexGaunt(l1, l2, l3, - n2 - n3, n3, ind1, ind2) + end if + elseif (n3 == 0) then + if (n2 > 0) then + call indexGaunt(l1, l2, l3, - n2, 0, ind1, ind2) + end if + elseif (l2 == l3) then + if (n2 > min(l1 - n3, n3)) then + call indexGaunt(l1, l2, l3, n3, n2, ind1, ind2) + end if + end if + if ((ind1 > iGauMax1_) .or. (ind2 > iGauMax2_)) then + print *, 'getGaunt: Index out of range.' + stop + else + !! Pinchons definition of Gaunt differs from usual one + if (mod(m3, 2) == 0) then + res = storeGaunt_(ind1, ind2) + else + res = - storeGaunt_(ind1, ind2) + end if + end if + + end function getGaunt + + + !> Calculates a real Gaunt coefficient = \int YR_l1m1 YR_l2m2 YR_l3m3 dOmega + !! for real spherical harmonics YR_lm. Arguments are integer and NOT twice the true value! + !! + !! @desc Uses transformation highlighted in Homeier et al., J. Mol. Struct. 368, pp. 31 (1996). + !! @note Requires initialization with previous call to initGaunt(lMax). + function realGaunt(j1, m1, j2, m2, j3, m3) result(res) + + !> angular momentum quantum numbers + integer, intent(in) :: j1, j2, j3 + + !> magnetic quantum numbers + integer, intent(in) :: m1, m2, m3 + + !! resulting real Gaunt coefficient + real(dp) :: res + + if (.not. tGauntInit_) then + print *, 'realGaunt: Gaunt not yet initialized!' + stop + end if + + res = 0.0_dp + + if ((m1 /= abs(m2 + m3)) .and. (m1 /= abs(m2 - m3)) .and. (m2 /= abs(m3 + m1))& + & .and. (m2 /= abs(m3 - m1)) .and. (m3 /= abs(m1 + m2)) .and. (m3 /= abs(m1 - m2))) return + if (mod(j1 + j2 + j3, 2) /= 0) return + + if ((m1 /= 0) .and. (m2 /= 0) .and. (m3 /= 0)) then + if (abs(m2 + m3) <= j1) then + res = 2.0_dp * getGaunt(j2, m2, j3, m3, j1, m2 + m3)& + & * real(conjg(uMat_(m1, m2 + m3)) * uMat_(m2, m2) * uMat_(m3, m3), dp) + end if + if (abs(m2 - m3) <= j1) then + res = res + 2.0_dp * getGaunt(j2, m2, j3, -m3, j1, m2 - m3)& + & * real(conjg(uMat_(m1, m2 - m3)) * uMat_(m2, m2) * uMat_(m3, - m3), dp) + end if + elseif (m1 == 0 .and. m2 /= 0 .and. m3 /= 0) then + if (abs(m3) <= j2) then + res = 2.0_dp * getGaunt(j3, m3, j1, 0, j2, m3)& + & * real(conjg(uMat_(m2, m3)) * uMat_(m3, m3), dp) + end if + elseif (m2 == 0 .and. m3 /= 0 .and. m1 /= 0) then + if (abs(m1) <= j3) then + res = 2.0_dp * getGaunt(j1, m1, j2, 0, j3, m1)& + & * real(conjg(uMat_(m3, m1)) * uMat_(m1, m1), dp) + end if + elseif ((m3 == 0) .and. (m1 /= 0) .and. (m2 /= 0)) then + if (abs(m2) <= j1) then + res = 2.0_dp * getGaunt(j2, m2, j3, 0, j1, m2)& + & * real(conjg(uMat_(m1, m2)) * uMat_(m2, m2), dp) + end if + elseif ((m1 == 0) .and. (m2 == 0) .and. (m3 == 0)) then + res = getGaunt(j2, 0, j3, 0, j1, 0) + else + res = 0.0_dp + end if + + end function realGaunt + + + !> Computes Gaunt coefficients int Y_l1m1 Y_l2m2 Y_l3m3 dOmega for complex spherical harmonics + !! Y_lm from scratch. + !! + !! @desc Uses Clebsch-Gordan coefficients. + pure function gaunt(j1, m1, j2, m2, j3, m3) result(res) + + !> angular momentum quantum numbers + integer, intent(in) :: j1, j2, j3 + + !> magnetic quantum numbers + integer, intent(in) :: m1, m2, m3 + + !! floating point angular/magnetic momenta + real(dp) :: rj1, rm1, rj2, rm2, rj3, rm3 + + !! real Clebsch-Gordan coefficients + real(dp) :: rcg1, rcg2 + + !! resulting Gaunt coefficient + real(dp) :: res + + !! 1 / sqrt(4pi) + real(dp), parameter :: rs4pi = 0.2820947917738782_dp + + rj1 = real(j1, dp) + rm1 = real(m1, dp) + rj2 = real(j2, dp) + rm2 = real(m2, dp) + rj3 = real(j3, dp) + rm3 = real(m3, dp) + + call ned(rj1, rj2, rj3, 0.0_dp, 0.0_dp, 0.0_dp, rcg1) + call ned(rj1, rj2, rj3, rm1, rm2, rm3, rcg2) + + res = rs4pi * sqrt((2.0_dp * rj1 + 1.0_dp) * (2.0_dp * rj2 + 1.0_dp) / (2.0_dp * rj3 + 1.0_dp))& + & * rcg1 * rcg2 + + end function gaunt + + + !> ARTURO QUIRANTES SIERRA + !! Department of Applied Physics, Faculty of Sciences + !! University of Granada, 18071 Granada (SPAIN) + !! http://www.ugr.es/local/aquiran/codigos.htm + !! aquiran@ugr.es + !! + !! Last update: 20 May 2.003 + !! Ported to F90 (niehaus@bccms.uni-bremen.de) + !! + !! Subroutine NED + !! to calculate Clebsch-Gordan coefficients + !! + !! You need to add a "NED(AJ,BJ,CJ,AM,BM,CM,CG)" in your main routine. + !! Input: + !! AJ,BJ,CJ,AM,BM,CM (the usual Clebsch-Gordan indices) + !! Output: + !! CG=C-G(AJ,BJ,CJ,AM,BM,CM) + !! + !! @param cg Clebsch-Gordan coefficient + !! @note Parameters are real not integer! + pure subroutine ned(aj, bj, cj, am, bm, cm, cg) + + !> angular momentum quantum numbers + real(dp), intent(in) :: aj, bj, cj + + !> magnetic quantum numbers + real(dp), intent(in) :: am, bm, cm + + !> Clebsch-Gordan coefficient + real(dp), intent(out) :: cg + + !! + real(dp) :: qq(100, 100) + + !! + real(dp) :: dd, fn, xx, pp + + !! + integer :: ii, zz, ld + + !! + integer :: ja, ma, jb, mb, jc, mc, la, lb, lc, lt + + !! + integer :: ja2, jb2, jc2, i2, k0, k1, kk, ip + + zz = max(2 * aj + 1, 2 * bj + 1, 2 * cj + 1, aj + bj + cj, aj + am, bj + bm, cj + cm) + 2 + + do ii = 1, zz + qq(ii, 1) = 1.0_dp + qq(ii, ii) = 1.0_dp + end do + + do ii = 2, zz - 1 + do kk = 2, ii + qq(ii + 1, kk) = qq(ii, kk - 1) + qq(ii, kk) + end do + end do + + cg = 0.0_dp + ja = aj + am + 1.01_dp + ma = aj - am + 1.01_dp + jb = bj + bm + 1.01_dp + mb = bj - bm + 1.01_dp + jc = cj + cm + 1.01_dp + mc = cj - cm + 1.01_dp + la = bj + cj - aj + 1.01_dp + lb = cj + aj - bj + 1.01_dp + lc = aj + bj - cj + 1.01_dp + lt = aj + bj + cj + 1.01_dp + dd = abs(am + bm - cm) - 0.01_dp + + if (dd <= 0.0_dp) then + ld = min(ja, jb, jc, ma, mb, mc, la, lb, lc) + else + return + end if + + if (ld > 0.0_dp) then + ja2 = aj + aj + am + am + else + return + end if + + jb2 = bj + bj + bm + bm + jc2 = cj + cj - cm - cm + i2 = ja2 + jb2 + jc2 - ja2 / 2 * 2 - jb2 / 2 * 2 - jc2 / 2 * 2 + + if (i2 == 0) then + fn = qq(ja + ma - 1, lc) / qq(lt, jc + mc - 1) + else + return + end if + + fn = fn * qq(jb + mb - 1, lc) / qq(lt + 1, 2) + fn = fn / qq(ja + ma - 1, ja) + fn = fn / qq(jb + mb - 1, jb) + fn = fn / qq(jc + mc - 1, jc) + + k0 = max(0, lc - ja, lc - mb) + 1 + k1 = min(lc, ma, jb) + + xx = 0.0_dp + + do kk = k0, k1 + xx = - xx - qq(lc, kk) * qq(lb, ma - kk + 1) * qq(la, jb - kk + 1) + end do + + ip = k1 + lb + jc + pp = 1 - 2 * (ip - ip / 2 * 2) + cg = pp * xx * dsqrt(fn) + + !! What we've calculated is a Wigner 3-j coefficient. + !! Next, we'll turn it into a Clebsch-Gordan coefficient. + cg = cg * sqrt(2 * cj + 1) * (-1)**nint(aj - bj - cm) + + end subroutine ned + + + !> Swaps two indices. + pure subroutine iSwap(ii, jj) + + !> indices to swap + integer, intent(inout) :: ii, jj + + !! temporary storage for ii + integer :: iTmp + + iTmp = ii + ii = jj + jj = iTmp + + end subroutine iSwap + +end module common_anglib diff --git a/common/lib/constants.F90 b/common/lib/constants.F90 index 237834c3..c98e3912 100644 --- a/common/lib/constants.F90 +++ b/common/lib/constants.F90 @@ -6,11 +6,17 @@ module common_constants implicit none private - public :: pi, Bohr__AA, AA__Bohr, Hartree__eV, eV__Hartree, cc + public :: pi, pi_hlf, rec4pi, Bohr__AA, AA__Bohr, Hartree__eV, eV__Hartree, cc !> pi real(dp), parameter :: pi = 3.14159265358979323846_dp + !> pi / 2 + real(dp), parameter :: pi_hlf = pi / 2.0_dp + + !> 1 / (4 * pi) + real(dp), parameter :: rec4pi = 1.0_dp / (4.0_dp * pi) + !> Bohr->Angstrom real(dp), parameter :: Bohr__AA = 0.529177249_dp diff --git a/sktwocnt/lib/coordtrans.f90 b/common/lib/coordtrans.F90 similarity index 72% rename from sktwocnt/lib/coordtrans.f90 rename to common/lib/coordtrans.F90 index 525a6c33..c9550a6d 100644 --- a/sktwocnt/lib/coordtrans.f90 +++ b/common/lib/coordtrans.F90 @@ -1,5 +1,5 @@ !> Module that provides several routines related to coordinate transformation. -module coordtrans +module common_coordtrans use common_accuracy, only : dp use common_constants, only : pi @@ -7,15 +7,35 @@ module coordtrans implicit none private - public :: coordtransFunc, coordtrans_becke, coordtrans_becke_12, coordtrans_becke_23,& - & coordtrans_ahlrichs1, coordtrans_ahlrichs1_2d, coordtrans_ahlrichs2,& - & coordtrans_ahlrichs2_2d, coordtrans_identity + public :: coordtransFunc_0d, coordtransFunc_1d, coordtrans_becke, coordtrans_becke_12,& + & coordtrans_becke_23, coordtrans_ahlrichs1, coordtrans_ahlrichs1_2d, coordtrans_ahlrichs2,& + & coordtrans_ahlrichs2_2d, coordtrans_identity, coordtrans_radial_becke1,& + & coordtrans_radial_becke2 abstract interface - !> General interface for (Bekce's) coordinate transformations. - pure subroutine coordtransFunc(oldc, newc, jacobi) + !> General interface for (Becke's) coordinate transformations. + pure subroutine coordtransFunc_0d(oldc, newc, jacobi) + + use common_accuracy, only : dp + + implicit none + + !> old coordinate + real(dp), intent(in) :: oldc + + !> new coordinate after transformation + real(dp), intent(out) :: newc + + !> Jacobi determinant + real(dp), intent(out) :: jacobi + + end subroutine coordtransFunc_0d + + + !> General interface for (Becke's) coordinate transformations. + pure subroutine coordtransFunc_1d(oldc, newc, jacobi) use common_accuracy, only : dp @@ -30,13 +50,71 @@ pure subroutine coordtransFunc(oldc, newc, jacobi) !> Jacobi determinant real(dp), intent(out) :: jacobi - end subroutine coordtransFunc + end subroutine coordtransFunc_1d end interface contains + !> Transforms a 1 dimensional vector with coordinates in [-1,1] onto spherical coordinates, using + !! the Becke algorithm, see A. D. Becke, J. Chem. Phys. 88, 2547 (1988) + !! or J. Chem. Phys. 100, 6520 (1994). + pure subroutine coordtrans_radial_becke1(c11, spheric, jacobi) + + !> 1d coordinate vector, each coordinate in interval [-1,1] + real(dp), intent(in) :: c11 + + !> corresponding spherical coordinate + real(dp), intent(out) :: spheric + + !> Jacobi determinant + real(dp), intent(out) :: jacobi + + !! midpoint of the integration interval, + !! allows adjustment of the radial point distribution to a suitable physical scale + real(dp), parameter :: rm = 1.0_dp + + !! recurring factors + real(dp) :: rtmp1, rtmp2 + + rtmp1 = 1.0_dp + c11 + rtmp2 = 1.0_dp - c11 + spheric = rm * (rtmp1 / rtmp2) + jacobi = 2.0_dp * rm**3 * rtmp1**2 / rtmp2**4 + + end subroutine coordtrans_radial_becke1 + + + !> Transforms a 1 dimensional vector with coordinates in [-1,1] onto spherical coordinates, using + !! the Becke algorithm, see A. D. Becke, J. Chem. Phys. 88, 2547 (1988) + !! or J. Chem. Phys. 100, 6520 (1994). + pure subroutine coordtrans_radial_becke2(c11, rm, spheric, jacobi) + + !> 1d coordinate vector, each coordinate in interval [-1,1] + real(dp), intent(in) :: c11 + + !> midpoint of the integration interval, + !! allows adjustment of the radial point distribution to a suitable physical scale + real(dp), intent(in) :: rm + + !> corresponding spherical coordinate + real(dp), intent(out) :: spheric + + !> Jacobi determinant + real(dp), intent(out) :: jacobi + + !! recurring factors + real(dp) :: rtmp1, rtmp2 + + rtmp1 = 1.0_dp + c11 + rtmp2 = 1.0_dp - c11 + spheric = rm * (rtmp1 / rtmp2) + jacobi = 2.0_dp * rm**3 * rtmp1**2 / rtmp2**4 + + end subroutine coordtrans_radial_becke2 + + !> Transforms a 3 dimensional vector with coordinates in [-1,1] onto spherical coordinates, using !! the Becke algorithm, see A. D. Becke, J. Chem. Phys. 88, 2547 (1988) !! or J. Chem. Phys. 100, 6520 (1994). @@ -265,4 +343,4 @@ pure subroutine coordtrans_identity(c11, ctarget, jacobi) end subroutine coordtrans_identity -end module coordtrans +end module common_coordtrans diff --git a/common/lib/eigensolver.F90 b/common/lib/eigensolver.F90 new file mode 100644 index 00000000..408a23dd --- /dev/null +++ b/common/lib/eigensolver.F90 @@ -0,0 +1,155 @@ +!> Contains F90 wrapper functions for some commonly used lapack calls needed in the code. +!! Contains some fixes for lapack 3.0 bugs, if this gets corrected in lapack 4.x they should be +!! removed. +module common_eigensolver + + use common_accuracy, only : rdp + + implicit none + private + + public :: heev, hegv + + + !> Simple eigensolver for a symmetric/Hermitian matrix + !> Caveat: the matrix a is overwritten + interface heev + module procedure dble_dsyev + end interface heev + + + !> Simple eigensolver for a symmetric/Hermitian generalized matrix problem + !> caveat: the matrix a is overwritten + !> caveat: the matrix b is overwritten with Cholesky factorization + interface hegv + module procedure dble_dsygv + end interface hegv + +contains + + + !> Double precision eigensolver for a symmetric matrix + subroutine dble_dsyev(a, w, uplo, jobz) + + !> contains the matrix for the solver, returns as eigenvectors if requested (matrix always + !> overwritten on return anyway) + real(rdp), intent(inout) :: a(:,:) + + !> eigenvalues + real(rdp), intent(out) :: w(:) + + !> upper or lower triangle of the matrix + character, intent(in) :: uplo + + !> compute eigenvalues 'N' or eigenvalues and eigenvectors 'V' + character, intent(in) :: jobz + + real(rdp), allocatable :: work(:) + integer n, info + integer :: int_idealwork + real(rdp) :: idealwork(1) + character(len=100) :: error_string + + n = size(a, dim=1) + + call dsyev(jobz, uplo, n, a, n, w, idealwork, -1, info) + + if (info /= 0) then + write(*,*) "Failure in DSYEV to determine optimum workspace" + error stop + end if + + int_idealwork = floor(idealwork(1)) + allocate(work(int_idealwork)) + + call dsyev(jobz, uplo, n, a, n, w, work, int_idealwork, info) + if (info /= 0) then + if (info < 0) then +99020 format('Failure in diagonalisation routine dsyev, illegal argument at position ', i6) + write(error_string, 99020) info + write(*,*) error_string + error stop + else +99030 format('Failure in diagonalisation routine dsyev, diagonal element ', i6,& + & ' did not converge to zero.') + write(error_string, 99030) info + write(*,*) error_string + error stop + end if + end if + + end subroutine dble_dsyev + + + !> Double precision eigensolver for generalized symmetric matrix problem + subroutine dble_dsygv(a, b, w, uplo, jobz, itype) + + !> contains the matrix for the solver, returns eigenvectors if requested (matrix always + !> overwritten on return anyway) + real(rdp), intent(inout) :: a(:,:) + + !> contains the second matrix for the solver (overwritten by Cholesky factorization) + real(rdp), intent(inout) :: b(:,:) + + !> eigenvalues + real(rdp), intent(out) :: w(:) + + !> upper or lower triangle of both matrices + character, intent(in) :: uplo + + !> compute eigenvalues 'N' or eigenvalues and eigenvectors 'V' + character, intent(in) :: jobz + + !> specifies the problem type to be solved 1:A*x=(lambda)*B*x, 2:A*B*x=(lambda)*x, + !> 3:B*A*x=(lambda)*x default is 1 + integer, optional, intent(in) :: itype + + real(rdp), allocatable :: work(:) + integer n, lda, info, iitype, ldb + integer :: int_idealwork + real(rdp) :: idealwork(1) + character(len=100) :: error_string + + n = size(a, dim=2) + lda = size(a, dim=1) + ldb = size(b, dim=1) + + if (present(itype)) then + iitype = itype + else + iitype = 1 + end if + + call dsygv(iitype, jobz, uplo, n, a, lda, b, ldb, w, idealwork, -1, info) + if (info /= 0) then + write(*,*) "Failure in dsygv to determine optimum workspace" + error stop + end if + + int_idealwork = nint(idealwork(1)) + allocate(work(int_idealwork)) + + call dsygv(iitype, jobz, uplo, n, a, lda, b, ldb, w, work, int_idealwork, info) + + if (info /= 0) then + if (info < 0) then + write(error_string, "('Failure in diagonalisation routine dsygv, illegal ',& + & 'argument at position ',i6)") info + write(*,*) error_string + error stop + else if (info <= n) then + write(error_string, "('Failure in diagonalisation routine dsygv, diagonal ',& + & 'element ', i6, ' did not converge to zero.')") info + write(*,*) error_string + error stop + else + write(error_string, "('Failure in diagonalisation routine dsygv,', & + & ' non-positive definite overlap! Minor ',i6,' responsible.')") info - n + write(*,*) error_string + error stop + end if + end if + + end subroutine dble_dsygv + +end module common_eigensolver diff --git a/common/lib/fdiff.F90 b/common/lib/fdiff.F90 new file mode 100755 index 00000000..9e700d90 --- /dev/null +++ b/common/lib/fdiff.F90 @@ -0,0 +1,274 @@ +!> Module that generates finite differences matrix and rhs: Mx=B +!! alpha(z)f'' + beta(z)f' + gamma(z)f = B(rho) +!! M: FD matrix +!! B: rhs +!! Mx = B +module common_finitedifferences + + use common_accuracy, only : dp + use common_constants, only : pi, pi_hlf + + implicit none + private + + public :: makeHelmholzFDMatrix7P, makePoissonFDMatrix7P + + +contains + + !> Seven-point finite differences scheme (ref: Bickley). + !! On boundaries non-centered five and six point formulae are used. + subroutine makeHelmholzFDMatrix7P(M, B, alpha, beta, gama, f0, f1) + + !> finite differences matrix, 7-point scheme + real(dp), intent(out), allocatable :: M(:,:) + + !> right-hand side of equation + real(dp), intent(inout) :: B(:) + + !> + real(dp), intent(in) :: alpha(:) + + !> + real(dp), intent(in) :: beta(:) + + !> + real(dp), intent(in) :: gama(:) + + !> boundary condition, r --> oo + real(dp), intent(in) :: f0 + + !> boundary condition, r --> 0 + real(dp), intent(in) :: f1 + + !! number of grid points + integer :: N + + !! iterates over grid points + integer :: ii + + !! stepwidth and stepwidth**2 + real(dp) :: step, step_2 + + N = size(B) + + allocate(M(N, N)) + M(:,:) = 0.0_dp + + step = 1.0_dp / real(N + 1, dp) + step_2 = step**2 + + !======================================================== + M(1,4) = alpha(1)*(-15.0_dp) + beta(1)*step*15.0_dp + M(1,3) = alpha(1)*(60.0_dp) + beta(1)*step*(-90.0_dp) + M(1,2) = alpha(1)*(90.0_dp) + beta(1)*step*270.0_dp + M(1,1) = alpha(1)*(-300.0_dp) + gama(1)*step_2*180.0_dp + (beta(1)*step*(-150.0_dp)) + !================================ + M(N,N-1) = alpha(N)*(90.0_dp) + beta(N)*(step)*(-270.0_dp) + M(N,N-2) = alpha(N)*(60.0_dp) + beta(N)*(step)*(90.0_dp) + M(N,N-3) = alpha(N)*(-15.0_dp) + beta(N)*(step)*(-15.0_dp) + M(N,N) = alpha(N)*(-300.0_dp) + gama(N)*step_2*180.0_dp + beta(N)*step*150.0_dp + !================================ + M(2,5) = + beta(2)*step*(6.0_dp) + M(2,4) = alpha(2)*( -15.0_dp) + beta(2)*step*(-45.0_dp) + M(2,3) = alpha(2)*( 240.0_dp) + beta(2)*step*(180.0_dp) + M(2,2) = alpha(2)*(-450.0_dp) + beta(2)*step*(-60.0_dp) + M(2,1) = alpha(2)*( 240.0_dp) + gama(2)*step_2*180.0_dp + (beta(2)*step*(-90.0_dp)) + !================================ + M(N-1,N-1) = alpha(N-1)*(-450.0_dp) + beta(N-1)*(step)*(60.0_dp) + M(N-1,N-2) = alpha(N-1)*(240.0_dp) + beta(N-1)*(step)*(-180.0_dp) + M(N-1,N-3) = alpha(N-1)*(-15.0_dp) + beta(N-1)*(step)*(45.0_dp) + M(N-1,N-4) = + beta(N-1)*(step)*(-6.0_dp) + M(N-1,N) = alpha(N-1)*(240.0_dp) + gama(N-1)*step_2*180.0_dp + beta(N-1)*step*(90.0_dp) + !================================ + + M(3,3) = alpha(3)*(-490.0_dp) + gama(3)*step_2*180.0_dp + M(3,2) = alpha(3)*(270.0_dp) + beta(3)*(step)*(-135.0_dp) + M(3,1) = alpha(3)*(-27.0_dp) + beta(3)*(step)*(27.0_dp) + M(3,4) = alpha(3)*(270.0_dp) + beta(3)*(step)*(135.0_dp) + M(3,5) = alpha(3)*(-27.0_dp) + beta(3)*(step)*(-27.0_dp) + M(3,6) = alpha(3)*(2.0_dp) + beta(3)*(step)*3.0_dp + + M(N-2,N-2) = alpha(N-2)*(-490.0_dp) + gama(N-2)*step_2*180.0_dp + M(N-2,N-3) = alpha(N-2)*(270.0_dp) + beta(N-2)*(step)*(-135.0_dp) + M(N-2,N-4) = alpha(N-2)*(-27.0_dp) + beta(N-2)*(step)*(27.0_dp) + M(N-2,N-5) = alpha(N-2)*(2.0_dp) + beta(N-2)*(step)*(-3.0_dp) + M(N-2,N-1) = alpha(N-2)*(270.0_dp) + beta(N-2)*(step)*(135.0_dp) + M(N-2,N) = alpha(N-2)*(-27.0_dp) + beta(N-2)*(step)*(-27.0_dp) + + do ii=4, N-3 + M(ii,ii) = alpha(ii)*(-490.0_dp) + gama(ii)*step_2*180.0_dp + M(ii,ii-1) = alpha(ii)*(270.0_dp) + beta(ii)*(step)*(-135.0_dp) + M(ii,ii-2) = alpha(ii)*(-27.0_dp) + beta(ii)*(step)*(27.0_dp) + M(ii,ii-3) = alpha(ii)*(2.0_dp) + beta(ii)*(step)*(-3.0_dp) + M(ii,ii+1) = alpha(ii)*(270.0_dp) + beta(ii)*(step)*(135.0_dp) + M(ii,ii+2) = alpha(ii)*(-27.0_dp) + beta(ii)*(step)*(-27.0_dp) + M(ii,ii+3) = alpha(ii)*(2.0_dp) + beta(ii)*(step)*(3.0_dp) + end do + + B(:) = B * step_2 * 180.0_dp + + !========================================================================================== + ! Boundary conditions + !========================================================================================== + B(N)=B(N)-f1*(45.0_dp*beta(N)*step + 165.0_dp*alpha(N)) + B(N-1)=B(N-1)-f1*(- 9.0_dp*beta(N-1)*step - 15.0_dp*alpha(N-1)) + B(N-2)=B(N-2)-f1*( 3.0_dp*beta(N-2)*step + 2.0_dp*alpha(N-2)) + + B(1)=B(1)-f0*(-45.0_dp*beta(1)*step + 165.0_dp*alpha(1)) + B(2)=B(2)-f0*(9.0_dp*beta(2)*step - 15.0_dp*alpha(2)) + B(3)=B(3)-f0*(-3.0_dp*beta(3)*step + 2.0_dp*alpha(3)) + !========================================================================================== + + end subroutine makeHelmholzFDMatrix7P + + + !> + subroutine makePoissonFDMatrix7P(H2, B, N, ll, zi, rm, charge) + + real(dp), intent(inout) :: H2(:,:) + real(dp), intent(inout) :: B(:) + integer, intent(in) :: N + integer, intent(in) :: ll + real(dp), intent(in) :: zi(:) + real(dp), intent(in) :: rm + real(dp), intent(in) :: charge + + integer :: ii + real(dp) :: step, step_2, llp1_pi_2_rm_4, f0 + real(dp) :: beta, gama, sin_pi, sin_pi_hlf, cos_pi_hlf + + step = 1.0_dp / real(N + 1, dp) + step_2 = step**2 + + if (ll == 0) then + ! r --> oo + f0 = charge * sqrt(4.0_dp * pi) + else + ! r->oo + f0 = 0.0_dp + end if + + llp1_pi_2_rm_4 = 4.0_dp * pi**2 * rm * real(ll * (ll + 1), dp) + + ! ii = 1 + sin_pi = sin(pi * zi(1)) + sin_pi_hlf = sin(pi_hlf * zi(1)) + cos_pi_hlf = cos(pi_hlf * zi(1)) + sin_pi_hlf = sin_pi_hlf**2 ! ^2 + cos_pi_hlf = cos_pi_hlf**4 ! ^4 + beta = (pi / sin_pi + pi_hlf * sin_pi / sin_pi_hlf) * step + sin_pi = sin_pi**2 ! ^2 + gama = -llp1_pi_2_rm_4 / sin_pi + + H2(7, 1) = -300.0_dp + gama * step_2 * 180.0_dp - beta * 150.0_dp + H2(6, 2) = 90.0_dp + beta * 270.0_dp + H2(5, 3) = 60.0_dp - beta * 90.0_dp + H2(4, 4) = -15.0_dp + beta * 15.0_dp + B(1) = f0 * (45.0_dp * beta - 165.0_dp) + + ! ii = 2 + sin_pi = sin(pi * zi(2)) + sin_pi_hlf = sin(pi_hlf * zi(2)) + cos_pi_hlf = cos(pi_hlf * zi(2)) + sin_pi_hlf = sin_pi_hlf**2 ! ^2 + cos_pi_hlf = cos_pi_hlf**4 ! ^4 + beta = (pi / sin_pi + pi_hlf * sin_pi / sin_pi_hlf) * step + sin_pi = sin_pi**2 ! ^2 + gama = -llp1_pi_2_rm_4 / sin_pi + + H2(7, 2) = -450.0_dp - beta * 60.0_dp + H2(6, 3) = 240.0_dp + beta * 180.0_dp + H2(5, 4) = -15.0_dp - beta * 45.0_dp + H2(4, 5) = beta * 6.0_dp + H2(8, 1) = 240.0_dp + gama * step_2 * 180.0_dp - beta * 90.0_dp + B(2) = -f0 * (9.0_dp * beta - 15.0_dp) + + ! ii = 3 + sin_pi = sin(pi * zi(3)) + sin_pi_hlf = sin(pi_hlf * zi(3)) + cos_pi_hlf = cos(pi_hlf * zi(3)) + sin_pi_hlf = sin_pi_hlf**2 ! ^2 + cos_pi_hlf = cos_pi_hlf**4 ! ^4 + beta = (pi / sin_pi + pi_hlf * sin_pi / sin_pi_hlf) * step + sin_pi = sin_pi**2 ! ^2 + gama = -llp1_pi_2_rm_4 / sin_pi + + H2(7, 3) = -490.0_dp + gama * step_2 * 180.0_dp + H2(6, 4) = 270.0_dp + beta * 135.0_dp + H2(5, 5) = -27.0_dp - beta * 27.0_dp + H2(4, 6) = 2.0_dp + beta * 3.0_dp + H2(8, 2) = 270.0_dp - beta * 135.0_dp + H2(9, 1) = -27.0_dp + beta * 27.0_dp + B(3) = f0 * (3.0_dp*beta - 2.0_dp) + + do ii = 4, N - 3 + sin_pi = sin(pi * zi(ii)) + sin_pi_hlf = sin(pi_hlf * zi(ii)) + cos_pi_hlf = cos(pi_hlf * zi(ii)) + sin_pi_hlf = sin_pi_hlf**2 ! ^2 + cos_pi_hlf = cos_pi_hlf**4 ! ^4 + beta = (pi / sin_pi + pi_hlf * sin_pi / sin_pi_hlf) * step + sin_pi = sin_pi**2 ! ^2 + gama = -llp1_pi_2_rm_4 / sin_pi + + H2(7, ii) = -490.0_dp + gama * step_2 * 180.0_dp + H2(6, ii + 1) = 270.0_dp + beta * 135.0_dp + H2(5, ii + 2) = -27.0_dp - beta * 27.0_dp + H2(4, ii + 3) = 2.0_dp + beta * 3.0_dp + H2(8, ii - 1) = 270.0_dp - beta * 135.0_dp + H2(9, ii - 2) = -27.0_dp + beta * 27.0_dp + H2(10, ii - 3) = 2.0_dp - beta * 3.0_dp + end do + + ! ii = N - 2 + sin_pi = sin(pi * zi(N-2)) + sin_pi_hlf = sin(pi_hlf * zi(N-2)) + cos_pi_hlf = cos(pi_hlf * zi(N-2)) + sin_pi_hlf = sin_pi_hlf**2 ! ^2 + cos_pi_hlf = cos_pi_hlf**4 ! ^4 + beta = (pi / sin_pi + pi_hlf * sin_pi / sin_pi_hlf) * step + sin_pi = sin_pi**2 ! ^2 + gama = -llp1_pi_2_rm_4 / sin_pi + + H2(7, N - 2) = -490.0_dp + gama * step_2 * 180.0_dp + H2(6, N - 1) = 270.0_dp + beta * 135.0_dp + H2(5, N) = -27.0_dp - beta * 27.0_dp + H2(8, N - 3) = 270.0_dp - beta * 135.0_dp + H2(9, N - 4) = -27.0_dp + beta * 27.0_dp + H2(10, N - 5) = 2.0_dp - beta * 3.0_dp + + ! ii = N - 1 + sin_pi = sin(pi * zi(N-1)) + sin_pi_hlf = sin(pi_hlf * zi(N-1)) + cos_pi_hlf = cos(pi_hlf * zi(N-1)) + sin_pi_hlf = sin_pi_hlf**2 ! ^2 + cos_pi_hlf = cos_pi_hlf**4 ! ^4 + beta = (pi / sin_pi + pi_hlf * sin_pi / sin_pi_hlf) * step + sin_pi = sin_pi**2 ! ^2 + gama = -llp1_pi_2_rm_4 / sin_pi + + H2(7, N - 1) = -450.0_dp + beta * 60.0_dp + H2(6, N) = 240.0_dp + gama * step_2 * 180.0_dp + beta * 90.0_dp + H2(8, N - 2) = 240.0_dp - beta * 180.0_dp + H2(9, N - 3) = -15.0_dp + beta * 45.0_dp + H2(10, N - 4) = -beta * 6.0_dp + + ! ii = N + sin_pi = sin(pi * zi(N)) + sin_pi_hlf = sin(pi_hlf * zi(N)) + cos_pi_hlf = cos(pi_hlf * zi(N)) + sin_pi_hlf = sin_pi_hlf**2 ! ^2 + cos_pi_hlf = cos_pi_hlf**4 ! ^4 + beta = (pi / sin_pi + pi_hlf * sin_pi / sin_pi_hlf) * step + sin_pi = sin_pi**2 ! ^2 + gama = -llp1_pi_2_rm_4 / sin_pi + + H2(7, N) = -300.0_dp + gama * step_2 * 180.0_dp + beta * 150.0_dp + H2(8, N - 1) = 90.0_dp - beta * 270.0_dp + H2(9, N - 2) = 60.0_dp + beta * 90.0_dp + H2(10, N - 3) = -15.0_dp - beta * 15.0_dp + + end subroutine makePoissonFDMatrix7P + +end module common_finitedifferences diff --git a/common/lib/fifobase.F90 b/common/lib/fifobase.F90 index 9e6e980f..b4a64c91 100644 --- a/common/lib/fifobase.F90 +++ b/common/lib/fifobase.F90 @@ -104,7 +104,7 @@ subroutine TFiFoBase_initswap(this, memorylimit, filename, fileid) this%memorylimit = memorylimit this%filename = filename this%fileid = fileid - + end subroutine TFiFoBase_initswap @@ -187,7 +187,7 @@ subroutine TFiFoBase_getptr(this, data) this%inmemory = this%inmemory - 1 end if end if - + if (.not. associated(this%current%data)) then call this%readnodedata(this%current) end if @@ -242,14 +242,14 @@ subroutine TFiFoBase_freeresources(this) deallocate(node) node => this%head end do - + if (this%memorylimit /= -1) then inquire(this%fileid, opened=opened) if (opened) then close(this%fileid, status="delete") end if end if - + end subroutine TFiFoBase_freeresources @@ -320,11 +320,11 @@ subroutine TFiFoBase_datatofile(this, fileid, filepos, data) class(TFiFoBase), intent(inout) :: this integer, intent(in) :: fileid, filepos class(*), intent(inout), pointer :: data - + stop "Collection does not support swapping to file." - + end subroutine TFiFoBase_datatofile - + !> Reads the content of a data node from a file. !! @@ -340,7 +340,7 @@ subroutine TFiFoBase_datafromfile(this, fileid, filepos, data) class(*), intent(out), pointer :: data stop "Collection does not support swapping to file." - + end subroutine TFiFoBase_datafromfile diff --git a/common/lib/gridgenerator.F90 b/common/lib/gridgenerator.F90 new file mode 100644 index 00000000..bb320df4 --- /dev/null +++ b/common/lib/gridgenerator.F90 @@ -0,0 +1,441 @@ +!> Module that provides routines for quadrature grid generation. +module common_gridgenerator + + use common_accuracy, only : dp + use common_constants, only : pi + use common_quadratures, only : TQuadrature, TQuadrature2D + use common_coordtrans, only : coordtransFunc_0d, coordtransFunc_1d + use common_partition, only : partitionFunc + + implicit none + private + + public :: gengrid1_1, gengrid1_2, gengrid1_3, gengrid2_2, gengrid2_3 + + +contains + + !> Generates a one-center grid, for radial integration only. + subroutine gengrid1_1(radQuad, rm, coordtrans, grid, weights) + + interface + !> General interface for utilized coordinate transformation. + subroutine coordtrans(oldc, rm, newc, jacobi) + use common_accuracy, only : dp + + !> old coordinate + real(dp), intent(in) :: oldc + + !> midpoint of the integration interval, + !! allows adjustment of the radial point distribution to a suitable physical scale + real(dp), intent(in) :: rm + + !> new coordinate after transformation + real(dp), intent(out) :: newc + + !> Jacobi determinant + real(dp), intent(out) :: jacobi + end subroutine coordtrans + end interface + + !> holds abscissas and weights for radial quadrature + type(TQuadrature), intent(in) :: radQuad + + !> midpoint of the integration interval, + !! allows adjustment of the radial point distribution to a suitable physical scale + real(dp), intent(in) :: rm + + !> integration grid around center + real(dp), allocatable, intent(out) :: grid(:,:) + + !> integration weights + real(dp), allocatable, intent(out) :: weights(:) + + !! current abscissa and transformed equivalent + real(dp) :: coord, coordreal + + !! current Jacobi determinant + real(dp) :: jacobi + + !! number of radial quadrature points + integer :: nn + + !! iterates over all grid points + integer :: i1 + + nn = size(radQuad%xx) + + allocate(grid(nn, 1)) + allocate(weights(nn)) + + do i1 = 1, nn + coord = radQuad%xx(i1) + ! transform the computational coordinate to the real one + call coordtrans(coord, rm, coordreal, jacobi) + ! grid is a set of real coordinates + grid(i1, 1) = coordreal + weights(i1) = radQuad%ww(i1) * jacobi + end do + + end subroutine gengrid1_1 + + + !> Generates a one-center grid for two variables. + subroutine gengrid1_2(quads, coordtrans, grid, weights) + + !> abscissas and weights for numerical quadrature + type(TQuadrature), intent(in) :: quads(2) + + !> coordinate transformation procedure + procedure(coordtransFunc_1d) :: coordtrans + + !> integration grid around center + real(dp), allocatable, intent(out) :: grid(:,:) + + !> integration weights + real(dp), allocatable, intent(out) :: weights(:) + + !! number of radial and angular quadrature points + integer :: n1, n2 + + !! total number of quadrature points + integer :: nn + + !! (real) current radial and angular coordinate + real(dp) :: coord(2), coordreal(2) + + !! Jacobi determinant + real(dp) :: jacobi + + !! loop counter + integer :: ind + + !! iterates over radial and angular quadrature points + integer :: i1, i2 + + n1 = size(quads(1)%xx) + n2 = size(quads(2)%xx) + + nn = n1 * n2 + + allocate(grid(nn, 2)) + allocate(weights(nn)) + + ind = 1 + do i2 = 1, n2 + coord(2) = quads(2)%xx(i2) + do i1 = 1, n1 + ! coord contains computational coordinate in [-1,1] + coord(1) = quads(1)%xx(i1) + ! transform the computational coordinate to the real one + call coordtrans(coord, coordreal, jacobi) + ! grid is a set of real coordiantes + grid(ind, 1) = coordreal(1) + grid(ind, 2) = coordreal(2) + weights(ind) = quads(1)%ww(i1) * quads(2)%ww(i2) * jacobi + ind = ind + 1 + end do + end do + + end subroutine gengrid1_2 + + + !> Generates a one-center grid for three variables. + subroutine gengrid1_3(angQuad, radQuad, coordtrans, grid, weights) + + !> abscissas and weights for angular quadrature with coordinate pairs + type(TQuadrature2D), intent(in) :: angQuad + + !> abscissas and weights for radial quadrature + type(TQuadrature), intent(in) :: radQuad + + !> coordinate transformation procedure + procedure(coordtransFunc_0d) :: coordtrans + + !> integration grid around center + real(dp), allocatable, intent(out) :: grid(:,:) + + !> integration weights + real(dp), allocatable, intent(out) :: weights(:) + + !! number of radial and angular quadrature points + integer :: n1, n2 + + !! total number of quadrature points + integer :: nn + + !! (real) current radial and angular coordinate + real(dp) :: coord, coordreal + + !! Jacobi determinant + real(dp) :: jacobi + + !! loop counter + integer :: ind + + !! iterates over radial and angular quadrature points + integer :: i1, i2 + + n1 = size(radQuad%xx) + n2 = size(angQuad%c1) + + nn = n1 * n2 + + allocate(grid(nn, 3)) + allocate(weights(nn)) + + ind = 1 + do i1 = 1, n1 + coord = radQuad%xx(i1) + ! transform the computational coordinate to the real one + call coordtrans(coord, coordreal, jacobi) + do i2 = 1, n2 + ! grid is a set of real coordiantes + grid(ind, 1) = coordreal + grid(ind, 2) = angQuad%c1(i2) + grid(ind, 3) = angQuad%c2(i2) + weights(ind) = radQuad%ww(i1) * angQuad%ww(i2) * jacobi + ind = ind + 1 + end do + end do + + end subroutine gengrid1_3 + + + !> Generates a two-center grid for two spherical variables (r, theta) each. + pure subroutine gengrid2_2(quads, coordtrans, partition, partparams, dist, grid1, grid2, dots,& + & weights) + + !> abscissas and weights for numerical quadrature + type(TQuadrature), intent(in) :: quads(2) + + !> coordinate transformation procedure + procedure(coordtransFunc_1d) :: coordtrans + + !> partitioning procedure + procedure(partitionFunc) :: partition + + !> arbitrary dummy real array, unused in this routine + real(dp), intent(in) :: partparams(:) + + !> distance between centers + real(dp), intent(in) :: dist + + !> two-dimensional atom grids, whereas r = grid(:, 1) and theta = grid(:, 2) + real(dp), intent(out), allocatable :: grid1(:,:), grid2(:,:) + + !> scalar products of unit vectors from each perspective + real(dp), intent(out), allocatable :: dots(:) + + !> integration weights + real(dp), intent(out), allocatable :: weights(:) + + !! atomic and total number of quadrature abscissas + integer :: n1, n2, nn + + !! auxiliary variables + integer :: ind, i1, i2 + real(dp) :: coord(2), coordreal(2) + real(dp) :: r1, theta1, r2a, r2b, theta2a, theta2b, rtmpa, rtmpb, jacobi + + n1 = size(quads(1)%xx) + n2 = size(quads(2)%xx) + + nn = n1 * n2 + + allocate(grid1(2 * nn, 2)) + allocate(grid2(2 * nn, 2)) + allocate(dots(2 * nn)) + allocate(weights(2 * nn)) + + ind = 1 + do i2 = 1, n2 + coord(2) = quads(2)%xx(i2) + do i1 = 1, n1 + coord(1) = quads(1)%xx(i1) + call coordtrans(coord, coordreal, jacobi) + r1 = coordreal(1) + theta1 = coordreal(2) + + rtmpa = dist**2 + r1**2 + rtmpb = 2.0_dp * r1 * dist * cos(theta1) + + r2a = sqrt(rtmpa - rtmpb) ! dist > 0 + r2b = sqrt(rtmpa + rtmpb) ! dist < 0 + + rtmpa = - 0.5_dp * (dist**2 + r2a**2 - r1**2) / (dist * r2a) + rtmpb = 0.5_dp * (dist**2 + r2b**2 - r1**2) / (dist * r2b) + + ! make sure, we are not sliding out from [-1,1] range for acos + rtmpa = min(rtmpa, 1.0_dp) + rtmpa = max(rtmpa, - 1.0_dp) + rtmpb = min(rtmpb, 1.0_dp) + rtmpb = max(rtmpb, - 1.0_dp) + + theta2a = acos(rtmpa) + theta2b = acos(rtmpb) + + grid1(ind, 1) = r1 + grid1(ind, 2) = theta1 + grid1(ind + nn, 1) = r2b + grid1(ind + nn, 2) = theta2b + + grid2(ind, 1) = r2a + grid2(ind, 2) = theta2a + grid2(ind + nn, 1) = r1 + grid2(ind + nn, 2) = theta1 + + dots(ind) = cos(theta1 - theta2a) + dots(ind + nn) = cos(theta2b - theta1) + + rtmpa = quads(1)%ww(i1) * quads(2)%ww(i2) * jacobi + weights(ind) = rtmpa * partition(r1, r2a, dist, partparams) + weights(ind + nn) = rtmpa * partition(r1, r2b, - dist, partparams) + ind = ind + 1 + end do + end do + + end subroutine gengrid2_2 + + + !> Generates two radial grids at (0,0,0) and (0,0,dist). + !! Each grid consists of points given by quadratures. Also the mapping between grids is computed, + !! i.e. for each point in coordiante system 1 (reference frame for grid) the corresponding point + !! in coordinate system 2 is calculated and vice versa. + !! + !! \note Both grids consist of the same set of quadrature points in their local coordinate system. + !! + !! The structure of grid object: + !! grid1 grid2 weight + !! [Quad] -> [Link] [Quad1] + !! [Link] <- [Quad] [Quad2] + !! + !! Quad: quadrature points + !! Link: corresponding coordinates in other system + subroutine gengrid2_3(angQuad, radQuad, coordtrans, partition, partparams,& + & dist, grid1, grid2, weights, part) + type(TQuadrature2D), intent(in) :: angQuad + type(TQuadrature), intent(in) :: radQuad + + !> coordinate transformation procedure + procedure(coordtransFunc_0d) :: coordtrans + + !> partitioning procedure + procedure(partitionFunc) :: partition + + real(dp), intent(in) :: partparams(:) + real(dp), intent(in) :: dist + real(dp), allocatable, intent(out) :: grid1(:,:), grid2(:,:) + real(dp), allocatable, intent(out) :: weights(:), part(:) + + !! number of radial and angular quadrature points + integer :: n1, n2 + + !! total number of quadrature points + integer :: nn + + !! (real) current radial coordinate + real(dp) :: coord, coordreal + + !! Jacobi determinant + real(dp) :: jacobi + + !! loop counter + integer :: ind + + !! iterates over radial and angular quadrature points + integer :: i1, i2 + + !! auxiliary variables + real(dp) :: r1, theta1, r2a, r2b, theta2a, theta2b, rtmpa, rtmpb + real(dp) :: phi, rm, z2a, z2b + + rm = 1.0_dp + + n1 = size(radQuad%xx) + n2 = size(angQuad%c1) + + nn = n1 * n2 + + allocate(grid1(2 * nn, 4)) + allocate(grid2(2 * nn, 4)) + allocate(weights(2 * nn)) + allocate(part(2 * nn)) + + ind = 1 + do i1 = 1, n1 + ! the radial coordinate should be transformed + coord = radQuad%xx(i1) + call coordtrans(coord, coordreal, jacobi) + r1 = coordreal + do i2 = 1, n2 + ! Lebedev quadrature returns spherical coordinates + theta1 = angQuad%c1(i2) + phi = angQuad%c2(i2) + + ! now calculate the link to the other system, use spherical prolate coordinates + rtmpa = dist * dist + r1 * r1 + rtmpb = 2.0_dp * r1 * dist * cos(theta1) + r2a = sqrt(rtmpa - rtmpb) ! dist > 0 + r2b = sqrt(rtmpa + rtmpb) ! dist < 0 + rtmpa = -0.5_dp * (dist * dist + r2a * r2a - r1 * r1) / (dist * r2a) + rtmpb = 0.5_dp * (dist * dist + r2b * r2b - r1 * r1) / (dist * r2b) + + ! here the z coordinate is calculated additionally + z2a = acos((r2a - rm)/(r2a + rm))/pi + z2b = acos((r2b - rm)/(r2b + rm))/pi + + !! make sure, we are not sliding out from [-1,1] range for acos + rtmpa = min(rtmpa, 1.0_dp) + rtmpa = max(rtmpa, - 1.0_dp) + rtmpb = min(rtmpb, 1.0_dp) + rtmpb = max(rtmpb, - 1.0_dp) + + theta2a = acos(rtmpa) + theta2b = acos(rtmpb) + + ! fill the grid with values, according to description above + ! note that phi is equal for both systems + grid1(ind, 1) = r1 + grid1(ind, 2) = theta1 + grid1(ind, 3) = phi + + ! here the z coordinate is calculated additionally + grid1(ind, 4) = radQuad%zz(i1) + + grid1(ind + nn, 1) = r2b + grid1(ind + nn, 2) = theta2b + grid1(ind + nn, 3) = phi + + ! here the z coordinate is calculated additionally + grid1(ind + nn, 4) = z2b + + grid2(ind, 1) = r2a + grid2(ind, 2) = theta2a + grid2(ind, 3) = phi + + ! here the z coordinate is calculated additionally + grid2(ind, 4) = z2a + + grid2(ind + nn, 1) = r1 + grid2(ind + nn, 2) = theta1 + grid2(ind + nn, 3) = phi + + ! here the z coordinate is calculated additionally + grid2(ind + nn, 4) = radQuad%zz(i1) + + ! generate weights, including space partition for full 3D integration + rtmpa = radQuad%ww(i1) * angQuad%ww(i2) * jacobi + + ! additionaly generate the partition function + part(ind) = partition(r1, r2a, dist, partparams) + part(ind + nn) = partition(r1, r2b, - dist, partparams) + weights(ind) = rtmpa * part(ind) + weights(ind + nn) = rtmpa * part(ind + nn) + ind = ind + 1 + end do + end do + + end subroutine gengrid2_3 + +end module common_gridgenerator diff --git a/common/lib/interpolation.F90 b/common/lib/interpolation.F90 new file mode 100644 index 00000000..f777c309 --- /dev/null +++ b/common/lib/interpolation.F90 @@ -0,0 +1,394 @@ +!> Module that contains routines for inter- and extrapolation. +module common_interpolation + + use common_accuracy, only : dp + + implicit none + private + + public :: poly5zero, spline3_free, polyinter, get_cubic_spline, get2ndNaturalSplineDerivs + + +contains + + !> Returns the value of a polynomial of 5th degree at x. + !! \details The polynomial is created with the following boundary conditions: + !! Its value, its 1st and 2nd derivatives are zero at x = 0 and agree with the provided values + !! at x = dx. + pure function poly5zero(y0, y0p, y0pp, xx, dx) result(yy) + + !> value of the polynom at x = dx + real(dp), intent(in) :: y0 + + !> value of the 1st derivative at x = dx + real(dp), intent(in) :: y0p + + !> value of the 2nd derivative at x = dx + real(dp), intent(in) :: y0pp + + !> point where the polynomial should be calculated + real(dp), intent(in) :: xx + + !> point, where the polynomials value and first two derivatives should take the provided values + real(dp), intent(in) :: dx + + !! value of the polynomial at xx + real(dp) :: yy + + real(dp) :: dx1, dx2, cc, bb, aa, xr + + ! f(x) = ax^5 + bx^4 + cx^3 + dx^2 + ex + f + ! f(0) = 0, f'(0) = 0, f''(0) = 0 --> d = e = f = 0 + + dx1 = y0p * dx + dx2 = y0pp * dx**2 + + ! c * (dx)**3 + cc = 10.0_dp * y0 - 4.0_dp * dx1 + 0.5_dp * dx2 + + ! b * (dx)**4 + bb = - 15.0_dp * y0 + 7.0_dp * dx1 - 1.0_dp * dx2 + + ! a * (dx)**5 + aa = 6.0_dp * y0 - 3.0_dp * dx1 + 0.5_dp * dx2 + + xr = xx / dx + yy = ((aa * xr + bb) * xr + cc) * xr**3 + + end function poly5zero + + + !! Returns the value of a free spline at a certain point. + !! \details The spline is created with the following boundary conditions: + !! Its value, 1st and 2nd derivatives agree with the provided values at + !! x = 0 and its value agrees with the provided value at x = dx. + !! \note If you want the value for a derivative, you have to query them both. + pure subroutine spline3_free(y0, y0p, y0pp, dx, ydx, xx, yy, yp, ypp) + + !> function value at x = 0 + real(dp), intent(in) :: y0 + + !> first derivative at x = 0 + real(dp), intent(in) :: y0p + + !> second derivative at x = 0 + real(dp), intent(in) :: y0pp + + !> function value at dx + real(dp), intent(in) :: ydx + + !> second fitting point + real(dp), intent(in) :: dx + + !> point to interpolate + real(dp), intent(in) :: xx + + !> value of the 3rd order polynomial at xx + real(dp), intent(out), optional :: yy + + !> first derivative at xx + real(dp), intent(out), optional :: yp + + !> second derivative at xx + real(dp), intent(out), optional :: ypp + + !! spline coefficients + real(dp) :: aa, bb, cc, dd + + !! reciprocal second fitting point + real(dp) :: dx1 + + ! assert(present(yp) .eqv. present(ypp)) + + dx1 = 1.0_dp / dx + + aa = y0 + bb = y0p + cc = 0.5_dp * y0pp + dd = (((ydx - y0) * dx1 - y0p) * dx1 - 0.5_dp * y0pp) * dx1 + + if (present(yy)) then + yy = ((dd * xx + cc) * xx + bb) * xx + aa + end if + + if (present(yp)) then + yp = (3.0_dp * dd * xx + 2.0_dp * cc) * xx + bb + ypp = 6.0_dp * dd * xx + 2.0_dp * cc + end if + + end subroutine spline3_free + + + !> Polynomial interpolation through given points. + !! \note The algorithm is based on the Numerical recipes. + pure function polyinter(xp, yp, xx) result(yy) + + !> x-coordinates of the fit points + real(dp), intent(in) :: xp(:) + + !> y-coordinates of the fit points + real(dp), intent(in) :: yp(:) + + !> point, where the polynomial should be evaluated + real(dp), intent(in) :: xx + + !! value of the polynomial + real(dp) :: yy + + !! number of interpolation abscissas + integer :: nn + + !! auxiliary variables + integer :: icl, ii, mm + real(dp) :: cc(size(xp)), dd(size(xp)) + real(dp) :: dx, dxnew, dyy, rtmp + + nn = size(xp) + + ! assert(nn > 1) + ! assert(size(yp) == nn) + + cc(:) = yp + dd(:) = yp + icl = 1 + dx = abs(xx - xp(icl)) + do ii = 2, nn + dxnew = abs(xx - xp(ii)) + if (dxnew < dx) then + icl = ii + dx = dxnew + end if + end do + yy = yp(icl) + icl = icl - 1 + do mm = 1, nn - 1 + do ii = 1, nn - mm + rtmp = xp(ii) - xp(ii + mm) + ! if (abs(rtmp) < epsilon(1.0_dp)) then + ! write(*,*) "Polint failed" + ! stop + ! end if + rtmp = (cc(ii + 1) - dd(ii)) / rtmp + cc(ii) = (xp(ii) - xx) * rtmp + dd(ii) = (xp(ii + mm) - xx) * rtmp + end do + if (2 * icl < nn - mm) then + dyy = cc(icl + 1) + else + dyy = dd(icl) + icl = icl - 1 + end if + yy = yy + dyy + end do + + end function polyinter + + + !> Returns cubic spline value at specified point x = dx. + !! + !! \note: Algorithm is based on the Numerical recipes. + subroutine get_cubic_spline(xx, fct, dds, dx, yy) + + !> abscissas + real(dp), intent(in) :: xx(:) + + !> ordinates + real(dp), intent(in) :: fct(:) + + !> spline's 2nd derivatives, derived from the data set via set_cubic_spline() + real(dp), intent(in) :: dds(:) + + !> evaluation point + real(dp), intent(in) :: dx + + !> cubic spline value at specified point dx + real(dp), intent(out) :: yy + + !! bisection search + integer :: left, right, middle + + !! difference of bracketing abscissas + real(dp) :: step + + !! auxiliary variables for spline evaluation + real(dp) :: aa, bb + + ! initialize bisection + left = 1 + right = size(xx) + + ! bisection search + do + if ((right - left) <= 1) exit + middle = (right + left) / 2 + if (dx >= xx(middle)) then + left = middle + else + right = middle + end if + end do + + step = xx(right) - xx(left) + aa = (xx(right) - dx) / step + bb = (dx - xx(left)) / step + + ! calculate the spline value + yy = aa * fct(left) + bb * fct(right) + step**2 / 6.0_dp * (aa**2 - 1.0_dp) * aa * dds(left)& + & + step**2 / 6.0_dp * (bb**2 - 1.0_dp) * bb * dds(right) + + end subroutine get_cubic_spline + + + !> Finds the 2nd derivatives of natural splines. + !! + !! \note Works only for equidistant points! + subroutine get2ndNaturalSplineDerivs(xx, fct, gama) + + !> abscissas + real(dp), intent(in) :: xx(:) + + !> ordinates + real(dp), intent(in) :: fct(:) + + !> array with 2nd derivatives + real(dp), intent(out), allocatable :: gama(:) + + !! iterates over spline nodes/equations + integer :: ii + + !! number of tabulated points, i.e. abscissas + integer :: nn + + !! error status + integer :: info + + !! tridiagonal equations + real(dp), allocatable :: beta(:), alpha(:) + + ! recurring pre-factors + real(dp) :: fac, step + + !! auxiliary variables for lapack solver + integer, allocatable :: IWORK(:), IPIV(:) + real(dp) :: RCOND, FERR(1), BERR(1) + real(dp), allocatable :: DLF(:), DF(:), DUF(:), DU2(:), WORK(:), SOL(:) + + nn = size(xx) + allocate(alpha(nn - 1)) + allocate(beta(nn)) + allocate(gama(nn)) + + ! pre-factors + step = 1.0_dp / real(nn + 1, dp) + step = step**2 / 6.0_dp + fac = step * 4.0_dp + + ! fill the matrix + gama(1) = 0.0_dp + gama(nn) = 0.0_dp + beta(1) = step + beta(nn) = step + alpha(1) = step + + do ii = 2, nn - 1 + gama(ii) = fct(ii + 1) - 2.0_dp * fct(ii) + fct(ii - 1) + beta(ii) = fac + alpha(ii) = step + end do + + ! set up lapack variables + allocate(DLF(nn - 1)) + allocate(DUF(nn - 1)) + allocate(DF(nn)) + allocate(DU2(nn - 2)) + allocate(WORK(3 * nn)) + allocate(IWORK(nn)) + allocate(IPIV(nn)) + allocate(SOL(nn)) + + ! solve the equation + call DGTSVX('N', 'N', nn, 1, alpha, beta, alpha, DLF, DF, DUF, DU2, IPIV, gama,& + & nn, SOL, nn, RCOND, FERR, BERR, WORK, IWORK, INFO) + + gama = SOL + + end subroutine get2ndNaturalSplineDerivs + + + !> Find second derivatives of the splines at tabulated function points. + !! + !! \note Algorithm is based on the Numerical recipes. + !! \details Recursion relation: u(i) = gama(i) + beta(i)u(i+1) + subroutine set_cubic_spline(xx, fct, ds1, dsn, gama, tNatural) + + !> abscissas + real(dp), intent(in) :: xx(:) + + !> ordinates + real(dp), intent(in) :: fct(:) + + !> first derivative of the interpolating function at point 1 + real(dp), intent(in) :: ds1 + + !> first derivative of the interpolating function at point N + real(dp), intent(in) :: dsn + + !> 2nd derivatives of the interpolating function at the tabulated points + real(dp), intent(out), allocatable :: gama(:) + + !> true, if natural splines are desired (2nd derivative equal to zero at boundary), + !! otherwise lower/upper boundary condition is set to have a specified first derivative (ds1) + logical, intent(in) :: tNatural + + !! iterates over spline nodes/equations + integer :: ii + + !! number of tabulated points, i.e. abscissas + integer :: nn + + !! + real(dp) :: mu_i, xi_i + + !! + real(dp), allocatable :: beta(:) + + allocate(beta(size(xx))) + allocate(gama(size(xx))) + + nn = size(xx) + + ! first equation with boundary condition ds1 + if (tNatural) then + beta(1) = 0.0_dp + gama(1) = 0.0_dp + else + beta(1) = - 0.5_dp + gama(1) = 3.0_dp / (xx(2) - xx(1)) * (fct(2) - fct(1) / (xx(2) - xx(1)) - ds1) + end if + + ! middle equations + do ii = 2, nn - 1 + mu_i = (xx(ii) - xx(ii - 1)) / (xx(ii + 1) - xx(ii - 1)) + xi_i = (2.0_dp + mu_i * beta(ii - 1)) + beta(ii) = (mu_i - 1.0_dp) / xi_i + gama(ii) = ((6.0_dp / (xx(ii + 1) - xx(ii - 1))) * ((fct(ii + 1) - fct(ii))& + & / (xx(ii + 1) - xx(ii)) - (fct(ii) - fct(ii - 1)) / (xx(ii) - xx(ii - 1)))& + & - mu_i * gama(ii - 1) ) / xi_i + end do + + ! last equation with boundary value dsn + if (tNatural) then + gama(nn) = 0.0_dp + else + gama(nn) = (6.0_dp / (xx(nn) - xx(nn - 1)) * (dsn - (fct(nn) - fct(nn - 1))& + & / (xx(nn) - xx(nn - 1)) - gama(nn - 1)) / (2.0_dp + beta(nn - 1)) ) + end if + + ! backsubstitution + do ii = nn - 1, 1, -1 + gama(ii) = gama(ii) + beta(ii) * gama(ii + 1) + end do + + end subroutine set_cubic_spline + +end module common_interpolation diff --git a/common/lib/lebedev_laikov.F90 b/common/lib/lebedev_laikov.F90 new file mode 100644 index 00000000..b36f659e --- /dev/null +++ b/common/lib/lebedev_laikov.F90 @@ -0,0 +1,107 @@ +!> Wrapper module for the old F77 Lebedev-Laikov routines. +module common_lebedev_laikov + + use common_accuracy, only : r8 + + implicit none + private + + public :: ld0006, ld0014, ld0026, ld0038, ld0050, ld0074, ld0086, ld0110, ld0146, ld0170, ld0194,& + & ld0230, ld0266, ld0302, ld0350 + + + interface + + subroutine ld0006(x, y, z, w, n) + import :: r8 + real(r8), intent(out) :: x(6), y(6), z(6), w(6) + integer, intent(out) :: n + end subroutine ld0006 + + subroutine ld0014(x, y, z, w, n) + import :: r8 + real(r8), intent(out) :: x(14), y(14), z(14), w(14) + integer, intent(out) :: n + end subroutine ld0014 + + subroutine ld0026(x, y, z, w, n) + import :: r8 + real(r8), intent(out) :: x(26), y(26), z(26), w(26) + integer, intent(out) :: n + end subroutine ld0026 + + subroutine ld0038(x, y, z, w, n) + import :: r8 + real(r8), intent(out) :: x(38), y(38), z(38), w(38) + integer, intent(out) :: n + end subroutine ld0038 + + subroutine ld0050(x, y, z, w, n) + import :: r8 + real(r8), intent(out) :: x(50), y(50), z(50), w(50) + integer, intent(out) :: n + end subroutine ld0050 + + subroutine ld0074(x, y, z, w, n) + import :: r8 + real(r8), intent(out) :: x(74), y(74), z(74), w(74) + integer, intent(out) :: n + end subroutine ld0074 + + subroutine ld0086(x, y, z, w, n) + import :: r8 + real(r8), intent(out) :: x(86), y(86), z(86), w(86) + integer, intent(out) :: n + end subroutine ld0086 + + subroutine ld0110(x, y, z, w, n) + import :: r8 + real(r8), intent(out) :: x(110), y(110), z(110), w(110) + integer, intent(out) :: n + end subroutine ld0110 + + subroutine ld0146(x, y, z, w, n) + import :: r8 + real(r8), intent(out) :: x(146), y(146), z(146), w(146) + integer, intent(out) :: n + end subroutine ld0146 + + subroutine ld0170(x, y, z, w, n) + import :: r8 + real(r8), intent(out) :: x(170), y(170), z(170), w(170) + integer, intent(out) :: n + end subroutine ld0170 + + subroutine ld0194(x, y, z, w, n) + import :: r8 + real(r8), intent(out) :: x(194), y(194), z(194), w(194) + integer, intent(out) :: n + end subroutine ld0194 + + subroutine ld0230(x, y, z, w, n) + import :: r8 + real(r8), intent(out) :: x(230), y(230), z(230), w(230) + integer, intent(out) :: n + end subroutine ld0230 + + subroutine ld0266(x, y, z, w, n) + import :: r8 + real(r8), intent(out) :: x(266), y(266), z(266), w(266) + integer, intent(out) :: n + end subroutine ld0266 + + subroutine ld0302(x, y, z, w, n) + import :: r8 + real(r8), intent(out) :: x(302), y(302), z(302), w(302) + integer, intent(out) :: n + end subroutine ld0302 + + subroutine ld0350(x, y, z, w, n) + import :: r8 + real(r8), intent(out) :: x(350), y(350), z(350), w(350) + integer, intent(out) :: n + end subroutine ld0350 + + end interface + +end module common_lebedev_laikov diff --git a/common/lib/lebedev_laikov_f77.f b/common/lib/lebedev_laikov_f77.f new file mode 100644 index 00000000..7d9da37d --- /dev/null +++ b/common/lib/lebedev_laikov_f77.f @@ -0,0 +1,6949 @@ + subroutine gen_oh(code, num, x, y, z, w, a, b, v) + implicit logical(a-z) + double precision x(*),y(*),z(*),w(*) + double precision a,b,v + integer code + integer num + double precision c +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated from C to fortran77 by hand. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd +cvw +cvw Given a point on a sphere (specified by a and b), generate all +cvw the equivalent points under Oh symmetry, making grid points with +cvw weight v. +cvw The variable num is increased by the number of different points +cvw generated. +cvw +cvw Depending on code, there are 6...48 different but equivalent +cvw points. +cvw +cvw code=1: (0,0,1) etc ( 6 points) +cvw code=2: (0,a,a) etc, a=1/sqrt(2) ( 12 points) +cvw code=3: (a,a,a) etc, a=1/sqrt(3) ( 8 points) +cvw code=4: (a,a,b) etc, b=sqrt(1-2 a^2) ( 24 points) +cvw code=5: (a,b,0) etc, b=sqrt(1-a^2), a input ( 24 points) +cvw code=6: (a,b,c) etc, c=sqrt(1-a^2-b^2), a/b input ( 48 points) +cvw + goto (1,2,3,4,5,6) code + write (6,*) 'Gen_Oh: Invalid Code' + stop + 1 continue + a=1.0d0 + x(1) = a + y(1) = 0.0d0 + z(1) = 0.0d0 + w(1) = v + x(2) = -a + y(2) = 0.0d0 + z(2) = 0.0d0 + w(2) = v + x(3) = 0.0d0 + y(3) = a + z(3) = 0.0d0 + w(3) = v + x(4) = 0.0d0 + y(4) = -a + z(4) = 0.0d0 + w(4) = v + x(5) = 0.0d0 + y(5) = 0.0d0 + z(5) = a + w(5) = v + x(6) = 0.0d0 + y(6) = 0.0d0 + z(6) = -a + w(6) = v + num=num+6 + return +cvw + 2 continue + a=sqrt(0.5d0) + x( 1) = 0d0 + y( 1) = a + z( 1) = a + w( 1) = v + x( 2) = 0d0 + y( 2) = -a + z( 2) = a + w( 2) = v + x( 3) = 0d0 + y( 3) = a + z( 3) = -a + w( 3) = v + x( 4) = 0d0 + y( 4) = -a + z( 4) = -a + w( 4) = v + x( 5) = a + y( 5) = 0d0 + z( 5) = a + w( 5) = v + x( 6) = -a + y( 6) = 0d0 + z( 6) = a + w( 6) = v + x( 7) = a + y( 7) = 0d0 + z( 7) = -a + w( 7) = v + x( 8) = -a + y( 8) = 0d0 + z( 8) = -a + w( 8) = v + x( 9) = a + y( 9) = a + z( 9) = 0d0 + w( 9) = v + x(10) = -a + y(10) = a + z(10) = 0d0 + w(10) = v + x(11) = a + y(11) = -a + z(11) = 0d0 + w(11) = v + x(12) = -a + y(12) = -a + z(12) = 0d0 + w(12) = v + num=num+12 + return +cvw + 3 continue + a = sqrt(1d0/3d0) + x(1) = a + y(1) = a + z(1) = a + w(1) = v + x(2) = -a + y(2) = a + z(2) = a + w(2) = v + x(3) = a + y(3) = -a + z(3) = a + w(3) = v + x(4) = -a + y(4) = -a + z(4) = a + w(4) = v + x(5) = a + y(5) = a + z(5) = -a + w(5) = v + x(6) = -a + y(6) = a + z(6) = -a + w(6) = v + x(7) = a + y(7) = -a + z(7) = -a + w(7) = v + x(8) = -a + y(8) = -a + z(8) = -a + w(8) = v + num=num+8 + return +cvw + 4 continue + b = sqrt(1d0 - 2d0*a*a) + x( 1) = a + y( 1) = a + z( 1) = b + w( 1) = v + x( 2) = -a + y( 2) = a + z( 2) = b + w( 2) = v + x( 3) = a + y( 3) = -a + z( 3) = b + w( 3) = v + x( 4) = -a + y( 4) = -a + z( 4) = b + w( 4) = v + x( 5) = a + y( 5) = a + z( 5) = -b + w( 5) = v + x( 6) = -a + y( 6) = a + z( 6) = -b + w( 6) = v + x( 7) = a + y( 7) = -a + z( 7) = -b + w( 7) = v + x( 8) = -a + y( 8) = -a + z( 8) = -b + w( 8) = v + x( 9) = a + y( 9) = b + z( 9) = a + w( 9) = v + x(10) = -a + y(10) = b + z(10) = a + w(10) = v + x(11) = a + y(11) = -b + z(11) = a + w(11) = v + x(12) = -a + y(12) = -b + z(12) = a + w(12) = v + x(13) = a + y(13) = b + z(13) = -a + w(13) = v + x(14) = -a + y(14) = b + z(14) = -a + w(14) = v + x(15) = a + y(15) = -b + z(15) = -a + w(15) = v + x(16) = -a + y(16) = -b + z(16) = -a + w(16) = v + x(17) = b + y(17) = a + z(17) = a + w(17) = v + x(18) = -b + y(18) = a + z(18) = a + w(18) = v + x(19) = b + y(19) = -a + z(19) = a + w(19) = v + x(20) = -b + y(20) = -a + z(20) = a + w(20) = v + x(21) = b + y(21) = a + z(21) = -a + w(21) = v + x(22) = -b + y(22) = a + z(22) = -a + w(22) = v + x(23) = b + y(23) = -a + z(23) = -a + w(23) = v + x(24) = -b + y(24) = -a + z(24) = -a + w(24) = v + num=num+24 + return +cvw + 5 continue + b=sqrt(1d0-a*a) + x( 1) = a + y( 1) = b + z( 1) = 0d0 + w( 1) = v + x( 2) = -a + y( 2) = b + z( 2) = 0d0 + w( 2) = v + x( 3) = a + y( 3) = -b + z( 3) = 0d0 + w( 3) = v + x( 4) = -a + y( 4) = -b + z( 4) = 0d0 + w( 4) = v + x( 5) = b + y( 5) = a + z( 5) = 0d0 + w( 5) = v + x( 6) = -b + y( 6) = a + z( 6) = 0d0 + w( 6) = v + x( 7) = b + y( 7) = -a + z( 7) = 0d0 + w( 7) = v + x( 8) = -b + y( 8) = -a + z( 8) = 0d0 + w( 8) = v + x( 9) = a + y( 9) = 0d0 + z( 9) = b + w( 9) = v + x(10) = -a + y(10) = 0d0 + z(10) = b + w(10) = v + x(11) = a + y(11) = 0d0 + z(11) = -b + w(11) = v + x(12) = -a + y(12) = 0d0 + z(12) = -b + w(12) = v + x(13) = b + y(13) = 0d0 + z(13) = a + w(13) = v + x(14) = -b + y(14) = 0d0 + z(14) = a + w(14) = v + x(15) = b + y(15) = 0d0 + z(15) = -a + w(15) = v + x(16) = -b + y(16) = 0d0 + z(16) = -a + w(16) = v + x(17) = 0d0 + y(17) = a + z(17) = b + w(17) = v + x(18) = 0d0 + y(18) = -a + z(18) = b + w(18) = v + x(19) = 0d0 + y(19) = a + z(19) = -b + w(19) = v + x(20) = 0d0 + y(20) = -a + z(20) = -b + w(20) = v + x(21) = 0d0 + y(21) = b + z(21) = a + w(21) = v + x(22) = 0d0 + y(22) = -b + z(22) = a + w(22) = v + x(23) = 0d0 + y(23) = b + z(23) = -a + w(23) = v + x(24) = 0d0 + y(24) = -b + z(24) = -a + w(24) = v + num=num+24 + return +cvw + 6 continue + c=sqrt(1d0 - a*a - b*b) + x( 1) = a + y( 1) = b + z( 1) = c + w( 1) = v + x( 2) = -a + y( 2) = b + z( 2) = c + w( 2) = v + x( 3) = a + y( 3) = -b + z( 3) = c + w( 3) = v + x( 4) = -a + y( 4) = -b + z( 4) = c + w( 4) = v + x( 5) = a + y( 5) = b + z( 5) = -c + w( 5) = v + x( 6) = -a + y( 6) = b + z( 6) = -c + w( 6) = v + x( 7) = a + y( 7) = -b + z( 7) = -c + w( 7) = v + x( 8) = -a + y( 8) = -b + z( 8) = -c + w( 8) = v + x( 9) = a + y( 9) = c + z( 9) = b + w( 9) = v + x(10) = -a + y(10) = c + z(10) = b + w(10) = v + x(11) = a + y(11) = -c + z(11) = b + w(11) = v + x(12) = -a + y(12) = -c + z(12) = b + w(12) = v + x(13) = a + y(13) = c + z(13) = -b + w(13) = v + x(14) = -a + y(14) = c + z(14) = -b + w(14) = v + x(15) = a + y(15) = -c + z(15) = -b + w(15) = v + x(16) = -a + y(16) = -c + z(16) = -b + w(16) = v + x(17) = b + y(17) = a + z(17) = c + w(17) = v + x(18) = -b + y(18) = a + z(18) = c + w(18) = v + x(19) = b + y(19) = -a + z(19) = c + w(19) = v + x(20) = -b + y(20) = -a + z(20) = c + w(20) = v + x(21) = b + y(21) = a + z(21) = -c + w(21) = v + x(22) = -b + y(22) = a + z(22) = -c + w(22) = v + x(23) = b + y(23) = -a + z(23) = -c + w(23) = v + x(24) = -b + y(24) = -a + z(24) = -c + w(24) = v + x(25) = b + y(25) = c + z(25) = a + w(25) = v + x(26) = -b + y(26) = c + z(26) = a + w(26) = v + x(27) = b + y(27) = -c + z(27) = a + w(27) = v + x(28) = -b + y(28) = -c + z(28) = a + w(28) = v + x(29) = b + y(29) = c + z(29) = -a + w(29) = v + x(30) = -b + y(30) = c + z(30) = -a + w(30) = v + x(31) = b + y(31) = -c + z(31) = -a + w(31) = v + x(32) = -b + y(32) = -c + z(32) = -a + w(32) = v + x(33) = c + y(33) = a + z(33) = b + w(33) = v + x(34) = -c + y(34) = a + z(34) = b + w(34) = v + x(35) = c + y(35) = -a + z(35) = b + w(35) = v + x(36) = -c + y(36) = -a + z(36) = b + w(36) = v + x(37) = c + y(37) = a + z(37) = -b + w(37) = v + x(38) = -c + y(38) = a + z(38) = -b + w(38) = v + x(39) = c + y(39) = -a + z(39) = -b + w(39) = v + x(40) = -c + y(40) = -a + z(40) = -b + w(40) = v + x(41) = c + y(41) = b + z(41) = a + w(41) = v + x(42) = -c + y(42) = b + z(42) = a + w(42) = v + x(43) = c + y(43) = -b + z(43) = a + w(43) = v + x(44) = -c + y(44) = -b + z(44) = a + w(44) = v + x(45) = c + y(45) = b + z(45) = -a + w(45) = v + x(46) = -c + y(46) = b + z(46) = -a + w(46) = v + x(47) = c + y(47) = -b + z(47) = -a + w(47) = v + x(48) = -c + y(48) = -b + z(48) = -a + w(48) = v + num=num+48 + return + end + SUBROUTINE LD0006(X,Y,Z,W,N) + DOUBLE PRECISION X( 6) + DOUBLE PRECISION Y( 6) + DOUBLE PRECISION Z( 6) + DOUBLE PRECISION W( 6) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 6-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.1666666666666667D+0 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD0014(X,Y,Z,W,N) + DOUBLE PRECISION X( 14) + DOUBLE PRECISION Y( 14) + DOUBLE PRECISION Z( 14) + DOUBLE PRECISION W( 14) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 14-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.6666666666666667D-1 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.7500000000000000D-1 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD0026(X,Y,Z,W,N) + DOUBLE PRECISION X( 26) + DOUBLE PRECISION Y( 26) + DOUBLE PRECISION Z( 26) + DOUBLE PRECISION W( 26) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 26-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.4761904761904762D-1 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.3809523809523810D-1 + Call GEN_OH( 2, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.3214285714285714D-1 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD0038(X,Y,Z,W,N) + DOUBLE PRECISION X( 38) + DOUBLE PRECISION Y( 38) + DOUBLE PRECISION Z( 38) + DOUBLE PRECISION W( 38) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 38-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.9523809523809524D-2 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.3214285714285714D-1 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4597008433809831D+0 + V=0.2857142857142857D-1 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD0050(X,Y,Z,W,N) + DOUBLE PRECISION X( 50) + DOUBLE PRECISION Y( 50) + DOUBLE PRECISION Z( 50) + DOUBLE PRECISION W( 50) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 50-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.1269841269841270D-1 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.2257495590828924D-1 + Call GEN_OH( 2, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.2109375000000000D-1 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3015113445777636D+0 + V=0.2017333553791887D-1 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD0074(X,Y,Z,W,N) + DOUBLE PRECISION X( 74) + DOUBLE PRECISION Y( 74) + DOUBLE PRECISION Z( 74) + DOUBLE PRECISION W( 74) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 74-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.5130671797338464D-3 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.1660406956574204D-1 + Call GEN_OH( 2, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=-0.2958603896103896D-1 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4803844614152614D+0 + V=0.2657620708215946D-1 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3207726489807764D+0 + V=0.1652217099371571D-1 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD0086(X,Y,Z,W,N) + DOUBLE PRECISION X( 86) + DOUBLE PRECISION Y( 86) + DOUBLE PRECISION Z( 86) + DOUBLE PRECISION W( 86) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 86-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.1154401154401154D-1 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.1194390908585628D-1 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3696028464541502D+0 + V=0.1111055571060340D-1 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6943540066026664D+0 + V=0.1187650129453714D-1 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3742430390903412D+0 + V=0.1181230374690448D-1 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD0110(X,Y,Z,W,N) + DOUBLE PRECISION X( 110) + DOUBLE PRECISION Y( 110) + DOUBLE PRECISION Z( 110) + DOUBLE PRECISION W( 110) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 110-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.3828270494937162D-2 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.9793737512487512D-2 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1851156353447362D+0 + V=0.8211737283191111D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6904210483822922D+0 + V=0.9942814891178103D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3956894730559419D+0 + V=0.9595471336070963D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4783690288121502D+0 + V=0.9694996361663028D-2 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD0146(X,Y,Z,W,N) + DOUBLE PRECISION X( 146) + DOUBLE PRECISION Y( 146) + DOUBLE PRECISION Z( 146) + DOUBLE PRECISION W( 146) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 146-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.5996313688621381D-3 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.7372999718620756D-2 + Call GEN_OH( 2, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.7210515360144488D-2 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6764410400114264D+0 + V=0.7116355493117555D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4174961227965453D+0 + V=0.6753829486314477D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1574676672039082D+0 + V=0.7574394159054034D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1403553811713183D+0 + B=0.4493328323269557D+0 + V=0.6991087353303262D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD0170(X,Y,Z,W,N) + DOUBLE PRECISION X( 170) + DOUBLE PRECISION Y( 170) + DOUBLE PRECISION Z( 170) + DOUBLE PRECISION W( 170) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 170-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.5544842902037365D-2 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.6071332770670752D-2 + Call GEN_OH( 2, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.6383674773515093D-2 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2551252621114134D+0 + V=0.5183387587747790D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6743601460362766D+0 + V=0.6317929009813725D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4318910696719410D+0 + V=0.6201670006589077D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2613931360335988D+0 + V=0.5477143385137348D-2 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4990453161796037D+0 + B=0.1446630744325115D+0 + V=0.5968383987681156D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD0194(X,Y,Z,W,N) + DOUBLE PRECISION X( 194) + DOUBLE PRECISION Y( 194) + DOUBLE PRECISION Z( 194) + DOUBLE PRECISION W( 194) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 194-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.1782340447244611D-2 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.5716905949977102D-2 + Call GEN_OH( 2, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.5573383178848738D-2 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6712973442695226D+0 + V=0.5608704082587997D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2892465627575439D+0 + V=0.5158237711805383D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4446933178717437D+0 + V=0.5518771467273614D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1299335447650067D+0 + V=0.4106777028169394D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3457702197611283D+0 + V=0.5051846064614808D-2 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1590417105383530D+0 + B=0.8360360154824589D+0 + V=0.5530248916233094D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD0230(X,Y,Z,W,N) + DOUBLE PRECISION X( 230) + DOUBLE PRECISION Y( 230) + DOUBLE PRECISION Z( 230) + DOUBLE PRECISION W( 230) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 230-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=-0.5522639919727325D-1 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.4450274607445226D-2 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4492044687397611D+0 + V=0.4496841067921404D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2520419490210201D+0 + V=0.5049153450478750D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6981906658447242D+0 + V=0.3976408018051883D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6587405243460960D+0 + V=0.4401400650381014D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4038544050097660D-1 + V=0.1724544350544401D-1 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5823842309715585D+0 + V=0.4231083095357343D-2 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3545877390518688D+0 + V=0.5198069864064399D-2 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2272181808998187D+0 + B=0.4864661535886647D+0 + V=0.4695720972568883D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD0266(X,Y,Z,W,N) + DOUBLE PRECISION X( 266) + DOUBLE PRECISION Y( 266) + DOUBLE PRECISION Z( 266) + DOUBLE PRECISION W( 266) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 266-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=-0.1313769127326952D-2 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=-0.2522728704859336D-2 + Call GEN_OH( 2, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.4186853881700583D-2 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7039373391585475D+0 + V=0.5315167977810885D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1012526248572414D+0 + V=0.4047142377086219D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4647448726420539D+0 + V=0.4112482394406990D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3277420654971629D+0 + V=0.3595584899758782D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6620338663699974D+0 + V=0.4256131351428158D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.8506508083520399D+0 + V=0.4229582700647240D-2 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3233484542692899D+0 + B=0.1153112011009701D+0 + V=0.4080914225780505D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2314790158712601D+0 + B=0.5244939240922365D+0 + V=0.4071467593830964D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD0302(X,Y,Z,W,N) + DOUBLE PRECISION X( 302) + DOUBLE PRECISION Y( 302) + DOUBLE PRECISION Z( 302) + DOUBLE PRECISION W( 302) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 302-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.8545911725128148D-3 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.3599119285025571D-2 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3515640345570105D+0 + V=0.3449788424305883D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6566329410219612D+0 + V=0.3604822601419882D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4729054132581005D+0 + V=0.3576729661743367D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.9618308522614784D-1 + V=0.2352101413689164D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2219645236294178D+0 + V=0.3108953122413675D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7011766416089545D+0 + V=0.3650045807677255D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2644152887060663D+0 + V=0.2982344963171804D-2 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5718955891878961D+0 + V=0.3600820932216460D-2 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2510034751770465D+0 + B=0.8000727494073952D+0 + V=0.3571540554273387D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1233548532583327D+0 + B=0.4127724083168531D+0 + V=0.3392312205006170D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD0350(X,Y,Z,W,N) + DOUBLE PRECISION X( 350) + DOUBLE PRECISION Y( 350) + DOUBLE PRECISION Z( 350) + DOUBLE PRECISION W( 350) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 350-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.3006796749453936D-2 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.3050627745650771D-2 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7068965463912316D+0 + V=0.1621104600288991D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4794682625712025D+0 + V=0.3005701484901752D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1927533154878019D+0 + V=0.2990992529653774D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6930357961327123D+0 + V=0.2982170644107595D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3608302115520091D+0 + V=0.2721564237310992D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6498486161496169D+0 + V=0.3033513795811141D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1932945013230339D+0 + V=0.3007949555218533D-2 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3800494919899303D+0 + V=0.2881964603055307D-2 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2899558825499574D+0 + B=0.7934537856582316D+0 + V=0.2958357626535696D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.9684121455103957D-1 + B=0.8280801506686862D+0 + V=0.3036020026407088D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1833434647041659D+0 + B=0.9074658265305127D+0 + V=0.2832187403926303D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD0434(X,Y,Z,W,N) + DOUBLE PRECISION X( 434) + DOUBLE PRECISION Y( 434) + DOUBLE PRECISION Z( 434) + DOUBLE PRECISION W( 434) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 434-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.5265897968224436D-3 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.2548219972002607D-2 + Call GEN_OH( 2, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.2512317418927307D-2 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6909346307509111D+0 + V=0.2530403801186355D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1774836054609158D+0 + V=0.2014279020918528D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4914342637784746D+0 + V=0.2501725168402936D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6456664707424256D+0 + V=0.2513267174597564D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2861289010307638D+0 + V=0.2302694782227416D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7568084367178018D-1 + V=0.1462495621594614D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3927259763368002D+0 + V=0.2445373437312980D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.8818132877794288D+0 + V=0.2417442375638981D-2 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.9776428111182649D+0 + V=0.1910951282179532D-2 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2054823696403044D+0 + B=0.8689460322872412D+0 + V=0.2416930044324775D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5905157048925271D+0 + B=0.7999278543857286D+0 + V=0.2512236854563495D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5550152361076807D+0 + B=0.7717462626915901D+0 + V=0.2496644054553086D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.9371809858553722D+0 + B=0.3344363145343455D+0 + V=0.2236607760437849D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD0590(X,Y,Z,W,N) + DOUBLE PRECISION X( 590) + DOUBLE PRECISION Y( 590) + DOUBLE PRECISION Z( 590) + DOUBLE PRECISION W( 590) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 590-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.3095121295306187D-3 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.1852379698597489D-2 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7040954938227469D+0 + V=0.1871790639277744D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6807744066455243D+0 + V=0.1858812585438317D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6372546939258752D+0 + V=0.1852028828296213D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5044419707800358D+0 + V=0.1846715956151242D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4215761784010967D+0 + V=0.1818471778162769D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3317920736472123D+0 + V=0.1749564657281154D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2384736701421887D+0 + V=0.1617210647254411D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1459036449157763D+0 + V=0.1384737234851692D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6095034115507196D-1 + V=0.9764331165051050D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6116843442009876D+0 + V=0.1857161196774078D-2 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3964755348199858D+0 + V=0.1705153996395864D-2 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1724782009907724D+0 + V=0.1300321685886048D-2 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5610263808622060D+0 + B=0.3518280927733519D+0 + V=0.1842866472905286D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4742392842551980D+0 + B=0.2634716655937950D+0 + V=0.1802658934377451D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5984126497885380D+0 + B=0.1816640840360209D+0 + V=0.1849830560443660D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3791035407695563D+0 + B=0.1720795225656878D+0 + V=0.1713904507106709D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2778673190586244D+0 + B=0.8213021581932511D-1 + V=0.1555213603396808D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5033564271075117D+0 + B=0.8999205842074875D-1 + V=0.1802239128008525D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD0770(X,Y,Z,W,N) + DOUBLE PRECISION X( 770) + DOUBLE PRECISION Y( 770) + DOUBLE PRECISION Z( 770) + DOUBLE PRECISION W( 770) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 770-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.2192942088181184D-3 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.1436433617319080D-2 + Call GEN_OH( 2, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.1421940344335877D-2 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5087204410502360D-1 + V=0.6798123511050502D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1228198790178831D+0 + V=0.9913184235294912D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2026890814408786D+0 + V=0.1180207833238949D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2847745156464294D+0 + V=0.1296599602080921D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3656719078978026D+0 + V=0.1365871427428316D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4428264886713469D+0 + V=0.1402988604775325D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5140619627249735D+0 + V=0.1418645563595609D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6306401219166803D+0 + V=0.1421376741851662D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6716883332022612D+0 + V=0.1423996475490962D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6979792685336881D+0 + V=0.1431554042178567D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1446865674195309D+0 + V=0.9254401499865368D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3390263475411216D+0 + V=0.1250239995053509D-2 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5335804651263506D+0 + V=0.1394365843329230D-2 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6944024393349413D-1 + B=0.2355187894242326D+0 + V=0.1127089094671749D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2269004109529460D+0 + B=0.4102182474045730D+0 + V=0.1345753760910670D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.8025574607775339D-1 + B=0.6214302417481605D+0 + V=0.1424957283316783D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1467999527896572D+0 + B=0.3245284345717394D+0 + V=0.1261523341237750D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1571507769824727D+0 + B=0.5224482189696630D+0 + V=0.1392547106052696D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2365702993157246D+0 + B=0.6017546634089558D+0 + V=0.1418761677877656D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7714815866765732D-1 + B=0.4346575516141163D+0 + V=0.1338366684479554D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3062936666210730D+0 + B=0.4908826589037616D+0 + V=0.1393700862676131D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3822477379524787D+0 + B=0.5648768149099500D+0 + V=0.1415914757466932D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD0974(X,Y,Z,W,N) + DOUBLE PRECISION X( 974) + DOUBLE PRECISION Y( 974) + DOUBLE PRECISION Z( 974) + DOUBLE PRECISION W( 974) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 974-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.1438294190527431D-3 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.1125772288287004D-2 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4292963545341347D-1 + V=0.4948029341949241D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1051426854086404D+0 + V=0.7357990109125470D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1750024867623087D+0 + V=0.8889132771304384D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2477653379650257D+0 + V=0.9888347838921435D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3206567123955957D+0 + V=0.1053299681709471D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3916520749849983D+0 + V=0.1092778807014578D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4590825874187624D+0 + V=0.1114389394063227D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5214563888415861D+0 + V=0.1123724788051555D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6253170244654199D+0 + V=0.1125239325243814D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6637926744523170D+0 + V=0.1126153271815905D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6910410398498301D+0 + V=0.1130286931123841D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7052907007457760D+0 + V=0.1134986534363955D-2 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1236686762657990D+0 + V=0.6823367927109931D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2940777114468387D+0 + V=0.9454158160447096D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4697753849207649D+0 + V=0.1074429975385679D-2 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6334563241139567D+0 + V=0.1129300086569132D-2 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5974048614181342D-1 + B=0.2029128752777523D+0 + V=0.8436884500901954D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1375760408473636D+0 + B=0.4602621942484054D+0 + V=0.1075255720448885D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3391016526336286D+0 + B=0.5030673999662036D+0 + V=0.1108577236864462D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1271675191439820D+0 + B=0.2817606422442134D+0 + V=0.9566475323783357D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2693120740413512D+0 + B=0.4331561291720157D+0 + V=0.1080663250717391D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1419786452601918D+0 + B=0.6256167358580814D+0 + V=0.1126797131196295D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6709284600738255D-1 + B=0.3798395216859157D+0 + V=0.1022568715358061D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7057738183256172D-1 + B=0.5517505421423520D+0 + V=0.1108960267713108D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2783888477882155D+0 + B=0.6029619156159187D+0 + V=0.1122790653435766D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1979578938917407D+0 + B=0.3589606329589096D+0 + V=0.1032401847117460D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2087307061103274D+0 + B=0.5348666438135476D+0 + V=0.1107249382283854D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4055122137872836D+0 + B=0.5674997546074373D+0 + V=0.1121780048519972D-2 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD1202(X,Y,Z,W,N) + DOUBLE PRECISION X(1202) + DOUBLE PRECISION Y(1202) + DOUBLE PRECISION Z(1202) + DOUBLE PRECISION W(1202) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 1202-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.1105189233267572D-3 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.9205232738090741D-3 + Call GEN_OH( 2, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.9133159786443561D-3 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3712636449657089D-1 + V=0.3690421898017899D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.9140060412262223D-1 + V=0.5603990928680660D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1531077852469906D+0 + V=0.6865297629282609D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2180928891660612D+0 + V=0.7720338551145630D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2839874532200175D+0 + V=0.8301545958894795D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3491177600963764D+0 + V=0.8686692550179628D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4121431461444309D+0 + V=0.8927076285846890D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4718993627149127D+0 + V=0.9060820238568219D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5273145452842337D+0 + V=0.9119777254940867D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6209475332444019D+0 + V=0.9128720138604181D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6569722711857291D+0 + V=0.9130714935691735D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6841788309070143D+0 + V=0.9152873784554116D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7012604330123631D+0 + V=0.9187436274321654D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1072382215478166D+0 + V=0.5176977312965694D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2582068959496968D+0 + V=0.7331143682101417D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4172752955306717D+0 + V=0.8463232836379928D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5700366911792503D+0 + V=0.9031122694253992D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.9827986018263947D+0 + B=0.1771774022615325D+0 + V=0.6485778453163257D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.9624249230326228D+0 + B=0.2475716463426288D+0 + V=0.7435030910982369D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.9402007994128811D+0 + B=0.3354616289066489D+0 + V=0.7998527891839054D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.9320822040143202D+0 + B=0.3173615246611977D+0 + V=0.8101731497468018D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.9043674199393299D+0 + B=0.4090268427085357D+0 + V=0.8483389574594331D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.8912407560074747D+0 + B=0.3854291150669224D+0 + V=0.8556299257311812D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.8676435628462708D+0 + B=0.4932221184851285D+0 + V=0.8803208679738260D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.8581979986041619D+0 + B=0.4785320675922435D+0 + V=0.8811048182425720D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.8396753624049856D+0 + B=0.4507422593157064D+0 + V=0.8850282341265444D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.8165288564022188D+0 + B=0.5632123020762100D+0 + V=0.9021342299040653D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.8015469370783529D+0 + B=0.5434303569693900D+0 + V=0.9010091677105086D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7773563069070351D+0 + B=0.5123518486419871D+0 + V=0.9022692938426915D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7661621213900394D+0 + B=0.6394279634749102D+0 + V=0.9158016174693465D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7553584143533510D+0 + B=0.6269805509024392D+0 + V=0.9131578003189435D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7344305757559503D+0 + B=0.6031161693096310D+0 + V=0.9107813579482705D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7043837184021765D+0 + B=0.5693702498468441D+0 + V=0.9105760258970126D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD1454(X,Y,Z,W,N) + DOUBLE PRECISION X(1454) + DOUBLE PRECISION Y(1454) + DOUBLE PRECISION Z(1454) + DOUBLE PRECISION W(1454) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 1454-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.7777160743261247D-4 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.7557646413004701D-3 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3229290663413854D-1 + V=0.2841633806090617D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.8036733271462222D-1 + V=0.4374419127053555D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1354289960531653D+0 + V=0.5417174740872172D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1938963861114426D+0 + V=0.6148000891358593D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2537343715011275D+0 + V=0.6664394485800705D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3135251434752570D+0 + V=0.7025039356923220D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3721558339375338D+0 + V=0.7268511789249627D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4286809575195696D+0 + V=0.7422637534208629D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4822510128282994D+0 + V=0.7509545035841214D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5320679333566263D+0 + V=0.7548535057718401D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6172998195394274D+0 + V=0.7554088969774001D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6510679849127481D+0 + V=0.7553147174442808D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6777315251687360D+0 + V=0.7564767653292297D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6963109410648741D+0 + V=0.7587991808518730D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7058935009831749D+0 + V=0.7608261832033027D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.9955546194091857D+0 + V=0.4021680447874916D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.9734115901794209D+0 + V=0.5804871793945964D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.9275693732388626D+0 + V=0.6792151955945159D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.8568022422795103D+0 + V=0.7336741211286294D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7623495553719372D+0 + V=0.7581866300989608D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5707522908892223D+0 + B=0.4387028039889501D+0 + V=0.7538257859800743D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5196463388403083D+0 + B=0.3858908414762617D+0 + V=0.7483517247053123D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4646337531215351D+0 + B=0.3301937372343854D+0 + V=0.7371763661112059D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4063901697557691D+0 + B=0.2725423573563777D+0 + V=0.7183448895756934D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3456329466643087D+0 + B=0.2139510237495250D+0 + V=0.6895815529822191D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2831395121050332D+0 + B=0.1555922309786647D+0 + V=0.6480105801792886D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2197682022925330D+0 + B=0.9892878979686097D-1 + V=0.5897558896594636D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1564696098650355D+0 + B=0.4598642910675510D-1 + V=0.5095708849247346D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6027356673721295D+0 + B=0.3376625140173426D+0 + V=0.7536906428909755D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5496032320255096D+0 + B=0.2822301309727988D+0 + V=0.7472505965575118D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4921707755234567D+0 + B=0.2248632342592540D+0 + V=0.7343017132279698D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4309422998598483D+0 + B=0.1666224723456479D+0 + V=0.7130871582177445D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3664108182313672D+0 + B=0.1086964901822169D+0 + V=0.6817022032112776D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2990189057758436D+0 + B=0.5251989784120085D-1 + V=0.6380941145604121D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6268724013144998D+0 + B=0.2297523657550023D+0 + V=0.7550381377920310D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5707324144834607D+0 + B=0.1723080607093800D+0 + V=0.7478646640144802D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5096360901960365D+0 + B=0.1140238465390513D+0 + V=0.7335918720601220D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4438729938312456D+0 + B=0.5611522095882537D-1 + V=0.7110120527658118D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6419978471082389D+0 + B=0.1164174423140873D+0 + V=0.7571363978689501D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5817218061802611D+0 + B=0.5797589531445219D-1 + V=0.7489908329079234D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD1730(X,Y,Z,W,N) + DOUBLE PRECISION X(1730) + DOUBLE PRECISION Y(1730) + DOUBLE PRECISION Z(1730) + DOUBLE PRECISION W(1730) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 1730-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.6309049437420976D-4 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.6398287705571748D-3 + Call GEN_OH( 2, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.6357185073530720D-3 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2860923126194662D-1 + V=0.2221207162188168D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7142556767711522D-1 + V=0.3475784022286848D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1209199540995559D+0 + V=0.4350742443589804D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1738673106594379D+0 + V=0.4978569136522127D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2284645438467734D+0 + V=0.5435036221998053D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2834807671701512D+0 + V=0.5765913388219542D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3379680145467339D+0 + V=0.6001200359226003D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3911355454819537D+0 + V=0.6162178172717512D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4422860353001403D+0 + V=0.6265218152438485D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4907781568726057D+0 + V=0.6323987160974212D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5360006153211468D+0 + V=0.6350767851540569D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6142105973596603D+0 + V=0.6354362775297107D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6459300387977504D+0 + V=0.6352302462706235D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6718056125089225D+0 + V=0.6358117881417972D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6910888533186254D+0 + V=0.6373101590310117D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7030467416823252D+0 + V=0.6390428961368665D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.8354951166354646D-1 + V=0.3186913449946576D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2050143009099486D+0 + V=0.4678028558591711D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3370208290706637D+0 + V=0.5538829697598626D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4689051484233963D+0 + V=0.6044475907190476D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5939400424557334D+0 + V=0.6313575103509012D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1394983311832261D+0 + B=0.4097581162050343D-1 + V=0.4078626431855630D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1967999180485014D+0 + B=0.8851987391293348D-1 + V=0.4759933057812725D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2546183732548967D+0 + B=0.1397680182969819D+0 + V=0.5268151186413440D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3121281074713875D+0 + B=0.1929452542226526D+0 + V=0.5643048560507316D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3685981078502492D+0 + B=0.2467898337061562D+0 + V=0.5914501076613073D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4233760321547856D+0 + B=0.3003104124785409D+0 + V=0.6104561257874195D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4758671236059246D+0 + B=0.3526684328175033D+0 + V=0.6230252860707806D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5255178579796463D+0 + B=0.4031134861145713D+0 + V=0.6305618761760796D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5718025633734589D+0 + B=0.4509426448342351D+0 + V=0.6343092767597889D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2686927772723415D+0 + B=0.4711322502423248D-1 + V=0.5176268945737826D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3306006819904809D+0 + B=0.9784487303942695D-1 + V=0.5564840313313692D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3904906850594983D+0 + B=0.1505395810025273D+0 + V=0.5856426671038980D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4479957951904390D+0 + B=0.2039728156296050D+0 + V=0.6066386925777091D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5027076848919780D+0 + B=0.2571529941121107D+0 + V=0.6208824962234458D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5542087392260217D+0 + B=0.3092191375815670D+0 + V=0.6296314297822907D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6020850887375187D+0 + B=0.3593807506130276D+0 + V=0.6340423756791859D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4019851409179594D+0 + B=0.5063389934378671D-1 + V=0.5829627677107342D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4635614567449800D+0 + B=0.1032422269160612D+0 + V=0.6048693376081110D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5215860931591575D+0 + B=0.1566322094006254D+0 + V=0.6202362317732461D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5758202499099271D+0 + B=0.2098082827491099D+0 + V=0.6299005328403779D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6259893683876795D+0 + B=0.2618824114553391D+0 + V=0.6347722390609353D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5313795124811891D+0 + B=0.5263245019338556D-1 + V=0.6203778981238834D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5893317955931995D+0 + B=0.1061059730982005D+0 + V=0.6308414671239979D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6426246321215801D+0 + B=0.1594171564034221D+0 + V=0.6362706466959498D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6511904367376113D+0 + B=0.5354789536565540D-1 + V=0.6375414170333233D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD2030(X,Y,Z,W,N) + DOUBLE PRECISION X(2030) + DOUBLE PRECISION Y(2030) + DOUBLE PRECISION Z(2030) + DOUBLE PRECISION W(2030) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 2030-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.4656031899197431D-4 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.5421549195295507D-3 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2540835336814348D-1 + V=0.1778522133346553D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6399322800504915D-1 + V=0.2811325405682796D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1088269469804125D+0 + V=0.3548896312631459D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1570670798818287D+0 + V=0.4090310897173364D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2071163932282514D+0 + V=0.4493286134169965D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2578914044450844D+0 + V=0.4793728447962723D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3085687558169623D+0 + V=0.5015415319164265D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3584719706267024D+0 + V=0.5175127372677937D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4070135594428709D+0 + V=0.5285522262081019D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4536618626222638D+0 + V=0.5356832703713962D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4979195686463577D+0 + V=0.5397914736175170D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5393075111126999D+0 + V=0.5416899441599930D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6115617676843916D+0 + V=0.5419308476889938D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6414308435160159D+0 + V=0.5416936902030596D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6664099412721607D+0 + V=0.5419544338703164D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6859161771214913D+0 + V=0.5428983656630975D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6993625593503890D+0 + V=0.5442286500098193D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7062393387719380D+0 + V=0.5452250345057301D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7479028168349763D-1 + V=0.2568002497728530D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1848951153969366D+0 + V=0.3827211700292145D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3059529066581305D+0 + V=0.4579491561917824D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4285556101021362D+0 + V=0.5042003969083574D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5468758653496526D+0 + V=0.5312708889976025D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6565821978343439D+0 + V=0.5438401790747117D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1253901572367117D+0 + B=0.3681917226439641D-1 + V=0.3316041873197344D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1775721510383941D+0 + B=0.7982487607213301D-1 + V=0.3899113567153771D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2305693358216114D+0 + B=0.1264640966592335D+0 + V=0.4343343327201309D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2836502845992063D+0 + B=0.1751585683418957D+0 + V=0.4679415262318919D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3361794746232590D+0 + B=0.2247995907632670D+0 + V=0.4930847981631031D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3875979172264824D+0 + B=0.2745299257422246D+0 + V=0.5115031867540091D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4374019316999074D+0 + B=0.3236373482441118D+0 + V=0.5245217148457367D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4851275843340022D+0 + B=0.3714967859436741D+0 + V=0.5332041499895321D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5303391803806868D+0 + B=0.4175353646321745D+0 + V=0.5384583126021542D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5726197380596287D+0 + B=0.4612084406355461D+0 + V=0.5411067210798852D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2431520732564863D+0 + B=0.4258040133043952D-1 + V=0.4259797391468714D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3002096800895869D+0 + B=0.8869424306722721D-1 + V=0.4604931368460021D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3558554457457432D+0 + B=0.1368811706510655D+0 + V=0.4871814878255202D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4097782537048887D+0 + B=0.1860739985015033D+0 + V=0.5072242910074885D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4616337666067458D+0 + B=0.2354235077395853D+0 + V=0.5217069845235350D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5110707008417874D+0 + B=0.2842074921347011D+0 + V=0.5315785966280310D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5577415286163795D+0 + B=0.3317784414984102D+0 + V=0.5376833708758905D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6013060431366950D+0 + B=0.3775299002040700D+0 + V=0.5408032092069521D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3661596767261781D+0 + B=0.4599367887164592D-1 + V=0.4842744917904866D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4237633153506581D+0 + B=0.9404893773654421D-1 + V=0.5048926076188130D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4786328454658452D+0 + B=0.1431377109091971D+0 + V=0.5202607980478373D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5305702076789774D+0 + B=0.1924186388843570D+0 + V=0.5309932388325743D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5793436224231788D+0 + B=0.2411590944775190D+0 + V=0.5377419770895208D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6247069017094747D+0 + B=0.2886871491583605D+0 + V=0.5411696331677717D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4874315552535204D+0 + B=0.4804978774953206D-1 + V=0.5197996293282420D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5427337322059053D+0 + B=0.9716857199366665D-1 + V=0.5311120836622945D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5943493747246700D+0 + B=0.1465205839795055D+0 + V=0.5384309319956951D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6421314033564943D+0 + B=0.1953579449803574D+0 + V=0.5421859504051886D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6020628374713980D+0 + B=0.4916375015738108D-1 + V=0.5390948355046314D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6529222529856881D+0 + B=0.9861621540127005D-1 + V=0.5433312705027845D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD2354(X,Y,Z,W,N) + DOUBLE PRECISION X(2354) + DOUBLE PRECISION Y(2354) + DOUBLE PRECISION Z(2354) + DOUBLE PRECISION W(2354) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 2354-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.3922616270665292D-4 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.4703831750854424D-3 + Call GEN_OH( 2, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.4678202801282136D-3 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2290024646530589D-1 + V=0.1437832228979900D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5779086652271284D-1 + V=0.2303572493577644D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.9863103576375984D-1 + V=0.2933110752447454D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1428155792982185D+0 + V=0.3402905998359838D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1888978116601463D+0 + V=0.3759138466870372D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2359091682970210D+0 + V=0.4030638447899798D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2831228833706171D+0 + V=0.4236591432242211D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3299495857966693D+0 + V=0.4390522656946746D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3758840802660796D+0 + V=0.4502523466626247D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4204751831009480D+0 + V=0.4580577727783541D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4633068518751051D+0 + V=0.4631391616615899D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5039849474507313D+0 + V=0.4660928953698676D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5421265793440747D+0 + V=0.4674751807936953D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6092660230557310D+0 + V=0.4676414903932920D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6374654204984869D+0 + V=0.4674086492347870D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6615136472609892D+0 + V=0.4674928539483207D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6809487285958127D+0 + V=0.4680748979686447D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6952980021665196D+0 + V=0.4690449806389040D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7041245497695400D+0 + V=0.4699877075860818D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6744033088306065D-1 + V=0.2099942281069176D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1678684485334166D+0 + V=0.3172269150712804D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2793559049539613D+0 + V=0.3832051358546523D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3935264218057639D+0 + V=0.4252193818146985D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5052629268232558D+0 + V=0.4513807963755000D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6107905315437531D+0 + V=0.4657797469114178D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1135081039843524D+0 + B=0.3331954884662588D-1 + V=0.2733362800522836D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1612866626099378D+0 + B=0.7247167465436538D-1 + V=0.3235485368463559D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2100786550168205D+0 + B=0.1151539110849745D+0 + V=0.3624908726013453D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2592282009459942D+0 + B=0.1599491097143677D+0 + V=0.3925540070712828D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3081740561320203D+0 + B=0.2058699956028027D+0 + V=0.4156129781116235D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3564289781578164D+0 + B=0.2521624953502911D+0 + V=0.4330644984623263D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4035587288240703D+0 + B=0.2982090785797674D+0 + V=0.4459677725921312D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4491671196373903D+0 + B=0.3434762087235733D+0 + V=0.4551593004456795D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4928854782917489D+0 + B=0.3874831357203437D+0 + V=0.4613341462749918D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5343646791958988D+0 + B=0.4297814821746926D+0 + V=0.4651019618269806D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5732683216530990D+0 + B=0.4699402260943537D+0 + V=0.4670249536100625D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2214131583218986D+0 + B=0.3873602040643895D-1 + V=0.3549555576441708D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2741796504750071D+0 + B=0.8089496256902013D-1 + V=0.3856108245249010D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3259797439149485D+0 + B=0.1251732177620872D+0 + V=0.4098622845756882D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3765441148826891D+0 + B=0.1706260286403185D+0 + V=0.4286328604268950D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4255773574530558D+0 + B=0.2165115147300408D+0 + V=0.4427802198993945D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4727795117058430D+0 + B=0.2622089812225259D+0 + V=0.4530473511488561D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5178546895819012D+0 + B=0.3071721431296201D+0 + V=0.4600805475703138D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5605141192097460D+0 + B=0.3508998998801138D+0 + V=0.4644599059958017D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6004763319352512D+0 + B=0.3929160876166931D+0 + V=0.4667274455712508D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3352842634946949D+0 + B=0.4202563457288019D-1 + V=0.4069360518020356D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3891971629814670D+0 + B=0.8614309758870850D-1 + V=0.4260442819919195D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4409875565542281D+0 + B=0.1314500879380001D+0 + V=0.4408678508029063D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4904893058592484D+0 + B=0.1772189657383859D+0 + V=0.4518748115548597D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5375056138769549D+0 + B=0.2228277110050294D+0 + V=0.4595564875375116D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5818255708669969D+0 + B=0.2677179935014386D+0 + V=0.4643988774315846D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6232334858144959D+0 + B=0.3113675035544165D+0 + V=0.4668827491646946D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4489485354492058D+0 + B=0.4409162378368174D-1 + V=0.4400541823741973D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5015136875933150D+0 + B=0.8939009917748489D-1 + V=0.4514512890193797D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5511300550512623D+0 + B=0.1351806029383365D+0 + V=0.4596198627347549D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5976720409858000D+0 + B=0.1808370355053196D+0 + V=0.4648659016801781D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6409956378989354D+0 + B=0.2257852192301602D+0 + V=0.4675502017157673D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5581222330827514D+0 + B=0.4532173421637160D-1 + V=0.4598494476455523D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6074705984161695D+0 + B=0.9117488031840314D-1 + V=0.4654916955152048D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6532272537379033D+0 + B=0.1369294213140155D+0 + V=0.4684709779505137D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6594761494500487D+0 + B=0.4589901487275583D-1 + V=0.4691445539106986D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD2702(X,Y,Z,W,N) + DOUBLE PRECISION X(2702) + DOUBLE PRECISION Y(2702) + DOUBLE PRECISION Z(2702) + DOUBLE PRECISION W(2702) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 2702-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.2998675149888161D-4 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.4077860529495355D-3 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2065562538818703D-1 + V=0.1185349192520667D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5250918173022379D-1 + V=0.1913408643425751D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.8993480082038376D-1 + V=0.2452886577209897D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1306023924436019D+0 + V=0.2862408183288702D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1732060388531418D+0 + V=0.3178032258257357D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2168727084820249D+0 + V=0.3422945667633690D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2609528309173586D+0 + V=0.3612790520235922D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3049252927938952D+0 + V=0.3758638229818521D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3483484138084404D+0 + V=0.3868711798859953D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3908321549106406D+0 + V=0.3949429933189938D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4320210071894814D+0 + V=0.4006068107541156D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4715824795890053D+0 + V=0.4043192149672723D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5091984794078453D+0 + V=0.4064947495808078D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5445580145650803D+0 + V=0.4075245619813152D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6072575796841768D+0 + V=0.4076423540893566D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6339484505755803D+0 + V=0.4074280862251555D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6570718257486958D+0 + V=0.4074163756012244D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6762557330090709D+0 + V=0.4077647795071246D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6911161696923790D+0 + V=0.4084517552782530D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7012841911659961D+0 + V=0.4092468459224052D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7064559272410020D+0 + V=0.4097872687240906D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6123554989894765D-1 + V=0.1738986811745028D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1533070348312393D+0 + V=0.2659616045280191D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2563902605244206D+0 + V=0.3240596008171533D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3629346991663361D+0 + V=0.3621195964432943D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4683949968987538D+0 + V=0.3868838330760539D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5694479240657952D+0 + V=0.4018911532693111D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6634465430993955D+0 + V=0.4089929432983252D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1033958573552305D+0 + B=0.3034544009063584D-1 + V=0.2279907527706409D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1473521412414395D+0 + B=0.6618803044247135D-1 + V=0.2715205490578897D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1924552158705967D+0 + B=0.1054431128987715D+0 + V=0.3057917896703976D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2381094362890328D+0 + B=0.1468263551238858D+0 + V=0.3326913052452555D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2838121707936760D+0 + B=0.1894486108187886D+0 + V=0.3537334711890037D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3291323133373415D+0 + B=0.2326374238761579D+0 + V=0.3700567500783129D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3736896978741460D+0 + B=0.2758485808485768D+0 + V=0.3825245372589122D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4171406040760013D+0 + B=0.3186179331996921D+0 + V=0.3918125171518296D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4591677985256915D+0 + B=0.3605329796303794D+0 + V=0.3984720419937579D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4994733831718418D+0 + B=0.4012147253586509D+0 + V=0.4029746003338211D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5377731830445096D+0 + B=0.4403050025570692D+0 + V=0.4057428632156627D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5737917830001331D+0 + B=0.4774565904277483D+0 + V=0.4071719274114857D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2027323586271389D+0 + B=0.3544122504976147D-1 + V=0.2990236950664119D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2516942375187273D+0 + B=0.7418304388646328D-1 + V=0.3262951734212878D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3000227995257181D+0 + B=0.1150502745727186D+0 + V=0.3482634608242413D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3474806691046342D+0 + B=0.1571963371209364D+0 + V=0.3656596681700892D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3938103180359209D+0 + B=0.1999631877247100D+0 + V=0.3791740467794218D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4387519590455703D+0 + B=0.2428073457846535D+0 + V=0.3894034450156905D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4820503960077787D+0 + B=0.2852575132906155D+0 + V=0.3968600245508371D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5234573778475101D+0 + B=0.3268884208674639D+0 + V=0.4019931351420050D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5627318647235282D+0 + B=0.3673033321675939D+0 + V=0.4052108801278599D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5996390607156954D+0 + B=0.4061211551830290D+0 + V=0.4068978613940934D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3084780753791947D+0 + B=0.3860125523100059D-1 + V=0.3454275351319704D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3589988275920223D+0 + B=0.7928938987104867D-1 + V=0.3629963537007920D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4078628415881973D+0 + B=0.1212614643030087D+0 + V=0.3770187233889873D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4549287258889735D+0 + B=0.1638770827382693D+0 + V=0.3878608613694378D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5000278512957279D+0 + B=0.2065965798260176D+0 + V=0.3959065270221274D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5429785044928199D+0 + B=0.2489436378852235D+0 + V=0.4015286975463570D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5835939850491711D+0 + B=0.2904811368946891D+0 + V=0.4050866785614717D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6216870353444856D+0 + B=0.3307941957666609D+0 + V=0.4069320185051913D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4151104662709091D+0 + B=0.4064829146052554D-1 + V=0.3760120964062763D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4649804275009218D+0 + B=0.8258424547294755D-1 + V=0.3870969564418064D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5124695757009662D+0 + B=0.1251841962027289D+0 + V=0.3955287790534055D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5574711100606224D+0 + B=0.1679107505976331D+0 + V=0.4015361911302668D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5998597333287227D+0 + B=0.2102805057358715D+0 + V=0.4053836986719548D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6395007148516600D+0 + B=0.2518418087774107D+0 + V=0.4073578673299117D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5188456224746252D+0 + B=0.4194321676077518D-1 + V=0.3954628379231406D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5664190707942778D+0 + B=0.8457661551921499D-1 + V=0.4017645508847530D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6110464353283153D+0 + B=0.1273652932519396D+0 + V=0.4059030348651293D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6526430302051563D+0 + B=0.1698173239076354D+0 + V=0.4080565809484880D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6167551880377548D+0 + B=0.4266398851548864D-1 + V=0.4063018753664651D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6607195418355383D+0 + B=0.8551925814238349D-1 + V=0.4087191292799671D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD3074(X,Y,Z,W,N) + DOUBLE PRECISION X(3074) + DOUBLE PRECISION Y(3074) + DOUBLE PRECISION Z(3074) + DOUBLE PRECISION W(3074) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 3074-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.2599095953754734D-4 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.3603134089687541D-3 + Call GEN_OH( 2, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.3586067974412447D-3 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1886108518723392D-1 + V=0.9831528474385880D-4 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4800217244625303D-1 + V=0.1605023107954450D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.8244922058397242D-1 + V=0.2072200131464099D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1200408362484023D+0 + V=0.2431297618814187D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1595773530809965D+0 + V=0.2711819064496707D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2002635973434064D+0 + V=0.2932762038321116D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2415127590139982D+0 + V=0.3107032514197368D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2828584158458477D+0 + V=0.3243808058921213D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3239091015338138D+0 + V=0.3349899091374030D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3643225097962194D+0 + V=0.3430580688505218D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4037897083691802D+0 + V=0.3490124109290343D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4420247515194127D+0 + V=0.3532148948561955D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4787572538464938D+0 + V=0.3559862669062833D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5137265251275234D+0 + V=0.3576224317551411D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5466764056654611D+0 + V=0.3584050533086076D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6054859420813535D+0 + V=0.3584903581373224D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6308106701764562D+0 + V=0.3582991879040586D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6530369230179584D+0 + V=0.3582371187963125D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6718609524611158D+0 + V=0.3584353631122350D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6869676499894013D+0 + V=0.3589120166517785D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6980467077240748D+0 + V=0.3595445704531601D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7048241721250522D+0 + V=0.3600943557111074D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5591105222058232D-1 + V=0.1456447096742039D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1407384078513916D+0 + V=0.2252370188283782D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2364035438976309D+0 + V=0.2766135443474897D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3360602737818170D+0 + V=0.3110729491500851D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4356292630054665D+0 + V=0.3342506712303391D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5321569415256174D+0 + V=0.3491981834026860D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6232956305040554D+0 + V=0.3576003604348932D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.9469870086838469D-1 + B=0.2778748387309470D-1 + V=0.1921921305788564D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1353170300568141D+0 + B=0.6076569878628364D-1 + V=0.2301458216495632D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1771679481726077D+0 + B=0.9703072762711040D-1 + V=0.2604248549522893D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2197066664231751D+0 + B=0.1354112458524762D+0 + V=0.2845275425870697D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2624783557374927D+0 + B=0.1750996479744100D+0 + V=0.3036870897974840D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3050969521214442D+0 + B=0.2154896907449802D+0 + V=0.3188414832298066D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3472252637196021D+0 + B=0.2560954625740152D+0 + V=0.3307046414722089D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3885610219026360D+0 + B=0.2965070050624096D+0 + V=0.3398330969031360D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4288273776062765D+0 + B=0.3363641488734497D+0 + V=0.3466757899705373D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4677662471302948D+0 + B=0.3753400029836788D+0 + V=0.3516095923230054D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5051333589553359D+0 + B=0.4131297522144286D+0 + V=0.3549645184048486D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5406942145810492D+0 + B=0.4494423776081795D+0 + V=0.3570415969441392D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5742204122576457D+0 + B=0.4839938958841502D+0 + V=0.3581251798496118D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1865407027225188D+0 + B=0.3259144851070796D-1 + V=0.2543491329913348D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2321186453689432D+0 + B=0.6835679505297343D-1 + V=0.2786711051330776D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2773159142523882D+0 + B=0.1062284864451989D+0 + V=0.2985552361083679D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3219200192237254D+0 + B=0.1454404409323047D+0 + V=0.3145867929154039D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3657032593944029D+0 + B=0.1854018282582510D+0 + V=0.3273290662067609D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4084376778363622D+0 + B=0.2256297412014750D+0 + V=0.3372705511943501D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4499004945751427D+0 + B=0.2657104425000896D+0 + V=0.3448274437851510D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4898758141326335D+0 + B=0.3052755487631557D+0 + V=0.3503592783048583D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5281547442266309D+0 + B=0.3439863920645423D+0 + V=0.3541854792663162D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5645346989813992D+0 + B=0.3815229456121914D+0 + V=0.3565995517909428D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5988181252159848D+0 + B=0.4175752420966734D+0 + V=0.3578802078302898D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2850425424471603D+0 + B=0.3562149509862536D-1 + V=0.2958644592860982D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3324619433027876D+0 + B=0.7330318886871096D-1 + V=0.3119548129116835D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3785848333076282D+0 + B=0.1123226296008472D+0 + V=0.3250745225005984D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4232891028562115D+0 + B=0.1521084193337708D+0 + V=0.3355153415935208D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4664287050829722D+0 + B=0.1921844459223610D+0 + V=0.3435847568549328D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5078458493735726D+0 + B=0.2321360989678303D+0 + V=0.3495786831622488D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5473779816204180D+0 + B=0.2715886486360520D+0 + V=0.3537767805534621D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5848617133811376D+0 + B=0.3101924707571355D+0 + V=0.3564459815421428D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6201348281584888D+0 + B=0.3476121052890973D+0 + V=0.3578464061225468D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3852191185387871D+0 + B=0.3763224880035108D-1 + V=0.3239748762836212D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4325025061073423D+0 + B=0.7659581935637135D-1 + V=0.3345491784174287D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4778486229734490D+0 + B=0.1163381306083900D+0 + V=0.3429126177301782D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5211663693009000D+0 + B=0.1563890598752899D+0 + V=0.3492420343097421D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5623469504853703D+0 + B=0.1963320810149200D+0 + V=0.3537399050235257D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6012718188659246D+0 + B=0.2357847407258738D+0 + V=0.3566209152659172D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6378179206390117D+0 + B=0.2743846121244060D+0 + V=0.3581084321919782D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4836936460214534D+0 + B=0.3895902610739024D-1 + V=0.3426522117591512D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5293792562683797D+0 + B=0.7871246819312640D-1 + V=0.3491848770121379D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5726281253100033D+0 + B=0.1187963808202981D+0 + V=0.3539318235231476D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6133658776169068D+0 + B=0.1587914708061787D+0 + V=0.3570231438458694D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6515085491865307D+0 + B=0.1983058575227646D+0 + V=0.3586207335051714D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5778692716064976D+0 + B=0.3977209689791542D-1 + V=0.3541196205164025D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6207904288086192D+0 + B=0.7990157592981152D-1 + V=0.3574296911573953D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6608688171046802D+0 + B=0.1199671308754309D+0 + V=0.3591993279818963D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6656263089489130D+0 + B=0.4015955957805969D-1 + V=0.3595855034661997D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD3470(X,Y,Z,W,N) + DOUBLE PRECISION X(3470) + DOUBLE PRECISION Y(3470) + DOUBLE PRECISION Z(3470) + DOUBLE PRECISION W(3470) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 3470-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.2040382730826330D-4 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.3178149703889544D-3 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1721420832906233D-1 + V=0.8288115128076110D-4 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4408875374981770D-1 + V=0.1360883192522954D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7594680813878681D-1 + V=0.1766854454542662D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1108335359204799D+0 + V=0.2083153161230153D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1476517054388567D+0 + V=0.2333279544657158D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1856731870860615D+0 + V=0.2532809539930247D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2243634099428821D+0 + V=0.2692472184211158D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2633006881662727D+0 + V=0.2819949946811885D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3021340904916283D+0 + V=0.2920953593973030D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3405594048030089D+0 + V=0.2999889782948352D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3783044434007372D+0 + V=0.3060292120496902D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4151194767407910D+0 + V=0.3105109167522192D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4507705766443257D+0 + V=0.3136902387550312D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4850346056573187D+0 + V=0.3157984652454632D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5176950817792470D+0 + V=0.3170516518425422D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5485384240820989D+0 + V=0.3176568425633755D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6039117238943308D+0 + V=0.3177198411207062D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6279956655573113D+0 + V=0.3175519492394733D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6493636169568952D+0 + V=0.3174654952634756D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6677644117704504D+0 + V=0.3175676415467654D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6829368572115624D+0 + V=0.3178923417835410D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6946195818184121D+0 + V=0.3183788287531909D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7025711542057026D+0 + V=0.3188755151918807D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7066004767140119D+0 + V=0.3191916889313849D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5132537689946062D-1 + V=0.1231779611744508D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1297994661331225D+0 + V=0.1924661373839880D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2188852049401307D+0 + V=0.2380881867403424D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3123174824903457D+0 + V=0.2693100663037885D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4064037620738195D+0 + V=0.2908673382834366D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4984958396944782D+0 + V=0.3053914619381535D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5864975046021365D+0 + V=0.3143916684147777D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6686711634580175D+0 + V=0.3187042244055363D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.8715738780835950D-1 + B=0.2557175233367578D-1 + V=0.1635219535869790D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1248383123134007D+0 + B=0.5604823383376681D-1 + V=0.1968109917696070D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1638062693383378D+0 + B=0.8968568601900765D-1 + V=0.2236754342249974D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2035586203373176D+0 + B=0.1254086651976279D+0 + V=0.2453186687017181D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2436798975293774D+0 + B=0.1624780150162012D+0 + V=0.2627551791580541D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2838207507773806D+0 + B=0.2003422342683208D+0 + V=0.2767654860152220D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3236787502217692D+0 + B=0.2385628026255263D+0 + V=0.2879467027765895D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3629849554840691D+0 + B=0.2767731148783578D+0 + V=0.2967639918918702D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4014948081992087D+0 + B=0.3146542308245309D+0 + V=0.3035900684660351D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4389818379260225D+0 + B=0.3519196415895088D+0 + V=0.3087338237298308D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4752331143674377D+0 + B=0.3883050984023654D+0 + V=0.3124608838860167D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5100457318374018D+0 + B=0.4235613423908649D+0 + V=0.3150084294226743D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5432238388954868D+0 + B=0.4574484717196220D+0 + V=0.3165958398598402D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5745758685072442D+0 + B=0.4897311639255524D+0 + V=0.3174320440957372D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1723981437592809D+0 + B=0.3010630597881105D-1 + V=0.2182188909812599D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2149553257844597D+0 + B=0.6326031554204694D-1 + V=0.2399727933921445D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2573256081247422D+0 + B=0.9848566980258631D-1 + V=0.2579796133514652D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2993163751238106D+0 + B=0.1350835952384266D+0 + V=0.2727114052623535D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3407238005148000D+0 + B=0.1725184055442181D+0 + V=0.2846327656281355D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3813454978483264D+0 + B=0.2103559279730725D+0 + V=0.2941491102051334D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4209848104423343D+0 + B=0.2482278774554860D+0 + V=0.3016049492136107D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4594519699996300D+0 + B=0.2858099509982883D+0 + V=0.3072949726175648D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4965640166185930D+0 + B=0.3228075659915428D+0 + V=0.3114768142886460D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5321441655571562D+0 + B=0.3589459907204151D+0 + V=0.3143823673666223D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5660208438582166D+0 + B=0.3939630088864310D+0 + V=0.3162269764661535D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5980264315964364D+0 + B=0.4276029922949089D+0 + V=0.3172164663759821D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2644215852350733D+0 + B=0.3300939429072552D-1 + V=0.2554575398967435D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3090113743443063D+0 + B=0.6803887650078501D-1 + V=0.2701704069135677D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3525871079197808D+0 + B=0.1044326136206709D+0 + V=0.2823693413468940D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3950418005354029D+0 + B=0.1416751597517679D+0 + V=0.2922898463214289D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4362475663430163D+0 + B=0.1793408610504821D+0 + V=0.3001829062162428D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4760661812145854D+0 + B=0.2170630750175722D+0 + V=0.3062890864542953D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5143551042512103D+0 + B=0.2545145157815807D+0 + V=0.3108328279264746D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5509709026935597D+0 + B=0.2913940101706601D+0 + V=0.3140243146201245D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5857711030329428D+0 + B=0.3274169910910705D+0 + V=0.3160638030977130D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6186149917404392D+0 + B=0.3623081329317265D+0 + V=0.3171462882206275D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3586894569557064D+0 + B=0.3497354386450040D-1 + V=0.2812388416031796D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4035266610019441D+0 + B=0.7129736739757095D-1 + V=0.2912137500288045D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4467775312332510D+0 + B=0.1084758620193165D+0 + V=0.2993241256502206D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4883638346608543D+0 + B=0.1460915689241772D+0 + V=0.3057101738983822D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5281908348434601D+0 + B=0.1837790832369980D+0 + V=0.3105319326251432D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5661542687149311D+0 + B=0.2212075390874021D+0 + V=0.3139565514428167D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6021450102031452D+0 + B=0.2580682841160985D+0 + V=0.3161543006806366D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6360520783610050D+0 + B=0.2940656362094121D+0 + V=0.3172985960613294D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4521611065087196D+0 + B=0.3631055365867002D-1 + V=0.2989400336901431D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4959365651560963D+0 + B=0.7348318468484350D-1 + V=0.3054555883947677D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5376815804038283D+0 + B=0.1111087643812648D+0 + V=0.3104764960807702D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5773314480243768D+0 + B=0.1488226085145408D+0 + V=0.3141015825977616D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6148113245575056D+0 + B=0.1862892274135151D+0 + V=0.3164520621159896D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6500407462842380D+0 + B=0.2231909701714456D+0 + V=0.3176652305912204D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5425151448707213D+0 + B=0.3718201306118944D-1 + V=0.3105097161023939D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5841860556907931D+0 + B=0.7483616335067346D-1 + V=0.3143014117890550D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6234632186851500D+0 + B=0.1125990834266120D+0 + V=0.3168172866287200D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6602934551848843D+0 + B=0.1501303813157619D+0 + V=0.3181401865570968D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6278573968375105D+0 + B=0.3767559930245720D-1 + V=0.3170663659156037D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6665611711264577D+0 + B=0.7548443301360158D-1 + V=0.3185447944625510D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD3890(X,Y,Z,W,N) + DOUBLE PRECISION X(3890) + DOUBLE PRECISION Y(3890) + DOUBLE PRECISION Z(3890) + DOUBLE PRECISION W(3890) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 3890-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.1807395252196920D-4 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.2848008782238827D-3 + Call GEN_OH( 2, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.2836065837530581D-3 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1587876419858352D-1 + V=0.7013149266673816D-4 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4069193593751206D-1 + V=0.1162798021956766D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7025888115257997D-1 + V=0.1518728583972105D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1027495450028704D+0 + V=0.1798796108216934D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1371457730893426D+0 + V=0.2022593385972785D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1727758532671953D+0 + V=0.2203093105575464D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2091492038929037D+0 + V=0.2349294234299855D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2458813281751915D+0 + V=0.2467682058747003D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2826545859450066D+0 + V=0.2563092683572224D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3191957291799622D+0 + V=0.2639253896763318D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3552621469299578D+0 + V=0.2699137479265108D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3906329503406230D+0 + V=0.2745196420166739D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4251028614093031D+0 + V=0.2779529197397593D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4584777520111870D+0 + V=0.2803996086684265D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4905711358710193D+0 + V=0.2820302356715842D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5212011669847385D+0 + V=0.2830056747491068D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5501878488737995D+0 + V=0.2834808950776839D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6025037877479342D+0 + V=0.2835282339078929D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6254572689549016D+0 + V=0.2833819267065800D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6460107179528248D+0 + V=0.2832858336906784D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6639541138154251D+0 + V=0.2833268235451244D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6790688515667495D+0 + V=0.2835432677029253D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6911338580371512D+0 + V=0.2839091722743049D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6999385956126490D+0 + V=0.2843308178875841D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7053037748656896D+0 + V=0.2846703550533846D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4732224387180115D-1 + V=0.1051193406971900D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1202100529326803D+0 + V=0.1657871838796974D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2034304820664855D+0 + V=0.2064648113714232D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2912285643573002D+0 + V=0.2347942745819741D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3802361792726768D+0 + V=0.2547775326597726D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4680598511056146D+0 + V=0.2686876684847025D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5528151052155599D+0 + V=0.2778665755515867D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6329386307803041D+0 + V=0.2830996616782929D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.8056516651369069D-1 + B=0.2363454684003124D-1 + V=0.1403063340168372D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1156476077139389D+0 + B=0.5191291632545936D-1 + V=0.1696504125939477D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1520473382760421D+0 + B=0.8322715736994519D-1 + V=0.1935787242745390D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1892986699745931D+0 + B=0.1165855667993712D+0 + V=0.2130614510521968D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2270194446777792D+0 + B=0.1513077167409504D+0 + V=0.2289381265931048D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2648908185093273D+0 + B=0.1868882025807859D+0 + V=0.2418630292816186D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3026389259574136D+0 + B=0.2229277629776224D+0 + V=0.2523400495631193D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3400220296151384D+0 + B=0.2590951840746235D+0 + V=0.2607623973449605D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3768217953335510D+0 + B=0.2951047291750847D+0 + V=0.2674441032689209D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4128372900921884D+0 + B=0.3307019714169930D+0 + V=0.2726432360343356D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4478807131815630D+0 + B=0.3656544101087634D+0 + V=0.2765787685924545D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4817742034089257D+0 + B=0.3997448951939695D+0 + V=0.2794428690642224D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5143472814653344D+0 + B=0.4327667110812024D+0 + V=0.2814099002062895D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5454346213905650D+0 + B=0.4645196123532293D+0 + V=0.2826429531578994D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5748739313170252D+0 + B=0.4948063555703345D+0 + V=0.2832983542550884D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1599598738286342D+0 + B=0.2792357590048985D-1 + V=0.1886695565284976D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1998097412500951D+0 + B=0.5877141038139065D-1 + V=0.2081867882748234D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2396228952566202D+0 + B=0.9164573914691377D-1 + V=0.2245148680600796D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2792228341097746D+0 + B=0.1259049641962687D+0 + V=0.2380370491511872D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3184251107546741D+0 + B=0.1610594823400863D+0 + V=0.2491398041852455D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3570481164426244D+0 + B=0.1967151653460898D+0 + V=0.2581632405881230D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3949164710492144D+0 + B=0.2325404606175168D+0 + V=0.2653965506227417D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4318617293970503D+0 + B=0.2682461141151439D+0 + V=0.2710857216747087D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4677221009931678D+0 + B=0.3035720116011973D+0 + V=0.2754434093903659D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5023417939270955D+0 + B=0.3382781859197439D+0 + V=0.2786579932519380D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5355701836636128D+0 + B=0.3721383065625942D+0 + V=0.2809011080679474D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5672608451328771D+0 + B=0.4049346360466055D+0 + V=0.2823336184560987D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5972704202540162D+0 + B=0.4364538098633802D+0 + V=0.2831101175806309D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2461687022333596D+0 + B=0.3070423166833368D-1 + V=0.2221679970354546D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2881774566286831D+0 + B=0.6338034669281885D-1 + V=0.2356185734270703D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3293963604116978D+0 + B=0.9742862487067941D-1 + V=0.2469228344805590D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3697303822241377D+0 + B=0.1323799532282290D+0 + V=0.2562726348642046D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4090663023135127D+0 + B=0.1678497018129336D+0 + V=0.2638756726753028D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4472819355411712D+0 + B=0.2035095105326114D+0 + V=0.2699311157390862D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4842513377231437D+0 + B=0.2390692566672091D+0 + V=0.2746233268403837D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5198477629962928D+0 + B=0.2742649818076149D+0 + V=0.2781225674454771D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5539453011883145D+0 + B=0.3088503806580094D+0 + V=0.2805881254045684D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5864196762401251D+0 + B=0.3425904245906614D+0 + V=0.2821719877004913D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6171484466668390D+0 + B=0.3752562294789468D+0 + V=0.2830222502333124D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3350337830565727D+0 + B=0.3261589934634747D-1 + V=0.2457995956744870D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3775773224758284D+0 + B=0.6658438928081572D-1 + V=0.2551474407503706D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4188155229848973D+0 + B=0.1014565797157954D+0 + V=0.2629065335195311D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4586805892009344D+0 + B=0.1368573320843822D+0 + V=0.2691900449925075D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4970895714224235D+0 + B=0.1724614851951608D+0 + V=0.2741275485754276D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5339505133960747D+0 + B=0.2079779381416412D+0 + V=0.2778530970122595D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5691665792531440D+0 + B=0.2431385788322288D+0 + V=0.2805010567646741D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6026387682680377D+0 + B=0.2776901883049853D+0 + V=0.2822055834031040D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6342676150163307D+0 + B=0.3113881356386632D+0 + V=0.2831016901243473D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4237951119537067D+0 + B=0.3394877848664351D-1 + V=0.2624474901131803D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4656918683234929D+0 + B=0.6880219556291447D-1 + V=0.2688034163039377D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5058857069185980D+0 + B=0.1041946859721635D+0 + V=0.2738932751287636D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5443204666713996D+0 + B=0.1398039738736393D+0 + V=0.2777944791242523D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5809298813759742D+0 + B=0.1753373381196155D+0 + V=0.2806011661660987D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6156416039447128D+0 + B=0.2105215793514010D+0 + V=0.2824181456597460D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6483801351066604D+0 + B=0.2450953312157051D+0 + V=0.2833585216577828D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5103616577251688D+0 + B=0.3485560643800719D-1 + V=0.2738165236962878D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5506738792580681D+0 + B=0.7026308631512033D-1 + V=0.2778365208203180D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5889573040995292D+0 + B=0.1059035061296403D+0 + V=0.2807852940418966D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6251641589516930D+0 + B=0.1414823925236026D+0 + V=0.2827245949674705D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6592414921570178D+0 + B=0.1767207908214530D+0 + V=0.2837342344829828D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5930314017533384D+0 + B=0.3542189339561672D-1 + V=0.2809233907610981D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6309812253390175D+0 + B=0.7109574040369549D-1 + V=0.2829930809742694D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6666296011353230D+0 + B=0.1067259792282730D+0 + V=0.2841097874111479D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6703715271049922D+0 + B=0.3569455268820809D-1 + V=0.2843455206008783D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD4334(X,Y,Z,W,N) + DOUBLE PRECISION X(4334) + DOUBLE PRECISION Y(4334) + DOUBLE PRECISION Z(4334) + DOUBLE PRECISION W(4334) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 4334-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.1449063022537883D-4 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.2546377329828424D-3 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1462896151831013D-1 + V=0.6018432961087496D-4 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3769840812493139D-1 + V=0.1002286583263673D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6524701904096891D-1 + V=0.1315222931028093D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.9560543416134648D-1 + V=0.1564213746876724D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1278335898929198D+0 + V=0.1765118841507736D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1613096104466031D+0 + V=0.1928737099311080D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1955806225745371D+0 + V=0.2062658534263270D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2302935218498028D+0 + V=0.2172395445953787D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2651584344113027D+0 + V=0.2262076188876047D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2999276825183209D+0 + V=0.2334885699462397D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3343828669718798D+0 + V=0.2393355273179203D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3683265013750518D+0 + V=0.2439559200468863D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4015763206518108D+0 + V=0.2475251866060002D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4339612026399770D+0 + V=0.2501965558158773D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4653180651114582D+0 + V=0.2521081407925925D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4954893331080803D+0 + V=0.2533881002388081D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5243207068924930D+0 + V=0.2541582900848261D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5516590479041704D+0 + V=0.2545365737525860D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6012371927804176D+0 + V=0.2545726993066799D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6231574466449819D+0 + V=0.2544456197465555D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6429416514181271D+0 + V=0.2543481596881064D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6604124272943595D+0 + V=0.2543506451429194D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6753851470408250D+0 + V=0.2544905675493763D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6876717970626160D+0 + V=0.2547611407344429D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6970895061319234D+0 + V=0.2551060375448869D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7034746912553310D+0 + V=0.2554291933816039D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7067017217542295D+0 + V=0.2556255710686343D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4382223501131123D-1 + V=0.9041339695118195D-4 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1117474077400006D+0 + V=0.1438426330079022D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1897153252911440D+0 + V=0.1802523089820518D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2724023009910331D+0 + V=0.2060052290565496D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3567163308709902D+0 + V=0.2245002248967466D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4404784483028087D+0 + V=0.2377059847731150D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5219833154161411D+0 + V=0.2468118955882525D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5998179868977553D+0 + V=0.2525410872966528D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6727803154548222D+0 + V=0.2553101409933397D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7476563943166086D-1 + B=0.2193168509461185D-1 + V=0.1212879733668632D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1075341482001416D+0 + B=0.4826419281533887D-1 + V=0.1472872881270931D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1416344885203259D+0 + B=0.7751191883575742D-1 + V=0.1686846601010828D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1766325315388586D+0 + B=0.1087558139247680D+0 + V=0.1862698414660208D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2121744174481514D+0 + B=0.1413661374253096D+0 + V=0.2007430956991861D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2479669443408145D+0 + B=0.1748768214258880D+0 + V=0.2126568125394796D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2837600452294113D+0 + B=0.2089216406612073D+0 + V=0.2224394603372113D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3193344933193984D+0 + B=0.2431987685545972D+0 + V=0.2304264522673135D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3544935442438745D+0 + B=0.2774497054377770D+0 + V=0.2368854288424087D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3890571932288154D+0 + B=0.3114460356156915D+0 + V=0.2420352089461772D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4228581214259090D+0 + B=0.3449806851913012D+0 + V=0.2460597113081295D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4557387211304052D+0 + B=0.3778618641248256D+0 + V=0.2491181912257687D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4875487950541643D+0 + B=0.4099086391698978D+0 + V=0.2513528194205857D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5181436529962997D+0 + B=0.4409474925853973D+0 + V=0.2528943096693220D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5473824095600661D+0 + B=0.4708094517711291D+0 + V=0.2538660368488136D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5751263398976174D+0 + B=0.4993275140354637D+0 + V=0.2543868648299022D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1489515746840028D+0 + B=0.2599381993267017D-1 + V=0.1642595537825183D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1863656444351767D+0 + B=0.5479286532462190D-1 + V=0.1818246659849308D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2238602880356348D+0 + B=0.8556763251425254D-1 + V=0.1966565649492420D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2612723375728160D+0 + B=0.1177257802267011D+0 + V=0.2090677905657991D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2984332990206190D+0 + B=0.1508168456192700D+0 + V=0.2193820409510504D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3351786584663333D+0 + B=0.1844801892177727D+0 + V=0.2278870827661928D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3713505522209120D+0 + B=0.2184145236087598D+0 + V=0.2348283192282090D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4067981098954663D+0 + B=0.2523590641486229D+0 + V=0.2404139755581477D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4413769993687534D+0 + B=0.2860812976901373D+0 + V=0.2448227407760734D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4749487182516394D+0 + B=0.3193686757808996D+0 + V=0.2482110455592573D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5073798105075426D+0 + B=0.3520226949547602D+0 + V=0.2507192397774103D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5385410448878654D+0 + B=0.3838544395667890D+0 + V=0.2524765968534880D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5683065353670530D+0 + B=0.4146810037640963D+0 + V=0.2536052388539425D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5965527620663510D+0 + B=0.4443224094681121D+0 + V=0.2542230588033068D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2299227700856157D+0 + B=0.2865757664057584D-1 + V=0.1944817013047896D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2695752998553267D+0 + B=0.5923421684485993D-1 + V=0.2067862362746635D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3086178716611389D+0 + B=0.9117817776057715D-1 + V=0.2172440734649114D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3469649871659077D+0 + B=0.1240593814082605D+0 + V=0.2260125991723423D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3845153566319655D+0 + B=0.1575272058259175D+0 + V=0.2332655008689523D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4211600033403215D+0 + B=0.1912845163525413D+0 + V=0.2391699681532458D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4567867834329882D+0 + B=0.2250710177858171D+0 + V=0.2438801528273928D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4912829319232061D+0 + B=0.2586521303440910D+0 + V=0.2475370504260665D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5245364793303812D+0 + B=0.2918112242865407D+0 + V=0.2502707235640574D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5564369788915756D+0 + B=0.3243439239067890D+0 + V=0.2522031701054241D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5868757697775287D+0 + B=0.3560536787835351D+0 + V=0.2534511269978784D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6157458853519617D+0 + B=0.3867480821242581D+0 + V=0.2541284914955151D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3138461110672113D+0 + B=0.3051374637507278D-1 + V=0.2161509250688394D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3542495872050569D+0 + B=0.6237111233730755D-1 + V=0.2248778513437852D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3935751553120181D+0 + B=0.9516223952401907D-1 + V=0.2322388803404617D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4317634668111147D+0 + B=0.1285467341508517D+0 + V=0.2383265471001355D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4687413842250821D+0 + B=0.1622318931656033D+0 + V=0.2432476675019525D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5044274237060283D+0 + B=0.1959581153836453D+0 + V=0.2471122223750674D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5387354077925727D+0 + B=0.2294888081183837D+0 + V=0.2500291752486870D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5715768898356105D+0 + B=0.2626031152713945D+0 + V=0.2521055942764682D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6028627200136111D+0 + B=0.2950904075286713D+0 + V=0.2534472785575503D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6325039812653463D+0 + B=0.3267458451113286D+0 + V=0.2541599713080121D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3981986708423407D+0 + B=0.3183291458749821D-1 + V=0.2317380975862936D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4382791182133300D+0 + B=0.6459548193880908D-1 + V=0.2378550733719775D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4769233057218166D+0 + B=0.9795757037087952D-1 + V=0.2428884456739118D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5140823911194238D+0 + B=0.1316307235126655D+0 + V=0.2469002655757292D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5496977833862983D+0 + B=0.1653556486358704D+0 + V=0.2499657574265851D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5837047306512727D+0 + B=0.1988931724126510D+0 + V=0.2521676168486082D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6160349566926879D+0 + B=0.2320174581438950D+0 + V=0.2535935662645334D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6466185353209440D+0 + B=0.2645106562168662D+0 + V=0.2543356743363214D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4810835158795404D+0 + B=0.3275917807743992D-1 + V=0.2427353285201535D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5199925041324341D+0 + B=0.6612546183967181D-1 + V=0.2468258039744386D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5571717692207494D+0 + B=0.9981498331474143D-1 + V=0.2500060956440310D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5925789250836378D+0 + B=0.1335687001410374D+0 + V=0.2523238365420979D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6261658523859670D+0 + B=0.1671444402896463D+0 + V=0.2538399260252846D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6578811126669331D+0 + B=0.2003106382156076D+0 + V=0.2546255927268069D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5609624612998100D+0 + B=0.3337500940231335D-1 + V=0.2500583360048449D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5979959659984670D+0 + B=0.6708750335901803D-1 + V=0.2524777638260203D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6330523711054002D+0 + B=0.1008792126424850D+0 + V=0.2540951193860656D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6660960998103972D+0 + B=0.1345050343171794D+0 + V=0.2549524085027472D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6365384364585819D+0 + B=0.3372799460737052D-1 + V=0.2542569507009158D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6710994302899275D+0 + B=0.6755249309678028D-1 + V=0.2552114127580376D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD4802(X,Y,Z,W,N) + DOUBLE PRECISION X(4802) + DOUBLE PRECISION Y(4802) + DOUBLE PRECISION Z(4802) + DOUBLE PRECISION W(4802) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 4802-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.9687521879420705D-4 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.2307897895367918D-3 + Call GEN_OH( 2, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.2297310852498558D-3 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2335728608887064D-1 + V=0.7386265944001919D-4 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4352987836550653D-1 + V=0.8257977698542210D-4 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6439200521088801D-1 + V=0.9706044762057630D-4 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.9003943631993181D-1 + V=0.1302393847117003D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1196706615548473D+0 + V=0.1541957004600968D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1511715412838134D+0 + V=0.1704459770092199D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1835982828503801D+0 + V=0.1827374890942906D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2165081259155405D+0 + V=0.1926360817436107D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2496208720417563D+0 + V=0.2008010239494833D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2827200673567900D+0 + V=0.2075635983209175D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3156190823994346D+0 + V=0.2131306638690909D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3481476793749115D+0 + V=0.2176562329937335D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3801466086947226D+0 + V=0.2212682262991018D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4114652119634011D+0 + V=0.2240799515668565D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4419598786519751D+0 + V=0.2261959816187525D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4714925949329543D+0 + V=0.2277156368808855D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4999293972879466D+0 + V=0.2287351772128336D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5271387221431248D+0 + V=0.2293490814084085D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5529896780837761D+0 + V=0.2296505312376273D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6000856099481712D+0 + V=0.2296793832318756D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6210562192785175D+0 + V=0.2295785443842974D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6401165879934240D+0 + V=0.2295017931529102D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6571144029244334D+0 + V=0.2295059638184868D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6718910821718863D+0 + V=0.2296232343237362D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6842845591099010D+0 + V=0.2298530178740771D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6941353476269816D+0 + V=0.2301579790280501D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7012965242212991D+0 + V=0.2304690404996513D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7056471428242644D+0 + V=0.2307027995907102D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4595557643585895D-1 + V=0.9312274696671092D-4 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1049316742435023D+0 + V=0.1199919385876926D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1773548879549274D+0 + V=0.1598039138877690D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2559071411236127D+0 + V=0.1822253763574900D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3358156837985898D+0 + V=0.1988579593655040D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4155835743763893D+0 + V=0.2112620102533307D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4937894296167472D+0 + V=0.2201594887699007D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5691569694793316D+0 + V=0.2261622590895036D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6405840854894251D+0 + V=0.2296458453435705D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7345133894143348D-1 + B=0.2177844081486067D-1 + V=0.1006006990267000D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1009859834044931D+0 + B=0.4590362185775188D-1 + V=0.1227676689635876D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1324289619748758D+0 + B=0.7255063095690877D-1 + V=0.1467864280270117D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1654272109607127D+0 + B=0.1017825451960684D+0 + V=0.1644178912101232D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1990767186776461D+0 + B=0.1325652320980364D+0 + V=0.1777664890718961D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2330125945523278D+0 + B=0.1642765374496765D+0 + V=0.1884825664516690D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2670080611108287D+0 + B=0.1965360374337889D+0 + V=0.1973269246453848D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3008753376294316D+0 + B=0.2290726770542238D+0 + V=0.2046767775855328D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3344475596167860D+0 + B=0.2616645495370823D+0 + V=0.2107600125918040D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3675709724070786D+0 + B=0.2941150728843141D+0 + V=0.2157416362266829D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4001000887587812D+0 + B=0.3262440400919066D+0 + V=0.2197557816920721D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4318956350436028D+0 + B=0.3578835350611916D+0 + V=0.2229192611835437D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4628239056795531D+0 + B=0.3888751854043678D+0 + V=0.2253385110212775D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4927563229773636D+0 + B=0.4190678003222840D+0 + V=0.2271137107548774D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5215687136707969D+0 + B=0.4483151836883852D+0 + V=0.2283414092917525D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5491402346984905D+0 + B=0.4764740676087880D+0 + V=0.2291161673130077D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5753520160126075D+0 + B=0.5034021310998277D+0 + V=0.2295313908576598D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1388326356417754D+0 + B=0.2435436510372806D-1 + V=0.1438204721359031D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1743686900537244D+0 + B=0.5118897057342652D-1 + V=0.1607738025495257D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2099737037950268D+0 + B=0.8014695048539634D-1 + V=0.1741483853528379D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2454492590908548D+0 + B=0.1105117874155699D+0 + V=0.1851918467519151D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2807219257864278D+0 + B=0.1417950531570966D+0 + V=0.1944628638070613D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3156842271975842D+0 + B=0.1736604945719597D+0 + V=0.2022495446275152D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3502090945177752D+0 + B=0.2058466324693981D+0 + V=0.2087462382438514D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3841684849519686D+0 + B=0.2381284261195919D+0 + V=0.2141074754818308D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4174372367906016D+0 + B=0.2703031270422569D+0 + V=0.2184640913748162D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4498926465011892D+0 + B=0.3021845683091309D+0 + V=0.2219309165220329D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4814146229807701D+0 + B=0.3335993355165720D+0 + V=0.2246123118340624D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5118863625734701D+0 + B=0.3643833735518232D+0 + V=0.2266062766915125D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5411947455119144D+0 + B=0.3943789541958179D+0 + V=0.2280072952230796D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5692301500357246D+0 + B=0.4234320144403542D+0 + V=0.2289082025202583D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5958857204139576D+0 + B=0.4513897947419260D+0 + V=0.2294012695120025D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2156270284785766D+0 + B=0.2681225755444491D-1 + V=0.1722434488736947D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2532385054909710D+0 + B=0.5557495747805614D-1 + V=0.1830237421455091D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2902564617771537D+0 + B=0.8569368062950249D-1 + V=0.1923855349997633D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3266979823143256D+0 + B=0.1167367450324135D+0 + V=0.2004067861936271D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3625039627493614D+0 + B=0.1483861994003304D+0 + V=0.2071817297354263D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3975838937548699D+0 + B=0.1803821503011405D+0 + V=0.2128250834102103D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4318396099009774D+0 + B=0.2124962965666424D+0 + V=0.2174513719440102D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4651706555732742D+0 + B=0.2445221837805913D+0 + V=0.2211661839150214D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4974752649620969D+0 + B=0.2762701224322987D+0 + V=0.2240665257813102D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5286517579627517D+0 + B=0.3075627775211328D+0 + V=0.2262439516632620D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5586001195731895D+0 + B=0.3382311089826877D+0 + V=0.2277874557231869D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5872229902021319D+0 + B=0.3681108834741399D+0 + V=0.2287854314454994D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6144258616235123D+0 + B=0.3970397446872839D+0 + V=0.2293268499615575D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2951676508064861D+0 + B=0.2867499538750441D-1 + V=0.1912628201529828D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3335085485472725D+0 + B=0.5867879341903510D-1 + V=0.1992499672238701D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3709561760636381D+0 + B=0.8961099205022284D-1 + V=0.2061275533454027D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4074722861667498D+0 + B=0.1211627927626297D+0 + V=0.2119318215968572D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4429923648839117D+0 + B=0.1530748903554898D+0 + V=0.2167416581882652D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4774428052721736D+0 + B=0.1851176436721877D+0 + V=0.2206430730516600D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5107446539535904D+0 + B=0.2170829107658179D+0 + V=0.2237186938699523D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5428151370542935D+0 + B=0.2487786689026271D+0 + V=0.2260480075032884D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5735699292556964D+0 + B=0.2800239952795016D+0 + V=0.2277098884558542D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6029253794562866D+0 + B=0.3106445702878119D+0 + V=0.2287845715109671D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6307998987073145D+0 + B=0.3404689500841194D+0 + V=0.2293547268236294D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3752652273692719D+0 + B=0.2997145098184479D-1 + V=0.2056073839852528D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4135383879344028D+0 + B=0.6086725898678011D-1 + V=0.2114235865831876D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4506113885153907D+0 + B=0.9238849548435643D-1 + V=0.2163175629770551D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4864401554606072D+0 + B=0.1242786603851851D+0 + V=0.2203392158111650D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5209708076611709D+0 + B=0.1563086731483386D+0 + V=0.2235473176847839D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5541422135830122D+0 + B=0.1882696509388506D+0 + V=0.2260024141501235D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5858880915113817D+0 + B=0.2199672979126059D+0 + V=0.2277675929329182D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6161399390603444D+0 + B=0.2512165482924867D+0 + V=0.2289102112284834D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6448296482255090D+0 + B=0.2818368701871888D+0 + V=0.2295027954625118D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4544796274917948D+0 + B=0.3088970405060312D-1 + V=0.2161281589879992D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4919389072146628D+0 + B=0.6240947677636835D-1 + V=0.2201980477395102D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5279313026985183D+0 + B=0.9430706144280313D-1 + V=0.2234952066593166D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5624169925571135D+0 + B=0.1263547818770374D+0 + V=0.2260540098520838D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5953484627093287D+0 + B=0.1583430788822594D+0 + V=0.2279157981899988D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6266730715339185D+0 + B=0.1900748462555988D+0 + V=0.2291296918565571D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6563363204278871D+0 + B=0.2213599519592567D+0 + V=0.2297533752536649D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5314574716585696D+0 + B=0.3152508811515374D-1 + V=0.2234927356465995D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5674614932298185D+0 + B=0.6343865291465561D-1 + V=0.2261288012985219D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6017706004970264D+0 + B=0.9551503504223951D-1 + V=0.2280818160923688D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6343471270264178D+0 + B=0.1275440099801196D+0 + V=0.2293773295180159D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6651494599127802D+0 + B=0.1593252037671960D+0 + V=0.2300528767338634D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6050184986005704D+0 + B=0.3192538338496105D-1 + V=0.2281893855065666D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6390163550880400D+0 + B=0.6402824353962306D-1 + V=0.2295720444840727D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6711199107088448D+0 + B=0.9609805077002909D-1 + V=0.2303227649026753D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6741354429572275D+0 + B=0.3211853196273233D-1 + V=0.2304831913227114D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD5294(X,Y,Z,W,N) + DOUBLE PRECISION X(5294) + DOUBLE PRECISION Y(5294) + DOUBLE PRECISION Z(5294) + DOUBLE PRECISION W(5294) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 5294-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.9080510764308163D-4 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.2084824361987793D-3 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2303261686261450D-1 + V=0.5011105657239616D-4 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3757208620162394D-1 + V=0.5942520409683854D-4 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5821912033821852D-1 + V=0.9564394826109721D-4 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.8403127529194872D-1 + V=0.1185530657126338D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1122927798060578D+0 + V=0.1364510114230331D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1420125319192987D+0 + V=0.1505828825605415D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1726396437341978D+0 + V=0.1619298749867023D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2038170058115696D+0 + V=0.1712450504267789D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2352849892876508D+0 + V=0.1789891098164999D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2668363354312461D+0 + V=0.1854474955629795D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2982941279900452D+0 + V=0.1908148636673661D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3295002922087076D+0 + V=0.1952377405281833D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3603094918363593D+0 + V=0.1988349254282232D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3905857895173920D+0 + V=0.2017079807160050D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4202005758160837D+0 + V=0.2039473082709094D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4490310061597227D+0 + V=0.2056360279288953D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4769586160311491D+0 + V=0.2068525823066865D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5038679887049750D+0 + V=0.2076724877534488D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5296454286519961D+0 + V=0.2081694278237885D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5541776207164850D+0 + V=0.2084157631219326D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5990467321921213D+0 + V=0.2084381531128593D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6191467096294587D+0 + V=0.2083476277129307D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6375251212901849D+0 + V=0.2082686194459732D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6540514381131168D+0 + V=0.2082475686112415D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6685899064391510D+0 + V=0.2083139860289915D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6810013009681648D+0 + V=0.2084745561831237D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6911469578730340D+0 + V=0.2087091313375890D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6988956915141736D+0 + V=0.2089718413297697D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7041335794868720D+0 + V=0.2092003303479793D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7067754398018567D+0 + V=0.2093336148263241D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3840368707853623D-1 + V=0.7591708117365267D-4 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.9835485954117399D-1 + V=0.1083383968169186D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1665774947612998D+0 + V=0.1403019395292510D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2405702335362910D+0 + V=0.1615970179286436D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3165270770189046D+0 + V=0.1771144187504911D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3927386145645443D+0 + V=0.1887760022988168D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4678825918374656D+0 + V=0.1973474670768214D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5408022024266935D+0 + V=0.2033787661234659D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6104967445752438D+0 + V=0.2072343626517331D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6760910702685738D+0 + V=0.2091177834226918D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6655644120217392D-1 + B=0.1936508874588424D-1 + V=0.9316684484675566D-4 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.9446246161270182D-1 + B=0.4252442002115869D-1 + V=0.1116193688682976D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1242651925452509D+0 + B=0.6806529315354374D-1 + V=0.1298623551559414D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1553438064846751D+0 + B=0.9560957491205369D-1 + V=0.1450236832456426D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1871137110542670D+0 + B=0.1245931657452888D+0 + V=0.1572719958149914D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2192612628836257D+0 + B=0.1545385828778978D+0 + V=0.1673234785867195D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2515682807206955D+0 + B=0.1851004249723368D+0 + V=0.1756860118725188D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2838535866287290D+0 + B=0.2160182608272384D+0 + V=0.1826776290439367D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3159578817528521D+0 + B=0.2470799012277111D+0 + V=0.1885116347992865D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3477370882791392D+0 + B=0.2781014208986402D+0 + V=0.1933457860170574D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3790576960890540D+0 + B=0.3089172523515731D+0 + V=0.1973060671902064D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4097938317810200D+0 + B=0.3393750055472244D+0 + V=0.2004987099616311D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4398256572859637D+0 + B=0.3693322470987730D+0 + V=0.2030170909281499D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4690384114718480D+0 + B=0.3986541005609877D+0 + V=0.2049461460119080D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4973216048301053D+0 + B=0.4272112491408562D+0 + V=0.2063653565200186D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5245681526132446D+0 + B=0.4548781735309936D+0 + V=0.2073507927381027D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5506733911803888D+0 + B=0.4815315355023251D+0 + V=0.2079764593256122D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5755339829522475D+0 + B=0.5070486445801855D+0 + V=0.2083150534968778D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1305472386056362D+0 + B=0.2284970375722366D-1 + V=0.1262715121590664D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1637327908216477D+0 + B=0.4812254338288384D-1 + V=0.1414386128545972D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1972734634149637D+0 + B=0.7531734457511935D-1 + V=0.1538740401313898D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2308694653110130D+0 + B=0.1039043639882017D+0 + V=0.1642434942331432D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2643899218338160D+0 + B=0.1334526587117626D+0 + V=0.1729790609237496D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2977171599622171D+0 + B=0.1636414868936382D+0 + V=0.1803505190260828D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3307293903032310D+0 + B=0.1942195406166568D+0 + V=0.1865475350079657D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3633069198219073D+0 + B=0.2249752879943753D+0 + V=0.1917182669679069D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3953346955922727D+0 + B=0.2557218821820032D+0 + V=0.1959851709034382D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4267018394184914D+0 + B=0.2862897925213193D+0 + V=0.1994529548117882D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4573009622571704D+0 + B=0.3165224536636518D+0 + V=0.2022138911146548D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4870279559856109D+0 + B=0.3462730221636496D+0 + V=0.2043518024208592D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5157819581450322D+0 + B=0.3754016870282835D+0 + V=0.2059450313018110D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5434651666465393D+0 + B=0.4037733784993613D+0 + V=0.2070685715318472D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5699823887764627D+0 + B=0.4312557784139123D+0 + V=0.2077955310694373D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5952403350947741D+0 + B=0.4577175367122110D+0 + V=0.2081980387824712D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2025152599210369D+0 + B=0.2520253617719557D-1 + V=0.1521318610377956D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2381066653274425D+0 + B=0.5223254506119000D-1 + V=0.1622772720185755D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2732823383651612D+0 + B=0.8060669688588620D-1 + V=0.1710498139420709D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3080137692611118D+0 + B=0.1099335754081255D+0 + V=0.1785911149448736D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3422405614587601D+0 + B=0.1399120955959857D+0 + V=0.1850125313687736D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3758808773890420D+0 + B=0.1702977801651705D+0 + V=0.1904229703933298D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4088458383438932D+0 + B=0.2008799256601680D+0 + V=0.1949259956121987D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4410450550841152D+0 + B=0.2314703052180836D+0 + V=0.1986161545363960D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4723879420561312D+0 + B=0.2618972111375892D+0 + V=0.2015790585641370D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5027843561874343D+0 + B=0.2920013195600270D+0 + V=0.2038934198707418D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5321453674452458D+0 + B=0.3216322555190551D+0 + V=0.2056334060538251D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5603839113834030D+0 + B=0.3506456615934198D+0 + V=0.2068705959462289D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5874150706875146D+0 + B=0.3789007181306267D+0 + V=0.2076753906106002D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6131559381660038D+0 + B=0.4062580170572782D+0 + V=0.2081179391734803D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2778497016394506D+0 + B=0.2696271276876226D-1 + V=0.1700345216228943D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3143733562261912D+0 + B=0.5523469316960465D-1 + V=0.1774906779990410D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3501485810261827D+0 + B=0.8445193201626464D-1 + V=0.1839659377002642D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3851430322303653D+0 + B=0.1143263119336083D+0 + V=0.1894987462975169D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4193013979470415D+0 + B=0.1446177898344475D+0 + V=0.1941548809452595D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4525585960458567D+0 + B=0.1751165438438091D+0 + V=0.1980078427252384D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4848447779622947D+0 + B=0.2056338306745660D+0 + V=0.2011296284744488D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5160871208276894D+0 + B=0.2359965487229226D+0 + V=0.2035888456966776D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5462112185696926D+0 + B=0.2660430223139146D+0 + V=0.2054516325352142D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5751425068101757D+0 + B=0.2956193664498032D+0 + V=0.2067831033092635D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6028073872853596D+0 + B=0.3245763905312779D+0 + V=0.2076485320284876D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6291338275278409D+0 + B=0.3527670026206972D+0 + V=0.2081141439525255D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3541797528439391D+0 + B=0.2823853479435550D-1 + V=0.1834383015469222D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3908234972074657D+0 + B=0.5741296374713106D-1 + V=0.1889540591777677D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4264408450107590D+0 + B=0.8724646633650199D-1 + V=0.1936677023597375D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4609949666553286D+0 + B=0.1175034422915616D+0 + V=0.1976176495066504D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4944389496536006D+0 + B=0.1479755652628428D+0 + V=0.2008536004560983D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5267194884346086D+0 + B=0.1784740659484352D+0 + V=0.2034280351712291D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5577787810220990D+0 + B=0.2088245700431244D+0 + V=0.2053944466027758D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5875563763536670D+0 + B=0.2388628136570763D+0 + V=0.2068077642882360D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6159910016391269D+0 + B=0.2684308928769185D+0 + V=0.2077250949661599D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6430219602956268D+0 + B=0.2973740761960252D+0 + V=0.2082062440705320D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4300647036213646D+0 + B=0.2916399920493977D-1 + V=0.1934374486546626D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4661486308935531D+0 + B=0.5898803024755659D-1 + V=0.1974107010484300D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5009658555287261D+0 + B=0.8924162698525409D-1 + V=0.2007129290388658D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5344824270447704D+0 + B=0.1197185199637321D+0 + V=0.2033736947471293D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5666575997416371D+0 + B=0.1502300756161382D+0 + V=0.2054287125902493D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5974457471404752D+0 + B=0.1806004191913564D+0 + V=0.2069184936818894D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6267984444116886D+0 + B=0.2106621764786252D+0 + V=0.2078883689808782D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6546664713575417D+0 + B=0.2402526932671914D+0 + V=0.2083886366116359D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5042711004437253D+0 + B=0.2982529203607657D-1 + V=0.2006593275470817D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5392127456774380D+0 + B=0.6008728062339922D-1 + V=0.2033728426135397D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5726819437668618D+0 + B=0.9058227674571398D-1 + V=0.2055008781377608D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6046469254207278D+0 + B=0.1211219235803400D+0 + V=0.2070651783518502D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6350716157434952D+0 + B=0.1515286404791580D+0 + V=0.2080953335094320D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6639177679185454D+0 + B=0.1816314681255552D+0 + V=0.2086284998988521D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5757276040972253D+0 + B=0.3026991752575440D-1 + V=0.2055549387644668D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6090265823139755D+0 + B=0.6078402297870770D-1 + V=0.2071871850267654D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6406735344387661D+0 + B=0.9135459984176636D-1 + V=0.2082856600431965D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6706397927793709D+0 + B=0.1218024155966590D+0 + V=0.2088705858819358D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6435019674426665D+0 + B=0.3052608357660639D-1 + V=0.2083995867536322D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6747218676375681D+0 + B=0.6112185773983089D-1 + V=0.2090509712889637D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END + SUBROUTINE LD5810(X,Y,Z,W,N) + DOUBLE PRECISION X(5810) + DOUBLE PRECISION Y(5810) + DOUBLE PRECISION Z(5810) + DOUBLE PRECISION W(5810) + INTEGER N + DOUBLE PRECISION A,B,V +CVW +CVW LEBEDEV 5810-POINT ANGULAR GRID +CVW +chvd +chvd This subroutine is part of a set of subroutines that generate +chvd Lebedev grids [1-6] for integration on a sphere. The original +chvd C-code [1] was kindly provided by Dr. Dmitri N. Laikov and +chvd translated into fortran by Dr. Christoph van Wuellen. +chvd This subroutine was translated using a C to fortran77 conversion +chvd tool written by Dr. Christoph van Wuellen. +chvd +chvd Users of this code are asked to include reference [1] in their +chvd publications, and in the user- and programmers-manuals +chvd describing their codes. +chvd +chvd This code was distributed through CCL (http://www.ccl.net/). +chvd +chvd [1] V.I. Lebedev, and D.N. Laikov +chvd "A quadrature formula for the sphere of the 131st +chvd algebraic order of accuracy" +chvd Doklady Mathematics, Vol. 59, No. 3, 1999, pp. 477-481. +chvd +chvd [2] V.I. Lebedev +chvd "A quadrature formula for the sphere of 59th algebraic +chvd order of accuracy" +chvd Russian Acad. Sci. Dokl. Math., Vol. 50, 1995, pp. 283-286. +chvd +chvd [3] V.I. Lebedev, and A.L. Skorokhodov +chvd "Quadrature formulas of orders 41, 47, and 53 for the sphere" +chvd Russian Acad. Sci. Dokl. Math., Vol. 45, 1992, pp. 587-592. +chvd +chvd [4] V.I. Lebedev +chvd "Spherical quadrature formulas exact to orders 25-29" +chvd Siberian Mathematical Journal, Vol. 18, 1977, pp. 99-107. +chvd +chvd [5] V.I. Lebedev +chvd "Quadratures on a sphere" +chvd Computational Mathematics and Mathematical Physics, Vol. 16, +chvd 1976, pp. 10-24. +chvd +chvd [6] V.I. Lebedev +chvd "Values of the nodes and weights of ninth to seventeenth +chvd order Gauss-Markov quadrature formulae invariant under the +chvd octahedron group with inversion" +chvd Computational Mathematics and Mathematical Physics, Vol. 15, +chvd 1975, pp. 44-51. +chvd + N=1 + V=0.9735347946175486D-5 + Call GEN_OH( 1, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.1907581241803167D-3 + Call GEN_OH( 2, N, X(N), Y(N), Z(N), W(N), A, B, V) + V=0.1901059546737578D-3 + Call GEN_OH( 3, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1182361662400277D-1 + V=0.3926424538919212D-4 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3062145009138958D-1 + V=0.6667905467294382D-4 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5329794036834243D-1 + V=0.8868891315019135D-4 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7848165532862220D-1 + V=0.1066306000958872D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1054038157636201D+0 + V=0.1214506743336128D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1335577797766211D+0 + V=0.1338054681640871D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1625769955502252D+0 + V=0.1441677023628504D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1921787193412792D+0 + V=0.1528880200826557D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2221340534690548D+0 + V=0.1602330623773609D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2522504912791132D+0 + V=0.1664102653445244D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2823610860679697D+0 + V=0.1715845854011323D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3123173966267560D+0 + V=0.1758901000133069D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3419847036953789D+0 + V=0.1794382485256736D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3712386456999758D+0 + V=0.1823238106757407D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3999627649876828D+0 + V=0.1846293252959976D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4280466458648093D+0 + V=0.1864284079323098D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4553844360185711D+0 + V=0.1877882694626914D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4818736094437834D+0 + V=0.1887716321852025D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5074138709260629D+0 + V=0.1894381638175673D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5319061304570707D+0 + V=0.1898454899533629D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5552514978677286D+0 + V=0.1900497929577815D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5981009025246183D+0 + V=0.1900671501924092D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6173990192228116D+0 + V=0.1899837555533510D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6351365239411131D+0 + V=0.1899014113156229D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6512010228227200D+0 + V=0.1898581257705106D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6654758363948120D+0 + V=0.1898804756095753D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6778410414853370D+0 + V=0.1899793610426402D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6881760887484110D+0 + V=0.1901464554844117D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6963645267094598D+0 + V=0.1903533246259542D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7023010617153579D+0 + V=0.1905556158463228D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.7059004636628753D+0 + V=0.1907037155663528D-3 + Call GEN_OH( 4, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3552470312472575D-1 + V=0.5992997844249967D-4 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.9151176620841283D-1 + V=0.9749059382456978D-4 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1566197930068980D+0 + V=0.1241680804599158D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2265467599271907D+0 + V=0.1437626154299360D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2988242318581361D+0 + V=0.1584200054793902D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3717482419703886D+0 + V=0.1694436550982744D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4440094491758889D+0 + V=0.1776617014018108D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5145337096756642D+0 + V=0.1836132434440077D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5824053672860230D+0 + V=0.1876494727075983D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6468283961043370D+0 + V=0.1899906535336482D-3 + Call GEN_OH( 5, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6095964259104373D-1 + B=0.1787828275342931D-1 + V=0.8143252820767350D-4 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.8811962270959388D-1 + B=0.3953888740792096D-1 + V=0.9998859890887728D-4 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1165936722428831D+0 + B=0.6378121797722990D-1 + V=0.1156199403068359D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1460232857031785D+0 + B=0.8985890813745037D-1 + V=0.1287632092635513D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1761197110181755D+0 + B=0.1172606510576162D+0 + V=0.1398378643365139D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2066471190463718D+0 + B=0.1456102876970995D+0 + V=0.1491876468417391D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2374076026328152D+0 + B=0.1746153823011775D+0 + V=0.1570855679175456D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2682305474337051D+0 + B=0.2040383070295584D+0 + V=0.1637483948103775D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2989653312142369D+0 + B=0.2336788634003698D+0 + V=0.1693500566632843D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3294762752772209D+0 + B=0.2633632752654219D+0 + V=0.1740322769393633D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3596390887276086D+0 + B=0.2929369098051601D+0 + V=0.1779126637278296D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3893383046398812D+0 + B=0.3222592785275512D+0 + V=0.1810908108835412D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4184653789358347D+0 + B=0.3512004791195743D+0 + V=0.1836529132600190D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4469172319076166D+0 + B=0.3796385677684537D+0 + V=0.1856752841777379D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4745950813276976D+0 + B=0.4074575378263879D+0 + V=0.1872270566606832D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5014034601410262D+0 + B=0.4345456906027828D+0 + V=0.1883722645591307D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5272493404551239D+0 + B=0.4607942515205134D+0 + V=0.1891714324525297D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5520413051846366D+0 + B=0.4860961284181720D+0 + V=0.1896827480450146D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5756887237503077D+0 + B=0.5103447395342790D+0 + V=0.1899628417059528D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1225039430588352D+0 + B=0.2136455922655793D-1 + V=0.1123301829001669D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1539113217321372D+0 + B=0.4520926166137188D-1 + V=0.1253698826711277D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1856213098637712D+0 + B=0.7086468177864818D-1 + V=0.1366266117678531D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2174998728035131D+0 + B=0.9785239488772918D-1 + V=0.1462736856106918D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2494128336938330D+0 + B=0.1258106396267210D+0 + V=0.1545076466685412D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2812321562143480D+0 + B=0.1544529125047001D+0 + V=0.1615096280814007D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3128372276456111D+0 + B=0.1835433512202753D+0 + V=0.1674366639741759D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3441145160177973D+0 + B=0.2128813258619585D+0 + V=0.1724225002437900D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3749567714853510D+0 + B=0.2422913734880829D+0 + V=0.1765810822987288D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4052621732015610D+0 + B=0.2716163748391453D+0 + V=0.1800104126010751D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4349335453522385D+0 + B=0.3007127671240280D+0 + V=0.1827960437331284D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4638776641524965D+0 + B=0.3294470677216479D+0 + V=0.1850140300716308D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4920046410462687D+0 + B=0.3576932543699155D+0 + V=0.1867333507394938D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5192273554861704D+0 + B=0.3853307059757764D+0 + V=0.1880178688638289D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5454609081136522D+0 + B=0.4122425044452694D+0 + V=0.1889278925654758D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5706220661424140D+0 + B=0.4383139587781027D+0 + V=0.1895213832507346D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5946286755181518D+0 + B=0.4634312536300553D+0 + V=0.1898548277397420D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.1905370790924295D+0 + B=0.2371311537781979D-1 + V=0.1349105935937341D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2242518717748009D+0 + B=0.4917878059254806D-1 + V=0.1444060068369326D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2577190808025936D+0 + B=0.7595498960495142D-1 + V=0.1526797390930008D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2908724534927187D+0 + B=0.1036991083191100D+0 + V=0.1598208771406474D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3236354020056219D+0 + B=0.1321348584450234D+0 + V=0.1659354368615331D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3559267359304543D+0 + B=0.1610316571314789D+0 + V=0.1711279910946440D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3876637123676956D+0 + B=0.1901912080395707D+0 + V=0.1754952725601440D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4187636705218842D+0 + B=0.2194384950137950D+0 + V=0.1791247850802529D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4491449019883107D+0 + B=0.2486155334763858D+0 + V=0.1820954300877716D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4787270932425445D+0 + B=0.2775768931812335D+0 + V=0.1844788524548449D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5074315153055574D+0 + B=0.3061863786591120D+0 + V=0.1863409481706220D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5351810507738336D+0 + B=0.3343144718152556D+0 + V=0.1877433008795068D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5619001025975381D+0 + B=0.3618362729028427D+0 + V=0.1887444543705232D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5875144035268046D+0 + B=0.3886297583620408D+0 + V=0.1894009829375006D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6119507308734495D+0 + B=0.4145742277792031D+0 + V=0.1897683345035198D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2619733870119463D+0 + B=0.2540047186389353D-1 + V=0.1517327037467653D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.2968149743237949D+0 + B=0.5208107018543989D-1 + V=0.1587740557483543D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3310451504860488D+0 + B=0.7971828470885599D-1 + V=0.1649093382274097D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3646215567376676D+0 + B=0.1080465999177927D+0 + V=0.1701915216193265D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3974916785279360D+0 + B=0.1368413849366629D+0 + V=0.1746847753144065D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4295967403772029D+0 + B=0.1659073184763559D+0 + V=0.1784555512007570D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4608742854473447D+0 + B=0.1950703730454614D+0 + V=0.1815687562112174D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4912598858949903D+0 + B=0.2241721144376724D+0 + V=0.1840864370663302D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5206882758945558D+0 + B=0.2530655255406489D+0 + V=0.1860676785390006D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5490940914019819D+0 + B=0.2816118409731066D+0 + V=0.1875690583743703D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5764123302025542D+0 + B=0.3096780504593238D+0 + V=0.1886453236347225D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6025786004213506D+0 + B=0.3371348366394987D+0 + V=0.1893501123329645D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6275291964794956D+0 + B=0.3638547827694396D+0 + V=0.1897366184519868D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3348189479861771D+0 + B=0.2664841935537443D-1 + V=0.1643908815152736D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.3699515545855295D+0 + B=0.5424000066843495D-1 + V=0.1696300350907768D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4042003071474669D+0 + B=0.8251992715430854D-1 + V=0.1741553103844483D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4375320100182624D+0 + B=0.1112695182483710D+0 + V=0.1780015282386092D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4699054490335947D+0 + B=0.1402964116467816D+0 + V=0.1812116787077125D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5012739879431952D+0 + B=0.1694275117584291D+0 + V=0.1838323158085421D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5315874883754966D+0 + B=0.1985038235312689D+0 + V=0.1859113119837737D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5607937109622117D+0 + B=0.2273765660020893D+0 + V=0.1874969220221698D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5888393223495521D+0 + B=0.2559041492849764D+0 + V=0.1886375612681076D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6156705979160163D+0 + B=0.2839497251976899D+0 + V=0.1893819575809276D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6412338809078123D+0 + B=0.3113791060500690D+0 + V=0.1897794748256767D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4076051259257167D+0 + B=0.2757792290858463D-1 + V=0.1738963926584846D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4423788125791520D+0 + B=0.5584136834984293D-1 + V=0.1777442359873466D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4760480917328258D+0 + B=0.8457772087727143D-1 + V=0.1810010815068719D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5085838725946297D+0 + B=0.1135975846359248D+0 + V=0.1836920318248129D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5399513637391218D+0 + B=0.1427286904765053D+0 + V=0.1858489473214328D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5701118433636380D+0 + B=0.1718112740057635D+0 + V=0.1875079342496592D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5990240530606021D+0 + B=0.2006944855985351D+0 + V=0.1887080239102310D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6266452685139695D+0 + B=0.2292335090598907D+0 + V=0.1894905752176822D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6529320971415942D+0 + B=0.2572871512353714D+0 + V=0.1898991061200695D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.4791583834610126D+0 + B=0.2826094197735932D-1 + V=0.1809065016458791D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5130373952796940D+0 + B=0.5699871359683649D-1 + V=0.1836297121596799D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5456252429628476D+0 + B=0.8602712528554394D-1 + V=0.1858426916241869D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5768956329682385D+0 + B=0.1151748137221281D+0 + V=0.1875654101134641D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6068186944699046D+0 + B=0.1442811654136362D+0 + V=0.1888240751833503D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6353622248024907D+0 + B=0.1731930321657680D+0 + V=0.1896497383866979D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6624927035731797D+0 + B=0.2017619958756061D+0 + V=0.1900775530219121D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5484933508028488D+0 + B=0.2874219755907391D-1 + V=0.1858525041478814D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.5810207682142106D+0 + B=0.5778312123713695D-1 + V=0.1876248690077947D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6120955197181352D+0 + B=0.8695262371439526D-1 + V=0.1889404439064607D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6416944284294319D+0 + B=0.1160893767057166D+0 + V=0.1898168539265290D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6697926391731260D+0 + B=0.1450378826743251D+0 + V=0.1902779940661772D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6147594390585488D+0 + B=0.2904957622341456D-1 + V=0.1890125641731815D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6455390026356783D+0 + B=0.5823809152617197D-1 + V=0.1899434637795751D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6747258588365477D+0 + B=0.8740384899884715D-1 + V=0.1904520856831751D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + A=0.6772135750395347D+0 + B=0.2919946135808105D-1 + V=0.1905534498734563D-3 + Call GEN_OH( 6, N, X(N), Y(N), Z(N), W(N), A, B, V) + N=N-1 + RETURN + END diff --git a/common/lib/message.F90 b/common/lib/message.F90 new file mode 100644 index 00000000..9939c42d --- /dev/null +++ b/common/lib/message.F90 @@ -0,0 +1,84 @@ +!> Module that contains routines for throwing messages (warnings/errors) due to runtime events. +module common_message + + implicit none + private + + + !> Recoverable error warnings. + interface warning + module procedure warning_single + module procedure warning_array + end interface + + + !> Fatal error warnings, terminating the code. + interface error + module procedure error_single + module procedure error_array + end interface error + + + public :: warning, error + + +contains + + !> Throws a single warning message. + subroutine warning_single(message) + + !> Warning message to print to standard out + character (len=*), intent(in) :: message + + write(*, '(1a)') 'WARNING!' + write(*, '(2a)') '-> ', trim(message) + + end subroutine warning_single + + + !> Throws multiple warning messages. + subroutine warning_array(messages) + + !> Lines of the warning message to print to standard out + character(len=*), intent(in) :: messages(:) + + integer :: ii + + write(*, '(1a)') 'WARNING!' + do ii = 1, size(messages) + write(*, '(2a)') '-> ', trim(messages(ii)) + end do + + end subroutine warning_array + + + !> Throws a single error message and stops the code. + subroutine error_single(message) + + !> Error message to print to standard out + character (len=*), intent(in) :: message + + write(*, '(1a)') 'ERROR!' + write(*, '(2a)') '-> ', trim(message) + error stop + + end subroutine error_single + + + !> Throws multiple error messages and stops the code. + subroutine error_array(messages) + + !> Lines of the error message to print to standard out + character(len=*), intent(in) :: messages(:) + + integer :: ii + + write(*, '(1a)') 'ERROR!' + do ii = 1, size(messages) + write(*, '(2a)') '-> ', trim(messages(ii)) + end do + error stop + + end subroutine error_array + +end module common_message diff --git a/sktwocnt/lib/partition.f90 b/common/lib/partition.F90 similarity index 98% rename from sktwocnt/lib/partition.f90 rename to common/lib/partition.F90 index 5467566d..ee2e6410 100644 --- a/sktwocnt/lib/partition.f90 +++ b/common/lib/partition.F90 @@ -1,5 +1,5 @@ !> Module that provides (Becke's) space partitioning functions. -module partition +module common_partition use common_accuracy, only : dp @@ -137,6 +137,7 @@ pure function beckepar(r1, r2) result(res) !! see A. D. Becke, J. Chem. Phys. 88, 2547 (1988), eqn. A6 real(dp) :: uu + ! chi = r1 / r2 chi = sqrt(r1 / r2) uu = (chi - 1.0_dp) / (chi + 1.0_dp) @@ -149,4 +150,4 @@ pure function beckepar(r1, r2) result(res) end function beckepar -end module partition +end module common_partition diff --git a/common/lib/poisson.F90 b/common/lib/poisson.F90 new file mode 100644 index 00000000..3c17471e --- /dev/null +++ b/common/lib/poisson.F90 @@ -0,0 +1,793 @@ +!> Module that solves the Poisson equation. +!! ref: Becke, J. Chem. Phys., 89, 2993(1988) +!! implementation: V.L. 2011 +!! Related Project: Range-Separated Hybrids (RSH) +!! +!! Purpose: The program should solve the poisson equation with density, given +!! at non-equidistant points (e.g. Chebyshev radial quadrature points), +!! by transforming the equation to the equidistant mesh and solving it +!! by finite difference method. +module common_poisson + + use common_accuracy, only : dp + use common_constants, only : pi, pi_hlf + + use common_quadratures, only : TQuadrature, TQuadrature2D, gauss_chebyshev_quadrature + use common_quadratures, only : lebedev_laikov_quadrature + use common_gridgenerator, only : gengrid1_1, gengrid1_3, gengrid2_3 + use common_coordtrans, only : coordtrans_radial_becke1, coordtrans_radial_becke2 + use common_partition, only : partition_becke_homo + use common_anglib, only : initGaunt + use common_finitedifferences, only : makeHelmholzFDMatrix7P, makePoissonFDMatrix7P + + implicit none + private + + public :: solvePoisson, solveHelmholz + public :: TBeckeIntegrator_solvePoisson, TBeckeIntegrator_solveHelmholz + public :: TBeckeIntegrator_init, TBeckeIntegrator, TBeckeGridParams, TBeckeIntegrator_buildLU + public :: TBeckeIntegrator_getCoords, TBeckeIntegrator_setKernelParam + public :: TBeckeIntegrator_precompFdMatrix + + + !> Stores finite differences matrix. + type TFdiffMatrix + + real(dp), allocatable :: d(:) + real(dp), allocatable :: g(:) + real(dp), allocatable :: zi(:) + real(dp), allocatable :: b(:) + real(dp), allocatable :: H1(:,:), H2(:,:) + + !> pivot indices: for 1 <= i <= N, row i of the matrix was interchanged with row ipiv(i) + integer, allocatable :: ipiv2(:,:), ipiv4(:,:) + + !> LU decomposition supermatrices + real(dp), allocatable :: H3(:,:,:), H4(:,:,:) + + end type TFdiffMatrix + + + !> Defines a Becke integration grid. + type TBeckeGridParams + + !> number of radial integration points + integer :: nRadial + + !> number of angular integration points + integer :: nAngular + + !> maximum angular momentum + integer :: ll_max + + !> midpoint of the integration interval + real(dp) :: rm + + end type TBeckeGridParams + + + !> Wraps around Becke data array. + type TBeckeSubgrid + + !> data on Becke grid + real(dp), allocatable :: data(:,:) + + end type TBeckeSubgrid + + + !> Wraps around multiple Becke integration grids. + type TBeckeGrid + + !> Becke subgrids + type(TBeckeSubgrid), allocatable :: subgrid(:) + + !> integration weights + real(dp), allocatable :: weight(:) + + !> space partition for full 3D integration + real(dp), allocatable :: partition(:) + + end type TBeckeGrid + + + !> Contains information, needed for setting up and performing Becke integration. + type TBeckeIntegrator + + !> Becke grid parameters + type(TBeckeGridParams) :: beckeGridParams + + !> radial quadrature information + type(TQuadrature) :: radialQuadrature + + !> angular quadrature information + type(TQuadrature2D) :: angularQuadrature + + !> kernel screening parameter + real(dp) :: kernelParameter + + !> Becke integration grids + type(TBeckeGrid), allocatable :: beckeGrid(:) + + !> finite differences matrix + type(TFdiffMatrix) :: fdmat + + !> midpoint of the integration interval + real(dp) :: rm + + end type TBeckeIntegrator + + +contains + + !> Precomputes the finite differences matrix. + subroutine TBeckeIntegrator_precompFdMatrix(this) + + !> Becke integrator instance + type(TBeckeIntegrator), intent(inout) :: this + + !! number of radial grid points + integer :: nRadial + + !! screening parameter + real(dp) :: omega + + !! midpoint of the integration interval + real(dp) :: rm + + !! auxiliary variables + real(dp) :: step, step_2, tmp1, llp1_pi_2_rm_4, f0, zz,pi_rm_4_3 + real(dp) :: beta, gama, sin_pi, sin_pi_hlf, cos_pi_hlf, a2c + + !! iterates over radial points + integer :: ii + + omega = this%kernelParameter + nRadial=this%beckeGridParams%nRadial + rm = this%rm + + this%fdmat%g(:) = 0.0_dp + this%fdmat%H1(:,:) = 0.0_dp + this%fdmat%H2(:,:) = 0.0_dp + this%fdmat%zi(:) = 0.0_dp + + tmp1 = (1.0_dp / real(nRadial + 1, dp))**2 * 180.0_dp + + this%fdmat%zi(:) = acos(this%radialQuadrature%xx) / pi + + step = 1.0_dp / real(nRadial + 1, dp) + step_2 = step**2 + + f0 = 0.0_dp + a2c = omega**2 * rm**2 * pi**2 * 0.25_dp + llp1_pi_2_rm_4 = 4.0_dp * pi**2 + pi_rm_4_3 = pi**3 * rm**3 * 4.0_dp * tmp1 + + zz = this%fdmat%zi(1) + sin_pi = sin(pi * zz) + sin_pi_hlf = sin(pi_hlf * zz) + cos_pi_hlf = cos(pi_hlf * zz) + sin_pi_hlf = sin_pi_hlf**2 ! ^2 + cos_pi_hlf = cos_pi_hlf**4 ! ^4 + beta = (pi / sin_pi + pi_hlf * sin_pi / sin_pi_hlf) * step + sin_pi = sin_pi**2 ! ^2 + + sin_pi_hlf = sin_pi_hlf**2 ! ^4 + sin_pi_hlf = sin_pi_hlf**2 ! ^8 + gama = -(a2c * sin_pi / sin_pi_hlf) + this%fdmat%d(1) = -pi_rm_4_3 * cos_pi_hlf / sin_pi_hlf + this%fdmat%g(1) = -llp1_pi_2_rm_4 / sin_pi * step_2 * 180.0_dp + + this%fdmat%H1(7, 1) = -300.0_dp - beta * 150.0_dp + gama * step_2 * 180.0_dp + this%fdmat%H1(6, 2) = 90.0_dp + beta * 270.0_dp + this%fdmat%H1(5, 3) = 60.0_dp - beta * 90.0_dp + this%fdmat%H1(4, 4) = -15.0_dp + beta * 15.0_dp + + zz = this%fdmat%zi(2) + + sin_pi = sin(pi * zz) + sin_pi_hlf = sin(pi_hlf * zz) + cos_pi_hlf = cos(pi_hlf * zz) + sin_pi_hlf = sin_pi_hlf**2 ! ^2 + cos_pi_hlf = cos_pi_hlf**4 ! ^4 + beta = (pi / sin_pi + pi_hlf * sin_pi / sin_pi_hlf) * step + sin_pi = sin_pi**2 ! ^2 + + sin_pi_hlf = sin_pi_hlf**2 ! ^4 + sin_pi_hlf = sin_pi_hlf**2 ! ^8 + gama = -(a2c * sin_pi / sin_pi_hlf) + this%fdmat%d(2) = -pi_rm_4_3 * cos_pi_hlf / sin_pi_hlf + this%fdmat%g(2) = -llp1_pi_2_rm_4 / sin_pi * step_2 * 180.0_dp + + this%fdmat%H1(7, 2) = -450.0_dp - beta * 60.0_dp + this%fdmat%H1(6, 3) = 240.0_dp + beta * 180.0_dp + this%fdmat%H1(5, 4) = -15.0_dp - beta * 45.0_dp + this%fdmat%H1(4, 5) = beta * 6.0_dp + this%fdmat%H1(8, 1) = 240.0_dp - beta * 90.0_dp + gama * step_2 * 180.0_dp + + zz = this%fdmat%zi(3) + + sin_pi = sin(pi * zz) + sin_pi_hlf = sin(pi_hlf * zz) + cos_pi_hlf = cos(pi_hlf * zz) + sin_pi_hlf = sin_pi_hlf**2 ! ^2 + cos_pi_hlf = cos_pi_hlf**4 ! ^4 + beta = (pi / sin_pi + pi_hlf * sin_pi / sin_pi_hlf) * step + sin_pi = sin_pi**2 ! ^2 + + sin_pi_hlf = sin_pi_hlf*sin_pi_hlf ! ^4 + sin_pi_hlf = sin_pi_hlf*sin_pi_hlf ! ^8 + gama = -(a2c * sin_pi / sin_pi_hlf) + this%fdmat%d(3) = -pi_rm_4_3 * cos_pi_hlf / sin_pi_hlf + this%fdmat%g(3) = -llp1_pi_2_rm_4 / sin_pi * step_2 * 180.0_dp + + this%fdmat%H1(7, 3) = -490.0_dp + gama * step_2 * 180.0_dp + this%fdmat%H1(6, 4) = 270.0_dp + beta * 135.0_dp + this%fdmat%H1(5, 5) = -27.0_dp - beta * 27.0_dp + this%fdmat%H1(4, 6) = 2.0_dp + beta * 3.0_dp + this%fdmat%H1(8, 2) = 270.0_dp - beta * 135.0_dp + this%fdmat%H1(9, 1) = -27.0_dp + beta * 27.0_dp + + do ii = 4, nRadial - 3 + zz = this%fdmat%zi(ii) + + sin_pi = sin(pi * zz) + sin_pi_hlf = sin(pi_hlf * zz) + cos_pi_hlf = cos(pi_hlf * zz) + sin_pi_hlf = sin_pi_hlf**2 ! ^2 + cos_pi_hlf = cos_pi_hlf**4 ! ^4 + beta = (pi / sin_pi + pi_hlf * sin_pi / sin_pi_hlf) * step + sin_pi = sin_pi**2 ! ^2 + + sin_pi_hlf = sin_pi_hlf**2 ! ^4 + sin_pi_hlf = sin_pi_hlf**2 ! ^8 + gama = -(a2c * sin_pi / sin_pi_hlf) + this%fdmat%d(ii) = -pi_rm_4_3 * cos_pi_hlf / sin_pi_hlf + this%fdmat%g(ii) = -llp1_pi_2_rm_4 / sin_pi * step_2 * 180.0_dp + + this%fdmat%H1(7, ii) = -490.0_dp + gama * step_2 * 180.0_dp + this%fdmat%H1(6, ii + 1) = 270.0_dp + beta * 135.0_dp + this%fdmat%H1(5, ii + 2) = -27.0_dp - beta * 27.0_dp + this%fdmat%H1(4, ii + 3) = 2.0_dp + beta * 3.0_dp + this%fdmat%H1(8, ii - 1) = 270.0_dp - beta * 135.0_dp + this%fdmat%H1(9, ii - 2) = -27.0_dp + beta * 27.0_dp + this%fdmat%H1(10, ii - 3) = 2.0_dp - beta * 3.0_dp + end do + + zz = this%fdmat%zi(nRadial - 2) + + sin_pi = sin(pi * zz) + sin_pi_hlf = sin(pi_hlf * zz) + cos_pi_hlf = cos(pi_hlf * zz) + sin_pi_hlf = sin_pi_hlf**2 ! ^2 + cos_pi_hlf = cos_pi_hlf**4 ! ^4 + beta = (pi / sin_pi + pi_hlf * sin_pi / sin_pi_hlf) * step + sin_pi = sin_pi**2 ! ^2 + + sin_pi_hlf = sin_pi_hlf**2 ! ^4 + sin_pi_hlf = sin_pi_hlf**2 ! ^8 + gama = -(a2c * sin_pi / sin_pi_hlf) + this%fdmat%d(nRadial - 2) = -pi_rm_4_3 * cos_pi_hlf / sin_pi_hlf + this%fdmat%g(nRadial - 2) = -llp1_pi_2_rm_4 / sin_pi * step_2 * 180.0_dp + + this%fdmat%H1(7, nRadial - 2) = -490.0_dp + gama * step_2 * 180.0_dp + this%fdmat%H1(6, nRadial - 1) = 270.0_dp + beta * 135.0_dp + this%fdmat%H1(5, nRadial) = -27.0_dp - beta * 27.0_dp + this%fdmat%H1(8, nRadial - 3) = 270.0_dp - beta * 135.0_dp + this%fdmat%H1(9, nRadial - 4) = -27.0_dp + beta * 27.0_dp + this%fdmat%H1(10, nRadial - 5) = 2.0_dp - beta * 3.0_dp + + zz = this%fdmat%zi(nRadial - 1) + + sin_pi = sin(pi * zz) + sin_pi_hlf = sin(pi_hlf * zz) + cos_pi_hlf = cos(pi_hlf * zz) + sin_pi_hlf = sin_pi_hlf**2 ! ^2 + cos_pi_hlf = cos_pi_hlf**4 ! ^4 + beta = (pi / sin_pi + pi_hlf * sin_pi / sin_pi_hlf) * step + sin_pi = sin_pi**2 ! ^2 + + sin_pi_hlf = sin_pi_hlf**2 ! ^4 + sin_pi_hlf = sin_pi_hlf**2 ! ^8 + gama = -(a2c * sin_pi / sin_pi_hlf) + this%fdmat%d(nRadial - 1) = -pi_rm_4_3 * cos_pi_hlf / sin_pi_hlf + this%fdmat%g(nRadial - 1) = -llp1_pi_2_rm_4 / sin_pi * step_2 * 180.0_dp + + this%fdmat%H1(7, nRadial - 1) = -450.0_dp + beta * 60.0_dp + this%fdmat%H1(6, nRadial) = 240.0_dp + gama * step_2 * 180.0_dp + beta * 90.0_dp + this%fdmat%H1(8, nRadial - 2) = 240.0_dp - beta * 180.0_dp + this%fdmat%H1(9, nRadial - 3) = -15.0_dp + beta * 45.0_dp + this%fdmat%H1(10, nRadial - 4) = -beta * 6.0_dp + + zz = this%fdmat%zi(nRadial) + + sin_pi = sin(pi * zz) + sin_pi_hlf = sin(pi_hlf * zz) + cos_pi_hlf = cos(pi_hlf * zz) + sin_pi_hlf = sin_pi_hlf**2 ! ^2 + cos_pi_hlf = cos_pi_hlf**4 ! ^4 + beta = (pi / sin_pi + pi_hlf * sin_pi / sin_pi_hlf) * step + sin_pi = sin_pi**2 ! ^2 + + sin_pi_hlf = sin_pi_hlf**2 ! ^4 + sin_pi_hlf = sin_pi_hlf**2 ! ^8 + + gama = -(a2c * sin_pi / sin_pi_hlf) + this%fdmat%d(nRadial) = -pi_rm_4_3 * cos_pi_hlf / sin_pi_hlf + this%fdmat%g(nRadial) = -llp1_pi_2_rm_4 / sin_pi * step_2 * 180.0_dp + + this%fdmat%H1(7, nRadial) = -300.0_dp + gama * step_2 * 180.0_dp + beta * 150.0_dp + this%fdmat%H1(8, nRadial - 1) = 90.0_dp - beta * 270.0_dp + this%fdmat%H1(9, nRadial - 2) = 60.0_dp + beta * 90.0_dp + this%fdmat%H1(10, nRadial - 3) = -15.0_dp - beta * 15.0_dp + + end subroutine TBeckeIntegrator_precompFdMatrix + + + !> + subroutine TBeckeIntegrator_buildFdMatrix(this, ll) + + !> Becke integrator instance + type(TBeckeIntegrator), intent(inout) :: this + + !> angular momentum + integer, intent(in) :: ll + + !! number of radial points + integer :: nRadial + + !! iterates over radial points + integer :: ii + + !! stores: ll * (ll + 1) + real(dp) :: lll + + this%fdmat%H2 = this%fdmat%H1 + lll = real(ll * (ll + 1), dp) + nRadial = this%beckeGridParams%nRadial + + this%fdmat%H2(7, 1) = this%fdmat%H2(7, 1) + this%fdmat%g(1) * lll + this%fdmat%H2(8, 1) = this%fdmat%H2(8, 1) + this%fdmat%g(2) * lll + this%fdmat%H2(7, 3) = this%fdmat%H2(7, 3) + this%fdmat%g(3) * lll + do ii = 4, nRadial - 3 + this%fdmat%H2(7, ii) = this%fdmat%H2(7, ii) + this%fdmat%g(ii) * lll + end do + this%fdmat%H2(7, nRadial - 2) = this%fdmat%H2(7, nRadial - 2) + this%fdmat%g(nRadial - 2) * lll + this%fdmat%H2(6, nRadial) = this%fdmat%H2(6, nRadial) + this%fdmat%g(nRadial - 1) * lll + this%fdmat%H2(7, nRadial) = this%fdmat%H2(7, nRadial) + this%fdmat%g(nRadial) * lll + + end subroutine TBeckeIntegrator_buildFdMatrix + + + !> Solves the modified Helmholz equation for angular momentum ll and density rho_lm, + !! using LU decomposed finite differences matrix fdmat. + subroutine TBeckeIntegrator_solveHelmholz(this, ll, rho_lm) + + !> Becke integrator instance + type(TBeckeIntegrator), intent(inout) :: this + + !> angular momentum + integer, intent(in) :: ll + + !> lm-resolved density + real(dp), intent(inout) :: rho_lm(:) + + !! number of radial points + integer :: nRadial + + !! error status + integer :: info + + info = 0 + + nRadial = this%beckeGridParams%nRadial + rho_lm(:) = rho_lm * this%fdmat%d + + call DGBTRS('No transpose', nRadial, 3, 3, 1, this%fdmat%H3(:,:, ll + 1), 10,& + & this%fdmat%ipiv2(:, ll + 1), rho_lm, nRadial, info) + + end subroutine TBeckeIntegrator_solveHelmholz + + + !> Solves the Poisson equation for angular momentum ll and density rho_lm, + !! using LU decomposed finite differences matrix fdmat. + subroutine TBeckeIntegrator_solvePoisson(this, ll, rho_lm) + + !> Becke integrator instance + type(TBeckeIntegrator), intent(inout) :: this + + !> angular momentum + integer, intent(in) :: ll + + !> lm-resolved density + real(dp), intent(inout) :: rho_lm(:) + + !! number of radial points + integer :: nRadial + + !! error status + integer :: info + + info = 0 + + nRadial = this%beckeGridParams%nRadial + rho_lm(:) = rho_lm * this%fdmat%d + + call DGBTRS('No transpose', nRadial, 3, 3, 1, this%fdmat%H4(:,:, ll + 1), 10,& + & this%fdmat%ipiv4(:, ll + 1), rho_lm, nRadial, info) + + end subroutine TBeckeIntegrator_solvePoisson + + + !> Initializes the integration module. + subroutine TBeckeIntegrator_init(this, beckeGridParams) + + !> Becke integrator instance + type(TBeckeIntegrator), intent(inout) :: this + + !> Becke grid parameters + type(TBeckeGridParams), intent(in) :: beckeGridParams + + this%beckeGridParams = beckeGridParams + this%kernelParameter = 0.0_dp + this%rm = beckeGridParams%rm + + call gauss_chebyshev_quadrature(beckeGridParams%nRadial, this%radialQuadrature) + call lebedev_laikov_quadrature(beckeGridParams%nAngular, this%angularQuadrature) + + allocate(this%beckeGrid(3)) + call TBeckeGrid_init(this%beckeGrid(1), 1, this%radialQuadrature, this%angularQuadrature,& + & 0.5_dp, this%rm) + call TBeckeGrid_init(this%beckeGrid(2), 2, this%radialQuadrature, this%angularQuadrature,& + & 0.5_dp, this%rm) + call TBeckeGrid_init(this%beckeGrid(3), 11, this%radialQuadrature, this%angularQuadrature,& + & 0.5_dp, this%rm) + + call initGaunt(beckeGridParams%ll_max) + + ! allocate the finite differences matrix + allocate(this%fdmat%g(beckeGridParams%nRadial)) + allocate(this%fdmat%d(beckeGridParams%nRadial)) + allocate(this%fdmat%b(beckeGridParams%nRadial)) + allocate(this%fdmat%zi(beckeGridParams%nRadial)) + allocate(this%fdmat%ipiv2(beckeGridParams%nRadial, beckeGridParams%ll_max)) + allocate(this%fdmat%ipiv4(beckeGridParams%nRadial, beckeGridParams%ll_max)) + allocate(this%fdmat%H1(10, beckeGridParams%nRadial)) + allocate(this%fdmat%H2(10, beckeGridParams%nRadial)) + allocate(this%fdmat%H3(10, beckeGridParams%nRadial, beckeGridParams%ll_max)) + allocate(this%fdmat%H4(10, beckeGridParams%nRadial, beckeGridParams%ll_max)) + + end subroutine TBeckeIntegrator_init + + + !> Precomputes the LU decompositions. + subroutine TBeckeIntegrator_buildLU(this) + + !> Becke integrator instance + type(TBeckeIntegrator), intent(inout) :: this + + !! number of radial points + integer :: nRadial + + !! angular momentum + integer :: ll + + !! error status + integer :: info + + nRadial = this%beckeGridParams%nRadial + + do ll = 1, this%beckeGridParams%ll_max + call TBeckeIntegrator_buildFdMatrix(this, ll - 1) + this%fdmat%H3(:,:, ll) = this%fdmat%H2 + call DGBTRF(nRadial, nRadial, 3, 3, this%fdmat%H3(:,:, ll), 10, this%fdmat%ipiv2(:, ll),& + & info) + if (info /= 0) write(*, '(A)') "ERROR: LU decomposition failed!" + end do + + end subroutine TBeckeIntegrator_buildLU + + + !> Returns pointer to selected grid coordinates. + !! grid_no(grid_nr, subgrid_nr, coordinate_nr) + !! grid_nr: 1 for 1_3 grid + !! 2 for 2_3 grid + !! subgrid_nr: 1 for 1_3 + !! 2 for 2_3 + !! coordiante_nr: 1 for rr + !! 2 for theta + !! 3 for phi + subroutine TBeckeIntegrator_getCoords(this, grid_no, pCoords) + + !> Becke integrator instance + type(TBeckeIntegrator), intent(in), target :: this + + !> selection indices, i.e. [grid_nr, subgrid_nr, coordinate_nr] + integer, intent(in) :: grid_no(3) + + !> pointer to coordinates + real(dp), intent(out), pointer :: pCoords(:) + + pCoords => this%beckeGrid(grid_no(1))%subgrid(grid_no(2))%data(:, grid_no(3)) + + end subroutine TBeckeIntegrator_getCoords + + + !> Sets the screening parameter in the integration kernel. + subroutine TBeckeIntegrator_setKernelParam(this, omega) + + !> Becke integrator instance + type(TBeckeIntegrator), intent(inout) :: this + + !> screening parameter + real(dp), intent(in) :: omega + + this%kernelParameter = omega + + end subroutine TBeckeIntegrator_setKernelParam + + + !> Initializes a Becke grid instance with a given number of subgrids. + subroutine TBeckeGrid_init(this, nSubgrids, radquad, angquad, dist, rm) + + !> Becke grid instance + type(TBeckeGrid), intent(inout) :: this + + !> number of subgrids in instance + integer, intent(in) :: nSubgrids + + !> abscissas and weight instances for radial quadrature + type(TQuadrature), intent(in) :: radquad + + !> abscissas and weight instances for angular quadrature + type(TQuadrature2D), intent(in) :: angquad + + !> distance between centers + real(dp), intent(in) :: dist + + !> midpoint of the integration interval + real(dp), intent(in) :: rm + + !! arbitrary dummy real array, unused for homonuclear Becke partitioning + real(dp) :: beckepars(1) + + ! TBeckeGrid contains only one subgrid + if (nSubgrids == 11) then + allocate(this%subgrid(1)) + call gengrid1_1(radQuad, rm, coordtrans_radial_becke2, this%subgrid(1)%data, this%weight) + ! TBeckeGrid contains only one subgrid + elseif (nSubgrids == 1) then + allocate(this%subgrid(1)) + call gengrid1_3(angquad, radquad, coordtrans_radial_becke1, this%subgrid(1)%data, this%weight) + ! TBeckeGrid contains two subgrids + elseif (nSubgrids == 2) then + allocate(this%subgrid(2)) + call gengrid2_3(angquad, radquad, coordtrans_radial_becke1, partition_becke_homo, beckepars,& + & dist, this%subgrid(1)%data, this%subgrid(2)%data, this%weight, this%partition) + end if + + end subroutine TBeckeGrid_init + + + !> Kills a Becke grid instance by deallocating arrays. + subroutine TBeckeGrid_kill(this) + + !> Becke grid instance + type(TBeckeGrid), intent(inout) :: this + + !! iterates over all subgrids + integer :: ii + + do ii = 1, size(this%subgrid) + deallocate(this%subgrid(ii)%data) + end do + + deallocate(this%subgrid) + deallocate(this%weight) + + end subroutine TBeckeGrid_kill + + + !> Solves the poisson equation. + subroutine solvePoisson(ll, rho, zi, charge) + + !> angular momentum + integer, intent(in) :: ll + + !> lm-component of density (contains solution at exit) + real(dp), intent(inout), allocatable :: rho(:) + + !> + real(dp), intent(in), allocatable :: zi(:) + + !> integral over density (boundary condition) + real(dp), intent(in) :: charge + + !! iterates over grid points + integer :: ii + + !! error status + integer :: info + + !! pivot indices: for 1 <= i <= N, row i of the matrix was interchanged with row ipiv(i) + integer, allocatable :: ipiv(:) + + !! number of tabulated density grid points + integer :: nGridPts + + !! + real(dp), allocatable :: alpha(:), beta(:), gama(:), delta(:) + real(dp), allocatable :: H2(:,:), B(:) + real(dp), allocatable :: solution(:), work(:) + real, allocatable :: swork(:) + real(dp) :: f0, f1, tmp1 + real(dp) :: pi_rm_4_3, llp1_pi_2_rm_4, sin_pi, sin_pi_hlf, cos_pi_hlf + + !! midpoint of the integration interval + real(dp), parameter :: rm = 1.0_dp + + nGridPts = size(rho) + + !******************************** + ! matrix/vector allocation + !******************************** + allocate(alpha(nGridPts)) + allocate(beta(nGridPts)) + allocate(gama(nGridPts)) + allocate(delta(nGridPts)) + allocate(B(nGridPts)) + allocate(ipiv(nGridPts)) + allocate(work(nGridPts)) + allocate(solution(nGridPts)) + allocate(swork(nGridPts * (nGridPts + 1))) + allocate(H2(10, nGridPts)) + B(:) = 0.0_dp + H2(:,:) = 0.0_dp + + !*********************************** + ! boundary conditions + !*********************************** + if (ll == 0) then + ! r --> oo + f0 = charge * sqrt(4.0_dp * pi) + else + ! r --> oo + f0 = 0.0_dp + end if + ! r --> 0 + f1 = 0.0_dp + + pi_rm_4_3 = pi**3 * rm**3 * 4.0_dp + llp1_pi_2_rm_4 = 4.0_dp * pi**2 * rm * real(ll * (ll + 1), dp) + + do ii = 1, nGridPts + sin_pi = sin(pi * zi(ii)) + sin_pi_hlf = sin(pi_hlf * zi(ii)) + cos_pi_hlf = cos(pi_hlf * zi(ii)) + + sin_pi_hlf = sin_pi_hlf**2 ! ^2 + cos_pi_hlf = cos_pi_hlf**4 ! ^4 + + alpha(ii) = 1.0_dp + beta(ii) = (pi / sin_pi + pi_hlf * sin_pi / sin_pi_hlf) + + sin_pi = sin_pi**2 ! ^2 + gama(ii) = -llp1_pi_2_rm_4 / sin_pi + + sin_pi_hlf = sin_pi_hlf**4 ! ^8 + delta(ii) = -pi_rm_4_3 * rho(ii) * cos_pi_hlf / sin_pi_hlf + end do + + call makePoissonFDMatrix7P(H2, B, nGridPts, ll, zi, rm, charge) + + tmp1 = (1.0_dp / real(nGridPts + 1, dp))**2 * 180.0_dp + B(:) = B + tmp1 * delta + + !*********************************************************** + ! solve the band diagonal matrix + !*********************************************************** + call DGBSV(nGridPts, 3, 3, 1, H2, 10, ipiv, B, nGridPts, info) + + rho(:) = B + + end subroutine solvePoisson + + + !> Solves the Helmholz equation. + subroutine solveHelmholz(ll, rho, zi, omega) + + !> angular momentum + integer, intent(in) :: ll + + !> + real(dp), intent(inout) :: rho(:) + + !> + real(dp), intent(in) :: zi(:) + + !> screening parameter + real(dp), intent(in) :: omega + + integer :: ii, info, iter + + !! pivot indices: for 1 <= i <= N, row i of the matrix was interchanged with row ipiv(i) + integer, allocatable :: ipiv(:) + + !! number of tabulated density grid points + integer :: nGridPts + + !! + real(dp), allocatable :: H(:,:), alpha(:), beta(:), gama(:), delta(:) + + !! + real(dp), allocatable :: solution(:), work(:) + + !! + real, allocatable :: swork(:) + + !! boundary conditions + real(dp) :: f0, f1 + + !! midpoint of the integration interval + real(dp), parameter :: rm = 1.0_dp + + !! auxiliary variables + real(dp) :: pi_rm_4_3, llp1_pi_2_rm_4, sin_pi, sin_pi_hlf, cos_pi_hlf, a2c + + nGridPts = size(rho) + + !******************************** + ! boundary conditions + !******************************** + f0 = 0.0_dp + f1 = 0.0_dp + + !******************************** + ! matrix/vector allocation + !******************************** + allocate(alpha(nGridPts)) + allocate(beta(nGridPts)) + allocate(gama(nGridPts)) + allocate(delta(nGridPts)) + allocate(ipiv(nGridPts)) + allocate(work(nGridPts)) + allocate(solution(nGridPts)) + allocate(swork(nGridPts * (nGridPts + 1))) + + !**************************************** + ! set up the equation: + !**************************************** + pi_rm_4_3 = pi**3 * rm**3 * 4.0_dp + llp1_pi_2_rm_4 = 4.0_dp * pi**2 * rm * real(ll * (ll + 1), dp) + a2c = omega**2 * rm**2 * pi**2 * 0.25_dp + do ii = 1, nGridPts + sin_pi = sin(pi * zi(ii)) + sin_pi_hlf = sin(pi_hlf * zi(ii)) + cos_pi_hlf = cos(pi_hlf * zi(ii)) + sin_pi_hlf = sin_pi_hlf**2 ! ^2 + cos_pi_hlf = cos_pi_hlf**4 ! ^4 + alpha(ii) = 1.0_dp + beta(ii) = (pi / sin_pi + pi_hlf * sin_pi / sin_pi_hlf) + sin_pi = sin_pi**2 ! ^2 + sin_pi_hlf = sin_pi_hlf**4 ! ^8 + gama(ii) = -(llp1_pi_2_rm_4 / sin_pi + a2c * sin_pi / sin_pi_hlf) + delta(ii) = -pi_rm_4_3 * rho(ii) * cos_pi_hlf / sin_pi_hlf + end do + + !****************************** + ! generate the FD Matrix + !****************************** + ! 7-point FD scheme, ref: Bickley + call makeHelmholzFDMatrix7P(H, delta, alpha, beta, gama, f0, f1) + + !****************************** + ! call LAPACK (d)sgesv routine + ! to solve the linear eqn Hx=b + !****************************** + call DSGESV(nGridPts, 1, H, nGridPts, ipiv, delta, nGridPts, solution, nGridPts, work, swork,& + & iter, info) + + rho(:) = solution + + end subroutine solveHelmholz + +end module common_poisson diff --git a/common/lib/quadrature.F90 b/common/lib/quadrature.F90 new file mode 100755 index 00000000..d0e17c1f --- /dev/null +++ b/common/lib/quadrature.F90 @@ -0,0 +1,294 @@ +!****************************************************************************************** +! the module depends now on Lebedev-Laikov.F +!****************************************************************************************** + +module common_quadratures + + use common_accuracy, only : dp + use common_constants, only : pi + use common_lebedev_laikov, only : ld0006, ld0014, ld0026, ld0038, ld0050, ld0074, ld0086,& + & ld0110, ld0146, ld0170, ld0194, ld0230, ld0266, ld0302, ld0350 + + implicit none + private + + public :: TQuadrature, TQuadrature2D + public :: lebedev_laikov_quadrature, gauss_legendre_quadrature, gauss_chebyshev_quadrature,& + & trapezoidal_quadrature + + + !> Holds abscissas and weights for numerical quadrature. + type TQuadrature + + !> abscissas + real(dp), allocatable :: xx(:) + + !> weights + real(dp), allocatable :: ww(:) + + !> scaled weight/abscissa index i / (n + 1) + real(dp), allocatable :: zz(:) + + end type TQuadrature + + + !> Quadrature type for nodes given by coordinate pairs. + type TQuadrature2D + + !> first coordinate vector + real(dp), allocatable :: c1(:) + + !> second coordinate vector + real(dp), allocatable :: c2(:) + + !> weights + real(dp), allocatable :: ww(:) + + end type TQuadrature2D + + + !> relative quadrature precision + real(dp), parameter :: eps = 1e-14_dp + + +contains + + !> Gauss type quadrature, which integrates spherical harmonics exactly. + !! Use for effective integration on the unit sphere. + !! + !! Includes the code from Lebedev-Laikov.F + !! The subroutines give nodes in carthesian coordinates -> we need polar. + !! => ToDo: do hardcoded version, which returns polar coordinates + !! + !! references: see Lebedev-Laikov.F + subroutine lebedev_laikov_quadrature(nn, quad2d) + + !> number of points for the quadrature + integer, intent(in) :: nn + + !> at exit, holds quadrature type for nodes given by coordinate pairs + type(TQuadrature2D), intent(out) :: quad2d + + !> carthesian coordinates of nodes + real(dp), allocatable :: xx(:), yy(:), zz(:) + + !! actual number of points for the quadrature + integer :: nPoints + + !! auxiliary variable + integer :: ii + + select case(nn) + case(1:7) + nPoints = 6 + case(8:16) + nPoints = 14 + case(17:28) + nPoints = 26 + case(29:40) + nPoints = 38 + case(41:60) + nPoints = 50 + case(61:80) + nPoints = 74 + case(81:100) + nPoints = 86 + case(101:130) + nPoints = 110 + case(131:160) + nPoints = 146 + case(161:180) + nPoints = 170 + case(181:210) + nPoints = 194 + case(211:250) + nPoints = 230 + case(251:290) + nPoints = 266 + case(291:320) + nPoints = 302 + case(321:400) + nPoints = 350 + case default + nPoints = 6 + end select + + allocate(quad2d%c1(nPoints)) + allocate(quad2d%c2(nPoints)) + allocate(quad2d%ww(nPoints)) + + allocate(xx(nPoints)) + allocate(yy(nPoints)) + allocate(zz(nPoints)) + + select case(nPoints) + case(6) + call ld0006(xx, yy, zz, quad2d%ww, nPoints) + case(14) + call ld0014(xx, yy, zz, quad2d%ww, nPoints) + case(26) + call ld0026(xx, yy, zz, quad2d%ww, nPoints) + case(38) + call ld0038(xx, yy, zz, quad2d%ww, nPoints) + case(50) + call ld0050(xx, yy, zz, quad2d%ww, nPoints) + case(74) + call ld0074(xx, yy, zz, quad2d%ww, nPoints) + case(86) + call ld0086(xx, yy, zz, quad2d%ww, nPoints) + case(110) + call ld0110(xx, yy, zz, quad2d%ww, nPoints) + case(146) + call ld0146(xx, yy, zz, quad2d%ww, nPoints) + case(170) + call ld0170(xx, yy, zz, quad2d%ww, nPoints) + case(194) + call ld0194(xx, yy, zz, quad2d%ww, nPoints) + case(230) + call ld0230(xx, yy, zz, quad2d%ww, nPoints) + case(266) + call ld0266(xx, yy, zz, quad2d%ww, nPoints) + case(302) + call ld0302(xx, yy, zz, quad2d%ww, nPoints) + case(350) + call ld0350(xx, yy, zz, quad2d%ww, nPoints) + case default + call ld0006(xx, yy, zz, quad2d%ww, nPoints) + end select + + ! necessary, since Lebedev-Quadrature is defined for integral + ! I = \frac{1}{4\pi}\int F(\Omega) d\Omega + ! see references in lebedev_laikov_f77.f + quad2d%ww(:) = quad2d%ww * 4.0_dp * pi + + ! transform the nodes in carthesian coordinates to spherical coordinates + do ii = 1, nPoints + quad2d%c1(ii) = acos(zz(ii)) + + ! compute angle phi in interval [0, 2*pi) + if (xx(ii) > 0 .and. yy(ii) >= 0) quad2d%c2(ii) = atan(yy(ii) / xx(ii)) + if (xx(ii) > 0 .and. yy(ii) < 0) quad2d%c2(ii) = atan(yy(ii) / xx(ii)) + 2.0_dp * pi + if (xx(ii) < 0) quad2d%c2(ii) = atan(yy(ii) / xx(ii)) + pi + if (xx(ii) == 0 .and. yy(ii) > 0) quad2d%c2(ii) = 1.5707963267948966_dp + if (xx(ii) == 0 .and. yy(ii) < 0) quad2d%c2(ii) = 3.0_dp * 1.5707963267948966_dp + end do + + end subroutine lebedev_laikov_quadrature + + + !> Gauss-Legendre quadrature for integration in the interval [-1,1], + !! see Numerical Recipes or J. M. Pérez-Jordá et al., J. Chem. Phys. 100 6520 (1994). + pure subroutine gauss_legendre_quadrature(nn, quad) + + !> number of points for the quadrature + integer, intent(in) :: nn + + !> at exit, holds abscissas and weights for numerical quadrature + type(TQuadrature), intent(out) :: quad + + !! number of roots after symmetry is considered + integer :: mm + + !! initial approximations to the roots + real(dp) :: zz + + !! auxiliary variables + integer :: ii, jj + real(dp) :: z1, pp, p1, p2, p3, rj + + allocate(quad%xx(nn)) + allocate(quad%ww(nn)) + + mm = (nn + 1) / 2 + do ii = 1, mm + zz = cos(pi * (real(ii, dp) - 0.25_dp) / (real(nn, dp) + 0.5_dp)) + do + p1 = 1.0_dp + p2 = 0.0_dp + do jj = 1, nn + p3 = p2 + p2 = p1 + rj = real(jj, dp) + p1 = ((2.0_dp * rj - 1.0_dp) * zz * p2 - (rj - 1.0_dp) * p3) / rj + end do + pp = real(nn, dp) * (zz * p1 - p2) / (zz * zz - 1.0_dp) + z1 = zz + zz = z1 - (p1 / pp) + if (abs(zz - z1) <= eps) exit + end do + quad%xx(ii) = - zz + quad%xx(nn + 1 - ii) = zz + quad%ww(ii) = 2.0_dp / ((1.0_dp - zz**2) * pp**2) + quad%ww(nn + 1 - ii) = quad%ww(ii) + end do + + end subroutine gauss_legendre_quadrature + + + !> Gauss-Chebishev quadrature for integration in the interval [-1,1]. + !! + !! Integration of functions with Gauss-Chebishev quadrature of second kind. The weights already + !! contain 1/sqrt(1-x^2) so that it can be directly used to integrate a function on [-1,1], + !! see J. M. Pérez-Jordá et al., J. Chem. Phys. 100 6520 (1994). + pure subroutine gauss_chebyshev_quadrature(nn, quad) + + !> number of points for the quadrature + integer, intent(in) :: nn + + !> at exit, holds abscissas and weights for numerical quadrature + type(TQuadrature), intent(out) :: quad + + !! recurring argument of trigonometry functions + real(dp) :: rtmp + + !! auxiliary variable + integer :: ii + real(dp) :: fac + + allocate(quad%xx(nn)) + allocate(quad%ww(nn)) + allocate(quad%zz(nn)) + + ! see J. M. Pérez-Jordá et al., J. Chem. Phys. 100 6520 (1994), eqn. 28/29 + fac = real(nn + 1, dp) + do ii = 1, nn + rtmp = real(ii, dp) / fac + quad%zz(ii) = rtmp + rtmp = rtmp * pi + quad%xx(ii) = cos(rtmp) + quad%ww(ii) = sin(rtmp) + end do + fac = pi / real(nn + 1, dp) + quad%ww(:) = quad%ww * fac + + end subroutine gauss_chebyshev_quadrature + + + !> Trapezoidal quadrature for integration in the interval [-1,1], + !! see Numerical Recipes. + pure subroutine trapezoidal_quadrature(nn, quad) + + !> number of points for the quadrature + integer, intent(in) :: nn + + !> at exit, holds abscissas and weights for numerical quadrature + type(TQuadrature), intent(out) :: quad + + !! discretization stepwidth of interval [-1,1] + real(dp) :: fac + + !! auxiliary variable + integer :: ii + + allocate(quad%xx(nn)) + allocate(quad%ww(nn)) + + fac = 2.0_dp / real(nn, dp) + do ii = 1, nn + quad%xx(ii) = - 1.0_dp + fac * real(ii - 1, dp) + end do + quad%ww(:) = fac + + end subroutine trapezoidal_quadrature + +end module common_quadratures diff --git a/sktwocnt/lib/sphericalharmonics.f90 b/common/lib/sphericalharmonics.F90 similarity index 98% rename from sktwocnt/lib/sphericalharmonics.f90 rename to common/lib/sphericalharmonics.F90 index 24f20c6a..dc02a923 100644 --- a/sktwocnt/lib/sphericalharmonics.f90 +++ b/common/lib/sphericalharmonics.F90 @@ -1,5 +1,5 @@ !> Module that provides the functionality for real tesseral spherical harmonics. -module sphericalharmonics +module common_sphericalharmonics use common_accuracy, only : dp @@ -239,4 +239,4 @@ elemental function calc_realtessy_1d(ll, mm, theta) result(rty) end function calc_realtessy_1d -end module sphericalharmonics +end module common_sphericalharmonics diff --git a/common/lib/splines.F90 b/common/lib/splines.F90 new file mode 100644 index 00000000..8eb063d4 --- /dev/null +++ b/common/lib/splines.F90 @@ -0,0 +1,545 @@ +!> Splines are fully specified by the interpolation points, except that at the ends, we have the +!! freedom to prescribe the second derivatives. If we know a derivative at an end (exactly), then +!! it is best to impose that. Otherwise, it is better to use the "consistent" end conditions: +!! the second derivative is determined such that it is smooth. +!! +!! High level API: spline3, spline3ders +!! Low level API: the rest of public subroutines +!! +!! Use the high level API to obtain cubic spline fit with consistent boundary conditions and +!! optionally the derivatives. Use the low level API if more fine grained control is needed. +!! +!! This module is based on a code written by John E. Pask, LLNL. +module common_splines + + use common_accuracy, only : dp + use common_utils, only: stop_error + + implicit none + private + + public :: spline3pars, spline3valder, iix, iixmin, iixun, iixexp, poly3, dpoly3, d2poly3,& + & spline3, spline3ders + + +contains + + !> Takes the function values y on the grid x and returns new values ynew at the given grid xnew + !! using cubic splines interpolation with such boundary conditions so that the 2nd derivative is + !! consistent with the interpolating cubic. + function spline3(xx, yy, xnew) result(ynew) + + !> tabulated abscissas of function + real(dp), intent(in) :: xx(:) + + !> tabulated values of function + real(dp), intent(in) :: yy(:) + + !> evaluation points for interpolation + real(dp), intent(in) :: xnew(:) + + !> interpolated values at x = xnew + real(dp) :: ynew(size(xnew)) + + !! parameters defining spline: c(i,j) = ith parameter of jth spline polynomial, + !! p_j = sum_{i=1}^4 c(i,j) (x-c(0,j))^(i-1), j = 1..n-1, n = # of data points + !! dimensions: c(0:4, 1:n-1) + real(dp) :: cc(0:4, size(xx) - 1) + + !! iterates over all evaluation points + integer :: ii + + !! + integer :: ip + + ! get spline parameters: 2nd derivs at ends determined by cubic interpolation + call spline3pars(xx, yy, [2, 2], [0.0_dp, 0.0_dp], cc) + + ip = 0 + do ii = 1, size(xnew) + ip = iixmin(xnew(ii), xx, ip) + ynew(ii) = poly3(xnew(ii), cc(:, ip)) + end do + + end function spline3 + + + !> Just like spline3(), but also calculate 1st and 2nd derivatives. + subroutine spline3ders(xx, yy, xnew, ynew, dynew, d2ynew) + + !> tabulated abscissas of function + real(dp), intent(in) :: xx(:) + + !> tabulated values of function + real(dp), intent(in) :: yy(:) + + !> evaluation points for interpolation + real(dp), intent(in) :: xnew(:) + + !> interpolated values at x = xnew + real(dp), intent(out), optional :: ynew(:) + + !> 1st derivative at interpolated values at x = xnew + real(dp), intent(out), optional :: dynew(:) + + !> 2nd derivative at interpolated values at x = xnew + real(dp), intent(out), optional :: d2ynew(:) + + !! parameters defining spline: c(i,j) = ith parameter of jth spline polynomial, + !! p_j = sum_{i=1}^4 c(i,j) (x-c(0,j))^(i-1), j = 1..n-1, n = # of data points + !! dimensions: c(0:4, 1:n-1) + real(dp) :: cc(0:4, size(xx) - 1) + + !! iterates over evaluation points + integer :: ii + + !! index ip of interval [xx(ip), xx(ip+1)] containing xnew(ii) + integer :: ip + + call spline3pars(xx, yy, [2, 2], [0.0_dp, 0.0_dp], cc) + + ip = 0 + do ii = 1, size(xnew) + ip = iixmin(xnew(ii), xx, ip) + if (present(ynew)) ynew(ii) = poly3(xnew(ii), cc(:, ip)) + if (present(dynew)) dynew(ii) = dpoly3(xnew(ii), cc(:, ip)) + if (present(d2ynew)) d2ynew(ii) = d2poly3(xnew(ii), cc(:, ip)) + end do + + end subroutine spline3ders + + + !> Returns parameters c defining cubic spline interpolating x-y data xi, yi, with boundary + !! conditions specified by bcytpe, bcvals. + subroutine spline3pars(xi, yi, bctype, bcval, cc) + + !> x values of data + real(dp), intent(in) :: xi(:) + + !> y values of data + real(dp), intent(in) :: yi(:) + + !> type of boundary condition at each end: + !! bctype(1) = type at left end; bctype(2) = type at right end + !! 1 = specified 2nd derivative, 2 = 2nd derivative consistent with interpolating cubic. + integer, intent(in) :: bctype(2) + + !> boundary condition values at each end: + !! bcval(1) = value at left end; bcval(2) = value at right end + real(dp), intent(in) :: bcval(2) + + !> parameters defining spline: c(i,j) = ith parameter of jth spline polynomial, + !! p_j = sum_{i=1}^4 c(i,j) (x-c(0,j))^(i-1), j = 1..n-1, n = # of data points + !! dimensions: c(0:4, 1:n-1) + real(dp), intent(out) :: cc(0:,:) + + !! spline eq. matrix -- LAPACK band form + real(dp) :: as(5, 2 * size(cc, 2)) + + !! spline eq. rhs vector + real(dp) :: bs(2 * size(cc, 2)) + + !! spline eq. solution vector + real(dp) :: cs(2 * size(cc, 2)) + + !! spline intervals + real(dp) :: hi(size(cc, 2)) + + !! end-cubic eq. matrix + real(dp) :: ae(4, 4) + + !! end-cubic eq. rhs vector + real(dp) :: be(4) + + !! end-cubic eq. solution vector + real(dp) :: ce(4) + + !! x, y values at ends + real(dp) :: xe(4), ye(4) + + !! 2nd derivatives at ends + real(dp) :: d2p1, d2pn + + !! expansion center + real(dp) :: x0 + + !! expansion coefficients + real(dp) :: c1, c2, c3, c4 + + !! number of data points + integer :: nn + + !! + integer :: ii, jj, i2 + + !! lapack variables + integer :: ipiv(4), ipiv2(2 * size(cc, 2)) + real(dp) :: bemat(4, 1), bmat(2 * size(cc, 2), 1) + integer :: info + + ! check input parameters + if (bctype(1) < 1 .or. bctype(1) > 2) call stop_error("spline3pars error: bctype /= 1 or 2.") + if (bctype(2) < 1 .or. bctype(2) > 2) call stop_error("spline3pars error: bctype /= 1 or 2.") + if (size(cc, 1) /= 5) call stop_error("spline3pars error: size(c,1) /= 5.") + if (size(cc, 2) /= size(xi) - 1) call stop_error("spline3pars error: size(c,2) /= size(xi)-1.") + if (size(xi) /= size(yi)) call stop_error("spline3pars error: size(xi) /= size(yi)") + + ! get rid of compiler warnings + d2p1 = 0 + d2pn = 0 + + ! initializations + nn = size(xi) + do ii = 1, nn - 1 + hi(ii) = xi(ii + 1) - xi(ii) + end do + + ! compute interpolating-cubic 2nd derivs at ends, if required left end + if (bctype(1) == 2) then + if (nn < 4) call stop_error("spline3pars error: n < 4") + xe(:) = xi(1:4) + ye(:) = yi(1:4) + x0 = xe(1) ! center at end + do ii = 1, 4 + do jj = 1, 4 + ae(ii,jj) = (xe(ii) - x0)**(jj - 1) + end do + end do + ae(:, 1) = 1 ! set 0^0 = 1 + be(:) = ye + bemat(:, 1) = be + call dgesv(4, 1, ae, 4, ipiv, bemat, 4, info) + if (info /= 0) call stop_error("spline3pars error: dgesv error.") + ce = bemat(:, 1) + d2p1 = 2 * ce(3) + end if + ! right end + if (bctype(2) == 2) then + if (nn < 4) call stop_error("spline3pars error: n < 4") + xe(:) = xi(nn-3:nn) + ye(:) = yi(nn-3:nn) + x0 = xe(4) ! center at end + do ii = 1, 4 + do jj = 1, 4 + ae(ii, jj) = (xe(ii) - x0)**(jj - 1) + end do + end do + ae(:, 1) = 1 ! set 0^0 = 1 + be(:) = ye + bemat(:, 1) = be + call dgesv(4, 1, ae, 4, ipiv, bemat, 4, info) + if (info /= 0) call stop_error("spline3pars error: dgesv error.") + ce = bemat(:, 1) + d2pn = 2 * ce(3) + end if + + ! set 2nd derivs at ends + if (bctype(1) == 1) d2p1 = bcval(1) + if (bctype(2) == 1) d2pn = bcval(2) + + ! construct spline equations -- LAPACK band form + ! basis: phi1 = -(x-x_i)/h_i, phi2 = (x-x_{i+1})/h_i, phi3 = phi1^3-phi1, phi4 = phi2^3-phi2 + ! on interval [x_i,x_{i+1}] of length h_i = x_{i+1}-x_i + ! A(:,:) = 0 ! full matrix + as(:,:) = 0 + ! left end condition + as(4, 1) = 6 / hi(1)**2 + bs(1) = d2p1 + ! internal knot conditions + do ii = 2, nn - 1 + i2 = 2 * (ii - 1) + as(5, i2-1) = 1 / hi(ii - 1) + as(4, i2) = 2 / hi(ii - 1) + as(3, i2 + 1) = 2 / hi(ii) + as(2, i2 + 2) = 1 / hi(ii) + as(5, i2) = 1 / hi(ii - 1)**2 + as(4, i2 + 1) = -1 / hi(ii)**2 + bs(i2) = (yi(ii + 1) - yi(ii)) / hi(ii) - (yi(ii) - yi(ii - 1)) / hi(ii - 1) + bs(i2 + 1) = 0 + end do + ! right end condition + as(4, 2 * (nn - 1)) = 6 / hi(nn - 1)**2 + bs(2 * (nn - 1)) = d2pn + + ! solve spline equations -- LAPACK band form + bmat(:, 1) = bs + call dgbsv(2 * (nn - 1), 1, 2, 1, as, 5, ipiv2, bmat, 2 * (nn - 1), info) + if (info /= 0) call stop_error("spline3pars error: dgbsv error.") + cs = bmat(:, 1) + + ! transform to (x-x0)^(i-1) basis and return + do ii = 1, nn - 1 + ! coefficients in spline basis: + c1 = yi(ii) + c2 = yi(ii + 1) + c3 = cs(2 * ii - 1) + c4 = cs(2 * ii) + ! coefficients in (x-x0)^(i-1) basis + cc(0, ii) = xi(ii) + cc(1, ii) = c1 + cc(2, ii) = -(c1 - c2 + 2 * c3 + c4) / hi(ii) + cc(3, ii) = 3 * c3 / hi(ii)**2 + cc(4, ii) = (-c3 + c4) / hi(ii)**3 + end do + + end subroutine spline3pars + + + !> Returns value and 1st derivative of spline defined by knots xi and parameters c returned by + !! spline3pars. + subroutine spline3valder(xx, xi, cc, val, der) + + !> point at which to evaluate spline + real(dp), intent(in):: xx + + !> spline knots (x values of data) + real(dp), intent(in):: xi(:) + + !> parameters defining spline: c(i,j) = ith parameter of jth spline polynomial, + !! p_j = sum_{i=1}^4 c(i,j) (x-c(0,j))^(i-1), j = 1..n-1, n = # of data points + !! dimensions: c(0:4, 1:n-1) + real(dp), intent(in):: cc(0:,:) + + !> value of spline at x + real(dp), intent(out):: val + + !> 1st derivative of spline at x + real(dp), intent(out):: der + + !! index i of interval [xi(i), xi(i+1)] containing x + integer i1 + + ! initialize, check input parameters + if (size(cc, 1) /= 5) call stop_error("spline3 error: size(c,1) /= 5.") + if (size(cc, 2) /= size(xi) - 1) call stop_error("spline3 error: size(c,2) /= size(xi)-1.") + + ! find interval containing x + i1 = iix(xx, xi) + + ! return value and derivative + val = poly3(xx, cc(:, i1)) + der = dpoly3(xx, cc(:, i1)) + + end subroutine spline3valder + + + !> Returns index i of interval [xi(i), xi(i+1)] containing x in mesh xi, with intervals indexed by + !! left-most points. + !! Note: x outside [x1,xn] are indexed to nearest end. Uses bisection, except if "x" lies in the + !! first or second elements (which is often the case). + function iix(xx, xi) result(i1) + + !> target value + real(dp), intent(in) :: xx + + !> mesh, xi(i) < xi(i+1) + real(dp), intent(in) :: xi(:) + + !> number of mesh points + integer nn + + !> index i of interval [xi(i), xi(i+1)] containing x + integer :: i1 + + !! + integer i2, ic + + nn = size(xi) + i1 = 1 + if (nn < 2) then + call stop_error("error in iix: nn < 2") + elseif (nn == 2) then + i1 = 1 + elseif (nn == 3) then + if (xx <= xi(2)) then ! first element + i1 = 1 + else + i1 = 2 + end if + elseif (xx <= xi(1)) then ! left end + i1 = 1 + elseif (xx <= xi(2)) then ! first element + i1 = 1 + elseif (xx <= xi(3)) then ! second element + i1 = 2 + elseif (xx >= xi(nn)) then ! right end + i1 = nn - 1 + else + ! bisection: xi(i1) <= x < xi(i2) + i1 = 3 + i2 = nn + do + if (i2 - i1 == 1) exit + ic = i1 + (i2 - i1) / 2 + if (xx >= xi(ic)) then + i1 = ic + else + i2 = ic + end if + end do + end if + + end function iix + + + !> Just like iix(), but assumes that x >= xi(i_min). + function iixmin(xx, xi, i_min) result(ip) + + !> value to search mesh index for + real(dp), intent(in) :: xx + + !> mesh to search + real(dp), intent(in) :: xi(:) + + !> index of assuption x >= xi(i_min) + integer, intent(in) :: i_min + + !> i of interval [xi(i), xi(i+1)] containing x + integer :: ip + + if ((i_min >= 1) .and. (i_min <= size(xi) - 1)) then + ip = iix(xx, xi(i_min:)) + i_min - 1 + else + ip = iix(xx, xi) + end if + + end function iixmin + + + !> Returns index i of interval [x(i), x(i+1)] containing x in uniform mesh defined by + !! x(i) = x1 + (i-1)/(n-1)*(xn-x1), i = 1 .. n, with intervals indexed by left-most points. + !! Notex: x outside [x1, xn] are indexed to nearest end. + pure function iixun(xx, nn, x1, xn) + + !> target value + real(dp), intent(in):: xx + + !> number of mesh points + integer, intent(in):: nn + + !> initial point of mesh + real(dp), intent(in):: x1 + + !> final point of mesh + real(dp), intent(in):: xn + + !> index i of interval [x(i), x(i+1)] containing x + integer iixun + + !! index i, but may be outside 1..n + integer ii + + ! compute index + ii = int((xx - x1) / (xn - x1) * (nn - 1)) + 1 + + ! reset if ouside 1..n + if (ii < 1) ii = 1 + if (ii > nn - 1) ii = nn - 1 + iixun = ii + + end function iixun + + + !> Returns index i of interval [x(i), x(i+1)] containing x in exponential mesh defined by + !! x(i) = x1 + alpha [exp(beta(i-1)) - 1], i = 1 .. n, + !! where alpha = (x(n) - x(1))/[exp(beta(n-1)) - 1], beta = log(r)/(n-2), + !! r = (x(n)-x(n-1))/(x(2)-x(1)) = ratio of last to first interval, + !! and intervals indexed by left-most points. + !! Note: x outside [x1, xn] are indexed to nearest end. + pure function iixexp(xx, nn, x1, alpha, beta) + + !> target value + real(dp), intent(in):: xx + + !> number of mesh points + integer, intent(in):: nn + + !> initial point of mesh + real(dp), intent(in):: x1 + + !> mesh parameter + real(dp), intent(in):: alpha + + !> mesh parameter + real(dp), intent(in):: beta + + !> index i of interval [x(i), x(i+1)] containing x + integer iixexp + + !! index i, but may be outside 1..n + integer ii + + ! compute index + ii = int(log((xx - x1) / alpha + 1) / beta) + 1 + + ! reset if outside 1..n + if (ii < 1) ii = 1 + if (ii > nn - 1) ii = nn - 1 + iixexp = ii + + end function iixexp + + + !> Returns value of polynomial \sum_{i=1}^4 c(i) (x-c(0))^(i-1). + pure function poly3(xx, cc) + + !> point at which to evaluate polynomial + real(dp), intent(in):: xx + + !> coefficients: poly = \sum_{i=1}^4 c(i) (x-c(0))^(i-1) + real(dp), intent(in):: cc(0:) + + !> value of polynomial + real(dp) poly3 + + !! x - c(0) + real(dp) dx + + dx = xx - cc(0) + poly3 = cc(1) + cc(2) * dx + cc(3) * dx**2 + cc(4) * dx**3 + + end function poly3 + + + !> Returns 1st derivative of polynomial \sum_{i=1}^4 c(i) (x-c(0))^(i-1). + pure function dpoly3(xx, cc) + + !> point at which to evaluate polynomial + real(dp), intent(in):: xx + + !> coefficients: poly = \sum_{i=1}^4 c(i) (x-c(0))^(i-1) + real(dp), intent(in):: cc(0:) + + !> 1st derivative of polynomial + real(dp) dpoly3 + + !! x - c(0) + real(dp) dx + + dx = xx - cc(0) + dpoly3 = cc(2) + 2.0_dp * cc(3) * dx + 3.0_dp * cc(4) * dx**2 + + end function dpoly3 + + + !> Returns 2nd derivative of polynomial \sum_{i=1}^4 c(i) (x-c(0))^(i-1). + pure function d2poly3(xx, cc) + + !> point at which to evaluate polynomial + real(dp), intent(in):: xx + + !> coefficients: poly = \sum_{i=1}^4 c(i) (x-c(0))^(i-1) + real(dp), intent(in):: cc(0:) + + !> 2nd derivative of polynomial + real(dp) d2poly3 + + !! x - c(0) + real(dp) dx + + dx = xx - cc(0) + d2poly3 = 2.0_dp * cc(3) + 6.0_dp * cc(4) * dx + + end function d2poly3 + +end module common_splines diff --git a/common/lib/utils.F90 b/common/lib/utils.F90 new file mode 100644 index 00000000..92d238b9 --- /dev/null +++ b/common/lib/utils.F90 @@ -0,0 +1,468 @@ +!> Module that contains various general utilities, based on a code by John E. Pask, LLNL. +module common_utils + + use common_accuracy, only: dp + + implicit none + private + + public :: upcase, lowcase, whitechar, blank, numstrings, getstring, stop_error, arange, loadtxt,& + & savetxt, assert, str + + + interface str + module procedure str_int, str_real, str_real_n + end interface str + + +contains + + !> Returns string 'strIn' in uppercase. + function upcase(strIn) result(strOut) + + !> string to convert + character(len=*), intent(in) :: strIn + + !> uppercase string + character(len=len(strIn)) :: strOut + + !! auxiliary variables + integer :: ii, diff + + strOut = strIn + diff = ichar('A') - ichar('a') + + do ii = 1, len(strOut) + if ((ichar(strOut(ii:ii)) >= ichar('a')) .and. (ichar(strOut(ii:ii)) <= ichar('z'))) then + ! if lowercase, make uppercase + strOut(ii:ii) = char(ichar(strOut(ii:ii)) + diff) + end if + end do + + end function upcase + + + !> Returns string 'strIn' in lowercase. + function lowcase(strIn) result(strOut) + + !> + character(len=*), intent(in) :: strIn + + !> + character(len=len(strIn)) :: strOut + + !! auxiliary variables + integer :: ii, diff + + strOut = strIn + diff = ichar('A') - ichar('a') + + do ii = 1, len(strOut) + if ((ichar(strOut(ii:ii)) >= ichar('A')) .and. (ichar(strOut(ii:ii)) <= ichar('Z'))) then + ! if uppercase, make lowercase + strOut(ii:ii) = char(ichar(strOut(ii:ii)) - diff) + end if + end do + + end function lowcase + + + !> Identifies 'white' characters. + !! Returns .true. if char is space (32) or tab (9), .false. otherwise. + pure function whitechar(char) result(tWhitechar) + + !> character to check + character, intent(in) :: char + + !> .true. if char is space (32) or tab (9), .false. otherwise + logical :: tWhitechar + + if ((iachar(char) == 32) .or. (iachar(char) == 9)) then + tWhitechar = .true. + else + tWhitechar = .false. + end if + + end function whitechar + + + !> Returns true, if string contains only white characters. + pure function blank(str) result(tBlank) + + !> string to check + character(len=*), intent(in) :: str + + !> true, if string contains only white characters + logical :: tBlank + + !! iterates over all characters of the string + integer :: ii + + do ii = 1, len(str) + if (.not. whitechar(str(ii:ii))) exit + end do + + tBlank = (ii > len(str)) + + end function blank + + + !> Returns number of substrings contained in input 'string' delimited by white space. + pure function numstrings(string) result(nn) + + !> input string to search + character(len=*), intent(in) :: string + + !> temporary string to facilitate analysis + character(len=len(string)+2) :: tmp + + !> number of substrings contained in input string + integer :: nn + + !! iterates over temporary string + integer :: ii + + tmp = " " // string // " " + + nn = 0 + do ii = 1, len(tmp) - 1 + if (whitechar(tmp(ii:ii)) .and. (.not. whitechar(tmp(ii+1:ii+1)))) nn = nn + 1 + end do + + end function numstrings + + + !> Returns first substring 'sub' in string 'str', delimited by white space, starting at index 'is' + !! in 'str'. If 'sub' is found, 'is' is set to (index of last character of 'sub' in 'str') + 1; + !! else 'is' is set to 0. If 'is' is out of range on input, routine terminates with 'is' = -1. + subroutine getstring(str, is, sub) + + !> input string + character(len=*), intent(in) :: str + + !> on input: starting index for search for 'sub' in 'str' + !! on output: (index of last character of 'sub' in 'str') + 1 + integer, intent(inout) :: is + + !> first substring in 'str', starting from index 'is' + character(len=*), intent(out) :: sub + + !> temporary string to facilitate search + character(len=len(str)+1) :: tmp + + !! true, if previous/current character is 'white' + logical tPrevwhite, tCurwhite + + !! auxiliary variables + integer ii, i1, i2 + + if (is <= 0 .or. is > len(str)) then + sub = "" + is = -1 + return + end if + tmp = str // " " + if (is == 1) then + tPrevwhite = .true. + else + tPrevwhite = whitechar(tmp(is-1:is-1)) + end if + i1 = 0 + i2 = 0 + do ii = is, len(tmp) + tCurwhite = whitechar(tmp(ii:ii)) + if (tPrevwhite .and. (.not. tCurwhite)) i1 = ii ! beginning of substring + if ((i1 > 0) .and. tCurwhite) then ! end of substring + i2 = ii - 1 + exit + end if + tPrevwhite = tCurwhite + end do + if (i2 > 0) then + sub = tmp(i1:i2) + is = i2 + 1 + else + sub = "" + is = 0 + end if + + end subroutine getstring + + + !> Aborts the program with nonzero exit code. + !! + !! The statement "stop msg" will return 0 exit code when compiled using gfortran. stop_error() + !! uses the statement "stop 1" which returns an exit code 1 and a statement to print the message. + !! + !! Example + !! ------- + !! + !! call stop_error("Invalid argument") + subroutine stop_error(msg) + + !> message to print on stdout + character(len=*) :: msg + + print *, msg + stop 1 + + end subroutine stop_error + + + !> Loads a 2D array from a text file. + !! + !! Example + !! ------- + !! + !! real(dp), allocatable :: data(:,:) + !! call loadtxt("log.txt", data) ! 'data' will be automatically allocated + !! + !! Where 'log.txt' contains for example:: + !! + !! 1 2 3 + !! 2 4 6 + !! 8 9 10 + !! 11 12 13 + !! ... + !! + subroutine loadtxt(filename, array) + + !> filename to load the array from + character(len=*), intent(in) :: filename + + !> data array, will be automatically allocated with the correct dimensions + real(dp), intent(out), allocatable :: array(:,:) + + !! file identifier + integer :: fd + + !! dummy character, used to iterate over columns of file + character :: cc + + !! number of rows and columns of file + integer :: ncol, nrow + + !! error status + integer :: iErr + + !! iterates over rows of file + integer :: ii + + !! true, if last character was 'white' + logical :: tLastwhite + + !! dummy real variable, used to iterate over rows of file + real(dp) :: rr + + open(newunit=fd, file=filename, status="old") + + ! determine number of columns + ncol = 0 + tLastwhite = .true. + do + read(fd, '(a)', advance='no', iostat=iErr) cc + if (iErr /= 0) exit + if (tLastwhite .and. .not. whitechar(cc)) ncol = ncol + 1 + tLastwhite = whitechar(cc) + end do + + rewind(fd) + + ! determine number or rows + nrow = 0 + do + read(fd, *, iostat=iErr) rr + if (iErr /= 0) exit + nrow = nrow + 1 + end do + + rewind(fd) + + allocate(array(nrow, ncol)) + do ii = 1, nrow + read(fd, *) array(ii, :) + end do + + close(fd) + + end subroutine loadtxt + + + !> Saves a 2D array into a textfile. + !! + !! Example + !! ------- + !! + !! real(dp) :: data(3, 2) + !! call savetxt("log.txt", data) + subroutine savetxt(fname, array) + + !> file to save the array to + character(len=*), intent(in) :: fname + + !> two-dimensional array to save + real(dp), intent(in) :: array(:,:) + + !! file identifier + integer :: fd + + !! iterates over lines of array + integer :: ii + + open(newunit=fd, file=fname, status="replace") + + do ii = 1, size(array, dim=1) + write(fd, *) array(ii, :) + end do + + close(fd) + + end subroutine savetxt + + + !> Returns an array = [start, start+dx, start+2*dx, ..., end-dx]. + !! + !! Example + !! ------- + !! + !! real(dp), allocatable :: array(:) + !! call arange(1, 5, 1, array) ! array = [1, 2, 3, 4] + subroutine arange(start, end, step, array) + + !> start, end, step + real(dp), intent(in) :: start, end, step + + !> generated array + real(dp), intent(out), allocatable :: array(:) + + !! number of entries in array + integer :: nn + + !! iterates over entries in array + integer :: ii + + nn = int((end - start) / step) + allocate(array(nn)) + + do ii = 1, nn + array(ii) = start + (ii - 1) * step + end do + + end subroutine arange + + + !> Aborts the program, if (condition == .false.). + !! + !! Example + !! ------- + !! + !! call assert(a == 5) + subroutine assert(tCondition) + + !> condition + logical, intent(in) :: tCondition + + if (.not. tCondition) call stop_error("Assert failed.") + + end subroutine assert + + + !> Returns the length of the string representation of 'ii'. + pure function str_int_len(ii) result(sz) + + !> integer + integer, intent(in) :: ii + + !> length of string representation of 'ii' + integer :: sz + + !! maximum length of string representation of 'ii' + integer, parameter :: MAX_STR = 100 + + !! string representation of 'ii' + character(len=MAX_STR) :: str + + ! If 'str' is too short (MAX_STR too small), Fortan will abort with: + ! "Fortran runtime error: End of record" + + write(str, '(i0)') ii + sz = len_trim(str) + + end function str_int_len + + + !> Converts integer 'ii' to string. + pure function str_int(ii) result(str) + + !> integer + integer, intent(in) :: ii + + !> string representation of 'ii' + character(len=str_int_len(ii)) :: str + + write(str, '(i0)') ii + + end function str_int + + + !> Returns the length of the string representation of 'rr'. + pure function str_real_len(rr, fmt) result(sz) + + !> real + real(dp), intent(in) :: rr + + !> desired format of string representation of 'rr' + character(len=*), intent(in) :: fmt + + !> length of the string representation of 'rr' + integer :: sz + + !! maximum length of string representation of 'rr' + integer, parameter :: MAX_STR = 100 + + !! string representation of 'rr' + character(len=MAX_STR) :: str + + ! If 's' is too short (MAX_STR too small), Fortan will abort with: + ! "Fortran runtime error: End of record" + + write(str, fmt) rr + sz = len_trim(str) + + end function str_real_len + + + !> Converts the real number 'rr' to string with 7 decimal digits. + pure function str_real(rr) result(str) + + !> real + real(dp), intent(in) :: rr + + !> format string + character(len=*), parameter :: fmt = "(f0.6)" + + !! string with 7 decimal digits + character(len=str_real_len(rr, fmt)) :: str + + write(str, fmt) rr + + end function str_real + + + !> Converts the real number 'rr' to string with 'nn' decimal digits. + pure function str_real_n(rr, nn) result(str) + + !> real + real(dp), intent(in) :: rr + + !> desired number of decimal digits + integer, intent(in) :: nn + + !> string with 'nn' decimal digits + character(len=str_real_len(rr, "(f0." // str_int(nn) // ")")) :: str + + write(str, "(f0." // str_int(nn) // ")") rr + + end function str_real_n + +end module common_utils diff --git a/config.cmake b/config.cmake new file mode 100644 index 00000000..a34d68b9 --- /dev/null +++ b/config.cmake @@ -0,0 +1,34 @@ +# +# Global architecture independent build settings +# + +#set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build type (Release|RelWithDebInfo|Debug|MinSizeRel)") +# CMAKE_BUILD_TYPE is commented out in order to allow for multi-configuration builds. It will +# automatically default to RelWithDebInfo if used in a single configuration build. Uncomment or +# override it only if you want a non-default single configuration build. + +# +# Test environment settings +# +set(TEST_RUNNER_TEMPLATE " " CACHE STRING "How to run the tests") + +# +# Installation options +# +set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/_install" CACHE STRING + "Directory to install the compiled code into") + +set(INSTALL_INCLUDEDIR "skprogs" CACHE PATH + "Name of the project specific sub-folder within the install folder for include files") + +set(INSTALL_MODULEDIR "${INSTALL_INCLUDEDIR}/modfiles" CACHE PATH + "Installation directory for Fortran module files (within the install folder for include files)") + + +# +# Advanced options (e.g. for developers and packagers) +# + +#set(TOOLCHAIN "gnu" CACHE STRING "Prefix of the toolchain file to be read from the sys/ folder") +# Uncomment and set it if you want to override the automatic, compiler based toolchain file +# selection. diff --git a/doc/devel/general_notes.txt b/doc/devel/general_notes.txt index 05db4166..bddb7bfc 100644 --- a/doc/devel/general_notes.txt +++ b/doc/devel/general_notes.txt @@ -1,7 +1,7 @@ -The Hartree-Fock core of the code is a near one-to-one implementation of -the Roothaan formulas, see especially rmp_32_186_1960.pdf in the -references directory (Here, only the special case of 1S atoms is -implemented). +The Hartree-Fock core of the code is a near one-to-one implementation +of the Roothaan formulas, see especially Rev. Mod Phys. 32, 186 (1960) +https://doi.org/10.1103/RevModPhys.32.186 (Here, only the special case +of 1S atoms is implemented). Due to this, the matrix elements of the Coulomb potential are calculated directly without recourse to the potential, except in the diff --git a/doc/input.txt b/doc/input.txt index fc85ae48..f18dbbbe 100644 --- a/doc/input.txt +++ b/doc/input.txt @@ -18,7 +18,7 @@ Line 2: Line 3: r_0 power real(dp) :: r_0, compression radius in Bohr radii - integer :: power, power of confining potential + real(dp) :: power, power of confining potential NOTE: This are in fact max_l+1 lines, one for each angular momentum SPECIAL VALUE: power=0 switches confinement off ! diff --git a/examples/mio/skdef.hsd b/examples/mio/skdef.hsd index 2a9e2e5f..b0ce861e 100644 --- a/examples/mio/skdef.hsd +++ b/examples/mio/skdef.hsd @@ -1,8 +1,33 @@ -# Data for auorg SkdefVersion = 1 Globals { - XCFunctional = pbe + # supported (semi-)local xc-functionals: + # XCFunctional = LDA {} + # XCFunctional = PBE {} + # XCFunctional = BLYP {} + + # supported long-range corrected xc-functionals: + # (omega: range-separation parameter) + # XCFunctional = LCY-PBE {omega = 0.3} + # XCFunctional = LCY-BNL {omega = 0.3} + + # supported global hybrid xc-functionals: + # XCFunctional = PBE0 {alpha = 0.25} + # XCFunctional = B3LYP {} + + # supported CAMY xc-functionals: + # XCFunctional = CAMY-PBEh { + # omega = 0.3 + # alpha = 0.25 + # beta = 0.75 + # } + # XCFunctional = CAMY-B3LYP { + # omega = 0.3 + # alpha = 0.19 + # beta = 0.46 + # } + + XCFunctional = PBE {} Superposition = density } @@ -14,7 +39,7 @@ AtomParameters { 2S = 1.0 1.0 2P = 3.0 3.0 } - + $OCCUPATIONS_Ar { $OCCUPATIONS_Ne 3S = 1.0 1.0 @@ -34,14 +59,14 @@ AtomParameters { 5S = 1.0 1.0 5P = 3.0 3.0 } - + $OCCUPATIONS_Hg { $OCCUPATIONS_Xe 4F = 7.0 7.0 5D = 5.0 5.0 6S = 1.0 1.0 } - + $OCCUPATIONS_Rn { $OCCUPATIONS_Hg 6P = 3.0 3.0 @@ -200,7 +225,7 @@ AtomParameters { 4P = 0.0 0.0 3D = 1.0 1.0 } - ValenceShells = 4s 4p 3d + ValenceShells = 4s 4p 3d Relativistics = None } DftbAtom { @@ -278,7 +303,7 @@ OnecenterParameters { } } } - + N { $StandardDeltaFilling Calculator = SlaterAtom { @@ -354,7 +379,7 @@ OnecenterParameters { } } } - + Au { $StandardDeltaFilling Calculator = SlaterAtom { @@ -406,14 +431,14 @@ TwoCenterParameters { MaxDistance = -12.39 } - $SkTwocnt_300_150 = Sktwocnt { + $SkTwocnt_300_150 = Sktwocnt { IntegrationPoints = 300 150 } - $SkTwocnt_400_200 = Sktwocnt { + $SkTwocnt_400_200 = Sktwocnt { IntegrationPoints = 400 200 } - + H-H { Grid = $EqGridCutoff10; Calculator = $SkTwocnt_300_150 } H-C { Grid = $EqGridCutoff10; Calculator = $SkTwocnt_300_150 } H-N { Grid = $EqGridCutoff10; Calculator = $SkTwocnt_300_150 } @@ -448,9 +473,8 @@ TwoCenterParameters { P-Ti { Grid = $EqGrid; Calculator = $SkTwocnt_400_200 } P-Au { Grid = $EqGrid; Calculator = $SkTwocnt_400_200 } Ti-Ti { Grid = $EqGridCutoff12; Calculator = $SkTwocnt_400_200 } - Ti-Au { Grid = $EqGrid; Calculator = $SkTwocnt_400_200 } + Ti-Au { Grid = $EqGrid; Calculator = $SkTwocnt_400_200 } Au-Au { Grid = $EqGrid; Calculator = $SkTwocnt_400_200 } } - -# skgen -o slateratom -t sktwocnt sktable H,O H,O | tee output +# skgen -o slateratom -t sktwocnt sktable H,O H,O |& tee -a output diff --git a/external/fypp/CHANGELOG.rst b/external/fypp/CHANGELOG.rst new file mode 100644 index 00000000..c80b1d88 --- /dev/null +++ b/external/fypp/CHANGELOG.rst @@ -0,0 +1,270 @@ +========== +Change Log +========== + + +3.0 +=== + +Added +----- + +* Implement variable keyword argument in macros. + +* Add block / contains / endblock construct as alternative for call / nextarg / + endcall. + +* Escaping of preprocessor comments + +* Possibility of specifying character encoding for file I/O with UTF-8 as + default. + + +Changed +------- + +* Injecting local variables into macros by passing arbitrary (non-declared) + keyword arguments is not possible any more. This feature made it impossible to + detect typos in keyword argument names in macro calls. [Backwards + incompatible] + +* Variable positional argument in a macro resolves to a list not to a tuple for + more consistency with Python. + + +Fixed +----- + +* Wrong command-line parser initialisation in waf frontend. + +* _LINE_ and _FILE_ were incorrect if the called macro contained a call + directive with an evaluation in its argument. + + +2.1.1 +===== + +Fixed +----- + +* Wrong _LINE_ and _FILE_ values when calling a macro during evaluation of the + arguments of a call directive. + + +2.1 +=== + +Fixed +----- + +* Variable definition without value. + + +Changed +------- + +* Hosting site and branch names (develop -> master, master -> release). + + +2.0.1 +===== + +Fixed +----- + +* Missing files in Python source distribution package. + + +2.0 +=== + +Added +----- + +* Direct call format resembling ordinary function call. + +* Inline direct call directive. + +* Keyword arguments in direct call and call directive. + +* Generalized call directive with arbitrary argument types. + +* Macros with variable number of arguments. + +* Default values for macro arguments. + +* Allow names in enddef and endcall directives for better readability. + +* Del directive and delvar() function. + +* Assert directive. + +* Global directive and globalvar() function. + +* Python-like consistent global and local scopes and scope lookup rules. + +* Predefined variables _THIS_FILE_ and _THIS_LINE_. + +* Additional flags in line numbering directives when opening a file or returning + to a previous file. + +* Additional testing with tox for developers. + +* Python 2.6, 3.0 and 3.1 compatibility. + + +Changed +------- + +* Setvar directive not allowed as alternative to set any more. [Backwards + incompatible] + +* Old direct call syntax (@:macro arg1) not supported any more [Backwards + incompatible] + +* Inline form of def directive not allowed any more. [Backwards incompatible] + +* Execution of arbitrary Python script at startup (option -i) has been + removed. [Backwards incompatible] + +* Minimal API change: process_* methods of Fypp do not accept the optional + argument env any more. [Backwards incompatible] + +* Equal sign must be used as separator in set directive for better + readability. [Backwards incompatible] + +* Function setvar() accepts arbitrary number of argument pairs. + +* Reverse order exception printing, exception first occuring printed as last. + +* Command line tool formats error messages in GNU-like format. + +* Make equal sign in set directive mandatory and in setvar directive forbidden. + +* Search paths for module imports behave more Python-like. + +* Removed builtins callable() and memoryview() from restricted environment as they + are not available in all supported Python versions. + + +Fixed +----- + +* Line numbering with flags fixes gfortrans confusion with line numbers. + + +1.2 +=== + +Added +----- + +* Allow (and promote) usage of set directive instead of setvar. + +* Implement stop request via stop directive. + +* Assignment to variable tuples. + +* Hierarchial exception testing. + + +Fixed +----- + +* Wrong file name in error report, when exception occurs in a macro defined in + an included file. + + +1.1 +=== + +Added +----- + +* Allow inline eval and control directives in direct macro call arguments. + +* Add waf integration modules. + +* Examples and build system intergration chapters in user guide. + +* Change log file. + + +1.0 +=== + +Added +----- + +* Optional suppression of line numbering in continuation lines. + +* Optional creation of parent folders for output file. + + +Changed +------- + +* Class Fypp independent of ArgumentParser. + + +Fixed +----- + +* Fix false error, when include was within a directive. + +* Wrong line number offset in eval directives. + + +0.12 +==== + +Added +----- + +* Implement direct call. + + +Changed +------- + +* Remove paranthesis from direct call. + + +0.11 +==== + +Added +----- + +* Implement call directive. + +* More precise error messages. + +* Folding prevention for comment lines. + +* Smart line folding, fixed format line folding. + +* Python 2.7 compatibility. + + +Changed +------- + +* Control directive prefix changed from ``@`` to ``#``. + +* Rename function `default()` into `getvar()`. + + +Fixed +----- + +* Superfluous trailing newlines in macro calls. + + +0.9 +=== + +Added +----- + +* Basic functionality. diff --git a/external/fypp/README.rst b/external/fypp/README.rst new file mode 100644 index 00000000..ef72a359 --- /dev/null +++ b/external/fypp/README.rst @@ -0,0 +1,232 @@ +********************************************* +Fypp — Python powered Fortran metaprogramming +********************************************* + +.. image:: https://travis-ci.org/aradi/fypp.svg?branch=develop + :target: https://travis-ci.org/aradi/fypp + +Fypp is a Python powered preprocessor. It can be used for any programming +languages but its primary aim is to offer a Fortran preprocessor, which helps to +extend Fortran with condititional compiling and template metaprogramming +capabilities. Instead of introducing its own expression syntax, it uses Python +expressions in its preprocessor directives, offering the consistency and +versatility of Python when formulating metaprogramming tasks. It puts strong +emphasis on robustness and on neat integration into developing toolchains. + +The project is `hosted on github `_. + +`Detailed DOCUMENTATION `_ is available on +`readthedocs.org `_. + +Fypp is released under the *BSD 2-clause license*. + + +Main features +============= + +* Definition, evaluation and removal of variables:: + + #:if DEBUG > 0 + print *, "Some debug information" + #:endif + + #:set LOGLEVEL = 2 + print *, "LOGLEVEL: ${LOGLEVEL}$" + + #:del LOGLEVEL + +* Macro definitions and macro calls:: + + #:def ASSERT(cond) + #:if DEBUG > 0 + if (.not. ${cond}$) then + print *, "Assert failed in file ${_FILE_}$, line ${_LINE_}$" + error stop + end if + #:endif + #:enddef ASSERT + + ! Invoked via direct call (argument needs no quotation) + @:ASSERT(size(myArray) > 0) + + ! Invoked as Python expression (argument needs quotation) + $:ASSERT('size(myArray) > 0') + +* Conditional output:: + + program test + #:if defined('WITH_MPI') + use mpi + #:elif defined('WITH_OPENMP') + use openmp + #:else + use serial + #:endif + +* Iterated output (e.g. for generating Fortran templates):: + + interface myfunc + #:for dtype in ['real', 'dreal', 'complex', 'dcomplex'] + module procedure myfunc_${dtype}$ + #:endfor + end interface myfunc + +* Inline directives:: + + logical, parameter :: hasMpi = #{if defined('MPI')}# .true. #{else}# .false. #{endif}# + +* Insertion of arbitrary Python expressions:: + + character(*), parameter :: comp_date = "${time.strftime('%Y-%m-%d')}$" + +* Inclusion of files during preprocessing:: + + #:include "macrodefs.fypp" + +* Using Fortran-style continutation lines in preprocessor directives:: + + #:if var1 > var2 & + & or var2 > var4 + print *, "Doing something here" + #:endif + +* Passing (unquoted) multiline string arguments to callables:: + + #! Callable needs only string argument + #:def DEBUG_CODE(code) + #:if DEBUG > 0 + $:code + #:endif + #:enddef DEBUG_CODE + + #! Pass code block as first positional argument + #:block DEBUG_CODE + if (size(array) > 100) then + print *, "DEBUG: spuriously large array" + end if + #:endblock DEBUG_CODE + + #! Callable needs also non-string argument types + #:def REPEAT_CODE(code, repeat) + #:for ind in range(repeat) + $:code + #:endfor + #:enddef REPEAT_CODE + + #! Pass code block as positional argument and 3 as keyword argument "repeat" + #:block REPEAT_CODE(repeat=3) + this will be repeated 3 times + #:endblock REPEAT_CODE + +* Preprocessor comments:: + + #! This will not show up in the output + #! Also the newline characters at the end of the lines will be suppressed + +* Suppressing the preprocessor output in selected regions:: + + #! Definitions are read, but no output (e.g. newlines) will be produced + #:mute + #:include "macrodefs.fypp" + #:endmute + +* Explicit request for stopping the preprocessor:: + + #:if DEBUGLEVEL < 0 + #:stop 'Negative debug level not allowed!' + #:endif + +* Easy check for macro parameter sanity:: + + #:def mymacro(RANK) + #! Macro only works for RANK 1 and above + #:assert RANK > 0 + : + #:enddef mymacro + +* Line numbering directives in output:: + + program test + #:if defined('MPI') + use mpi + #:endif + : + + transformed to :: + + # 1 "test.fypp" 1 + program test + # 3 "test.fypp" + use mpi + # 5 "test.fypp" + : + + when variable ``MPI`` is defined and Fypp was instructed to generate line + markers. + +* Automatic folding of generated lines exceeding line length limit + + +Installing +========== + +Fypp needs a working Python interpreter. It is compatible with Python 2 (version +2.6 and above) and Python 3 (all versions). + +Automatic install +----------------- + +Use Pythons command line installer ``pip`` in order to download the stable +release from the `Fypp page on PyPI `_ and +install it on your system:: + + pip install fypp + +This installs both, the command line tool ``fypp`` and the Python module +``fypp.py``. Latter you can import if you want to access the functionality of +Fypp directly from within your Python scripts. + + +Manual install +-------------- + +For a manual install, you can download the source code of the **stable** +releases from the `Fypp project website +`_. + +If you wish to obtain the latest **development** version, clone the projects +repository:: + + git clone https://github.com/aradi/fypp.git + +and check out the `master` branch. + +The command line tool is a single stand-alone script. You can run it directly +from the source folder :: + + FYPP_SOURCE_FOLDER/bin/fypp + +or after copying it from the `bin` folder to any location listed in your `PATH` +environment variable, by just issuing :: + + fypp + +The python module ``fypp.py`` can be found in ``FYP_SOURCE_FOLDER/src``. + + +Running +======= + +The Fypp command line tool reads a file, preprocesses it and writes it to +another file, so you would typically invoke it like:: + + fypp source.fpp source.f90 + +which would process `source.fpp` and write the result to `source.f90`. If +input and output files are not specified, information is read from stdin and +written to stdout. + +The behavior of Fypp can be influenced with various command line options. A +summary of all command line options can be obtained by:: + + fypp -h diff --git a/external/fypp/bin/fypp b/external/fypp/bin/fypp new file mode 100755 index 00000000..1ea2cc59 --- /dev/null +++ b/external/fypp/bin/fypp @@ -0,0 +1,3020 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +################################################################################ +# +# fypp -- Python powered Fortran preprocessor +# +# Copyright (c) 2016-2020 Bálint Aradi, Universität Bremen +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +################################################################################ + +'''For using the functionality of the Fypp preprocessor from within +Python, one usually interacts with the following two classes: + +* `Fypp`_: The actual Fypp preprocessor. It returns for a given input + the preprocessed output. + +* `FyppOptions`_: Contains customizable settings controling the behaviour of + `Fypp`_. Alternatively, the function `get_option_parser()`_ can be used to + obtain an option parser, which can create settings based on command line + arguments. + +If processing stops prematurely, an instance of one of the following +subclasses of `FyppError`_ is raised: + +* FyppFatalError: Unexpected error (e.g. bad input, missing files, etc.) + +* FyppStopRequest: Stop was triggered by an explicit request in the input + (by a stop- or an assert-directive). +''' + +from __future__ import print_function +import sys +import types +import inspect +import re +import os +import errno +import time +import optparse +import io +if sys.version_info[0] >= 3: + import builtins +else: + import __builtin__ as builtins + +# Prevent cluttering user directory with Python bytecode +sys.dont_write_bytecode = True + +VERSION = '3.0' + +STDIN = '' + +FILEOBJ = '' + +STRING = '' + +ERROR_EXIT_CODE = 1 + +USER_ERROR_EXIT_CODE = 2 + +_ALL_DIRECTIVES_PATTERN = r''' +# comment block +(?:^[ \t]*\#!.*\n)+ +| +# line directive (with optional continuation lines) +^[ \t]*(?P[\#\$@]):[ \t]* +(?P.+?(?:&[ \t]*\n(?:[ \t]*&)?.*?)*)?[ \t]*\n +| +# inline eval directive +(?P[$\#@])\{[ \t]*(?P.+?)?[ \t]*\}(?P=idirtype) +''' + +_ALL_DIRECTIVES_REGEXP = re.compile( + _ALL_DIRECTIVES_PATTERN, re.VERBOSE | re.MULTILINE) + +_CONTROL_DIR_REGEXP = re.compile( + r'(?P[a-zA-Z_]\w*)[ \t]*(?:[ \t]+(?P[^ \t].*))?$') + +_DIRECT_CALL_REGEXP = re.compile( + r'(?P[a-zA-Z_][\w.]*)[ \t]*\((?P.+?)?\)$') + +_DIRECT_CALL_KWARG_REGEXP = re.compile( + r'(?:(?P[a-zA-Z_]\w*)\s*=(?=[^=]|$))?') + +_DEF_PARAM_REGEXP = re.compile( + r'^(?P[a-zA-Z_]\w*)[ \t]*\(\s*(?P.+)?\s*\)$') + +_SIMPLE_CALLABLE_REGEXP = re.compile( + r'^(?P[a-zA-Z_][\w.]*)[ \t]*(?:\([ \t]*(?P.*)[ \t]*\))?$') + +_IDENTIFIER_NAME_REGEXP = re.compile(r'^(?P[a-zA-Z_]\w*)$') + +_PREFIXED_IDENTIFIER_NAME_REGEXP = re.compile(r'^(?P[a-zA-Z_][\w.]*)$') + +_SET_PARAM_REGEXP = re.compile( + r'^(?P(?:[(]\s*)?[a-zA-Z_]\w*(?:\s*,\s*[a-zA-Z_]\w*)*(?:\s*[)])?)\s*'\ + r'(?:=\s*(?P.*))?$') + +_DEL_PARAM_REGEXP = re.compile( + r'^(?:[(]\s*)?[a-zA-Z_]\w*(?:\s*,\s*[a-zA-Z_]\w*)*(?:\s*[)])?$') + +_FOR_PARAM_REGEXP = re.compile( + r'^(?P[a-zA-Z_]\w*(\s*,\s*[a-zA-Z_]\w*)*)\s+in\s+(?P.+)$') + +_INCLUDE_PARAM_REGEXP = re.compile(r'^(\'|")(?P.*?)\1$') + +_COMMENTLINE_REGEXP = re.compile(r'^[ \t]*!.*$') + +_CONTLINE_REGEXP = re.compile(r'&[ \t]*\n(?:[ \t]*&)?') + +_UNESCAPE_TEXT_REGEXP1 = re.compile(r'([$#@])\\(\\*)([{:])') + +_UNESCAPE_TEXT_REGEXP2 = re.compile(r'#\\(\\*)([!])') + +_UNESCAPE_TEXT_REGEXP3 = re.compile(r'(\})\\(\\*)([$#@])') + +_INLINE_EVAL_REGION_REGEXP = re.compile(r'\${.*?}\$') + +_RESERVED_PREFIX = '__' + +_RESERVED_NAMES = set(['defined', 'setvar', 'getvar', 'delvar', 'globalvar', + '_LINE_', '_FILE_', '_THIS_FILE_', '_THIS_LINE_', + '_TIME_', '_DATE_']) + +_LINENUM_NEW_FILE = 1 + +_LINENUM_RETURN_TO_FILE = 2 + +_QUOTES_FORTRAN = '\'"' + +_OPENING_BRACKETS_FORTRAN = '{([' + +_CLOSING_BRACKETS_FORTRAN = '})]' + +_ARGUMENT_SPLIT_CHAR_FORTRAN = ',' + + +class FyppError(Exception): + '''Signalizes error occuring during preprocessing. + + Args: + msg (str): Error message. + fname (str): File name. None (default) if file name is not available. + span (tuple of int): Beginning and end line of the region where error + occured or None if not available. If fname was not None, span must + not be None. + cause (Exception): Contains the exception, which triggered this + exception or None, if this exception is not masking any underlying + one. (Emulates Python 3 exception chaining in a Python 2 compatible + way.) + + Attributes: + msg (str): Error message. + fname (str or None): File name or None if not available. + span (tuple of int or None): Beginning and end line of the region + where error occured or None if not available. Line numbers start + from zero. For directives, which do not consume end of the line, + start and end lines are identical. + cause (Exception): In case this exception is raised in an except block, + the original exception should be passed here. (Emulates Python 3 + exception chaining in a Python 2 compatible way.) + ''' + + def __init__(self, msg, fname=None, span=None, cause=None): + super(FyppError, self).__init__() + self.msg = msg + self.fname = fname + self.span = span + self.cause = cause + + + def __str__(self): + msg = [self.__class__.__name__, ': '] + if self.fname is not None: + msg.append("file '" + self.fname + "'") + if self.span[1] > self.span[0] + 1: + msg.append(', lines {0}-{1}'.format( + self.span[0] + 1, self.span[1])) + else: + msg.append(', line {0}'.format(self.span[0] + 1)) + msg.append('\n') + if self.msg: + msg.append(self.msg) + if self.cause is not None: + msg.append('\n' + str(self.cause)) + return ''.join(msg) + + +class FyppFatalError(FyppError): + '''Signalizes an unexpected error during processing.''' + + +class FyppStopRequest(FyppError): + '''Signalizes an explicitely triggered stop (e.g. via stop directive)''' + + +class Parser: + '''Parses a text and generates events when encountering Fypp constructs. + + Args: + includedirs (list): List of directories, in which include files should + be searched for, when they are not found at the default location. + + encoding (str): Encoding to use when reading the file (default: utf-8) + ''' + + def __init__(self, includedirs=None, encoding='utf-8'): + + # Directories to search for include files + if includedirs is None: + self._includedirs = [] + else: + self._includedirs = includedirs + + # Encoding + self._encoding = encoding + + # Name of current file + self._curfile = None + + # Directory of current file + self._curdir = None + + + def parsefile(self, fobj): + '''Parses file or a file like object. + + Args: + fobj (str or file): Name of a file or a file like object. + ''' + if isinstance(fobj, str): + if fobj == STDIN: + self._includefile(None, sys.stdin, STDIN, os.getcwd()) + else: + inpfp = _open_input_file(fobj, self._encoding) + self._includefile(None, inpfp, fobj, os.path.dirname(fobj)) + inpfp.close() + else: + self._includefile(None, fobj, FILEOBJ, os.getcwd()) + + + def _includefile(self, span, fobj, fname, curdir): + oldfile = self._curfile + olddir = self._curdir + self._curfile = fname + self._curdir = curdir + self._parse_txt(span, fname, fobj.read()) + self._curfile = oldfile + self._curdir = olddir + + + def parse(self, txt): + '''Parses string. + + Args: + txt (str): Text to parse. + ''' + self._curfile = STRING + self._curdir = '' + self._parse_txt(None, self._curfile, txt) + + + def handle_include(self, span, fname): + '''Called when parser starts to process a new file. + + It is a dummy methond and should be overriden for actual use. + + Args: + span (tuple of int): Start and end line of the include directive + or None if called the first time for the main input. + fname (str): Name of the file. + ''' + self._log_event('include', span, filename=fname) + + + def handle_endinclude(self, span, fname): + '''Called when parser finished processing a file. + + It is a dummy method and should be overriden for actual use. + + Args: + span (tuple of int): Start and end line of the include directive + or None if called the first time for the main input. + fname (str): Name of the file. + ''' + self._log_event('endinclude', span, filename=fname) + + + def handle_set(self, span, name, expr): + '''Called when parser encounters a set directive. + + It is a dummy method and should be overriden for actual use. + + Args: + span (tuple of int): Start and end line of the directive. + name (str): Name of the variable. + expr (str): String representation of the expression to be assigned + to the variable. + ''' + self._log_event('set', span, name=name, expression=expr) + + + def handle_def(self, span, name, args): + '''Called when parser encounters a def directive. + + It is a dummy method and should be overriden for actual use. + + Args: + span (tuple of int): Start and end line of the directive. + name (str): Name of the macro to be defined. + argexpr (str): String with argument definition (or None) + ''' + self._log_event('def', span, name=name, arguments=args) + + + def handle_enddef(self, span, name): + '''Called when parser encounters an enddef directive. + + It is a dummy method and should be overriden for actual use. + + Args: + span (tuple of int): Start and end line of the directive. + name (str): Name found after the enddef directive. + ''' + self._log_event('enddef', span, name=name) + + + def handle_del(self, span, name): + '''Called when parser encounters a del directive. + + It is a dummy method and should be overriden for actual use. + + Args: + span (tuple of int): Start and end line of the directive. + name (str): Name of the variable to delete. + ''' + self._log_event('del', span, name=name) + + + def handle_if(self, span, cond): + '''Called when parser encounters an if directive. + + It is a dummy method and should be overriden for actual use. + + Args: + span (tuple of int): Start and end line of the directive. + cond (str): String representation of the branching condition. + ''' + self._log_event('if', span, condition=cond) + + + def handle_elif(self, span, cond): + '''Called when parser encounters an elif directive. + + It is a dummy method and should be overriden for actual use. + + Args: + span (tuple of int): Start and end line of the directive. + cond (str): String representation of the branching condition. + ''' + self._log_event('elif', span, condition=cond) + + + def handle_else(self, span): + '''Called when parser encounters an else directive. + + It is a dummy method and should be overriden for actual use. + + Args: + span (tuple of int): Start and end line of the directive. + ''' + self._log_event('else', span) + + + def handle_endif(self, span): + '''Called when parser encounters an endif directive. + + It is a dummy method and should be overriden for actual use. + + Args: + span (tuple of int): Start and end line of the directive. + ''' + self._log_event('endif', span) + + + def handle_for(self, span, varexpr, iterator): + '''Called when parser encounters a for directive. + + It is a dummy method and should be overriden for actual use. + + Args: + span (tuple of int): Start and end line of the directive. + varexpr (str): String representation of the loop variable + expression. + iterator (str): String representation of the iterable. + ''' + self._log_event('for', span, variable=varexpr, iterable=iterator) + + + def handle_endfor(self, span): + '''Called when parser encounters an endfor directive. + + It is a dummy method and should be overriden for actual use. + + Args: + span (tuple of int): Start and end line of the directive. + ''' + self._log_event('endfor', span) + + + def handle_call(self, span, name, argexpr, blockcall): + '''Called when parser encounters a call directive. + + It is a dummy method and should be overriden for actual use. + + Args: + span (tuple of int): Start and end line of the directive. + name (str): Name of the callable to call + argexpr (str or None): Argument expression containing additional + arguments for the call. + blockcall (bool): Whether the alternative "block / contains / + endblock" calling directive has been used. + ''' + self._log_event('call', span, name=name, argexpr=argexpr, + blockcall=blockcall) + + + def handle_nextarg(self, span, name, blockcall): + '''Called when parser encounters a nextarg directive. + + It is a dummy method and should be overriden for actual use. + + Args: + span (tuple of int): Start and end line of the directive. + name (str or None): Name of the argument following next or + None if it should be the next positional argument. + blockcall (bool): Whether the alternative "block / contains / + endblock" calling directive has been used. + ''' + self._log_event('nextarg', span, name=name, blockcall=blockcall) + + + def handle_endcall(self, span, name, blockcall): + '''Called when parser encounters an endcall directive. + + It is a dummy method and should be overriden for actual use. + + Args: + span (tuple of int): Start and end line of the directive. + name (str): Name found after the endcall directive. + blockcall (bool): Whether the alternative "block / contains / + endblock" calling directive has been used. + ''' + self._log_event('endcall', span, name=name, blockcall=blockcall) + + + def handle_eval(self, span, expr): + '''Called when parser encounters an eval directive. + + It is a dummy method and should be overriden for actual use. + + Args: + span (tuple of int): Start and end line of the directive. + expr (str): String representation of the Python expression to + be evaluated. + ''' + self._log_event('eval', span, expression=expr) + + + def handle_global(self, span, name): + '''Called when parser encounters a global directive. + + It is a dummy method and should be overriden for actual use. + + Args: + span (tuple of int): Start and end line of the directive. + name (str): Name of the variable which should be made global. + ''' + self._log_event('global', span, name=name) + + + def handle_text(self, span, txt): + '''Called when parser finds text which must left unaltered. + + It is a dummy method and should be overriden for actual use. + + Args: + span (tuple of int): Start and end line of the directive. + txt (str): Text. + ''' + self._log_event('text', span, content=txt) + + + def handle_comment(self, span): + '''Called when parser finds a preprocessor comment. + + It is a dummy method and should be overriden for actual use. + + Args: + span (tuple of int): Start and end line of the directive. + ''' + self._log_event('comment', span) + + + def handle_mute(self, span): + '''Called when parser finds a mute directive. + + It is a dummy method and should be overriden for actual use. + + Args: + span (tuple of int): Start and end line of the directive. + ''' + self._log_event('mute', span) + + + def handle_endmute(self, span): + '''Called when parser finds an endmute directive. + + It is a dummy method and should be overriden for actual use. + + Args: + span (tuple of int): Start and end line of the directive. + ''' + self._log_event('endmute', span) + + + def handle_stop(self, span, msg): + '''Called when parser finds an stop directive. + + It is a dummy method and should be overriden for actual use. + + Args: + span (tuple of int): Start and end line of the directive. + msg (str): Stop message. + ''' + self._log_event('stop', span, msg=msg) + + + def handle_assert(self, span): + '''Called when parser finds an assert directive. + + It is a dummy method and should be overriden for actual use. + + Args: + span (tuple of int): Start and end line of the directive. + ''' + self._log_event('assert', span) + + + @staticmethod + def _log_event(event, span=(-1, -1), **params): + print('{0}: {1} --> {2}'.format(event, span[0], span[1])) + for parname, parvalue in params.items(): + print(' {0}: ->|{1}|<-'.format(parname, parvalue)) + print() + + + def _parse_txt(self, includespan, fname, txt): + self.handle_include(includespan, fname) + self._parse(txt) + self.handle_endinclude(includespan, fname) + + + def _parse(self, txt, linenr=0, directcall=False): + pos = 0 + for match in _ALL_DIRECTIVES_REGEXP.finditer(txt): + start, end = match.span() + if start > pos: + endlinenr = linenr + txt.count('\n', pos, start) + self._process_text(txt[pos:start], (linenr, endlinenr)) + linenr = endlinenr + endlinenr = linenr + txt.count('\n', start, end) + span = (linenr, endlinenr) + ldirtype, ldir, idirtype, idir = match.groups() + if directcall and (idirtype is None or idirtype != '$'): + msg = 'only inline eval directives allowed in direct calls' + raise FyppFatalError(msg, self._curfile, span) + elif idirtype is not None: + if idir is None: + msg = 'missing inline directive content' + raise FyppFatalError(msg, self._curfile, span) + dirtype = idirtype + content = idir + elif ldirtype is not None: + if ldir is None: + msg = 'missing line directive content' + raise FyppFatalError(msg, self._curfile, span) + dirtype = ldirtype + content = _CONTLINE_REGEXP.sub('', ldir) + else: + # Comment directive + dirtype = None + if dirtype == '$': + self.handle_eval(span, content) + elif dirtype == '#': + self._process_control_dir(content, span) + elif dirtype == '@': + self._process_direct_call(content, span) + else: + self.handle_comment(span) + pos = end + linenr = endlinenr + if pos < len(txt): + endlinenr = linenr + txt.count('\n', pos) + self._process_text(txt[pos:], (linenr, endlinenr)) + + + def _process_text(self, txt, span): + escaped_txt = self._unescape(txt) + self.handle_text(span, escaped_txt) + + + def _process_control_dir(self, content, span): + match = _CONTROL_DIR_REGEXP.match(content) + if not match: + msg = "invalid control directive content '{0}'".format(content) + raise FyppFatalError(msg, self._curfile, span) + directive, param = match.groups() + if directive == 'if': + self._check_param_presence(True, 'if', param, span) + self.handle_if(span, param) + elif directive == 'else': + self._check_param_presence(False, 'else', param, span) + self.handle_else(span) + elif directive == 'elif': + self._check_param_presence(True, 'elif', param, span) + self.handle_elif(span, param) + elif directive == 'endif': + self._check_param_presence(False, 'endif', param, span) + self.handle_endif(span) + elif directive == 'def': + self._check_param_presence(True, 'def', param, span) + self._check_not_inline_directive('def', span) + self._process_def(param, span) + elif directive == 'enddef': + self._process_enddef(param, span) + elif directive == 'set': + self._check_param_presence(True, 'set', param, span) + self._process_set(param, span) + elif directive == 'del': + self._check_param_presence(True, 'del', param, span) + self._process_del(param, span) + elif directive == 'for': + self._check_param_presence(True, 'for', param, span) + self._process_for(param, span) + elif directive == 'endfor': + self._check_param_presence(False, 'endfor', param, span) + self.handle_endfor(span) + elif directive == 'call' or directive == 'block': + self._check_param_presence(True, directive, param, span) + self._process_call(param, span, directive == 'block') + elif directive == 'nextarg' or directive == 'contains': + self._process_nextarg(param, span, directive == 'contains') + elif directive == 'endcall' or directive == 'endblock': + self._process_endcall(param, span, directive == 'endblock') + elif directive == 'include': + self._check_param_presence(True, 'include', param, span) + self._check_not_inline_directive('include', span) + self._process_include(param, span) + elif directive == 'mute': + self._check_param_presence(False, 'mute', param, span) + self._check_not_inline_directive('mute', span) + self.handle_mute(span) + elif directive == 'endmute': + self._check_param_presence(False, 'endmute', param, span) + self._check_not_inline_directive('endmute', span) + self.handle_endmute(span) + elif directive == 'stop': + self._check_param_presence(True, 'stop', param, span) + self._check_not_inline_directive('stop', span) + self.handle_stop(span, param) + elif directive == 'assert': + self._check_param_presence(True, 'assert', param, span) + self._check_not_inline_directive('assert', span) + self.handle_assert(span, param) + elif directive == 'global': + self._check_param_presence(True, 'global', param, span) + self._process_global(param, span) + else: + msg = "unknown directive '{0}'".format(directive) + raise FyppFatalError(msg, self._curfile, span) + + + def _process_direct_call(self, callexpr, span): + match = _DIRECT_CALL_REGEXP.match(callexpr) + if not match: + msg = "invalid direct call expression" + raise FyppFatalError(msg, self._curfile, span) + callname = match.group('callname') + self.handle_call(span, callname, None, False) + callparams = match.group('callparams') + if callparams is None or not callparams.strip(): + args = [] + else: + try: + args = [arg.strip() for arg in _argsplit_fortran(callparams)] + except Exception as exc: + msg = 'unable to parse direct call argument' + raise FyppFatalError(msg, self._curfile, span, exc) + for arg in args: + match = _DIRECT_CALL_KWARG_REGEXP.match(arg) + argval = arg[match.end():].strip() + # Remove enclosing braces if present + if argval.startswith('{'): + argval = argval[1:-1] + keyword = match.group('kwname') + self.handle_nextarg(span, keyword, False) + self._parse(argval, linenr=span[0], directcall=True) + self.handle_endcall(span, callname, False) + + + def _process_def(self, param, span): + match = _DEF_PARAM_REGEXP.match(param) + if not match: + msg = "invalid macro definition '{0}'".format(param) + raise FyppFatalError(msg, self._curfile, span) + name = match.group('name') + argexpr = match.group('args') + self.handle_def(span, name, argexpr) + + + def _process_enddef(self, param, span): + if param is not None: + match = _IDENTIFIER_NAME_REGEXP.match(param) + if not match: + msg = "invalid enddef parameter '{0}'".format(param) + raise FyppFatalError(msg, self._curfile, span) + param = match.group('name') + self.handle_enddef(span, param) + + + def _process_set(self, param, span): + match = _SET_PARAM_REGEXP.match(param) + if not match: + msg = "invalid variable assignment '{0}'".format(param) + raise FyppFatalError(msg, self._curfile, span) + self.handle_set(span, match.group('name'), match.group('expr')) + + + def _process_global(self, param, span): + match = _DEL_PARAM_REGEXP.match(param) + if not match: + msg = "invalid variable specification '{0}'".format(param) + raise FyppFatalError(msg, self._curfile, span) + self.handle_global(span, param) + + + def _process_del(self, param, span): + match = _DEL_PARAM_REGEXP.match(param) + if not match: + msg = "invalid variable specification '{0}'".format(param) + raise FyppFatalError(msg, self._curfile, span) + self.handle_del(span, param) + + + def _process_for(self, param, span): + match = _FOR_PARAM_REGEXP.match(param) + if not match: + msg = "invalid for loop declaration '{0}'".format(param) + raise FyppFatalError(msg, self._curfile, span) + loopexpr = match.group('loopexpr') + loopvars = [s.strip() for s in loopexpr.split(',')] + self.handle_for(span, loopvars, match.group('iter')) + + + def _process_call(self, param, span, blockcall): + match = _SIMPLE_CALLABLE_REGEXP.match(param) + if not match: + msg = "invalid callable expression '{}'".format(param) + raise FyppFatalError(msg, self._curfile, span) + name, args = match.groups() + self.handle_call(span, name, args, blockcall) + + + def _process_nextarg(self, param, span, blockcall): + if param is not None: + match = _IDENTIFIER_NAME_REGEXP.match(param) + if not match: + msg = "invalid nextarg parameter '{0}'".format(param) + raise FyppFatalError(msg, self._curfile, span) + param = match.group('name') + self.handle_nextarg(span, param, blockcall) + + + def _process_endcall(self, param, span, blockcall): + if param is not None: + match = _PREFIXED_IDENTIFIER_NAME_REGEXP.match(param) + if not match: + msg = "invalid endcall parameter '{0}'".format(param) + raise FyppFatalError(msg, self._curfile, span) + param = match.group('name') + self.handle_endcall(span, param, blockcall) + + + def _process_include(self, param, span): + match = _INCLUDE_PARAM_REGEXP.match(param) + if not match: + msg = "invalid include file declaration '{0}'".format(param) + raise FyppFatalError(msg, self._curfile, span) + fname = match.group('fname') + for incdir in [self._curdir] + self._includedirs: + fpath = os.path.join(incdir, fname) + if os.path.exists(fpath): + break + else: + msg = "include file '{0}' not found".format(fname) + raise FyppFatalError(msg, self._curfile, span) + inpfp = _open_input_file(fpath, self._encoding) + self._includefile(span, inpfp, fpath, os.path.dirname(fpath)) + inpfp.close() + + + def _process_mute(self, span): + if span[0] == span[1]: + msg = 'Inline form of mute directive not allowed' + raise FyppFatalError(msg, self._curfile, span) + self.handle_mute(span) + + + def _process_endmute(self, span): + if span[0] == span[1]: + msg = 'Inline form of endmute directive not allowed' + raise FyppFatalError(msg, self._curfile, span) + self.handle_endmute(span) + + + def _check_param_presence(self, presence, directive, param, span): + if (param is not None) != presence: + if presence: + msg = 'missing data in {0} directive'.format(directive) + else: + msg = 'forbidden data in {0} directive'.format(directive) + raise FyppFatalError(msg, self._curfile, span) + + + def _check_not_inline_directive(self, directive, span): + if span[0] == span[1]: + msg = 'Inline form of {0} directive not allowed'.format(directive) + raise FyppFatalError(msg, self._curfile, span) + + + @staticmethod + def _unescape(txt): + txt = _UNESCAPE_TEXT_REGEXP1.sub(r'\1\2\3', txt) + txt = _UNESCAPE_TEXT_REGEXP2.sub(r'#\1\2', txt) + txt = _UNESCAPE_TEXT_REGEXP3.sub(r'\1\2\3', txt) + return txt + + +class Builder: + '''Builds a tree representing a text with preprocessor directives. + ''' + + def __init__(self): + # The tree, which should be built. + self._tree = [] + + # List of all open constructs + self._open_blocks = [] + + # Nodes to which the open blocks have to be appended when closed + self._path = [] + + # Nr. of open blocks when file was opened. Used for checking whether all + # blocks have been closed, when file processing finishes. + self._nr_prev_blocks = [] + + # Current node, to which content should be added + self._curnode = self._tree + + # Current file + self._curfile = None + + + def reset(self): + '''Resets the builder so that it starts to build a new tree.''' + self._tree = [] + self._open_blocks = [] + self._path = [] + self._nr_prev_blocks = [] + self._curnode = self._tree + self._curfile = None + + + def handle_include(self, span, fname): + '''Should be called to signalize change to new file. + + Args: + span (tuple of int): Start and end line of the include directive + or None if called the first time for the main input. + fname (str): Name of the file to be included. + ''' + self._path.append(self._curnode) + self._curnode = [] + self._open_blocks.append( + ('include', self._curfile, [span], fname, None)) + self._curfile = fname + self._nr_prev_blocks.append(len(self._open_blocks)) + + + def handle_endinclude(self, span, fname): + '''Should be called when processing of a file finished. + + Args: + span (tuple of int): Start and end line of the include directive + or None if called the first time for the main input. + fname (str): Name of the file which has been included. + ''' + nprev_blocks = self._nr_prev_blocks.pop(-1) + if len(self._open_blocks) > nprev_blocks: + directive, fname, spans = self._open_blocks[-1][0:3] + msg = '{0} directive still unclosed when reaching end of file'\ + .format(directive) + raise FyppFatalError(msg, self._curfile, spans[0]) + block = self._open_blocks.pop(-1) + directive, blockfname, spans = block[0:3] + if directive != 'include': + msg = 'internal error: last open block is not \'include\' when '\ + 'closing file \'{0}\''.format(fname) + raise FyppFatalError(msg) + if span != spans[0]: + msg = 'internal error: span for include and endinclude differ ('\ + '{0} vs {1}'.format(span, spans[0]) + raise FyppFatalError(msg) + oldfname, _ = block[3:5] + if fname != oldfname: + msg = 'internal error: mismatching file name in close_file event'\ + " (expected: '{0}', got: '{1}')".format(oldfname, fname) + raise FyppFatalError(msg, fname) + block = directive, blockfname, spans, fname, self._curnode + self._curnode = self._path.pop(-1) + self._curnode.append(block) + self._curfile = blockfname + + + def handle_if(self, span, cond): + '''Should be called to signalize an if directive. + + Args: + span (tuple of int): Start and end line of the directive. + param (str): String representation of the branching condition. + ''' + self._path.append(self._curnode) + self._curnode = [] + self._open_blocks.append(('if', self._curfile, [span], [cond], [])) + + + def handle_elif(self, span, cond): + '''Should be called to signalize an elif directive. + + Args: + span (tuple of int): Start and end line of the directive. + cond (str): String representation of the branching condition. + ''' + self._check_for_open_block(span, 'elif') + block = self._open_blocks[-1] + directive, _, spans = block[0:3] + self._check_if_matches_last(directive, 'if', spans[-1], span, 'elif') + conds, contents = block[3:5] + conds.append(cond) + contents.append(self._curnode) + spans.append(span) + self._curnode = [] + + + def handle_else(self, span): + '''Should be called to signalize an else directive. + + Args: + span (tuple of int): Start and end line of the directive. + ''' + self._check_for_open_block(span, 'else') + block = self._open_blocks[-1] + directive, _, spans = block[0:3] + self._check_if_matches_last(directive, 'if', spans[-1], span, 'else') + conds, contents = block[3:5] + conds.append('True') + contents.append(self._curnode) + spans.append(span) + self._curnode = [] + + + def handle_endif(self, span): + '''Should be called to signalize an endif directive. + + Args: + span (tuple of int): Start and end line of the directive. + ''' + self._check_for_open_block(span, 'endif') + block = self._open_blocks.pop(-1) + directive, _, spans = block[0:3] + self._check_if_matches_last(directive, 'if', spans[-1], span, 'endif') + _, contents = block[3:5] + contents.append(self._curnode) + spans.append(span) + self._curnode = self._path.pop(-1) + self._curnode.append(block) + + + def handle_for(self, span, loopvar, iterator): + '''Should be called to signalize a for directive. + + Args: + span (tuple of int): Start and end line of the directive. + varexpr (str): String representation of the loop variable + expression. + iterator (str): String representation of the iterable. + ''' + self._path.append(self._curnode) + self._curnode = [] + self._open_blocks.append(('for', self._curfile, [span], loopvar, + iterator, None)) + + + def handle_endfor(self, span): + '''Should be called to signalize an endfor directive. + + Args: + span (tuple of int): Start and end line of the directive. + ''' + self._check_for_open_block(span, 'endfor') + block = self._open_blocks.pop(-1) + directive, fname, spans = block[0:3] + self._check_if_matches_last(directive, 'for', spans[-1], span, 'endfor') + loopvar, iterator, dummy = block[3:6] + spans.append(span) + block = (directive, fname, spans, loopvar, iterator, self._curnode) + self._curnode = self._path.pop(-1) + self._curnode.append(block) + + + def handle_def(self, span, name, argexpr): + '''Should be called to signalize a def directive. + + Args: + span (tuple of int): Start and end line of the directive. + name (str): Name of the macro to be defined. + argexpr (str): Macro argument definition or None + ''' + self._path.append(self._curnode) + self._curnode = [] + defblock = ('def', self._curfile, [span], name, argexpr, None) + self._open_blocks.append(defblock) + + + def handle_enddef(self, span, name): + '''Should be called to signalize an enddef directive. + + Args: + span (tuple of int): Start and end line of the directive. + name (str): Name of the enddef statement. Could be None, if enddef + was specified without name. + ''' + self._check_for_open_block(span, 'enddef') + block = self._open_blocks.pop(-1) + directive, fname, spans = block[0:3] + self._check_if_matches_last(directive, 'def', spans[-1], span, 'enddef') + defname, argexpr, dummy = block[3:6] + if name is not None and name != defname: + msg = "wrong name in enddef directive "\ + "(expected '{0}', got '{1}')".format(defname, name) + raise FyppFatalError(msg, fname, span) + spans.append(span) + block = (directive, fname, spans, defname, argexpr, self._curnode) + self._curnode = self._path.pop(-1) + self._curnode.append(block) + + + def handle_call(self, span, name, argexpr, blockcall): + '''Should be called to signalize a call directive. + + Args: + span (tuple of int): Start and end line of the directive. + name (str): Name of the callable to call + argexpr (str or None): Argument expression containing additional + arguments for the call. + blockcall (bool): Whether the alternative "block / contains / + endblock" calling directive has been used. + ''' + self._path.append(self._curnode) + self._curnode = [] + directive = 'block' if blockcall else 'call' + self._open_blocks.append( + (directive, self._curfile, [span, span], name, argexpr, [], [])) + + + def handle_nextarg(self, span, name, blockcall): + '''Should be called to signalize a nextarg directive. + + Args: + span (tuple of int): Start and end line of the directive. + name (str or None): Name of the argument following next or + None if it should be the next positional argument. + blockcall (bool): Whether the alternative "block / contains / + endblock" calling directive has been used. + ''' + self._check_for_open_block(span, 'nextarg') + block = self._open_blocks[-1] + directive, fname, spans = block[0:3] + if blockcall: + opened, current = 'block', 'contains' + else: + opened, current = 'call', 'nextarg' + self._check_if_matches_last(directive, opened, spans[-1], span, current) + args, argnames = block[5:7] + args.append(self._curnode) + spans.append(span) + if name is not None: + argnames.append(name) + elif argnames: + msg = 'non-keyword argument following keyword argument' + raise FyppFatalError(msg, fname, span) + self._curnode = [] + + + def handle_endcall(self, span, name, blockcall): + '''Should be called to signalize an endcall directive. + + Args: + span (tuple of int): Start and end line of the directive. + name (str): Name of the endcall statement. Could be None, if endcall + was specified without name. + blockcall (bool): Whether the alternative "block / contains / + endblock" calling directive has been used. + ''' + self._check_for_open_block(span, 'endcall') + block = self._open_blocks.pop(-1) + directive, fname, spans = block[0:3] + callname, callargexpr, args, argnames = block[3:7] + if blockcall: + opened, current = 'block', 'endblock' + else: + opened, current = 'call', 'endcall' + self._check_if_matches_last(directive, opened, spans[0], span, current) + + if name is not None and name != callname: + msg = "wrong name in {0} directive "\ + "(expected '{1}', got '{2}')".format(current, callname, name) + raise FyppFatalError(msg, fname, span) + args.append(self._curnode) + # If nextarg or endcall immediately followed call, then first argument + # is empty and should be removed (to allow for calls without arguments + # and named first argument in calls) + if args and not args[0]: + if len(argnames) == len(args): + del argnames[0] + del args[0] + del spans[1] + spans.append(span) + block = (directive, fname, spans, callname, callargexpr, args, argnames) + self._curnode = self._path.pop(-1) + self._curnode.append(block) + + + def handle_set(self, span, name, expr): + '''Should be called to signalize a set directive. + + Args: + span (tuple of int): Start and end line of the directive. + name (str): Name of the variable. + expr (str): String representation of the expression to be assigned + to the variable. + ''' + self._curnode.append(('set', self._curfile, span, name, expr)) + + + def handle_global(self, span, name): + '''Should be called to signalize a global directive. + + Args: + span (tuple of int): Start and end line of the directive. + name (str): Name of the variable(s) to make global. + ''' + self._curnode.append(('global', self._curfile, span, name)) + + + def handle_del(self, span, name): + '''Should be called to signalize a del directive. + + Args: + span (tuple of int): Start and end line of the directive. + name (str): Name of the variable(s) to delete. + ''' + self._curnode.append(('del', self._curfile, span, name)) + + + def handle_eval(self, span, expr): + '''Should be called to signalize an eval directive. + + Args: + span (tuple of int): Start and end line of the directive. + expr (str): String representation of the Python expression to + be evaluated. + ''' + self._curnode.append(('eval', self._curfile, span, expr)) + + + def handle_comment(self, span): + '''Should be called to signalize a comment directive. + + The content of the comment is not needed by the builder, but it needs + the span of the comment to generate proper line numbers if needed. + + Args: + span (tuple of int): Start and end line of the directive. + ''' + self._curnode.append(('comment', self._curfile, span)) + + + def handle_text(self, span, txt): + '''Should be called to pass text which goes to output unaltered. + + Args: + span (tuple of int): Start and end line of the text. + txt (str): Text. + ''' + self._curnode.append(('txt', self._curfile, span, txt)) + + + def handle_mute(self, span): + '''Should be called to signalize a mute directive. + + Args: + span (tuple of int): Start and end line of the directive. + ''' + self._path.append(self._curnode) + self._curnode = [] + self._open_blocks.append(('mute', self._curfile, [span], None)) + + + def handle_endmute(self, span): + '''Should be called to signalize an endmute directive. + + Args: + span (tuple of int): Start and end line of the directive. + ''' + self._check_for_open_block(span, 'endmute') + block = self._open_blocks.pop(-1) + directive, fname, spans = block[0:3] + self._check_if_matches_last(directive, 'mute', spans[-1], span, + 'endmute') + spans.append(span) + block = (directive, fname, spans, self._curnode) + self._curnode = self._path.pop(-1) + self._curnode.append(block) + + + def handle_stop(self, span, msg): + '''Should be called to signalize a stop directive. + + Args: + span (tuple of int): Start and end line of the directive. + ''' + self._curnode.append(('stop', self._curfile, span, msg)) + + + def handle_assert(self, span, cond): + '''Should be called to signalize an assert directive. + + Args: + span (tuple of int): Start and end line of the directive. + ''' + self._curnode.append(('assert', self._curfile, span, cond)) + + + @property + def tree(self): + '''Returns the tree built by the Builder.''' + return self._tree + + + def _check_for_open_block(self, span, directive): + if len(self._open_blocks) <= self._nr_prev_blocks[-1]: + msg = 'unexpected {0} directive'.format(directive) + raise FyppFatalError(msg, self._curfile, span) + + + def _check_if_matches_last(self, lastdir, curdir, lastspan, curspan, + directive): + if curdir != lastdir: + msg = "mismatching '{0}' directive (last block opened was '{1}')"\ + .format(directive, lastdir) + raise FyppFatalError(msg, self._curfile, curspan) + inline_last = lastspan[0] == lastspan[1] + inline_cur = curspan[0] == curspan[1] + if inline_last != inline_cur: + if inline_cur: + msg = 'expecting line form of directive {0}'.format(directive) + else: + msg = 'expecting inline form of directive {0}'.format(directive) + raise FyppFatalError(msg, self._curfile, curspan) + elif inline_cur and curspan[0] != lastspan[0]: + msg = 'inline directives of the same construct must be in the '\ + 'same row' + raise FyppFatalError(msg, self._curfile, curspan) + + +class Renderer: + + ''''Renders a tree. + + Args: + evaluator (Evaluator, optional): Evaluator to use when rendering eval + directives. If None (default), Evaluator() is used. + linenums (bool, optional): Whether linenums should be generated, + defaults to False. + contlinenums (bool, optional): Whether linenums for continuation + should be generated, defaults to False. + linenumformat (str, optional): If set to "gfortran5", a workaround + for broken gfortran versions (version 5.1 and above) is applied when + emitting line numbering directives. + linefolder (callable): Callable to use when folding a line. + ''' + + def __init__(self, evaluator=None, linenums=False, contlinenums=False, + linenumformat=None, linefolder=None): + # Evaluator to use for Python expressions + self._evaluator = Evaluator() if evaluator is None else evaluator + + # Whether rendered output is diverted and will be processed + # further before output (if True: no line numbering and post processing) + self._diverted = False + + # Whether file name and line numbers should be kept fixed and + # not updated (typically when rendering macro content) + self._fixedposition = False + + # Whether line numbering directives should be emitted + self._linenums = linenums + + # Whether line numbering directives in continuation lines are needed. + self._contlinenums = contlinenums + + # Whether to use the fix for GFortran in the line numbering directives + self._linenum_gfortran5 = (linenumformat == 'gfortran5') + + # Callable to be used for folding lines + if linefolder is None: + self._linefolder = lambda line: [line] + else: + self._linefolder = linefolder + + + def render(self, tree, divert=False, fixposition=False): + '''Renders a tree. + + Args: + tree (fypp-tree): Tree to render. + divert (bool): Whether output will be diverted and sent for further + processing, so that no line numbering directives and + postprocessing are needed at this stage. (Default: False) + fixposition (bool): Whether file name and line position (variables + _FILE_ and _LINE_) should be kept at their current values or + should be updated continuously. (Default: False). + + Returns: str: Rendered string. + ''' + diverted = self._diverted + self._diverted = divert + fixedposition_old = self._fixedposition + self._fixedposition = self._fixedposition or fixposition + output, eval_inds, eval_pos = self._render(tree) + if not self._diverted and eval_inds: + self._postprocess_eval_lines(output, eval_inds, eval_pos) + self._diverted = diverted + self._fixedposition = fixedposition_old + txt = ''.join(output) + + return txt + + + def _render(self, tree): + output = [] + eval_inds = [] + eval_pos = [] + for node in tree: + cmd = node[0] + if cmd == 'txt': + output.append(node[3]) + elif cmd == 'if': + out, ieval, peval = self._get_conditional_content(*node[1:5]) + eval_inds += _shiftinds(ieval, len(output)) + eval_pos += peval + output += out + elif cmd == 'eval': + out, ieval, peval = self._get_eval(*node[1:4]) + eval_inds += _shiftinds(ieval, len(output)) + eval_pos += peval + output += out + elif cmd == 'def': + result = self._define_macro(*node[1:6]) + output.append(result) + elif cmd == 'set': + result = self._define_variable(*node[1:5]) + output.append(result) + elif cmd == 'del': + self._delete_variable(*node[1:4]) + elif cmd == 'for': + out, ieval, peval = self._get_iterated_content(*node[1:6]) + eval_inds += _shiftinds(ieval, len(output)) + eval_pos += peval + output += out + elif cmd == 'call' or cmd == 'block': + out, ieval, peval = self._get_called_content(*node[1:7]) + eval_inds += _shiftinds(ieval, len(output)) + eval_pos += peval + output += out + elif cmd == 'include': + out, ieval, peval = self._get_included_content(*node[1:5]) + eval_inds += _shiftinds(ieval, len(output)) + eval_pos += peval + output += out + elif cmd == 'comment': + output.append(self._get_comment(*node[1:3])) + elif cmd == 'mute': + output.append(self._get_muted_content(*node[1:4])) + elif cmd == 'stop': + self._handle_stop(*node[1:4]) + elif cmd == 'assert': + result = self._handle_assert(*node[1:4]) + output.append(result) + elif cmd == 'global': + self._add_global(*node[1:4]) + else: + msg = "internal error: unknown command '{0}'".format(cmd) + raise FyppFatalError(msg) + return output, eval_inds, eval_pos + + + def _get_eval(self, fname, span, expr): + try: + result = self._evaluate(expr, fname, span[0]) + except Exception as exc: + msg = "exception occured when evaluating '{0}'".format(expr) + raise FyppFatalError(msg, fname, span, exc) + out = [] + ieval = [] + peval = [] + if result is not None: + out.append(str(result)) + if not self._diverted: + ieval.append(0) + peval.append((span, fname)) + if span[0] != span[1]: + out.append('\n') + return out, ieval, peval + + + def _get_conditional_content(self, fname, spans, conditions, contents): + out = [] + ieval = [] + peval = [] + multiline = (spans[0][0] != spans[-1][1]) + for condition, content, span in zip(conditions, contents, spans): + try: + cond = bool(self._evaluate(condition, fname, span[0])) + except Exception as exc: + msg = "exception occured when evaluating '{0}'"\ + .format(condition) + raise FyppFatalError(msg, fname, span, exc) + if cond: + if self._linenums and not self._diverted and multiline: + out.append(linenumdir(span[1], fname)) + outcont, ievalcont, pevalcont = self._render(content) + ieval += _shiftinds(ievalcont, len(out)) + peval += pevalcont + out += outcont + break + if self._linenums and not self._diverted and multiline: + out.append(linenumdir(spans[-1][1], fname)) + return out, ieval, peval + + + def _get_iterated_content(self, fname, spans, loopvars, loopiter, content): + out = [] + ieval = [] + peval = [] + try: + iterobj = iter(self._evaluate(loopiter, fname, spans[0][0])) + except Exception as exc: + msg = "exception occured when evaluating '{0}'"\ + .format(loopiter) + raise FyppFatalError(msg, fname, spans[0], exc) + multiline = (spans[0][0] != spans[-1][1]) + for var in iterobj: + if len(loopvars) == 1: + self._define(loopvars[0], var) + else: + for varname, value in zip(loopvars, var): + self._define(varname, value) + if self._linenums and not self._diverted and multiline: + out.append(linenumdir(spans[0][1], fname)) + outcont, ievalcont, pevalcont = self._render(content) + ieval += _shiftinds(ievalcont, len(out)) + peval += pevalcont + out += outcont + if self._linenums and not self._diverted and multiline: + out.append(linenumdir(spans[1][1], fname)) + return out, ieval, peval + + + def _get_called_content(self, fname, spans, name, argexpr, contents, + argnames): + posargs, kwargs = self._get_call_arguments(fname, spans, argexpr, + contents, argnames) + try: + callobj = self._evaluate(name, fname, spans[0][0]) + result = callobj(*posargs, **kwargs) + except Exception as exc: + msg = "exception occured when calling '{0}'".format(name) + raise FyppFatalError(msg, fname, spans[0], exc) + self._update_predef_globals(fname, spans[0][0]) + span = (spans[0][0], spans[-1][1]) + out = [] + ieval = [] + peval = [] + if result is not None: + out = [str(result)] + if not self._diverted: + ieval = [0] + peval = [(span, fname)] + if span[0] != span[1]: + out.append('\n') + return out, ieval, peval + + + def _get_call_arguments(self, fname, spans, argexpr, contents, argnames): + if argexpr is None: + posargs = [] + kwargs = {} + else: + # Parse and evaluate arguments passed in call header + self._evaluator.openscope() + try: + posargs, kwargs = self._evaluate( + '__getargvalues(' + argexpr + ')', fname, spans[0][0]) + except Exception as exc: + msg = "unable to parse argument expression '{0}'"\ + .format(argexpr) + raise FyppFatalError(msg, fname, spans[0], exc) + self._evaluator.closescope() + + # Render arguments passed in call body + args = [] + for content in contents: + self._evaluator.openscope() + rendered = self.render(content, divert=True) + self._evaluator.closescope() + if rendered.endswith('\n'): + rendered = rendered[:-1] + args.append(rendered) + + # Separate arguments in call body into positional and keyword ones: + if argnames: + posargs += args[:len(args) - len(argnames)] + offset = len(args) - len(argnames) + for iargname, argname in enumerate(argnames): + ind = offset + iargname + if argname in kwargs: + msg = "keyword argument '{0}' already defined"\ + .format(argname) + raise FyppFatalError(msg, fname, spans[ind + 1]) + kwargs[argname] = args[ind] + else: + posargs += args + + return posargs, kwargs + + + def _get_included_content(self, fname, spans, includefname, content): + includefile = spans[0] is not None + out = [] + if self._linenums and not self._diverted: + if includefile or self._linenum_gfortran5: + out += linenumdir(0, includefname, _LINENUM_NEW_FILE) + else: + out += linenumdir(0, includefname) + outcont, ieval, peval = self._render(content) + ieval = _shiftinds(ieval, len(out)) + out += outcont + if self._linenums and not self._diverted and includefile: + out += linenumdir(spans[0][1], fname, _LINENUM_RETURN_TO_FILE) + return out, ieval, peval + + + def _define_macro(self, fname, spans, name, argexpr, content): + if argexpr is None: + args = [] + defaults = {} + varpos = None + varkw = None + else: + # Try to create a lambda function with the argument expression + self._evaluator.openscope() + lambdaexpr = 'lambda ' + argexpr + ': None' + try: + func = self._evaluate(lambdaexpr, fname, spans[0][0]) + except Exception as exc: + msg = "exception occured when evaluating argument expression "\ + "'{0}'".format(argexpr) + raise FyppFatalError(msg, fname, spans[0], exc) + self._evaluator.closescope() + try: + args, defaults, varpos, varkw = _GET_CALLABLE_ARGSPEC(func) + except Exception as exc: + msg = "invalid argument expression '{0}'".format(argexpr) + raise FyppFatalError(msg, fname, spans[0], exc) + named_args = args if varpos is None else args + [varpos] + named_args = named_args if varkw is None else named_args + [varkw] + for arg in named_args: + if arg in _RESERVED_NAMES or arg.startswith(_RESERVED_PREFIX): + msg = "invalid argument name '{0}'".format(arg) + raise FyppFatalError(msg, fname, spans[0]) + result = '' + try: + macro = _Macro( + name, fname, spans, args, defaults, varpos, varkw, content, + self, self._evaluator, self._evaluator.localscope) + self._define(name, macro) + except Exception as exc: + msg = "exception occured when defining macro '{0}'"\ + .format(name) + raise FyppFatalError(msg, fname, spans[0], exc) + if self._linenums and not self._diverted: + result = linenumdir(spans[1][1], fname) + return result + + + def _define_variable(self, fname, span, name, valstr): + result = '' + try: + if valstr is None: + expr = None + else: + expr = self._evaluate(valstr, fname, span[0]) + self._define(name, expr) + except Exception as exc: + msg = "exception occured when setting variable(s) '{0}' to '{1}'"\ + .format(name, valstr) + raise FyppFatalError(msg, fname, span, exc) + multiline = (span[0] != span[1]) + if self._linenums and not self._diverted and multiline: + result = linenumdir(span[1], fname) + return result + + + def _delete_variable(self, fname, span, name): + result = '' + try: + self._evaluator.undefine(name) + except Exception as exc: + msg = "exception occured when deleting variable(s) '{0}'"\ + .format(name) + raise FyppFatalError(msg, fname, span, exc) + multiline = (span[0] != span[1]) + if self._linenums and not self._diverted and multiline: + result = linenumdir(span[1], fname) + return result + + + def _add_global(self, fname, span, name): + result = '' + try: + self._evaluator.addglobal(name) + except Exception as exc: + msg = "exception occured when making variable(s) '{0}' global"\ + .format(name) + raise FyppFatalError(msg, fname, span, exc) + multiline = (span[0] != span[1]) + if self._linenums and not self._diverted and multiline: + result = linenumdir(span[1], fname) + return result + + + def _get_comment(self, fname, span): + if self._linenums and not self._diverted: + return linenumdir(span[1], fname) + return '' + + + def _get_muted_content(self, fname, spans, content): + self._render(content) + if self._linenums and not self._diverted: + return linenumdir(spans[-1][1], fname) + return '' + + + def _handle_stop(self, fname, span, msgstr): + try: + msg = str(self._evaluate(msgstr, fname, span[0])) + except Exception as exc: + msg = "exception occured when evaluating stop message '{0}'"\ + .format(msgstr) + raise FyppFatalError(msg, fname, span, exc) + raise FyppStopRequest(msg, fname, span) + + + def _handle_assert(self, fname, span, expr): + result = '' + try: + cond = bool(self._evaluate(expr, fname, span[0])) + except Exception as exc: + msg = "exception occured when evaluating assert condition '{0}'"\ + .format(expr) + raise FyppFatalError(msg, fname, span, exc) + if not cond: + msg = "Assertion failed ('{0}')".format(expr) + raise FyppStopRequest(msg, fname, span) + if self._linenums and not self._diverted: + result = linenumdir(span[1], fname) + return result + + + def _evaluate(self, expr, fname, linenr): + self._update_predef_globals(fname, linenr) + result = self._evaluator.evaluate(expr) + self._update_predef_globals(fname, linenr) + return result + + + def _update_predef_globals(self, fname, linenr): + self._evaluator.updatelocals( + _DATE_=time.strftime('%Y-%m-%d'), _TIME_=time.strftime('%H:%M:%S'), + _THIS_FILE_=fname, _THIS_LINE_=linenr + 1) + if not self._fixedposition: + self._evaluator.updateglobals(_FILE_=fname, _LINE_=linenr + 1) + + + def _define(self, var, value): + self._evaluator.define(var, value) + + + def _postprocess_eval_lines(self, output, eval_inds, eval_pos): + ilastproc = -1 + for ieval, ind in enumerate(eval_inds): + span, fname = eval_pos[ieval] + if ind <= ilastproc: + continue + iprev, eolprev = self._find_last_eol(output, ind) + inext, eolnext = self._find_next_eol(output, ind) + curline = self._glue_line(output, ind, iprev, eolprev, inext, + eolnext) + output[iprev + 1:inext] = [''] * (inext - iprev - 1) + output[ind] = self._postprocess_eval_line(curline, fname, span) + ilastproc = inext + + + @staticmethod + def _find_last_eol(output, ind): + 'Find last newline before current position.' + iprev = ind - 1 + while iprev >= 0: + eolprev = output[iprev].rfind('\n') + if eolprev != -1: + break + iprev -= 1 + else: + iprev = 0 + eolprev = -1 + return iprev, eolprev + + + @staticmethod + def _find_next_eol(output, ind): + 'Find last newline before current position.' + # find first eol after expr. evaluation + inext = ind + 1 + while inext < len(output): + eolnext = output[inext].find('\n') + if eolnext != -1: + break + inext += 1 + else: + inext = len(output) - 1 + eolnext = len(output[-1]) - 1 + return inext, eolnext + + + @staticmethod + def _glue_line(output, ind, iprev, eolprev, inext, eolnext): + 'Create line from parts between specified boundaries.' + curline_parts = [] + if iprev != ind: + curline_parts = [output[iprev][eolprev + 1:]] + output[iprev] = output[iprev][:eolprev + 1] + curline_parts.extend(output[iprev + 1:ind]) + curline_parts.extend(output[ind]) + curline_parts.extend(output[ind + 1:inext]) + if inext != ind: + curline_parts.append(output[inext][:eolnext + 1]) + output[inext] = output[inext][eolnext + 1:] + return ''.join(curline_parts) + + + def _postprocess_eval_line(self, evalline, fname, span): + lines = evalline.split('\n') + # If line ended on '\n', last element is ''. We remove it and + # add the trailing newline later manually. + trailing_newline = (lines[-1] == '') + if trailing_newline: + del lines[-1] + lnum = linenumdir(span[0], fname) if self._linenums else '' + clnum = lnum if self._contlinenums else '' + linenumsep = '\n' + lnum + clinenumsep = '\n' + clnum + foldedlines = [self._foldline(line) for line in lines] + outlines = [clinenumsep.join(lines) for lines in foldedlines] + result = linenumsep.join(outlines) + # Add missing trailing newline + if trailing_newline: + trailing = '\n' + if self._linenums: + # Last line was folded, but no linenums were generated for + # the continuation lines -> current line position is not + # in sync with the one calculated from the last line number + unsync = ( + len(foldedlines) and len(foldedlines[-1]) > 1 + and not self._contlinenums) + # Eval directive in source consists of more than one line + multiline = span[1] - span[0] > 1 + if unsync or multiline: + # For inline eval directives span[0] == span[1] + # -> next line is span[0] + 1 and not span[1] as for + # line eval directives + nextline = max(span[1], span[0] + 1) + trailing += linenumdir(nextline, fname) + else: + trailing = '' + return result + trailing + + + def _foldline(self, line): + if _COMMENTLINE_REGEXP.match(line) is None: + return self._linefolder(line) + return [line] + + +class Evaluator: + + '''Provides an isolated environment for evaluating Python expressions. + + It restricts the builtins which can be used within this environment to a + (hopefully safe) subset. Additionally it defines the functions which are + provided by the preprocessor for the eval directives. + + Args: + env (dict, optional): Initial definitions for the environment, defaults + to None. + ''' + + # Restricted builtins working in all supported Python verions. Version + # specific ones are added dynamically in _get_restricted_builtins(). + _RESTRICTED_BUILTINS = { + 'abs': builtins.abs, + 'all': builtins.all, + 'any': builtins.any, + 'bin': builtins.bin, + 'bool': builtins.bool, + 'bytearray': builtins.bytearray, + 'bytes': builtins.bytes, + 'chr': builtins.chr, + 'classmethod': builtins.classmethod, + 'complex': builtins.complex, + 'delattr': builtins.delattr, + 'dict': builtins.dict, + 'dir': builtins.dir, + 'divmod': builtins.divmod, + 'enumerate': builtins.enumerate, + 'filter': builtins.filter, + 'float': builtins.float, + 'format': builtins.format, + 'frozenset': builtins.frozenset, + 'getattr': builtins.getattr, + 'globals': builtins.globals, + 'hasattr': builtins.hasattr, + 'hash': builtins.hash, + 'hex': builtins.hex, + 'id': builtins.id, + 'int': builtins.int, + 'isinstance': builtins.isinstance, + 'issubclass': builtins.issubclass, + 'iter': builtins.iter, + 'len': builtins.len, + 'list': builtins.list, + 'locals': builtins.locals, + 'map': builtins.map, + 'max': builtins.max, + 'min': builtins.min, + 'next': builtins.next, + 'object': builtins.object, + 'oct': builtins.oct, + 'ord': builtins.ord, + 'pow': builtins.pow, + 'property': builtins.property, + 'range': builtins.range, + 'repr': builtins.repr, + 'reversed': builtins.reversed, + 'round': builtins.round, + 'set': builtins.set, + 'setattr': builtins.setattr, + 'slice': builtins.slice, + 'sorted': builtins.sorted, + 'staticmethod': builtins.staticmethod, + 'str': builtins.str, + 'sum': builtins.sum, + 'super': builtins.super, + 'tuple': builtins.tuple, + 'type': builtins.type, + 'vars': builtins.vars, + 'zip': builtins.zip, + } + + + def __init__(self, env=None): + + # Global scope + self._globals = env if env is not None else {} + + # Local scope(s) + self._locals = None + self._locals_stack = [] + + # Variables which are references to entries in global scope + self._globalrefs = None + self._globalrefs_stack = [] + + # Current scope (globals + locals in all embedding and in current scope) + self._scope = self._globals + + # Turn on restricted mode + self._restrict_builtins() + + + def evaluate(self, expr): + '''Evaluate a Python expression using the `eval()` builtin. + + Args: + expr (str): String represantion of the expression. + + Return: + Python object: Result of the expression evaluation. + ''' + result = eval(expr, self._scope) + return result + + + def import_module(self, module): + '''Import a module into the evaluator. + + Note: Import only trustworthy modules! Module imports are global, + therefore, importing a malicious module which manipulates other global + modules could affect code behaviour outside of the Evaluator as well. + + Args: + module (str): Python module to import. + + Raises: + FyppFatalError: If module could not be imported. + + ''' + rootmod = module.split('.', 1)[0] + try: + imported = __import__(module, self._scope) + self.define(rootmod, imported) + except Exception as exc: + msg = "failed to import module '{0}'".format(module) + raise FyppFatalError(msg, cause=exc) + + + def define(self, name, value): + '''Define a Python entity. + + Args: + name (str): Name of the entity. + value (Python object): Value of the entity. + + Raises: + FyppFatalError: If name starts with the reserved prefix or if it is + a reserved name. + ''' + varnames = self._get_variable_names(name) + if len(varnames) == 1: + value = (value,) + elif len(varnames) != len(value): + msg = 'value for tuple assignment has incompatible length' + raise FyppFatalError(msg) + for varname, varvalue in zip(varnames, value): + self._check_variable_name(varname) + if self._locals is None: + self._globals[varname] = varvalue + else: + if varname in self._globalrefs: + self._globals[varname] = varvalue + else: + self._locals[varname] = varvalue + self._scope[varname] = varvalue + + + def undefine(self, name): + '''Undefine a Python entity. + + Args: + name (str): Name of the entity to undefine. + + Raises: + FyppFatalError: If name starts with the reserved prefix or if it is + a reserved name. + ''' + varnames = self._get_variable_names(name) + for varname in varnames: + self._check_variable_name(varname) + deleted = False + if self._locals is None: + if varname in self._globals: + del self._globals[varname] + deleted = True + else: + if varname in self._locals: + del self._locals[varname] + del self._scope[varname] + deleted = True + elif varname in self._globalrefs and varname in self._globals: + del self._globals[varname] + del self._scope[varname] + deleted = True + if not deleted: + msg = "lookup for an erasable instance of '{0}' failed"\ + .format(varname) + raise FyppFatalError(msg) + + + def addglobal(self, name): + '''Define a given entity as global. + + Args: + name (str): Name of the entity to make global. + + Raises: + FyppFatalError: If entity name is invalid or if the current scope is + a local scope and entity is already defined in it. + ''' + varnames = self._get_variable_names(name) + for varname in varnames: + self._check_variable_name(varname) + if self._locals is not None: + if varname in self._locals: + msg = "variable '{0}' already defined in local scope"\ + .format(varname) + raise FyppFatalError(msg) + self._globalrefs.add(varname) + + + def updateglobals(self, **vardict): + '''Update variables in the global scope. + + This is a shortcut function to inject protected variables in the global + scope without extensive checks (as in define()). Vardict must not + contain any global entries which can be shadowed in local scopes + (e.g. should only contain variables with forbidden prefix). + + Args: + **vardict: variable defintions. + + ''' + self._scope.update(vardict) + if self._locals is not None: + self._globals.update(vardict) + + + def updatelocals(self, **vardict): + '''Update variables in the local scope. + + This is a shortcut function to inject variables in the local scope + without extensive checks (as in define()). Vardict must not contain any + entries which have been made global via addglobal() before. In order to + ensure this, updatelocals() should be called immediately after + openscope(), or with variable names, which are warrantedly not globals + (e.g variables starting with forbidden prefix) + + Args: + **vardict: variable defintions. + ''' + self._scope.update(vardict) + if self._locals is not None: + self._locals.update(vardict) + + + def openscope(self, customlocals=None): + '''Opens a new (embedded) scope. + + Args: + customlocals (dict): By default, the locals of the embedding scope + are visible in the new one. When this is not the desired + behaviour a dictionary of customized locals can be passed, + and those locals will become the only visible ones. + ''' + self._locals_stack.append(self._locals) + self._globalrefs_stack.append(self._globalrefs) + if customlocals is not None: + self._locals = customlocals.copy() + elif self._locals is not None: + self._locals = self._locals.copy() + else: + self._locals = {} + self._globalrefs = set() + self._scope = self._globals.copy() + self._scope.update(self._locals) + + + def closescope(self): + '''Close scope and restore embedding scope.''' + self._locals = self._locals_stack.pop(-1) + self._globalrefs = self._globalrefs_stack.pop(-1) + if self._locals is not None: + self._scope = self._globals.copy() + self._scope.update(self._locals) + else: + self._scope = self._globals + + + @property + def globalscope(self): + 'Dictionary of the global scope.' + return self._globals + + + @property + def localscope(self): + 'Dictionary of the current local scope.' + return self._locals + + + def _restrict_builtins(self): + builtindict = self._get_restricted_builtins() + builtindict['__import__'] = self._func_import + builtindict['defined'] = self._func_defined + builtindict['setvar'] = self._func_setvar + builtindict['getvar'] = self._func_getvar + builtindict['delvar'] = self._func_delvar + builtindict['globalvar'] = self._func_globalvar + builtindict['__getargvalues'] = self._func_getargvalues + self._globals['__builtins__'] = builtindict + + + @classmethod + def _get_restricted_builtins(cls): + bidict = dict(cls._RESTRICTED_BUILTINS) + major = sys.version_info[0] + if major == 2: + bidict['True'] = True + bidict['False'] = False + return bidict + + + @staticmethod + def _get_variable_names(varexpr): + lpar = varexpr.startswith('(') + rpar = varexpr.endswith(')') + if lpar != rpar: + msg = "unbalanced paranthesis around variable varexpr(s) in '{0}'"\ + .format(varexpr) + raise FyppFatalError(msg, None, None) + if lpar: + varexpr = varexpr[1:-1] + varnames = [s.strip() for s in varexpr.split(',')] + return varnames + + + @staticmethod + def _check_variable_name(varname): + if varname.startswith(_RESERVED_PREFIX): + msg = "Name '{0}' starts with reserved prefix '{1}'"\ + .format(varname, _RESERVED_PREFIX) + raise FyppFatalError(msg, None, None) + if varname in _RESERVED_NAMES: + msg = "Name '{0}' is reserved and can not be redefined"\ + .format(varname) + raise FyppFatalError(msg, None, None) + + + def _func_defined(self, var): + defined = var in self._scope + return defined + + + def _func_import(self, name, *_, **__): + module = self._scope.get(name, None) + if module is not None and isinstance(module, types.ModuleType): + return module + msg = "Import of module '{0}' via '__import__' not allowed".format(name) + raise ImportError(msg) + + + def _func_setvar(self, *namesvalues): + if len(namesvalues) % 2: + msg = 'setvar function needs an even number of arguments' + raise FyppFatalError(msg) + for ind in range(0, len(namesvalues), 2): + self.define(namesvalues[ind], namesvalues[ind + 1]) + + + def _func_getvar(self, name, defvalue=None): + if name in self._scope: + return self._scope[name] + return defvalue + + + def _func_delvar(self, *names): + for name in names: + self.undefine(name) + + + def _func_globalvar(self, *names): + for name in names: + self.addglobal(name) + + + @staticmethod + def _func_getargvalues(*args, **kwargs): + return list(args), kwargs + + + +class _Macro: + + '''Represents a user defined macro. + + This object should only be initiatied by a Renderer instance, as it + needs access to Renderers internal variables and methods. + + Args: + name (str): Name of the macro. + fname (str): The file where the macro was defined. + spans (str): Line spans of macro defintion. + argnames (list of str): Macro dummy arguments. + varpos (str): Name of variable positional argument or None. + varkw (str): Name of variable keyword argument or None. + content (list): Content of the macro as tree. + renderer (Renderer): Renderer to use for evaluating macro content. + localscope (dict): Dictionary with local variables, which should be used + the local scope, when the macro is called. Default: None (empty + local scope). + ''' + + def __init__(self, name, fname, spans, argnames, defaults, varpos, varkw, + content, renderer, evaluator, localscope=None): + self._name = name + self._fname = fname + self._spans = spans + self._argnames = argnames + self._defaults = defaults + self._varpos = varpos + self._varkw = varkw + self._content = content + self._renderer = renderer + self._evaluator = evaluator + self._localscope = localscope if localscope is not None else {} + + + def __call__(self, *args, **keywords): + argdict = self._process_arguments(args, keywords) + self._evaluator.openscope(customlocals=self._localscope) + self._evaluator.updatelocals(**argdict) + output = self._renderer.render(self._content, divert=True, + fixposition=True) + self._evaluator.closescope() + if output.endswith('\n'): + return output[:-1] + return output + + + def _process_arguments(self, args, keywords): + kwdict = dict(keywords) + argdict = {} + nargs = min(len(args), len(self._argnames)) + for iarg in range(nargs): + argdict[self._argnames[iarg]] = args[iarg] + if nargs < len(args): + if self._varpos is None: + msg = "macro '{0}' called with too many positional arguments "\ + "(expected: {1}, received: {2})"\ + .format(self._name, len(self._argnames), len(args)) + raise FyppFatalError(msg, self._fname, self._spans[0]) + else: + argdict[self._varpos] = list(args[nargs:]) + elif self._varpos is not None: + argdict[self._varpos] = [] + for argname in self._argnames[:nargs]: + if argname in kwdict: + msg = "got multiple values for argument '{0}'".format(argname) + raise FyppFatalError(msg, self._fname, self._spans[0]) + if nargs < len(self._argnames): + for argname in self._argnames[nargs:]: + if argname in kwdict: + argdict[argname] = kwdict.pop(argname) + elif argname in self._defaults: + argdict[argname] = self._defaults[argname] + else: + msg = "macro '{0}' called without mandatory positional "\ + "argument '{1}'".format(self._name, argname) + raise FyppFatalError(msg, self._fname, self._spans[0]) + if kwdict and self._varkw is None: + kwstr = "', '".join(kwdict.keys()) + msg = "macro '{0}' called with unknown keyword argument(s) '{1}'"\ + .format(self._name, kwstr) + raise FyppFatalError(msg, self._fname, self._spans[0]) + if self._varkw is not None: + argdict[self._varkw] = kwdict + return argdict + + + +class Processor: + + '''Connects various objects with each other to create a processor. + + Args: + parser (Parser, optional): Parser to use for parsing text. If None + (default), `Parser()` is used. + builder (Builder, optional): Builder to use for building the tree + representation of the text. If None (default), `Builder()` is used. + renderer (Renderer, optional): Renderer to use for rendering the + output. If None (default), `Renderer()` is used with a default + Evaluator(). + evaluator (Evaluator, optional): Evaluator to use for evaluating Python + expressions. If None (default), `Evaluator()` is used. + ''' + + def __init__(self, parser=None, builder=None, renderer=None, + evaluator=None): + self._parser = Parser() if parser is None else parser + self._builder = Builder() if builder is None else builder + if renderer is None: + evaluator = Evaluator() if evaluator is None else evaluator + self._renderer = Renderer(evaluator) + else: + self._renderer = renderer + + self._parser.handle_include = self._builder.handle_include + self._parser.handle_endinclude = self._builder.handle_endinclude + self._parser.handle_if = self._builder.handle_if + self._parser.handle_else = self._builder.handle_else + self._parser.handle_elif = self._builder.handle_elif + self._parser.handle_endif = self._builder.handle_endif + self._parser.handle_eval = self._builder.handle_eval + self._parser.handle_text = self._builder.handle_text + self._parser.handle_def = self._builder.handle_def + self._parser.handle_enddef = self._builder.handle_enddef + self._parser.handle_set = self._builder.handle_set + self._parser.handle_del = self._builder.handle_del + self._parser.handle_global = self._builder.handle_global + self._parser.handle_for = self._builder.handle_for + self._parser.handle_endfor = self._builder.handle_endfor + self._parser.handle_call = self._builder.handle_call + self._parser.handle_nextarg = self._builder.handle_nextarg + self._parser.handle_endcall = self._builder.handle_endcall + self._parser.handle_comment = self._builder.handle_comment + self._parser.handle_mute = self._builder.handle_mute + self._parser.handle_endmute = self._builder.handle_endmute + self._parser.handle_stop = self._builder.handle_stop + self._parser.handle_assert = self._builder.handle_assert + + + def process_file(self, fname): + '''Processeses a file. + + Args: + fname (str): Name of the file to process. + + Returns: + str: Processed content. + ''' + self._parser.parsefile(fname) + return self._render() + + + def process_text(self, txt): + '''Processes a string. + + Args: + txt (str): Text to process. + + Returns: + str: Processed content. + ''' + self._parser.parse(txt) + return self._render() + + + def _render(self): + output = self._renderer.render(self._builder.tree) + self._builder.reset() + return ''.join(output) + + +class Fypp: + + '''Fypp preprocessor. + + You can invoke it like :: + + tool = fypp.Fypp() + tool.process_file('file.in', 'file.out') + + to initialize Fypp with default options, process `file.in` and write the + result to `file.out`. If the input should be read from a string, the + ``process_text()`` method can be used:: + + tool = fypp.Fypp() + output = tool.process_text('#:if DEBUG > 0\\nprint *, "DEBUG"\\n#:endif\\n') + + If you want to fine tune Fypps behaviour, pass a customized `FyppOptions`_ + instance at initialization:: + + options = fypp.FyppOptions() + options.fixed_format = True + tool = fypp.Fypp(options) + + Alternatively, you can use the command line parser ``optparse.OptionParser`` + to set options for Fypp. The function ``get_option_parser()`` returns you a + default option parser. You can then use its ``parse_args()`` method to + obtain settings by reading the command line arguments:: + + optparser = fypp.get_option_parser() + options, leftover = optparser.parse_args() + tool = fypp.Fypp(options) + + The command line options can also be passed directly as a list when + calling ``parse_args()``:: + + args = ['-DDEBUG=0', 'input.fpp', 'output.f90'] + optparser = fypp.get_option_parser() + options, leftover = optparser.parse_args(args=args) + tool = fypp.Fypp(options) + + + Args: + options (object): Object containing the settings for Fypp. You typically + would pass a customized `FyppOptions`_ instance or an + ``optparse.Values`` object as returned by the option parser. If not + present, the default settings in `FyppOptions`_ are used. + ''' + + def __init__(self, options=None): + syspath = self._get_syspath_without_scriptdir() + self._adjust_syspath(syspath) + if options is None: + options = FyppOptions() + evaluator = Evaluator() + self._encoding = options.encoding + if options.modules: + self._import_modules(options.modules, evaluator, syspath, + options.moduledirs) + if options.defines: + self._apply_definitions(options.defines, evaluator) + parser = Parser(includedirs=options.includes, encoding=self._encoding) + builder = Builder() + + fixed_format = options.fixed_format + linefolding = not options.no_folding + if linefolding: + folding = 'brute' if fixed_format else options.folding_mode + linelength = 72 if fixed_format else options.line_length + indentation = 5 if fixed_format else options.indentation + prefix = '&' + suffix = '' if fixed_format else '&' + linefolder = FortranLineFolder(linelength, indentation, folding, + prefix, suffix) + else: + linefolder = DummyLineFolder() + linenums = options.line_numbering + contlinenums = (options.line_numbering_mode != 'nocontlines') + self._create_parent_folder = options.create_parent_folder + renderer = Renderer( + evaluator, linenums=linenums, contlinenums=contlinenums, + linenumformat=options.line_marker_format, linefolder=linefolder) + self._preprocessor = Processor(parser, builder, renderer) + + + def process_file(self, infile, outfile=None): + '''Processes input file and writes result to output file. + + Args: + infile (str): Name of the file to read and process. If its value is + '-', input is read from stdin. + outfile (str, optional): Name of the file to write the result to. + If its value is '-', result is written to stdout. If not + present, result will be returned as string. + env (dict, optional): Additional definitions for the evaluator. + + Returns: + str: Result of processed input, if no outfile was specified. + ''' + infile = STDIN if infile == '-' else infile + output = self._preprocessor.process_file(infile) + if outfile is None: + return output + if outfile == '-': + outfile = sys.stdout + else: + outfile = _open_output_file(outfile, self._encoding, + self._create_parent_folder) + outfile.write(output) + if outfile != sys.stdout: + outfile.close() + return None + + + def process_text(self, txt): + '''Processes a string. + + Args: + txt (str): String to process. + env (dict, optional): Additional definitions for the evaluator. + + Returns: + str: Processed content. + ''' + return self._preprocessor.process_text(txt) + + + @staticmethod + def _apply_definitions(defines, evaluator): + for define in defines: + words = define.split('=', 2) + name = words[0] + value = None + if len(words) > 1: + try: + value = evaluator.evaluate(words[1]) + except Exception as exc: + msg = "exception at evaluating '{0}' in definition for " \ + "'{1}'".format(words[1], name) + raise FyppFatalError(msg, cause=exc) + evaluator.define(name, value) + + + def _import_modules(self, modules, evaluator, syspath, moduledirs): + lookuppath = [] + if moduledirs is not None: + lookuppath += [os.path.abspath(moddir) for moddir in moduledirs] + lookuppath.append(os.path.abspath('.')) + lookuppath += syspath + self._adjust_syspath(lookuppath) + for module in modules: + evaluator.import_module(module) + self._adjust_syspath(syspath) + + + @staticmethod + def _get_syspath_without_scriptdir(): + '''Remove the folder of the fypp binary from the search path''' + syspath = list(sys.path) + scriptdir = os.path.abspath(os.path.dirname(sys.argv[0])) + if os.path.abspath(syspath[0]) == scriptdir: + del syspath[0] + return syspath + + + @staticmethod + def _adjust_syspath(syspath): + sys.path = syspath + + +class FyppOptions(optparse.Values): + + '''Container for Fypp options with default values. + + Attributes: + defines (list of str): List of variable definitions in the form of + 'VARNAME=VALUE'. Default: [] + includes (list of str): List of paths to search when looking for include + files. Default: [] + line_numbering (bool): Whether line numbering directives should appear + in the output. Default: False + line_numbering_mode (str): Line numbering mode 'full' or 'nocontlines'. + Default: 'full'. + line_marker_format (str): Line marker format. Currently 'cpp' and + 'gfortran5' are supported. Later fixes the line marker handling bug + introduced in GFortran 5. Default: 'cpp'. + line_length (int): Length of output lines. Default: 132. + folding_mode (str): Folding mode 'smart', 'simple' or 'brute'. Default: + 'smart'. + no_folding (bool): Whether folding should be suppresed. Default: False. + indentation (int): Indentation in continuation lines. Default: 4. + modules (list of str): Modules to import at initialization. Default: []. + moduledirs (list of str): Module lookup directories for importing user + specified modules. The specified paths are looked up *before* the + standard module locations in sys.path. + fixed_format (bool): Whether input file is in fixed format. + Default: False. + encoding (str): Character encoding for reading/writing files. Allowed + values are Pythons codec identifiers, e.g. 'ascii', 'utf-8', etc. + Default: 'utf-8'. Reading from stdin and writing to stdout is always + encoded according to the current locale and is not affected by this + setting. + create_parent_folder (bool): Whether the parent folder for the output + file should be created if it does not exist. Default: False. + ''' + + def __init__(self): + optparse.Values.__init__(self) + self.defines = [] + self.includes = [] + self.line_numbering = False + self.line_numbering_mode = 'full' + self.line_marker_format = 'cpp' + self.line_length = 132 + self.folding_mode = 'smart' + self.no_folding = False + self.indentation = 4 + self.modules = [] + self.moduledirs = [] + self.fixed_format = False + self.encoding = 'utf-8' + self.create_parent_folder = False + + +class FortranLineFolder: + + '''Implements line folding with Fortran continuation lines. + + Args: + maxlen (int, optional): Maximal line length (default: 132). + indent (int, optional): Indentation for continuation lines (default: 4). + method (str, optional): Folding method with following options: + + * ``brute``: folding with maximal length of continuation lines, + * ``simple``: indents with respect of indentation of first line, + * ``smart``: like ``simple``, but tries to fold at whitespaces. + + prefix (str, optional): String to use at the beginning of a continuation + line (default: '&'). + suffix (str, optional): String to use at the end of the line preceeding + a continuation line (default: '&') + ''' + + def __init__(self, maxlen=132, indent=4, method='smart', prefix='&', + suffix='&'): + # Line length should be long enough that contintuation lines can host at + # east one character apart of indentation and two continuation signs + minmaxlen = indent + len(prefix) + len(suffix) + 1 + if maxlen < minmaxlen: + msg = 'Maximal line length less than {0} when using an indentation'\ + ' of {1}'.format(minmaxlen, indent) + raise FyppFatalError(msg) + self._maxlen = maxlen + self._indent = indent + self._prefix = ' ' * self._indent + prefix + self._suffix = suffix + if method not in ['brute', 'smart', 'simple']: + raise FyppFatalError('invalid folding type') + if method == 'brute': + self._inherit_indent = False + self._fold_position_finder = self._get_maximal_fold_pos + elif method == 'simple': + self._inherit_indent = True + self._fold_position_finder = self._get_maximal_fold_pos + elif method == 'smart': + self._inherit_indent = True + self._fold_position_finder = self._get_smart_fold_pos + + + def __call__(self, line): + '''Folds a line. + + Can be directly called to return the list of folded lines:: + + linefolder = FortranLineFolder(maxlen=10) + linefolder(' print *, "some Fortran line"') + + Args: + line (str): Line to fold. + + Returns: + list of str: Components of folded line. They should be + assembled via ``\\n.join()`` to obtain the string + representation. + ''' + if self._maxlen < 0 or len(line) <= self._maxlen: + return [line] + if self._inherit_indent: + indent = len(line) - len(line.lstrip()) + prefix = ' ' * indent + self._prefix + else: + indent = 0 + prefix = self._prefix + suffix = self._suffix + return self._split_line(line, self._maxlen, prefix, suffix, + self._fold_position_finder) + + + @staticmethod + def _split_line(line, maxlen, prefix, suffix, fold_position_finder): + # length of continuation lines with 1 or two continuation chars. + maxlen1 = maxlen - len(prefix) + maxlen2 = maxlen1 - len(suffix) + start = 0 + end = fold_position_finder(line, start, maxlen - len(suffix)) + result = [line[start:end] + suffix] + while end < len(line) - maxlen1: + start = end + end = fold_position_finder(line, start, start + maxlen2) + result.append(prefix + line[start:end] + suffix) + result.append(prefix + line[end:]) + return result + + + @staticmethod + def _get_maximal_fold_pos(_, __, end): + return end + + + @staticmethod + def _get_smart_fold_pos(line, start, end): + linelen = end - start + ispace = line.rfind(' ', start, end) + # The space we waste for smart folding should be max. 1/3rd of the line + if ispace != -1 and ispace >= start + (2 * linelen) // 3: + return ispace + return end + + +class DummyLineFolder: + + '''Implements a dummy line folder returning the line unaltered.''' + + def __call__(self, line): + '''Returns the entire line without any folding. + + Returns: + list of str: Components of folded line. They should be + assembled via ``\\n.join()`` to obtain the string + representation. + ''' + return [line] + + +def get_option_parser(): + '''Returns an option parser for the Fypp command line tool. + + Returns: + OptionParser: Parser which can create an optparse.Values object with + Fypp settings based on command line arguments. + ''' + defs = FyppOptions() + fypp_name = 'fypp' + fypp_desc = 'Preprocesses source code with Fypp directives. The input is '\ + 'read from INFILE (default: \'-\', stdin) and written to '\ + 'OUTFILE (default: \'-\', stdout).' + fypp_version = fypp_name + ' ' + VERSION + usage = '%prog [options] [INFILE] [OUTFILE]' + parser = optparse.OptionParser(prog=fypp_name, description=fypp_desc, + version=fypp_version, usage=usage) + msg = 'define variable, value is interpreted as ' \ + 'Python expression (e.g \'-DDEBUG=1\' sets DEBUG to the ' \ + 'integer 1) or set to None if ommitted' + parser.add_option('-D', '--define', action='append', dest='defines', + metavar='VAR[=VALUE]', default=defs.defines, help=msg) + msg = 'add directory to the search paths for include files' + parser.add_option('-I', '--include', action='append', dest='includes', + metavar='INCDIR', default=defs.includes, help=msg) + msg = 'import a python module at startup (import only trustworthy modules '\ + 'as they have access to an **unrestricted** Python environment!)' + parser.add_option('-m', '--module', action='append', dest='modules', + metavar='MOD', default=defs.modules, help=msg) + msg = 'directory to be searched for user imported modules before '\ + 'looking up standard locations in sys.path' + parser.add_option('-M', '--module-dir', action='append', + dest='moduledirs', metavar='MODDIR', + default=defs.moduledirs, help=msg) + msg = 'emit line numbering markers' + parser.add_option('-n', '--line-numbering', action='store_true', + dest='line_numbering', default=defs.line_numbering, + help=msg) + msg = 'line numbering mode, \'full\' (default): line numbering '\ + 'markers generated whenever source and output lines are out '\ + 'of sync, \'nocontlines\': line numbering markers omitted '\ + 'for continuation lines' + parser.add_option('-N', '--line-numbering-mode', metavar='MODE', + choices=['full', 'nocontlines'], + default=defs.line_numbering_mode, + dest='line_numbering_mode', help=msg) + msg = 'line numbering marker format, \'cpp\' (default): GNU cpp format, '\ + '\'gfortran5\': modified markers to work around bug in GFortran 5 '\ + 'and above' + parser.add_option('--line-marker-format', metavar='FMT', + choices=['cpp', 'gfortran5'], dest='line_marker_format', + default=defs.line_marker_format, help=msg) + msg = 'maximal line length (default: 132), lines modified by the '\ + 'preprocessor are folded if becoming longer' + parser.add_option('-l', '--line-length', type=int, metavar='LEN', + dest='line_length', default=defs.line_length, help=msg) + msg = 'line folding mode, \'smart\' (default): indentation context '\ + 'and whitespace aware, \'simple\': indentation context aware, '\ + '\'brute\': mechnical folding' + parser.add_option('-f', '--folding-mode', metavar='MODE', + choices=['smart', 'simple', 'brute'], dest='folding_mode', + default=defs.folding_mode, help=msg) + msg = 'suppress line folding' + parser.add_option('-F', '--no-folding', action='store_true', + dest='no_folding', default=defs.no_folding, help=msg) + msg = 'indentation to use for continuation lines (default 4)' + parser.add_option('--indentation', type=int, metavar='IND', + dest='indentation', default=defs.indentation, help=msg) + msg = 'produce fixed format output (any settings for options '\ + '--line-length, --folding-method and --indentation are ignored)' + parser.add_option('--fixed-format', action='store_true', + dest='fixed_format', default=defs.fixed_format, help=msg) + msg = 'character encoding for reading/writing files. Default: \'utf-8\'. '\ + 'Note: reading from stdin and writing to stdout is encoded '\ + 'according to the current locale and is not affected by this setting.' + parser.add_option('--encoding', metavar='ENC', default=defs.encoding, + help=msg) + msg = 'create parent folders of the output file if they do not exist' + parser.add_option('-p', '--create-parents', action='store_true', + dest='create_parent_folder', + default=defs.create_parent_folder, help=msg) + return parser + + +def run_fypp(): + '''Run the Fypp command line tool.''' + options = FyppOptions() + optparser = get_option_parser() + opts, leftover = optparser.parse_args(values=options) + infile = leftover[0] if len(leftover) > 0 else '-' + outfile = leftover[1] if len(leftover) > 1 else '-' + try: + tool = Fypp(opts) + tool.process_file(infile, outfile) + except FyppStopRequest as exc: + sys.stderr.write(_formatted_exception(exc)) + sys.exit(USER_ERROR_EXIT_CODE) + except FyppFatalError as exc: + sys.stderr.write(_formatted_exception(exc)) + sys.exit(ERROR_EXIT_CODE) + + +def linenumdir(linenr, fname, flag=None): + '''Returns a line numbering directive. + + Args: + linenr (int): Line nr (starting with 0). + fname (str): File name. + ''' + if flag is None: + return '# {0} "{1}"\n'.format(linenr + 1, fname) + return '# {0} "{1}" {2}\n'.format(linenr + 1, fname, flag) + + +def _shiftinds(inds, shift): + return [ind + shift for ind in inds] + + +def _open_input_file(inpfile, encoding=None): + try: + inpfp = io.open(inpfile, 'r', encoding=encoding) + except IOError as exc: + msg = "Failed to open file '{0}' for read".format(inpfile) + raise FyppFatalError(msg, cause=exc) + return inpfp + + +def _open_output_file(outfile, encoding=None, create_parents=False): + if create_parents: + parentdir = os.path.abspath(os.path.dirname(outfile)) + if not os.path.exists(parentdir): + try: + os.makedirs(parentdir) + except OSError as exc: + if exc.errno != errno.EEXIST: + msg = "Folder '{0}' can not be created"\ + .format(parentdir) + raise FyppFatalError(msg, cause=exc) + try: + outfp = io.open(outfile, 'w', encoding=encoding) + except IOError as exc: + msg = "Failed to open file '{0}' for write".format(outfile) + raise FyppFatalError(msg, cause=exc) + return outfp + + +def _get_callable_argspec_py2(func): + argspec = inspect.getargspec(func) + varpos = argspec.varargs + varkw = argspec.keywords + args = argspec.args + tuplearg = False + for elem in args: + tuplearg = tuplearg or isinstance(elem, list) + if tuplearg: + msg = 'tuple argument(s) found' + raise FyppFatalError(msg) + defaults = {} + if argspec.defaults is not None: + for ind, default in enumerate(argspec.defaults): + iarg = len(args) - len(argspec.defaults) + ind + defaults[args[iarg]] = default + return args, defaults, varpos, varkw + + +def _get_callable_argspec_py3(func): + sig = inspect.signature(func) + args = [] + defaults = {} + varpos = None + varkw = None + for param in sig.parameters.values(): + if param.kind == param.POSITIONAL_OR_KEYWORD: + args.append(param.name) + if param.default != param.empty: + defaults[param.name] = param.default + elif param.kind == param.VAR_POSITIONAL: + varpos = param.name + elif param.kind == param.VAR_KEYWORD: + varkw = param.name + else: + msg = "argument '{0}' has invalid argument type".format(param.name) + raise FyppFatalError(msg) + return args, defaults, varpos, varkw + + +# Signature objects are available from Python 3.3 (and deprecated from 3.5) + +if sys.version_info[0] >= 3 and sys.version_info[1] >= 3: + _GET_CALLABLE_ARGSPEC = _get_callable_argspec_py3 +else: + _GET_CALLABLE_ARGSPEC = _get_callable_argspec_py2 + + +def _blank_match(match): + size = match.end() - match.start() + return " " * size + + +def _argsplit_fortran(argtxt): + txt = _INLINE_EVAL_REGION_REGEXP.sub(_blank_match, argtxt) + splitpos = [-1] + quote = None + closing_brace_stack = [] + closing_brace = None + for ind, char in enumerate(txt): + if quote: + if char == quote: + quote = None + continue + if char in _QUOTES_FORTRAN: + quote = char + continue + if char in _OPENING_BRACKETS_FORTRAN: + closing_brace_stack.append(closing_brace) + ind = _OPENING_BRACKETS_FORTRAN.index(char) + closing_brace = _CLOSING_BRACKETS_FORTRAN[ind] + continue + if char in _CLOSING_BRACKETS_FORTRAN: + if char == closing_brace: + closing_brace = closing_brace_stack.pop(-1) + continue + else: + msg = "unexpected closing delimiter '{0}' in expression '{1}' "\ + "at position {2}".format(char, argtxt, ind + 1) + raise FyppFatalError(msg) + if not closing_brace and char == _ARGUMENT_SPLIT_CHAR_FORTRAN: + splitpos.append(ind) + if quote or closing_brace: + msg = "open quotes or brackets in expression '{0}'".format(argtxt) + raise FyppFatalError(msg) + splitpos.append(len(txt)) + fragments = [argtxt[start + 1 : end] + for start, end in zip(splitpos, splitpos[1:])] + return fragments + + +def _formatted_exception(exc): + error_header_formstr = '{file}:{line}: ' + error_body_formstr = 'error: {errormsg} [{errorclass}]' + if not isinstance(exc, FyppError): + return error_body_formstr.format( + errormsg=str(exc), errorclass=exc.__class__.__name__) + out = [] + if exc.fname is not None: + if exc.span[1] > exc.span[0] + 1: + line = '{0}-{1}'.format(exc.span[0] + 1, exc.span[1]) + else: + line = '{0}'.format(exc.span[0] + 1) + out.append(error_header_formstr.format(file=exc.fname, line=line)) + out.append(error_body_formstr.format(errormsg=exc.msg, + errorclass=exc.__class__.__name__)) + if exc.cause is not None: + out.append('\n' + _formatted_exception(exc.cause)) + out.append('\n') + return ''.join(out) + + +if __name__ == '__main__': + run_fypp() diff --git a/sktools/CMakeLists.txt b/sktools/CMakeLists.txt index a63ab63e..935a70bb 100644 --- a/sktools/CMakeLists.txt +++ b/sktools/CMakeLists.txt @@ -1,6 +1,6 @@ set(cmake-command " execute_process( - COMMAND ${PYTHON_INTERPRETER} setup.py install --prefix=$ENV{DESTDIR}/${CMAKE_INSTALL_PREFIX} + COMMAND ${PYTHON_INTERPRETER} -m pip install --no-deps --prefix $ENV{DESTDIR}/${CMAKE_INSTALL_PREFIX} . WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) ") diff --git a/sktools/bin/collectwavecoeffs b/sktools/bin/collectwavecoeffs deleted file mode 100755 index 7de705d0..00000000 --- a/sktools/bin/collectwavecoeffs +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env python3 - -'''Collects coefficient information for waveplot.''' - - -import os.path - -from sktools.common import ANGMOM_TO_SHELL, writefloats -from sktools.taggedfile import TaggedFile -from sktools.skdef import Skdef -from sktools.oldskfile import OldSKFile - - -USAGE = \ - '''Collects coefficient information for waveplot. It iterates over the - elements defined in skdefs.py and collects the wave function coefficients - and other information necessary for waveplot. The homonuclear SK-files for - those elements must have been created already. If it is missing, the given - element will be ignored. - ''' - - -def writecoeffs(fp, elem, atomconfig, homoskname, wavecompdir): - '''Writes element-specific input, processed by Waveplot. - - Args: - - fp (file object): file object to write to - elem (str): element name to fetch information for - atomconfig (AtomConfig): represents the configuration of a free atom - homoskname (str): pathname of homonuclear Slater-Koster file - wavecompdir (str): path to calculation of the compressed atom - - ''' - - homosk = OldSKFile.fromfile(homoskname, True) - cutoff = homosk.nr * homosk.dr / 2.0 - fp.write('{} {{\n'.format(elem)) - fp.write(' AtomicNumber = {:d}\n'.format(atomconfig.znuc)) - for nn, ll in atomconfig.valenceorbs: - coeffsname = 'coeffs_{:02d}{:1s}.tag'.format(nn, ANGMOM_TO_SHELL[ll]) - coeffs = TaggedFile.fromfile(os.path.join(wavecompdir, coeffsname), - transpose=True) - fp.write(' Orbital {\n') - fp.write(' AngularMomentum = {:d}\n'.format(ll)) - fp.write(' Occupation = {:.1f}\n'.format(coeffs['occupation'])) - fp.write(' Cutoff = {:5.2f}\n'.format(cutoff)) - fp.write(' Exponents {\n') - writefloats(fp, coeffs['exponents'], indent=6, numperline=3, - formstr='{:21.12E}') - fp.write(' }\n') - fp.write(' Coefficients {\n') - writefloats(fp, coeffs['coefficients'], indent=3, numperline=3, - formstr='{:21.12E}') - fp.write(' }\n') - fp.write(' }\n') - fp.write('}\n') - - -def main(): - '''Main driver routine.''' - - skdefs = Skdef.fromfile('skdefs.py') - atomconfigs = skdefs.atomconfigs - elems = atomconfigs.keys() - - with open('wfc.hsd', 'w') as fp: - - for elem in elems: - homoskname = '{elem}-{elem}.skf'.format(elem=elem) - wavecompdir = os.path.join(elem, 'wavecomp') - filespresent = (os.path.exists(homoskname) - and os.path.exists(wavecompdir)) - if not filespresent: - print('*** Skipping: ', elem) - continue - - print('*** Processing: ', elem) - atomconfig = atomconfigs[elem] - writecoeffs(fp, elem, atomconfig, homoskname, wavecompdir) - - -if __name__ == '__main__': - main() diff --git a/sktools/bin/skmanip b/sktools/bin/skmanip deleted file mode 100755 index eba0784d..00000000 --- a/sktools/bin/skmanip +++ /dev/null @@ -1,119 +0,0 @@ -#!/usr/bin/env python3 - -''' - -''' - - -import sys -import argparse -import re -import xml.etree.ElementTree as etree -from sktools import PACKAGE_VERSION -import sktools.common as sc -from sktools.oldskfile import OldSKFile - -SCRIPTNAME = sc.get_script_name() - - -FNAME_PATTERN = re.compile("(?P\w+)-(?P\w+)\.skf") - - -def main(): - parser, subparsers = get_parser_and_subparser_container() - setup_parser_main(parser) - common = get_common_parser() - setup_parser_getdoc(subparsers, common, run_getdoc) - setup_parser_setdoc(subparsers, common, run_setdoc) - parse_command_line_and_run_subcommand(parser) - - -def run_getdoc(args): - skfile = args.skfile - if args.sktype == "auto": - homo = is_homo_file(skfile) - else: - homo = (args.sktype == "homo") - sk = OldSKFile.fromfile(skfile, homo) - doc = sk.documentation - fobj = sys.stdout if args.file == "-" else args.file - fp, tobeclosed = sc.openfile(fobj, "w") - fp.write(etree.tostring(doc, encoding="UTF-8").decode("UTF-8")) - if tobeclosed: - fp.close() - -def run_setdoc(args): - skfile = args.skfile - if args.sktype == "auto": - homo = is_homo_file(skfile) - else: - homo = (args.sktype == "homo") - sk = OldSKFile.fromfile(skfile, homo) - fobj = sys.stdin if args.file == "-" else args.file - fp, tobeclosed = sc.openfile(fobj, "r") - xml = fp.read() - if tobeclosed: - fp.close() - doc = etree.fromstring(xml) - sk.documentation = doc - sk.tofile(skfile) - - -def is_homo_file(filename): - match = FNAME_PATTERN.match(filename) - if match: - homo = (match.group("elem1") == match.group("elem2")) - else: - homo = False - return homo - - -def get_parser_and_subparser_container(): - parser = argparse.ArgumentParser( - description="General tool for manipulating SK-tables.") - subparsers = parser.add_subparsers(title="available subcommands", - help="") - return parser, subparsers - - -def get_common_parser(): - """Common settings for all one-center calculations.""" - common = argparse.ArgumentParser(add_help=False) - common.add_argument("skfile", help="skfile to process.") - common.add_argument( - "-t", "--type", dest="sktype", choices=[ "homo", "hetero", "auto" ], - default="auto", help="Type of skfile (default: auto)") - common.add_argument( - "-f", "--file", default="-", - help="Reads/writes from/into file instead using stdin/stderr") - return common - - -def setup_parser_main(parser): - parser.add_argument("--version", action="version", - version="skmanip {}".format(PACKAGE_VERSION)) - - -def setup_parser_getdoc(subparsers, common, target_function): - parser = subparsers.add_parser("get_documentation", parents=[ common ], - help="Extracts the documentation into a file") - parser.set_defaults(func=target_function) - - -def setup_parser_setdoc(subparsers, common, target_function): - parser = subparsers.add_parser("set_documentation", parents=[ common ], - help="Replaces the documentation in an SK-file") - parser.set_defaults(func=target_function) - - -def parse_command_line_and_run_subcommand(parser): - args = parser.parse_args() - args.func(args) - - -if __name__ == "__main__": - try: - sc.check_version() - main() - except sc.SkgenException as ex: - sc.fatalerror(str(ex)) diff --git a/sktools/pyproject.toml b/sktools/pyproject.toml index 2a03af9c..b163f45f 100644 --- a/sktools/pyproject.toml +++ b/sktools/pyproject.toml @@ -1,3 +1,3 @@ [build-system] -requires = ['setuptools', 'wheel', 'numpy'] +requires = ['setuptools', 'wheel', 'numpy', 'scipy'] build-backend = 'setuptools.build_meta' \ No newline at end of file diff --git a/sktools/setup.cfg b/sktools/setup.cfg index e6dbaa61..e0d83810 100644 --- a/sktools/setup.cfg +++ b/sktools/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = sktools -version = 22.1 +version = 0.2 author = DFTB+ developers url = http://www.dftbplus.org description = Tools to Generate Electronic SK-parameters @@ -21,11 +21,17 @@ packages = sktools.hsd sktools.calculators sktools.skgen -scripts = - bin/collectspinw - bin/collectwavecoeffs - bin/skdiff - bin/skgen + sktools.scripts install_requires = numpy + scipy + +[options.entry_points] +console_scripts = + collectspinw = sktools.scripts.collectspinw:main + collectwavecoeffs = sktools.scripts.collectwavecoeffs:main + skdiff = sktools.scripts.skdiff:main + skgen = sktools.scripts.skgen:main + skmanip = sktools.scripts.skmanip:main + python_requires = >=3.2 diff --git a/sktools/src/sktools/__init__.py b/sktools/src/sktools/__init__.py index 8903e09f..92858d5f 100644 --- a/sktools/src/sktools/__init__.py +++ b/sktools/src/sktools/__init__.py @@ -1 +1 @@ -PACKAGE_VERSION = '22.1' +PACKAGE_VERSION = '0.2' diff --git a/sktools/src/sktools/calculators/gridatom.py b/sktools/src/sktools/calculators/gridatom.py deleted file mode 100644 index 20b10c9c..00000000 --- a/sktools/src/sktools/calculators/gridatom.py +++ /dev/null @@ -1 +0,0 @@ -__author__ = 'aradi' diff --git a/sktools/src/sktools/calculators/sktwocnt.py b/sktools/src/sktools/calculators/sktwocnt.py index 8945e5b5..c58a56aa 100644 --- a/sktools/src/sktools/calculators/sktwocnt.py +++ b/sktools/src/sktools/calculators/sktwocnt.py @@ -2,14 +2,17 @@ import shelve import subprocess as subproc import numpy as np -import sktools.hsd as hsd +from sktools import hsd import sktools.hsd.converter as conv import sktools.common as sc from sktools import twocenter_grids from sktools import radial_grid -AVAILABLE_FUNCTIONALS = [ sc.XC_FUNCTIONAL_LDA, sc.XC_FUNCTIONAL_PBE ] +SUPPORTED_FUNCTIONALS = {'lda' : 1, 'pbe' : 2, 'blyp' : 3, 'lcy-pbe' : 4, + 'lcy-bnl' : 5, 'pbe0' : 6, 'b3lyp' : 7, + 'camy-b3lyp' : 8, 'camy-pbeh' : 9} + INPUT_FILE = "sktwocnt.in" STDOUT_FILE = "output" BASISFUNCTION_FILE = "basisfuncs.dbm" @@ -75,11 +78,6 @@ class SktwocntInput: 2: "hetero", } - _DENSITY_SUPERPOS_FROM_FUNCTIONAL = { - sc.XC_FUNCTIONAL_LDA: "density_lda", - sc.XC_FUNCTIONAL_PBE: "density_pbe", - } - _POTENTIAL_SUPERPOS = "potential" def __init__(self, settings, superpos, functional, grid, atom1data, @@ -93,27 +91,27 @@ def __init__(self, settings, superpos, functional, grid, atom1data, self._atom2data = self._atom1data self._check_superposition(superpos) self._densitysuperpos = (superpos == sc.SUPERPOSITION_DENSITY) - self._check_functional(functional) + self._check_functional(functional.type) self._functional = functional self._check_grid(grid) self._grid = grid @staticmethod def _check_superposition(superpos): - if superpos not in [ sc.SUPERPOSITION_POTENTIAL, - sc.SUPERPOSITION_DENSITY ]: + if superpos not in \ + [sc.SUPERPOSITION_POTENTIAL, sc.SUPERPOSITION_DENSITY]: msg = "Sktwocnt: Invalid superposition type" sc.SkgenException(msg) @staticmethod def _check_functional(functional): - if functional not in AVAILABLE_FUNCTIONALS: + if functional not in SUPPORTED_FUNCTIONALS: raise sc.SkgenException("Invalid functional type") @staticmethod def _check_grid(grid): if not isinstance(grid, twocenter_grids.EquidistantGrid): - msg = "Sktwocnt only can hande equidistant grids" + msg = "Sktwocnt can only handle equidistant grids" raise sc.SkgenException(msg) def write(self, workdir): @@ -133,6 +131,12 @@ def _store_atomdata(self, workdir, atomdata, iatom): atomdata.potentials, iatom) atomfiles.density = self._store_density(workdir, atomdata.density, iatom) + xcn = self._functional.type + if xcn in ('lcy-bnl', 'lcy-pbe', 'pbe0', 'b3lyp', 'camy-b3lyp', + 'camy-pbeh'): + atomfiles.dens_wavefuncs = self._store_dens_wavefuncs( + workdir, atomdata.dens_wavefuncs, iatom) + atomfiles.occshells = atomdata.occshells return atomfiles @staticmethod @@ -142,15 +146,25 @@ def _store_wavefuncs(workdir, wavefuncs, iatom): fname = "wave{:d}_{:d}{:s}.dat".format(iatom, nn, sc.ANGMOM_TO_SHELL[ll]) wfc012.tofile(os.path.join(workdir, fname)) - wavefuncfiles.append(( nn, ll, fname )) + wavefuncfiles.append((nn, ll, fname)) + return wavefuncfiles + + @staticmethod + def _store_dens_wavefuncs(workdir, wavefuncs, iatom): + wavefuncfiles = [] + for nn, ll, wfc012 in wavefuncs: + fname = "dens_wave{:d}_{:d}{:s}.dat".format(iatom, nn, + sc.ANGMOM_TO_SHELL[ll]) + wfc012.tofile(os.path.join(workdir, fname)) + wavefuncfiles.append((nn, ll, fname)) return wavefuncfiles @staticmethod def _store_potentials(workdir, potentials, iatom): fname = "potentials{:d}.dat".format(iatom) # Vxc up and down should be equivalent, twocnt reads only one. - newdata = potentials.data.take(( radial_grid.VNUC, radial_grid.VHARTREE, radial_grid.VXCUP ), - axis=1) + newdata = potentials.data.take((radial_grid.VNUC, radial_grid.VHARTREE, + radial_grid.VXCUP), axis=1) newgriddata = radial_grid.GridData(potentials.grid, newdata) newgriddata.tofile(os.path.join(workdir, fname)) return fname @@ -164,10 +178,10 @@ def _store_density(workdir, density, iatom): def _store_basisfunctions(self, workdir): config = shelve.open( os.path.join(workdir, BASISFUNCTION_FILE), "n") - config["basis1"] = [ (nn, ll) for nn, ll, wfc012 - in self._atom1data.wavefuncs ] - config["basis2"] = [ (nn, ll) for nn, ll, wfc012 - in self._atom2data.wavefuncs ] + config["basis1"] = [(nn, ll) for nn, ll, wfc012 + in self._atom1data.wavefuncs] + config["basis2"] = [(nn, ll) for nn, ll, wfc012 + in self._atom2data.wavefuncs] config.close() def _store_twocnt_input(self, workdir, atomfiles1, atomfiles2=None): @@ -182,14 +196,44 @@ def _store_twocnt_input(self, workdir, atomfiles1, atomfiles2=None): def _write_twocnt_header(self, fp): if self._densitysuperpos: - superposname = \ - self._DENSITY_SUPERPOS_FROM_FUNCTIONAL[self._functional] + superposname = 'density' else: - superposname = self._POTENTIAL_SUPERPOS - fp.write("{} {}\n".format("hetero" if self._hetero else "homo", - superposname)) + superposname = 'potential' + + xcfkey = self._functional.type + ixc = SUPPORTED_FUNCTIONALS[xcfkey] + fp.write('{} {} {}\n'.format('hetero' if self._hetero else 'homo', + superposname, ixc)) def _write_twocnt_gridinfo(self, fp): + '''Writes integration grid info.''' + + # long-range corrected functionals + if self._functional.type in ('lcy-bnl', 'lcy-pbe'): + # hardcoded parameters for the Becke integration, + # -> should probably be moved to skdef.hsd + becke = '2000 194 11 1.0' + fp.write("{:f}\n".format(self._functional.omega)) + fp.write("{:s}\n".format(becke)) + # B3LYP + elif self._functional.type == 'b3lyp': + # hardcoded parameters for the Becke integration, + # -> should probably be moved to skdef.hsd + becke = '2000 194 11 1.0' + fp.write("{:s}\n".format(becke)) + # PBE0 + elif self._functional.type == 'pbe0': + becke = '2000 194 11 1.0' + fp.write("{:f}\n".format(self._functional.alpha)) + fp.write("{:s}\n".format(becke)) + # CAM functionals + elif self._functional.type in ('camy-b3lyp', 'camy-pbeh'): + becke = '2000 194 11 1.0' + fp.write("{:f} {:f} {:f}\n".format(self._functional.omega, + self._functional.alpha, + self._functional.beta)) + fp.write("{:s}\n".format(becke)) + fp.write("{:f} {:f} {:e} {:f}\n".format( self._grid.gridstart, self._grid.gridseparation, self._grid.tolerance, self._grid.maxdistance)) @@ -198,9 +242,26 @@ def _write_twocnt_integration_parameters(self, fp): fp.write("{:d} {:d}\n".format(*self._settings.integrationpoints)) def _write_twocnt_atom_block(self, fp, atomfiles): - fp.write("{:d}\n".format(len(atomfiles.wavefuncs))) + if self._functional.type in ('lcy-bnl', 'lcy-pbe', 'pbe0', 'b3lyp', + 'camy-b3lyp', 'camy-pbeh'): + fp.write("{:d} {:d}\n".format(len(atomfiles.wavefuncs), + len(atomfiles.dens_wavefuncs))) + else: + fp.write("{:d}\n".format(len(atomfiles.wavefuncs))) + for nn, ll, wavefuncfile in atomfiles.wavefuncs: fp.write("'{}' {:d}\n".format(wavefuncfile, ll)) + + if self._functional.type in ('lcy-bnl', 'lcy-pbe', 'pbe0', 'b3lyp', + 'camy-b3lyp', 'camy-pbeh'): + occdict = {} + for xx in atomfiles.occshells: + occdict[xx[0]] = xx[1] + + for nn, ll, dens_wavefuncfile in atomfiles.dens_wavefuncs: + fp.write("'{}' {:d} {:f}\n" + .format(dens_wavefuncfile, ll, occdict[(nn, ll)])) + fp.write("'{}'\n".format(atomfiles.potential)) if self._densitysuperpos: fp.write("'{}'\n".format(atomfiles.density)) @@ -208,7 +269,6 @@ def _write_twocnt_atom_block(self, fp, atomfiles): fp.write("'{}'\n".format("nostart")) - class SktwocntCalculation: def __init__(self, binary, workdir): @@ -218,14 +278,13 @@ def __init__(self, binary, workdir): def run(self): fpin = open(os.path.join(self._workdir, INPUT_FILE), "r") fpout = open(os.path.join(self._workdir, STDOUT_FILE), "w") - proc = subproc.Popen([ self._binary ], cwd=self._workdir, + proc = subproc.Popen([self._binary], cwd=self._workdir, stdin=fpin, stdout=fpout, stderr=subproc.STDOUT) proc.wait() fpin.close() fpout.close() - class SktwocntResult: def __init__(self, workdir): @@ -262,7 +321,7 @@ def _read_sktable(fname, ninteg): nline = int(fp.readline()) # noinspection PyNoneFunctionAssignment,PyTypeChecker tmp = np.fromfile(fp, dtype=float, count=ninteg * nline, sep=" ") - tmp.shape = ( nline, ninteg ) + tmp.shape = (nline, ninteg) return tmp def get_hamiltonian(self): diff --git a/sktools/src/sktools/calculators/slateratom.py b/sktools/src/sktools/calculators/slateratom.py index 1f044d47..881403c3 100644 --- a/sktools/src/sktools/calculators/slateratom.py +++ b/sktools/src/sktools/calculators/slateratom.py @@ -1,4 +1,10 @@ +''' +Module to perform or find atomic DFT calculations, using slateratom. +''' + import os +import sys +import logging import subprocess as subproc import numpy as np import sktools.hsd.converter as conv @@ -8,12 +14,31 @@ import sktools.radial_grid as oc -AVAILABLE_FUNCTIONALS = [ sc.XC_FUNCTIONAL_LDA, sc.XC_FUNCTIONAL_PBE ] +LOGGER = logging.getLogger('slateratom') + +SUPPORTED_FUNCTIONALS = {'lda' : 2, 'pbe' : 3, 'blyp' : 4, 'lcy-pbe' : 5, + 'lcy-bnl' : 6, 'pbe0' : 7, 'b3lyp' : 8, + 'camy-b3lyp' : 9, 'camy-pbeh' : 10} + INPUT_FILE = "slateratom.in" STDOUT_FILE = "output" DEFAULT_BINARY = "slateratom" +def fatalerror(msg, errorcode=-1): + '''Issue error message and exit. + + Args: + + msg (str): error message + errorcode (int): error code to raise + + ''' + + LOGGER.critical(msg) + sys.exit(errorcode) + + def register_onecenter_calculator(): """Returns data for calculator registration""" calc = sc.ClassDict() @@ -38,10 +63,12 @@ class SlaterAtomSettings(sc.ClassDict): Maximal power for every angular momentum. """ - def __init__(self, exponents, maxpowers): + def __init__(self, exponents, maxpowers, scftol, maxscfiter): super().__init__() self.exponents = exponents self.maxpowers = maxpowers + self.scftol = scftol + self.maxscfiter = maxscfiter @classmethod def fromhsd(cls, root, query): @@ -49,7 +76,11 @@ def fromhsd(cls, root, query): exponents = sc.get_shellvalues_list(node, query, conv.float1) node = query.getchild(root, "maxpowers") maxpowers = sc.get_shellvalues_list(node, query, conv.int0) - return cls(exponents, maxpowers) + scftol = query.getvalue( + root, "scftolerance", converter=conv.float0, defvalue=1.0e-10) + maxscfiter = query.getvalue( + root, "maxscfiterations", converter=conv.int0, defvalue=120) + return cls(exponents, maxpowers, scftol, maxscfiter) def __eq__(self, other): if not isinstance(other, SlaterAtomSettings): @@ -68,6 +99,11 @@ def __eq__(self, other): for ii in range(len(myexps)): if abs(myexps[ii] - otherexps[ii]) > sc.INPUT_FLOAT_TOLERANCE: return False + if (abs(self.scftol - other.scftol) + > sc.INPUT_FLOAT_TOLERANCE): + return False + if self.maxscfiter != other.maxscfiter: + return False return True @@ -96,7 +132,7 @@ class SlateratomInput: atomconfig : AtomConfig Configuration of the atom to be calculated. functional : str - DFT functional type ('lda' or 'pbe') + DFT functional type ('lda', 'pbe', 'blyp', 'lcpbe', 'lcbnl') compressions : list List of PowerCompression objects. Either empty (no compression applied) or has a compression object for every angular momentum of the atom. @@ -104,9 +140,7 @@ class SlateratomInput: Further detailed settings of the program. """ - _XCFUNCTIONALS = { sc.XC_FUNCTIONAL_LDA: 2, sc.XC_FUNCTIONAL_PBE: 3 } - - _LOGICALSTRS = { True: ".true.", False: ".false." } + _LOGICALSTRS = {True: ".true.", False: ".false."} _COMMENT = "#" @@ -124,11 +158,37 @@ def __init__(self, settings, atomconfig, functional, compressions): if len(settings.maxpowers) != atomconfig.maxang + 1: msg = "Slateratom: Missing STO max. powers for some shells" raise sc.SkgenException(msg) - myxcfuncs = sc.XC_FUNCTIONAL_LDA, sc.XC_FUNCTIONAL_PBE - if functional not in myxcfuncs: - msg = "Invalid xc-functional type for slateratom" + + if self._settings.scftol <= 0.0: + msg = "Slateratom: SCF tolerance must be >0.0 a.u." + raise sc.SkgenException(msg) + + if self._settings.maxscfiter < 1: + msg = "Slateratom: Maximum number of SCF iterations must be >=1" + raise sc.SkgenException(msg) + + if self.isXCFunctionalSupported(functional): + xcfkey = functional.type + self._functional = SUPPORTED_FUNCTIONALS[xcfkey] + + if xcfkey in ('lcy-pbe', 'lcy-bnl', 'camy-b3lyp', 'camy-pbeh'): + self._omega = functional.omega + else: + self._omega = None + + if xcfkey in ('camy-b3lyp', 'camy-pbeh'): + self._alpha = functional.alpha + self._beta = functional.beta + elif xcfkey == 'pbe0': + self._alpha = functional.alpha + self._beta = None + else: + self._alpha = None + self._beta = None + + else: + msg = 'Invalid xc-functional type for slateratom' raise sc.SkgenException(msg) - self._functional = self._XCFUNCTIONALS[functional] if compressions is None: compressions = [] @@ -137,9 +197,6 @@ def __init__(self, settings, atomconfig, functional, compressions): msg = "Invalid compressiont type {} for slateratom".format( comp.__class__.__name__) raise sc.SkgenException(msg) - if abs(comp.power - float(int(comp.power))) > 1e-8: - msg = "Slateratom only supports integer compression exponents" - raise sc.SkgenException(msg) maxang = atomconfig.maxang ncompr = len(compressions) if ncompr and ncompr != maxang + 1: @@ -153,6 +210,26 @@ def __init__(self, settings, atomconfig, functional, compressions): self._relativistic = atomconfig.relativistics == sc.RELATIVISTICS_ZORA + def isXCFunctionalSupported(self, functional): + '''Checks if the given xc-functional is supported by the calculator, + in particular: checks if AVAILABLE_FUNCTIONALS intersect with + sktools.xcfunctionals.XCFUNCTIONALS + + Args: + functional: xc-functional, defined in xcfunctionals.py + + Returns: + true, if xc-functional is supported, otherwise false + ''' + + tmp = [] + for xx in SUPPORTED_FUNCTIONALS: + if xx in sktools.xcfunctionals.XCFUNCTIONALS: + tmp.append(sktools.xcfunctionals.XCFUNCTIONALS[xx]) + + return bool(functional.__class__ in tmp) + + def write(self, workdir): """Writes a valid input for the program. @@ -163,62 +240,111 @@ def write(self, workdir): """ maxang = self._atomconfig.maxang out = [ - "{:d} {:d} {:d} {:s} \t{:s} znuc maxang nscc relativistic".format( - int(self._atomconfig.atomicnumber), maxang, 120, - self._LOGICALSTRS[self._relativistic], self._COMMENT), + "{:d} {:d} {:d} {:g} {:s} \t{:s}".format( + int(self._atomconfig.atomicnumber), maxang, + self._settings.maxscfiter, self._settings.scftol, + self._LOGICALSTRS[self._relativistic], self._COMMENT) + \ + " znuc maxang nscc scftol relativistic", - "{:d}\t{:s} functional: 0=HF, 1=X-Alpha, 2=PW-LDA, 3=PBE ".format( + "{:d} \t\t\t{:s} functional".format( self._functional, self._COMMENT) ] + # range-separated functionals + xctype = list(SUPPORTED_FUNCTIONALS.keys())[ + list(SUPPORTED_FUNCTIONALS.values()).index(self._functional)] + if xctype in ('lcy-pbe', 'lcy-bnl'): + out += [ + "{:g} \t{:s} range-separation parameter (omega)".format( + self._omega, self._COMMENT), + + # numerical interator + # hardcoded parameters for the Becke integration + # --> should be moved to skdef.hsd! + "2000 194 11 1.0 \t{:s} Becke integrator settings" + .format(self._COMMENT)] + # B3LYP + elif xctype == 'b3lyp': + out += [ + # numerical interator + # hardcoded parameters for the Becke integration + # --> should be moved to skdef.hsd! + "2000 194 11 1.0 \t{:s} Becke integrator settings" + .format(self._COMMENT)] + # PBE0 + elif xctype == 'pbe0': + out += [ + "{:g} \t{:s} ".format(self._alpha, self._COMMENT) + \ + "Global portion of HFX", + + # numerical interator + # hardcoded parameters for the Becke integration + # --> should be moved to skdef.hsd! + "2000 194 11 1.0 \t{:s} Becke integrator settings" + .format(self._COMMENT)] + # CAM functionals + elif xctype in ('camy-b3lyp', 'camy-pbeh'): + out += [ + "{:g} {:g} {:g} \t{:s} ".format( + self._omega, self._alpha, self._beta, self._COMMENT) + \ + "range-separation parameter (omega), CAM alpha, CAM beta", + + # numerical interator + # hardcoded parameters for the Becke integration + # --> should be moved to skdef.hsd! + "2000 194 11 1.0 \t{:s} Becke integrator settings" + .format(self._COMMENT)] + # Compressions - if not len(self._compressions): - out += [ "{:g} {:d} \t{:s} Compr. radius and power ({:s})".format( + if len(self._compressions) == 0: + out += ["{:g} {:d} \t\t{:s} Compr. radius and power ({:s})".format( 1e30, 0, self._COMMENT, sc.ANGMOM_TO_SHELL[ll]) - for ll in range(maxang + 1) ] + for ll in range(maxang + 1)] else: - out += [ "{:g} {:d} \t{:s} Compr. radius and power ({:s})".format( - compr.radius, int(compr.power), self._COMMENT, + out += ["{:g} {:g} \t\t{:s} Compr. radius and power ({:s})".format( + compr.radius, compr.power, self._COMMENT, sc.ANGMOM_TO_SHELL[ll]) - for ll, compr in enumerate(self._compressions) ] + for ll, compr in enumerate(self._compressions)] - out += [ "{:d} \t{:s} nr. of occupied shells ({:s})".format( + out += ["{:d} \t\t\t{:s} nr. of occupied shells ({:s})".format( len(occ), self._COMMENT, sc.ANGMOM_TO_SHELL[ll]) - for ll, occ in enumerate(self._atomconfig.occupations) ] + for ll, occ in enumerate(self._atomconfig.occupations)] # STO powers and exponents exponents = self._settings.exponents maxpowers = self._settings.maxpowers - out += [ "{:d} {:d} \t{:s} nr. of exponents, max. power ({:s})".format( + out += ["{:d} {:d} \t\t\t{:s} nr. of exponents, max. power ({:s})".format( len(exponents[ll]), maxpowers[ll], self._COMMENT, sc.ANGMOM_TO_SHELL[ll]) - for ll in range(maxang + 1) ] - out.append("{:s} \t{:s} automatic exponent generation".format( + for ll in range(maxang + 1)] + out.append("{:s} \t\t{:s} automatic exponent generation".format( self._LOGICALSTRS[False], self._COMMENT)) for ll, skexp_ang in enumerate(exponents): for ii, skexp in enumerate(skexp_ang): - out.append("{:10f} \t{:s} exponent {:d} ({:s})".format( + out.append("{:10f} \t\t{:s} exponent {:d} ({:s})".format( skexp, self._COMMENT, ii + 1, sc.ANGMOM_TO_SHELL[ll])) - out.append("{:s} \t{:s} write eigenvectors".format( + out.append("{:s} \t\t{:s} write eigenvectors".format( self._LOGICALSTRS[False], self._COMMENT)) - out.append("{} {:g} \t{:s} broyden mixer, mixing factor".format( + out.append("{} {:g} \t\t{:s} broyden mixer, mixing factor".format( self._LOGICALSTRS[True], 0.1, self._COMMENT)) # Occupations for ll, occperl in enumerate(self._atomconfig.occupations): for ii, occ in enumerate(occperl): nn = ii + 1 + ll # principal quantum number - out.append("{:g} {:g} \t{:s} occupations ({:d}{:s})".format( + out.append("{:g} {:g} \t\t\t{:s} occupations ({:d}{:s})".format( occ[0], occ[1], self._COMMENT, nn, sc.ANGMOM_TO_SHELL[ll])) - # Valence shell range - valenceqns = [[ sc.MAX_PRINCIPAL_QN, 0 ], ] * (maxang + 1) - for nn, ll in self._atomconfig.valenceshells: - valenceqns[ll][0] = min(valenceqns[ll][0], nn) - valenceqns[ll][1] = max(valenceqns[ll][1], nn) - for ll, vqns in enumerate(valenceqns): - out.append("{:d} {:d} \t{:s} valence shells from to ({:s})".format( + # Occupied shell range + occqns = [[sc.MAX_PRINCIPAL_QN, 0],] * (maxang + 1) + for qn, occ in self._atomconfig.occshells: + nn = qn[0] + ll = qn[1] + occqns[ll][0] = min(occqns[ll][0], nn) + occqns[ll][1] = max(occqns[ll][1], nn) + for ll, vqns in enumerate(occqns): + out.append("{:d} {:d} \t\t\t{:s} occupied shells from to ({:s})".format( vqns[0], vqns[1], self._COMMENT, sc.ANGMOM_TO_SHELL[ll])) fp = open(os.path.join(workdir, INPUT_FILE), "w") @@ -263,10 +389,37 @@ class SlateratomResult: def __init__(self, workdir): self._workdir = workdir - fp = open(os.path.join(self._workdir, "energies.tag"), "r") + self._check_output() + fp = open(os.path.join(self._workdir, "energies.tag"), "r", + encoding="utf8") self._energiestag = TaggedFile.fromfile(fp, transpose=True) fp.close() + def _check_output(self): + """Checks calculation for SCF convergence and energies.tag file.""" + + error_str = "SCF is NOT converged, maximal SCF iterations exceeded." + troubleshoot_str = "Possible troubleshooting steps:" \ + + "\n" \ + + "1) Check skdef.hsd (e.g. an extremely large basis can result" \ + + " in unstable SCF cycles, ...)" \ + + "\n" \ + + "2) Increase MaxSCFIterations" \ + + "\n" \ + + "3) Choose less tight SCFTolerance" + output_fname = os.path.join(self._workdir, "output") + + # Check for SCF convergence + with open(output_fname, "r", encoding="utf8") as outfile: + if error_str in outfile.read(): + fatalerror(error_str + "\n" + "Path: " + self._workdir + + "\n\n" + troubleshoot_str) + + # Check for any other reason, causing a missing energies.tag file + error_str = "energies.tag absent, reason unknown (check yourself)." + if not os.path.exists(os.path.join(self._workdir, "energies.tag")): + fatalerror(error_str + "\n" + "Path: " + self._workdir) + def get_homo_or_lowest_nl(self, ss): """Returns homo. If spin channel has no electrons, lowest level. """ diff --git a/sktools/src/sktools/common.py b/sktools/src/sktools/common.py index b98f4e5e..7c97d78d 100644 --- a/sktools/src/sktools/common.py +++ b/sktools/src/sktools/common.py @@ -37,11 +37,6 @@ RELATIVISTICS_TYPES = {'none': RELATIVISTICS_NONE, 'zora': RELATIVISTICS_ZORA} -XC_FUNCTIONAL_LDA = 0 -XC_FUNCTIONAL_PBE = 1 -XC_FUNCTIONAL_TYPES = {'lda': XC_FUNCTIONAL_LDA, - 'pbe': XC_FUNCTIONAL_PBE} - SUPERPOSITION_POTENTIAL = 0 SUPERPOSITION_DENSITY = 1 SUPERPOSITION_TYPES = {'potential': SUPERPOSITION_POTENTIAL, @@ -60,6 +55,10 @@ class SkgenException(Exception): '''Custom exception of the skgen script.''' +class CollectwavecoeffsException(Exception): + '''Custom exception of the collectwavecoeffs script.''' + + def openfile(fobj, mode): '''Opens a file or passes a file object. @@ -313,6 +312,10 @@ def keys(self): '''Returns view that contains the keys of the dictionary.''' return self._dict.keys() + def classnamelower(self): + '''Returns lower-case class name of instance.''' + return self.__class__.__name__.lower() + def fatalerror(msg, errorcode=-1): '''Issue error message and exit. diff --git a/sktools/src/sktools/compressions.py b/sktools/src/sktools/compressions.py index 81ac3774..62a1eb05 100644 --- a/sktools/src/sktools/compressions.py +++ b/sktools/src/sktools/compressions.py @@ -28,7 +28,7 @@ def fromhsd(cls, root, query): power, child = query.getvalue(root, 'power', conv.float0, returnchild=True) - if power <= 0.0: + if power < 0.0: raise hsd.HSDInvalidTagValueException( msg='Invalid compression power {:f}'.format(power), node=child) radius, child = query.getvalue(root, 'radius', conv.float0, diff --git a/sktools/src/sktools/oldskfile.py b/sktools/src/sktools/oldskfile.py index ac6e101f..106022d7 100644 --- a/sktools/src/sktools/oldskfile.py +++ b/sktools/src/sktools/oldskfile.py @@ -1,12 +1,11 @@ """Contains the representation of the old SK-file.""" -import os.path +import os.path +import warnings import numpy as np - -from . import common as sc import sktools.twocenter_grids - +from . import common as sc # Dummy null spline @@ -37,7 +36,7 @@ class OldSKFile: def __init__(self, extended, dr, hamiltonian, overlap, onsites=None, spinpolerror=None, hubbardus=None, occupations=None, mass=None, - splinerep=None, polyrep=None): + splinerep=None, polyrep=None, extratag=None): self.extended = extended self.dr = dr self.nr = hamiltonian.shape[0] @@ -51,6 +50,7 @@ def __init__(self, extended, dr, hamiltonian, overlap, onsites=None, self.mass = mass self.splinerep = splinerep self.polyrep = polyrep + self.extratag = extratag @classmethod @@ -79,12 +79,12 @@ def fromfile(cls, fname, homo): else: mass = None polyrep = np.array(values[1:10], dtype=float) - hamiltonian = np.zeros(( nr, ninteg ), dtype=float) - overlap = np.zeros(( nr, ninteg ), dtype=float) + hamiltonian = np.zeros((nr, ninteg), dtype=float) + overlap = np.zeros((nr, ninteg), dtype=float) for iline in range(nr - 1): values = sc.convert_fortran_floats(fp.readline()) - hamiltonian[iline,0:ninteg] = values[0:ninteg] - overlap[iline,0:ninteg] = values[ninteg:2*ninteg] + hamiltonian[iline, 0:ninteg] = values[0:ninteg] + overlap[iline, 0:ninteg] = values[ninteg:2*ninteg] # Currently, everything after SK table is treated as spline repulsive splinerep = fp.read() fp.close() @@ -118,22 +118,109 @@ def tofile(self, fname): fp.write(" 0.0" * 10 + "\n") integralfloats = FLOAT_FORMSTR * ninteg for ir in range(self.nr): - fp.write(integralfloats.format(*self.hamiltonian[ir,:])) - fp.write(integralfloats.format(*self.overlap[ir,:])) + fp.write(integralfloats.format(*self.hamiltonian[ir, :])) + fp.write(integralfloats.format(*self.overlap[ir, :])) fp.write("\n") if self.splinerep: fp.write("\n") fp.write(self.splinerep) fp.write("\n") + if self.extratag: + for xx in self.extratag: + fp.write(xx) + fp.write("\n") fp.close() + def equals(self, ref, atol=1e-10, rtol=1e-09): + '''Checks equality with another reference instance + + Args: + + ref (Acsf): reference instance to compare with + atol (float): required absolute tolerance + rtol (float): required relative tolerance + + Returns: + + equal (bool): true, if the two instances are equal within tolerance + + ''' + + equal = self.extended == ref.extended + + if not equal: + warnings.warn('Mismatch in extended format specifier.') + return False + + equal = np.allclose(self.dr, ref.dr, rtol=rtol, atol=atol) + + if not equal: + warnings.warn('Mismatch in dimer distance stepwidth.') + return False + + equal = np.allclose(self.hamiltonian, ref.hamiltonian, rtol=rtol, + atol=atol) + + if not equal: + warnings.warn('Mismatch in Hamiltonian matrix elements.') + return False + + equal = np.allclose(self.overlap, ref.overlap, rtol=rtol, + atol=atol) + + if not equal: + warnings.warn('Mismatch in overlap matrix elements.') + return False + + if ref.onsites is not None: + equal = np.allclose(self.onsites, ref.onsites, rtol=rtol, + atol=atol) + + if not equal: + warnings.warn('Mismatch in onsite energies.') + return False + + equal = np.allclose(self.spinpolerror, ref.spinpolerror, rtol=rtol, + atol=atol) + + if not equal: + warnings.warn('Mismatch in spin polarisation error.') + return False + + equal = np.allclose(self.hubbardus, ref.hubbardus, rtol=rtol, + atol=atol) + + if not equal: + warnings.warn('Mismatch in Hubbard U values.') + return False + + equal = np.allclose(self.occupations, ref.occupations, rtol=rtol, + atol=atol) + + if not equal: + warnings.warn('Mismatch in electron occupations.') + return False + + equal = np.allclose(self.mass, ref.mass, rtol=rtol, + atol=atol) + + if not equal: + warnings.warn('Mismatch in nuclear mass.') + return False + + # Spline/polynomial repulsive comparison and + # Hyb/LC/CAM tag still missing in comparison + + return equal + class OldSKFileSet: def __init__(self, grid, hamiltonian, overlap, basis1, basis2=None, onsites=None, spinpolerror=None, hubbardus=None, - occupations=None, mass=None, dummy_repulsive=False): + occupations=None, mass=None, dummy_repulsive=False, + extraTag=None): self._dr, self._nr0 = self._get_grid_parameters(grid) self._dummy_repulsive = dummy_repulsive @@ -141,6 +228,7 @@ def __init__(self, grid, hamiltonian, overlap, basis1, basis2=None, self._overlap = overlap self._basis1 = basis1 self._homo = basis2 is None + self._extraTag = extraTag if self._homo: self._basis2 = self._basis1 @@ -226,10 +314,11 @@ def _get_skfile(self, isk1, isk2, homoskfile, reverse): skfile = OldSKFile( extended, self._dr, oldsk_ham, oldsk_over, onsites=onsites, spinpolerror=self._spinpolerror, hubbardus=hubbus, - occupations=occupations, mass=self._mass, splinerep=repulsive) + occupations=occupations, mass=self._mass, splinerep=repulsive, + extratag=self._extraTag) else: skfile = OldSKFile(extended, self._dr, oldsk_ham, oldsk_over, - splinerep=repulsive) + splinerep=repulsive, extratag=self._extraTag) return skfile @@ -376,5 +465,5 @@ def _get_grid_parameters(grid): @staticmethod def _get_basis_indexed_dict(basis, values): - mydict = { shell: value for shell, value in zip(basis, values) } - return mydict \ No newline at end of file + mydict = {shell: value for shell, value in zip(basis, values)} + return mydict diff --git a/sktools/bin/collectspinw b/sktools/src/sktools/scripts/collectspinw.py old mode 100755 new mode 100644 similarity index 80% rename from sktools/bin/collectspinw rename to sktools/src/sktools/scripts/collectspinw.py index 295e7c05..2ca451c1 --- a/sktools/bin/collectspinw +++ b/sktools/src/sktools/scripts/collectspinw.py @@ -4,7 +4,7 @@ import argparse from sktools.skdef import Skdef -import sktools.skgen as skgen +from sktools import skgen import sktools.common as sc @@ -19,10 +19,10 @@ SPINW_FILE_NAME = 'spinw.txt' -def main(): +def main(cmdlineargs=None): '''Main driver routine.''' - args = parseargs() + args = parseargs(cmdlineargs) logger = sc.get_script_logger(args.loglevel, SCRIPTNAME) logger.info('Collecting spinw constants') @@ -31,24 +31,24 @@ def main(): searchdirs = [args.builddir] elems = skdef.atomparameters.keys() - with open(SPINW_FILE_NAME, 'w') as fp: + with open(SPINW_FILE_NAME, 'w', encoding='utf8') as spinw_fd: for elem in elems: calculator = skgen.run_atom(skdef, elem, args.builddir, searchdirs, args.onecnt_binary) - fp.write(sc.capitalize_elem_name(elem) + ':\n') + spinw_fd.write(sc.capitalize_elem_name(elem) + ':\n') results = calculator.get_result() spinw = results.get_spinws() ndim = spinw.shape[0] formstr = '{:13.5f}' * ndim + '\n' for line in spinw: - fp.write(formstr.format(*line)) - fp.write('\n') + spinw_fd.write(formstr.format(*line)) + spinw_fd.write('\n') - logger.info("File '{}' written.".format(SPINW_FILE_NAME)) + logger.info(f"File '{SPINW_FILE_NAME}' written.") -def parseargs(): +def parseargs(cmdlineargs): '''Parses command line arguments and return the parser instance.''' parser = argparse.ArgumentParser(description=USAGE) @@ -66,7 +66,7 @@ def parseargs(): parser.add_argument('-l', '--log-level', dest='loglevel', default='info', choices=['debug', 'info', 'warning', 'error'], help=msg) - return parser.parse_args() + return parser.parse_args(args=cmdlineargs) if __name__ == '__main__': diff --git a/sktools/src/sktools/scripts/collectwavecoeffs.py b/sktools/src/sktools/scripts/collectwavecoeffs.py new file mode 100644 index 00000000..49a1d841 --- /dev/null +++ b/sktools/src/sktools/scripts/collectwavecoeffs.py @@ -0,0 +1,162 @@ +#!/usr/bin/env python3 + +''' +Module to extract or calculate wavefunction coefficients for Waveplot. +''' + + +import os + +import sktools.common as sc +from sktools.skgen import compression +from sktools.scripts.skgen import get_parser_and_subparser_container, \ + get_onecnt_common_parser, setup_parser_wavecomp, \ + parse_command_line_and_run_subcommand, \ + convert_argument_to_elements, merge_skdefs +from sktools import PACKAGE_VERSION +from sktools.oldskfile import OldSKFile +from sktools.taggedfile import TaggedFile + + +SCRIPTNAME = sc.get_script_name() + +USAGE = USAGE = \ + '''Collects coefficient information for Waveplot. It iterates over the + elements defined in skdef.hsd and collects the wavefunction coefficients + and other information necessary for Waveplot. The homonuclear SK-files as + well as atomic calculations with compressed wavefunction must have been + generated in advance. + ''' + +# Global script logger, will be overriden by the setup_logger() method in +# the respective subcommands depending on the command line loglevel options +logger = None + + +def main(args=None): + '''Main driver routine.''' + + parser, subparsers = get_parser_and_subparser_container() + setup_parser_main(parser) + onecnt_common = get_onecnt_common_parser() + setup_parser_wavecomp(subparsers, onecnt_common, run_wavecomp) + parse_command_line_and_run_subcommand(parser, args) + + +def writecoeffs(fd_wc, elem, atomconfig, homoskname, wavecompdir): + '''Writes element-specific input, processed by Waveplot. + + Args: + + fd_wc (file object): file object to write to + elem (str): element name to fetch information for + atomconfig (AtomConfig): represents the configuration of a free atom + homoskname (str): pathname of homonuclear Slater-Koster file + wavecompdir (str): path to calculation of the compressed atom + + ''' + + homosk = OldSKFile.fromfile(homoskname, True) + cutoff = homosk.nr * homosk.dr / 2.0 + fd_wc.write('{} {{\n'.format(elem)) + fd_wc.write(' AtomicNumber = {:d}\n'.format(int(atomconfig.atomicnumber))) + for nn, ll in atomconfig.valenceshells: + coeffsname = 'coeffs_{:02d}{:1s}.tag'.format(nn, sc.ANGMOM_TO_SHELL[ll]) + coeffs = TaggedFile.fromfile(os.path.join(wavecompdir, coeffsname), + transpose=True) + fd_wc.write(' Orbital {\n') + fd_wc.write(' AngularMomentum = {:d}\n'.format(ll)) + fd_wc.write(' Occupation = {:.1f}\n'.format(coeffs['occupation'])) + fd_wc.write(' Cutoff = {:5.2f}\n'.format(cutoff)) + fd_wc.write(' Exponents {\n') + sc.writefloats(fd_wc, coeffs['exponents'], indent=6, numperline=3, + formstr='{:21.12E}') + fd_wc.write(' }\n') + fd_wc.write(' Coefficients {\n') + sc.writefloats(fd_wc, coeffs['coefficients'], indent=3, numperline=3, + formstr='{:21.12E}') + fd_wc.write(' }\n') + fd_wc.write(' }\n') + fd_wc.write('}\n') + + +def run_wavecomp(args): + setup_logger(args.loglevel) + logger.info('Checking if required SK-files are present') + elements = convert_argument_to_elements(args.element) + elements_lower = [elem.lower() for elem in elements] + + for ielem, elem in enumerate(elements_lower): + homoskname = '{elem}-{elem}.skf'.format(elem=elem.capitalize()) + if not os.path.exists(homoskname): + sc.fatalerror('Error while processing element ' + elem.capitalize() + + '. SK-file ' + homoskname + ' absent.') + + skdef = merge_skdefs(args.configfiles) + searchdirs = [args.builddir,] + args.includedirs + resultdirs = [] + + logger.info('Subcommand wavecomp started') + for elem in elements: + calculator = compression.search_wavecomp( + skdef, elem, args.builddir, searchdirs) + dirnames = ' '.join(calculator.get_result_directories()) + resultdirs.append(dirnames) + + logger.info('Subcommand wavecomp finished') + logger.info('Wavecomp results in {}'.format(' '.join(resultdirs))) + + atomparameters = skdef.atomparameters + + with open('wfc.hsd', 'w', encoding='utf8') as fd_wc: + + for ielem, elem in enumerate(elements_lower): + homoskname = '{elem}-{elem}.skf'.format(elem=elem.capitalize()) + wavecompdir = os.path.join(os.getcwd(), resultdirs[ielem]) + if not os.path.exists(homoskname): + sc.fatalerror('Error while processing element ' + + elem.capitalize() + '. SK-file ' + homoskname + + ' absent.') + + logger.info('Writing element ' + elem.capitalize() + + ' to wfc.hsd file.') + atomconfig = atomparameters[elem].atomconfig + writecoeffs(fd_wc, elem.capitalize(), atomconfig, homoskname, + wavecompdir) + + +def setup_parser_main(parser): + parser.add_argument('--version', action='version', + version=f'sktools {PACKAGE_VERSION}') + + parser.add_argument( + '-I', '--include-dir', action='append', default=[], + dest='includedirs', + help='directory to include in the search for calculation ' + '(default: build directory only)') + + parser.add_argument( + '-c', '--config-file', action='append', dest='configfiles', + default=['skdef.hsd',], + help='config file(s) to be parsed (default: skdef.hsd)') + + parser.add_argument( + '-b', '--build-dir', default='_build', dest='builddir', + help='build directory (default: _build)') + + parser.add_argument( + '-l', '--log-level', dest='loglevel', default='info', + choices=['debug', 'info', 'warning', 'error'], + help='Logging level (default: info)') + + +def setup_logger(loglevel): + global logger + logger = sc.get_script_logger(loglevel, SCRIPTNAME) + + +if __name__ == '__main__': + try: + main() + except sc.CollectwavecoeffsException as ex: + sc.fatalerror(str(ex)) diff --git a/sktools/bin/skdiff b/sktools/src/sktools/scripts/skdiff.py old mode 100755 new mode 100644 similarity index 95% rename from sktools/bin/skdiff rename to sktools/src/sktools/scripts/skdiff.py index 8f57f716..be7aca95 --- a/sktools/bin/skdiff +++ b/sktools/src/sktools/scripts/skdiff.py @@ -17,7 +17,7 @@ ''' -def parseargs(): +def parseargs(cmdlineargs): '''Parse the program arguments.''' parser = argparse.ArgumentParser(description=USAGE) @@ -36,7 +36,7 @@ def parseargs(): parser.add_argument('-s', '--skip', dest='nskip', type=int, default=0, help=msg) - return parser.parse_args() + return parser.parse_args(args=cmdlineargs) def compare_atomic_data(sk1, sk2): @@ -84,10 +84,10 @@ def compare_integral_tables(sk1, sk2, nstart): overdiff[maxinds], maxinds[0] + nstart + 1, maxinds[1] + 1)) -def main(): +def main(cmdlineargs=None): '''Main driver routine.''' - args = parseargs() + args = parseargs(cmdlineargs) sk1 = OldSKFile.fromfile(args.skfile[0], args.homo) sk2 = OldSKFile.fromfile(args.skfile[1], args.homo) diff --git a/sktools/bin/skgen b/sktools/src/sktools/scripts/skgen.py old mode 100755 new mode 100644 similarity index 98% rename from sktools/bin/skgen rename to sktools/src/sktools/scripts/skgen.py index 4bb48aff..c9adcb30 --- a/sktools/bin/skgen +++ b/sktools/src/sktools/scripts/skgen.py @@ -9,9 +9,8 @@ import argparse import numpy as np - import sktools.common as sc -import sktools.skgen as skgen +from sktools import skgen from sktools.skdef import Skdef from sktools import PACKAGE_VERSION @@ -30,7 +29,7 @@ logger = None -def main(): +def main(args=None): '''Main driver routine.''' parser, subparsers = get_parser_and_subparser_container() @@ -42,7 +41,7 @@ def main(): twocnt_common = get_twocnt_common_parser() setup_parser_twocnt(subparsers, twocnt_common, run_twocnt) setup_parser_sktable(subparsers, twocnt_common, run_sktable) - parse_command_line_and_run_subcommand(parser) + parse_command_line_and_run_subcommand(parser, args) def run_atom(args): @@ -240,8 +239,8 @@ def setup_parser_sktable(subparsers, twocnt_common, target_function): parser_sktable.set_defaults(func=target_function) -def parse_command_line_and_run_subcommand(parser): - args = parser.parse_args() +def parse_command_line_and_run_subcommand(parser, cmdlineargs=None): + args = parser.parse_args(args=cmdlineargs) args.func(args) diff --git a/sktools/src/sktools/scripts/skmanip.py b/sktools/src/sktools/scripts/skmanip.py new file mode 100644 index 00000000..8af72119 --- /dev/null +++ b/sktools/src/sktools/scripts/skmanip.py @@ -0,0 +1,140 @@ +#!/usr/bin/env python3 + +'''General tool for manipulating SK-tables.''' + + +import sys +import argparse +import re +import xml.etree.ElementTree as etree +from sktools import PACKAGE_VERSION +import sktools.common as sc +from sktools.oldskfile import OldSKFile + +SCRIPTNAME = sc.get_script_name() + + +FNAME_PATTERN = re.compile('(?P\w+)-(?P\w+)\.skf') + + +def main(cmdlineargs=None): + '''Main driver routine.''' + + parser, subparsers = get_parser_and_subparser_container() + setup_parser_main(parser) + common = get_common_parser() + setup_parser_getdoc(subparsers, common, run_getdoc) + setup_parser_setdoc(subparsers, common, run_setdoc) + parse_command_line_and_run_subcommand(parser, cmdlineargs) + + +def run_getdoc(args): + '''Extracts documentation out of SK-file.''' + + skfile = args.skfile + if args.sktype == 'auto': + homo = is_homo_file(skfile) + else: + homo = (args.sktype == 'homo') + sk = OldSKFile.fromfile(skfile, homo) + doc = sk.documentation + fobj = sys.stdout if args.file == '-' else args.file + fp, tobeclosed = sc.openfile(fobj, 'w') + fp.write(etree.tostring(doc, encoding='UTF-8').decode('UTF-8')) + if tobeclosed: + fp.close() + + +def run_setdoc(args): + '''Sets documentation in SK-file.''' + + skfile = args.skfile + if args.sktype == 'auto': + homo = is_homo_file(skfile) + else: + homo = (args.sktype == 'homo') + sk = OldSKFile.fromfile(skfile, homo) + fobj = sys.stdin if args.file == '-' else args.file + fp, tobeclosed = sc.openfile(fobj, 'r') + xml = fp.read() + if tobeclosed: + fp.close() + doc = etree.fromstring(xml) + sk.documentation = doc + sk.tofile(skfile) + + +def is_homo_file(filename): + '''Infers if given SK-file is homonuclear.''' + + match = FNAME_PATTERN.match(filename) + if match: + homo = (match.group('elem1') == match.group('elem2')) + else: + homo = False + + return homo + + +def get_parser_and_subparser_container(): + '''Returns parser and subparser of skmanip.''' + + parser = argparse.ArgumentParser( + description='General tool for manipulating SK-tables.') + subparsers = parser.add_subparsers(title='available subcommands', + help='') + return parser, subparsers + + +def get_common_parser(): + '''Common settings for all one-center calculations.''' + + common = argparse.ArgumentParser(add_help=False) + common.add_argument('skfile', help='skfile to process.') + common.add_argument( + '-t', '--type', dest='sktype', choices=['homo', 'hetero', 'auto'], + default='auto', help='Type of skfile (default: auto)') + common.add_argument( + '-f', '--file', default='-', + help='Reads/writes from/into file instead using stdin/stderr') + + return common + + +def setup_parser_main(parser): + '''Add skmanip version to main parser.''' + + parser.add_argument('--version', action='version', + version=f'skmanip {PACKAGE_VERSION}') + + +def setup_parser_getdoc(subparsers, common, target_function): + '''setup_parser_getdoc''' + + parser = subparsers.add_parser( + 'get_documentation', parents=[common], + help='Extracts the documentation into a file') + parser.set_defaults(func=target_function) + + +def setup_parser_setdoc(subparsers, common, target_function): + '''setup_parser_setdoc''' + + parser = subparsers.add_parser( + 'set_documentation', parents=[common], + help='Replaces the documentation in an SK-file') + parser.set_defaults(func=target_function) + + +def parse_command_line_and_run_subcommand(parser, cmdlineargs): + '''Parses command line arguments and runs skmanip subcommand.''' + + args = parser.parse_args(args=cmdlineargs) + args.func(args) + + +if __name__ == '__main__': + try: + main() + except sc.SkgenException as ex: + sc.fatalerror(str(ex)) diff --git a/sktools/src/sktools/skdef.py b/sktools/src/sktools/skdef.py index 318d5161..078e6e04 100644 --- a/sktools/src/sktools/skdef.py +++ b/sktools/src/sktools/skdef.py @@ -12,10 +12,11 @@ from . import compressions from . import twocenter_grids from . import calculators +from . import xcfunctionals CURRENT_SKDEF_VERSION = 1 -ENABLED_SKDEF_VERSIONS = frozenset([ CURRENT_SKDEF_VERSION ]) +ENABLED_SKDEF_VERSIONS = frozenset([CURRENT_SKDEF_VERSION]) class Skdef(sc.ClassDict): @@ -102,20 +103,24 @@ class Globals(sc.ClassDict): def fromhsd(cls, root, query): """Creates instance from a HSD-node and with given query object.""" - xcfunctional, child = query.getvalue(root, "xcfunctional", conv.str0, - returnchild=True) - if xcfunctional not in sc.XC_FUNCTIONAL_TYPES: - raise hsd.HSDInvalidTagValueException( - "Invalid functional type '{}'".format(xcfunctional), child) superpos, child = query.getvalue(root, "superposition", conv.str0, returnchild=True) if superpos not in sc.SUPERPOSITION_TYPES: raise hsd.HSDInvalidTagValueException( "Invalid superposition type '{}'".format(superpos), child) + # read the functional + xcf = sc.hsd_node_factory('xc', xcfunctionals.XCFUNCTIONALS, + query.getvaluenode(root, 'xcfunctional'), + query) + if xcf.__class__ not in xcfunctionals.XCFUNCTIONALS.values(): + raise hsd.HSDInvalidTagValueException( + "Invalid functional type '{}'".format(xcf), child) + myself = cls() - myself.xcfunctional = sc.XC_FUNCTIONAL_TYPES[xcfunctional] myself.superposition = sc.SUPERPOSITION_TYPES[superpos] + myself.xcf = xcf + return myself @@ -185,14 +190,18 @@ class AtomConfig(sc.ClassDict): def __init__(self, atomicnumber, mass, occupations, valenceshells, - relativistics, charge=0.0): + occshells, relativistics, charge=0.0): super().__init__() self.atomicnumber = atomicnumber self.mass = mass # Sort valenceshells (and occupations) by ascending nn and ll - tmp = [ nn * (sc.MAX_ANGMOM + 1) + ll for nn, ll in valenceshells ] - self.valenceshells = [ valenceshells[ii] for ii in np.argsort(tmp) ] + tmp = [nn * (sc.MAX_ANGMOM + 1) + ll for nn, ll in valenceshells] + self.valenceshells = [valenceshells[ii] for ii in np.argsort(tmp)] + # Sort occshells by ascending nn and ll + tmp = [qn[0] * (sc.MAX_ANGMOM + 1) + qn[1] for qn, occ in occshells] + self.occshells = [occshells[ii] for ii in np.argsort(tmp)] + self.occupations_spinpol = occupations self.occupations = self.occupations_spinpol @@ -204,20 +213,20 @@ def __init__(self, atomicnumber, mass, occupations, valenceshells, # If any valenceshell has higher n or l as occupations are listed for, # fill up occupations with zeros accordingly maxl = 0 - maxn = [ 0, ] * (sc.MAX_ANGMOM + 1) + maxn = [0,] * (sc.MAX_ANGMOM + 1) for nn, ll in valenceshells: maxl = max(ll, maxl) maxn[ll] = max(nn, maxn[ll]) if maxl > len(self.occupations) - 1: - self.occupations += [ [], ] * (maxl - len(self.occupations) + 1) + self.occupations += [[],] * (maxl - len(self.occupations) + 1) for ll, occ_l in enumerate(occupations): # At least one occupation for each angular momentum up to lmax. if not len(occ_l): - occ_l.append(( 0.0, 0.0 )) + occ_l.append((0.0, 0.0)) # Extend occupations up to highest principal quantum number in # valence shells if maxn[ll] - ll > len(occ_l): - occ_l.extend([ (0.0, 0.0) ] * (maxn[ll] - ll - len(occ_l))) + occ_l.extend([(0.0, 0.0)] * (maxn[ll] - ll - len(occ_l))) self.maxang = len(self.occupations) - 1 self.nelec = 0.0 @@ -278,6 +287,7 @@ def fromhsd(cls, root, query): raise hsd.HSDInvalidTagValueException( msg="Invalid atomic mass {:f}".format(mass), node=child) + occshellnames = [] occupations = [] occnode = query.findchild(root, "occupations") for ll, shellname in enumerate(sc.ANGMOM_TO_SHELL): @@ -293,6 +303,7 @@ def fromhsd(cls, root, query): msg="Invalid number of occupation numbers", node=shelloccnode) occ_l.append((tmp[0], tmp[1])) + occshellnames.append((txt, (tmp[0] + tmp[1]))) if len(occ_l): occupations.append(occ_l) @@ -308,6 +319,11 @@ def fromhsd(cls, root, query): msg="Invalid shell name '{}'".format(valshellname), node=child) + occshells = [] + for occshellname, occ in occshellnames: + occshell = sc.shell_name_to_ind(occshellname) + occshells.append((occshell, occ)) + relattype, child = query.getvalue(root, "relativistics", conv.str0, "none", returnchild=True) relattype = relattype.lower() @@ -315,14 +331,14 @@ def fromhsd(cls, root, query): raise hsd.HSDInvalidTagValueException( msg="Invalid relativistics type '{}'".format(relattype)) - return cls(znuc, mass, occupations, valshells, relattype) + return cls(znuc, mass, occupations, valshells, occshells, relattype) def __eq__(self, other): if not isinstance(other, AtomConfig): return False if (abs(self.atomicnumber - other.atomicnumber) - > sc.INPUT_FLOAT_TOLERANCE): + > sc.INPUT_FLOAT_TOLERANCE): return False if abs(self.mass - other.mass) > sc.INPUT_FLOAT_TOLERANCE: return False @@ -502,7 +518,6 @@ def fromhsd(cls, root, query): return myself - def _test_module(): from sktools.hsd.treebuilder import HSDTreeBuilder from sktools.hsd.query import HSDQuery diff --git a/sktools/src/sktools/skgen/atom.py b/sktools/src/sktools/skgen/atom.py index 7ac415a1..c2fd96ec 100644 --- a/sktools/src/sktools/skgen/atom.py +++ b/sktools/src/sktools/skgen/atom.py @@ -2,6 +2,7 @@ import copy import logging import numpy as np +import scipy.optimize as opt import sktools.common as sc from . import common as ssc @@ -83,7 +84,7 @@ def __init__(self, skdefs, elem): self.elem = elem atomparams = skdefs.atomparameters[elem] self.atomconfig = atomparams.atomconfig - self.xcfunc = skdefs.globals.xcfunctional + self.xcf = skdefs.globals.xcf self.onecentpars = skdefs.onecenterparameters[elem] @@ -91,12 +92,11 @@ def get_signature(self): signature = { "atomconfig": self.atomconfig, "onecentpars": self.onecentpars, - "xcfunc": self.xcfunc + "xcf": self.xcf } return signature - class SkgenAtomCalculation: def __init__(self, myinput, workdir, binary): @@ -106,7 +106,7 @@ def __init__(self, myinput, workdir, binary): self._atomconfig, self._delta_occ) calculator = myinput.onecentpars.calculator self._oncenter_calculator = ssc.OnecenterCalculatorWrapper(calculator) - self._xcfunc = myinput.xcfunc + self._xcf = myinput.xcf self._workdir = workdir self._binary = binary @@ -122,8 +122,15 @@ def run_and_convert_results(self, eigenonly, eigenspinonly): if eigenonly or eigenspinonly: return - hubbus = self._calculate_hubbus(result_spinavg_atom, - replace_empty_with_homo=True) + xcn = self._xcf.type + if xcn in ('pbe0', 'b3lyp', 'lcy-pbe', 'lcy-bnl', 'camy-b3lyp', + 'camy-pbeh'): + hubbus = self._calculate_cam_hubbus( + result_spinavg_atom, replace_empty_with_homo=True) + else: + hubbus = self._calculate_hubbus(result_spinavg_atom, + replace_empty_with_homo=True) + self._log_substitutions(result_spinavg_atom) self._log_hubbus(hubbus) spinws = self._calculate_spinws(result_spinavg_atom, @@ -159,7 +166,7 @@ def _calculate_spinaveraged_atom(self): def _calculate_free_atom(self, workdir): output = self._oncenter_calculator.do_calculation( - self._atomconfig, self._xcfunc, None, self._binary, workdir) + self._atomconfig, self._xcf, None, self._binary, workdir) result = self._collect_free_atom_result(output) self._log_free_atom_result(result) return result @@ -171,19 +178,19 @@ def _collect_free_atom_result(self, output): eigvals0 = [] occs0 = [] for nn, ll in self._atomconfig.valenceshells: - eigval = ( output.get_eigenvalue(0, nn, ll), - output.get_eigenvalue(1, nn, ll) ) + eigval = (output.get_eigenvalue(0, nn, ll), + output.get_eigenvalue(1, nn, ll)) eigvals0.append(eigval) - occ = ( output.get_occupation(0, nn, ll), - output.get_occupation(1, nn, ll) ) + occ = (output.get_occupation(0, nn, ll), + output.get_occupation(1, nn, ll)) occs0.append(occ) homo0 = output.get_homo_or_lowest_nl(0) homo1 = output.get_homo_or_lowest_nl(1) result.valence_eigvals = np.array(eigvals0, dtype=float) result.valence_occs = np.array(occs0, dtype=float) - result.homo = ( homo0, homo1 ) - result.homo_eigval = ( output.get_eigenvalue(0, homo0[0], homo0[1]), - output.get_eigenvalue(1, homo1[0], homo1[1]) ) + result.homo = (homo0, homo1) + result.homo_eigval = (output.get_eigenvalue(0, homo0[0], homo0[1]), + output.get_eigenvalue(1, homo1[0], homo1[1])) return result @@ -201,6 +208,76 @@ def _calculate_hubbus(self, result_spinavg, replace_empty_with_homo): return valence_hubbus + def _calculate_cam_hubbus(self, result_spinavg, replace_empty_with_homo): + workdir = os.path.join(self._workdir, "hubbu") + logger.info("Calculating Hubbard U values " + sc.log_path(workdir)) + shells, ihomo, energies = self._get_shells_and_energies_for_deriv_calc( + result_spinavg, replace_empty_with_homo) + sc.create_workdir(workdir) + all_derivs = self._calc_deriv_matrix(workdir, shells, energies, + spin_averaged=True) + all_derivs = 0.5 * (all_derivs + np.transpose(all_derivs)) + valence_hubbus = self._get_valence_derivs(all_derivs, ihomo, + replace_empty_with_homo) + logger.info("Applying the Hubbard correction algorithm") + for ii in range(len(shells)): + nn, ll = shells[ii] + cam_hubb = self._calculate_cam_hubbu(ll, valence_hubbus[ii][ii]) + # store corrected value + valence_hubbus[ii, ii] = cam_hubb + + return valence_hubbus + + + def _calculate_cam_hubbu(self, ll, hubbu): + '''Calculates the corrected CAMY Hubbard U's by finding a root.''' + + tau2hub = 16.0 / 5.0 + xx_root = opt.brentq( + lambda xx: self._cam_root_equation(xx, ll, hubbu, self._xcf.omega, + self._xcf.alpha, self._xcf.beta), + 0.0, 1e+03) + self._test_cam_hubbu(xx_root, ll, hubbu) + tau = xx_root * self._xcf.omega + hubbu_corrected = tau / tau2hub + + return hubbu_corrected + + + def _test_cam_hubbu(self, xx_root, ll, hubbu, rtol=1.0e-12, atol=1.0e-12): + '''Tests fulfillment of CAMY-Hubbard equation.''' + + should_be_zero = self._cam_root_equation( + xx_root, ll, hubbu, self._xcf.omega, self._xcf.alpha, + self._xcf.beta) + + if not np.isclose(should_be_zero, 0.0, rtol=rtol, atol=atol): + msg = 'Failed to find satisfying root of CAMY-Hubbard equation.' \ + + '\nObtained {}'.format(should_be_zero) \ + + ' > specified tolerance ' \ + + '(rtol={}, atol={}).'.format(rtol, atol) + raise sc.SkgenException(msg) + + + @staticmethod + def _cam_root_equation(xx, ll, hubbu, omega, alpha, beta): + '''0 = gl F(xx, alpha, beta) + u_tilde - xx''' + + def funcP(xx): + '''P(x)''' + return xx**2 * (xx**2 + 0.8 * xx + 0.2) / (xx + 1.0)**4 + + def funcF(xx, alpha, beta): + '''f(x) = x (alpha + beta (1 - P(x)))''' + return xx * (alpha + beta * (1.0 - funcP(xx))) + + tau2hub = 16.0 / 5.0 + gl = 1.0 / (2.0 * (2.0 * ll + 1.0)) + u_tilde = hubbu * tau2hub / omega + + return gl * funcF(xx, alpha, beta) + u_tilde - xx + + def _get_shells_and_energies_for_deriv_calc(self, result_spinavg, replace_empty_with_homo): spin = 0 @@ -208,14 +285,14 @@ def _get_shells_and_energies_for_deriv_calc(self, result_spinavg, if (homoshell not in self._atomconfig.valenceshells and replace_empty_with_homo): homoshell_n, homoshell_l = homoshell - shells_to_calculate = [( homoshell_n, homoshell_l )] + shells_to_calculate = [(homoshell_n, homoshell_l)] reference_energies = [result_spinavg.homo_eigval[spin]] ihomo = 0 else: shells_to_calculate = [] reference_energies = [] ihomo = self._atomconfig.valenceshells.index(homoshell) - shells_to_calculate += [( nn, ll ) + shells_to_calculate += [(nn, ll) for nn, ll in self._atomconfig.valenceshells] reference_energies += [eigval[spin] for eigval in result_spinavg.valence_eigvals] @@ -225,11 +302,11 @@ def _get_shells_and_energies_for_deriv_calc(self, result_spinavg, def _calc_deriv_matrix(self, workdir, shells_to_calculate, reference_energies, spin_averaged): ncalcshells = len(shells_to_calculate) - tmp = np.zeros(( ncalcshells, ncalcshells ), dtype=float) + tmp = np.zeros((ncalcshells, ncalcshells), dtype=float) if spin_averaged: deriv_matrix = tmp else: - deriv_matrix = ( tmp, np.array(tmp) ) + deriv_matrix = (tmp, np.array(tmp)) for ishell, shell_to_variate in enumerate(shells_to_calculate): deriv = self._calc_de_shells_docc( workdir, shells_to_calculate, reference_energies, @@ -247,7 +324,7 @@ def _get_valence_derivs(self, all_hubbus, ihomo, replace_empty_with_homo): return all_hubbus nvalshells = len(self._atomconfig.valenceshells) # noinspection PyNoneFunctionAssignment - valence_hubbus = np.empty(( nvalshells, nvalshells ), dtype=float) + valence_hubbus = np.empty((nvalshells, nvalshells), dtype=float) hubbu_inds = [ihomo if self._valence_shell_empty[ii] else ii for ii in range(nvalshells)] for ii, ii_hubbu in enumerate(hubbu_inds): @@ -268,6 +345,20 @@ def _calculate_spinws(self, result_spinavg, replace_empty_with_homo): spinws = 0.5 * (spinws + np.transpose(spinws)) valence_spinws = self._get_valence_derivs(spinws, ihomo, replace_empty_with_homo) + xcn = self._xcf.type + if xcn in ('pbe0', 'b3lyp', 'lcy-pbe', 'lcy-bnl', 'camy-b3lyp', + 'camy-pbeh'): + valence_cam_hubbus = self._calculate_cam_hubbus( + result_spinavg, replace_empty_with_homo=True) + valence_hubbus = self._calculate_hubbus( + result_spinavg, replace_empty_with_homo=True) + # apply correction for CAM-functionals + logger.info("Apply correction for CAM spinw values") + for ll in range(np.shape(valence_spinws)[0]): + valence_spinws[ll, ll] += \ + valence_cam_hubbus[ll, ll] \ + - valence_hubbus[ll, ll] + return valence_spinws @@ -303,31 +394,31 @@ def _calc_de_shells_docc(self, workdir, derived_shells, reference_eigvals, # Calculate derivative via finite differences tmp = finite_diff_coeff0 * np.array(reference_eigvals) if spin_averaged: - de_shells_docc = [ tmp, ] + de_shells_docc = [tmp,] else: - de_shells_docc = [ tmp, np.array(tmp) ] + de_shells_docc = [tmp, np.array(tmp)] for ii in range(len(delta_occ_prefacs)): localname = "{:d}{:s}_{:d}".format(nvar, sc.ANGMOM_TO_SHELL[lvar], ii + 1) localworkdir = os.path.join(workdir, localname) occs = self._atomconfig.occupations[lvar][nvar - lvar - 1] - new_occs = ( occs[0] + delta_occ_prefacs[ii] * delta_occ[0], - occs[1] + delta_occ_prefacs[ii] * delta_occ[1] ) + new_occs = (occs[0] + delta_occ_prefacs[ii] * delta_occ[0], + occs[1] + delta_occ_prefacs[ii] * delta_occ[1]) atomconfig.occupations[lvar][nvar - lvar - 1] = new_occs result = self._oncenter_calculator.do_calculation( - atomconfig, self._xcfunc, None, self._binary, localworkdir) + atomconfig, self._xcf, None, self._binary, localworkdir) for ss in range(len(de_shells_docc)): - e_shells = [ result.get_eigenvalue(ss, nn, ll) - for nn, ll in derived_shells] + e_shells = [result.get_eigenvalue(ss, nn, ll) + for nn, ll in derived_shells] de_shells_docc[ss] += (finite_diff_coeffs_delta[ii] * np.array(e_shells, dtype=float)) atomconfig.occupations = copy.deepcopy(orig_occ) if spin_averaged: return de_shells_docc[0] - else: - return de_shells_docc + + return de_shells_docc def _log_free_atom_result(self, result): diff --git a/sktools/src/sktools/skgen/compression.py b/sktools/src/sktools/skgen/compression.py index cb0f7a99..7742f44c 100644 --- a/sktools/src/sktools/skgen/compression.py +++ b/sktools/src/sktools/skgen/compression.py @@ -9,27 +9,38 @@ from . import common as ssc -LOGGER = logging.getLogger('skgen.compression') +logger = logging.getLogger('skgen.compression') def run_denscomp(skdefs, elem, builddir, searchdirs, onecnt_binary): - LOGGER.info('Started for {}'.format(sc.capitalize_elem_name(elem))) + logger.info('Started for {}'.format(sc.capitalize_elem_name(elem))) calculator = SkgenDenscomp(builddir, searchdirs, onecnt_binary) calculator.set_input(skdefs, elem) calculator.find_or_run_calculation() - LOGGER.info('Finished') + logger.info('Finished') return calculator def run_wavecomp(skdefs, elem, builddir, searchdirs, onecnt_binary): - LOGGER.info('Started for {}'.format(sc.capitalize_elem_name(elem))) + logger.info('Started for {}'.format(sc.capitalize_elem_name(elem))) calculator = SkgenWavecomp(builddir, searchdirs, onecnt_binary) calculator.set_input(skdefs, elem) calculator.find_or_run_calculation() - LOGGER.info('Finished') + logger.info('Finished') + + return calculator + + +def search_wavecomp(skdefs, elem, builddir, searchdirs): + + logger.info('Started for {}'.format(sc.capitalize_elem_name(elem))) + calculator = SkgenWavecomp(builddir, searchdirs, None) + calculator.set_input(skdefs, elem) + calculator.find_calculation() + logger.info('Finished') return calculator @@ -44,6 +55,7 @@ def __init__(self, builddir, searchdirs, onecenter_binary): self._input = None self._onecenter_searchdirs = None self._resultdir = None + self._occshells = [] def set_input(self, skdefs, elem): @@ -53,7 +65,8 @@ def set_input(self, skdefs, elem): atomconfig = atomparams.atomconfig compression = atomparams.dftbatom.densitycompression compressions = [compression,] * (atomconfig.maxang + 1) - xcfunc = skdefs.globals.xcfunctional + xcfunc = skdefs.globals.xcf + self._occshells = atomconfig.occshells calculator = skdefs.onecenterparameters[elemlow].calculator self._input = AtomCompressionInput(elemlow, atomconfig, compressions, xcfunc, calculator) @@ -71,19 +84,20 @@ def find_or_run_calculation(self): if recalculation_need: resultdir = ssc.create_onecenter_workdir( self._builddir, ssc.COMPRESSION_WORKDIR_PREFIX, self._elem) - LOGGER.info('Calculating compressed atom ' + sc.log_path(resultdir)) + logger.info('Calculating compressed atom ' + sc.log_path(resultdir)) calculation = AtomCompressionCalculation(self._input) calculation.run(resultdir, self._onecenter_binary) else: - LOGGER.info('Matching calculation found ' + sc.log_path(resultdir)) - self._extract_results_if_not_present(self._input, resultdir) + logger.info('Matching calculation found ' + sc.log_path(resultdir)) + self._extract_results_if_not_present(self._input, self._occshells, + resultdir) if recalculation_need: self._input.store_signature(resultdir) self._resultdir = resultdir @staticmethod - def _extract_results_if_not_present(myinput, resultdir): + def _extract_results_if_not_present(myinput, occshells, resultdir): resultshelf = os.path.join(resultdir, ssc.DENSCOMP_RESULT_FILE) if sc.shelf_exists(resultshelf): return @@ -93,6 +107,12 @@ def _extract_results_if_not_present(myinput, resultdir): 'potentials': output.get_potentials(), 'density': output.get_density012() } + for qn, _ in occshells: + nn = qn[0] + ll = qn[1] + # needs name as shelf allows only strings as keys + shellname = sc.shell_ind_to_name(nn, ll) + result[shellname] = output.get_wavefunction012(0, nn, ll) sc.store_as_shelf(resultshelf, result) @@ -118,6 +138,15 @@ def get_potential(self): def get_density(self): return self._results['density'] + def get_dens_wavefunction(self, nn, ll): + shellname = sc.shell_ind_to_name(nn, ll) + try: + wfc = self._results[shellname] + except KeyError: + msg = 'Missing wavefunction {}'.format(shellname) + raise sc.SkgenException(msg) + return wfc + class SkgenWavecomp: @@ -136,7 +165,7 @@ def set_input(self, skdefs, elem): self._elem = elemlow atomparams = skdefs.atomparameters[elemlow] atomconfig = atomparams.atomconfig - xcfunc = skdefs.globals.xcfunctional + xcfunc = skdefs.globals.xcf calculator = skdefs.onecenterparameters[elemlow].calculator comprcontainer = atomparams.dftbatom.wavecompressions atomcompressions = comprcontainer.getatomcompressions(atomconfig) @@ -157,7 +186,7 @@ def find_or_run_calculation(self): self._onecenter_searchdirs, ssc.COMPRESSION_WORKDIR_PREFIX) for shells, myinput in self._shells_and_inputs: shellnames = [sc.shell_ind_to_name(nn, ll) for nn, ll in shells] - LOGGER.info('Processing compression for shell(s) {}'.format( + logger.info('Processing compression for shell(s) {}'.format( ' '.join(shellnames))) resultdir = myinput.get_first_dir_with_matching_signature( previous_calc_dirs) @@ -165,12 +194,12 @@ def find_or_run_calculation(self): if recalculation_needed: resultdir = ssc.create_onecenter_workdir( self._builddir, ssc.COMPRESSION_WORKDIR_PREFIX, self._elem) - LOGGER.info( + logger.info( 'Calculating compressed atom ' + sc.log_path(resultdir)) calculation = AtomCompressionCalculation(myinput) calculation.run(resultdir, self._onecenter_binary) else: - LOGGER.info( + logger.info( 'Matching calculation found ' + sc.log_path(resultdir)) self._extract_results_if_not_present(myinput, shells, resultdir) if recalculation_needed: @@ -183,6 +212,30 @@ def find_or_run_calculation(self): self._resultdir_for_nl = resultdir_for_nl + def find_calculation(self): + resultdirs = [] + resultdir_for_nl = {} + previous_calc_dirs = ssc.get_matching_subdirectories( + self._onecenter_searchdirs, ssc.COMPRESSION_WORKDIR_PREFIX) + for shells, myinput in self._shells_and_inputs: + shellnames = [sc.shell_ind_to_name(nn, ll) for nn, ll in shells] + logger.info('Processing compression for shell(s) {}'.format( + ' '.join(shellnames))) + resultdir = myinput.get_first_dir_with_matching_signature( + previous_calc_dirs) + recalculation_needed = not resultdir + if recalculation_needed: + sc.fatalerror('Could not find wavecomp calculation') + logger.info( + 'Matching calculation found ' + sc.log_path(resultdir)) + resultdirs.append(resultdir) + for nn, ll in shells: + resultdir_for_nl[(nn, ll)] = resultdir + + self._resultdirs = resultdirs + self._resultdir_for_nl = resultdir_for_nl + + @staticmethod def _extract_results_if_not_present(myinput, shells, resultdir): resultshelf = os.path.join(resultdir, ssc.WAVECOMP_RESULT_FILE) @@ -265,6 +318,7 @@ class AtomCompressionCalculation: def __init__(self, myinput): self._atomconfig = myinput.atomconfig self._atomconfig.make_spinaveraged() + self._shell_compressions = myinput.shell_compressions calculator = myinput.calculator self._onecnt_calculator = ssc.OnecenterCalculatorWrapper(calculator) diff --git a/sktools/src/sktools/skgen/sktable.py b/sktools/src/sktools/skgen/sktable.py index 4b699f1b..fd34d669 100644 --- a/sktools/src/sktools/skgen/sktable.py +++ b/sktools/src/sktools/skgen/sktable.py @@ -114,6 +114,7 @@ def __init__(self, skdefs, elem1, elem2): atomparam2 = skdefs.atomparameters[elem2] self.atomconfig1 = atomparam1.atomconfig self.atomconfig2 = atomparam2.atomconfig + self.xcf = skdefs.globals.xcf if self.homo: dftbatom = atomparam1.dftbatom self.shellresolved = dftbatom.shellresolved @@ -145,6 +146,25 @@ def write_sktables(self, workdir, add_dummy_repulsive): valshells1 = myinput.atomconfig1.valenceshells valshells2 = myinput.atomconfig2.valenceshells grid = myinput.grid + + # if range-separated hybrid is used, add the RangeSep tag + extra_tag = None + xcn = myinput.xcf.type + if xcn in ('lcy-bnl', 'lcy-pbe'): + rsh_tag = "RangeSep\nLC {:f}".format(myinput.xcf.omega) + extra_tag = [rsh_tag] + if xcn in ('camy-b3lyp', 'camy-pbeh'): + rsh_tag = "RangeSep\nCAM {:f} {:f} {:f}".format(myinput.xcf.omega, + myinput.xcf.alpha, + myinput.xcf.beta) + extra_tag = [rsh_tag] + if xcn == 'pbe0': + rsh_tag = "GlobalHybrid\nHF {:f}".format(myinput.xcf.alpha) + extra_tag = [rsh_tag] + if xcn == 'b3lyp': + rsh_tag = "GlobalHybrid\nHF {:f}".format(0.20) + extra_tag = [rsh_tag] + if self._input.homo: onsites, occs, hubbus, spinpolerr, mass = self._get_atomic_data() if not myinput.shellresolved: @@ -153,11 +173,12 @@ def write_sktables(self, workdir, add_dummy_repulsive): skfiles = sktools.oldskfile.OldSKFileSet( grid, ham, over, valshells1, None, onsites=onsites, spinpolerror=spinpolerr, hubbardus=hubbus, occupations=occs, - mass=mass, dummy_repulsive=add_dummy_repulsive) + mass=mass, dummy_repulsive=add_dummy_repulsive, + extraTag=extra_tag) else: skfiles = sktools.oldskfile.OldSKFileSet( grid, ham, over, valshells1, valshells2, - dummy_repulsive=add_dummy_repulsive) + dummy_repulsive=add_dummy_repulsive, extraTag=extra_tag) files_written = skfiles.tofile(workdir, myinput.elem1, myinput.elem2) return files_written diff --git a/sktools/src/sktools/skgen/twocnt.py b/sktools/src/sktools/skgen/twocnt.py index a33e779f..59f1fc79 100644 --- a/sktools/src/sktools/skgen/twocnt.py +++ b/sktools/src/sktools/skgen/twocnt.py @@ -79,9 +79,9 @@ def set_input(self, skdefs, elem1, elem2, comp_prereq1, comp_prereq2): self._hetero = (self._elem1 != self._elem2) self._skdefs = skdefs if _elements_reversed: - self._compression_prereqs = ( comp_prereq2, comp_prereq1 ) + self._compression_prereqs = (comp_prereq2, comp_prereq1) else: - self._compression_prereqs = ( comp_prereq1, comp_prereq2 ) + self._compression_prereqs = (comp_prereq1, comp_prereq2) self._input = SkgenTwocntInput(self._skdefs, self._elem1, self._elem2) self._twocenter_searchdirs = ssc.get_twocenter_searchdirs( self._searchdirs, self._elem1, self._elem2) @@ -210,7 +210,7 @@ def __init__(self, skdefs, elem1, elem2): self.grid = twocentpars.grid self.hetero = elem1 != elem2 self.superposition = skdefs.globals.superposition - self.functional = skdefs.globals.xcfunctional + self.xcf = skdefs.globals.xcf def get_signature(self): @@ -221,7 +221,7 @@ def get_signature(self): "grid": self.grid, "hetero": self.hetero, "superposition": self.superposition, - "functional": self.functional + "xcf": self.xcf } return signature @@ -244,7 +244,7 @@ def run_and_convert_results(self, workdir, twocnt_binary): else: atom2data = None self._twocnt_calculator.do_calculation( - self._input.superposition, self._input.functional, self._input.grid, + self._input.superposition, self._input.xcf, self._input.grid, atom1data, atom2data, twocnt_binary, workdir) result = self._twocnt_calculator.get_output(workdir) self._store_results(result, workdir) @@ -256,16 +256,42 @@ def _get_atomdata(self, atomconfig, atomcalcs): atomdata.density = atomcalcs.dens_result.get_density() atomdata.wavefuncs = self._get_standardized_compressed_wfcs( atomconfig, atomcalcs.wave_result) + atomdata.dens_wavefuncs = self._get_standardized_compressed_dens_wfcs( + atomconfig, atomcalcs.dens_result) + atomdata.occshells = atomconfig.occshells return atomdata + @staticmethod + def _get_standardized_compressed_dens_wfcs(atomconfig, wavecomp_result): + wavefuncs = [] + + for qn, _ in atomconfig.occshells: + nn = qn[0] + ll = qn[1] + wfc012 = wavecomp_result.get_dens_wavefunction(nn, ll) + wfc0_data = wfc012.data[:, 0] + wfc0_grid = wfc012.grid + norm = wfc0_grid.dot(wfc0_data, wfc0_data) + logger.debug("Norm for wavefunc {:d}{:s}: {:f}".format( + nn, sc.ANGMOM_TO_SHELL[ll], norm)) + wfc0 = soc.GridData(wfc0_grid, wfc0_data) + sign = get_normalized_sign(nn, ll, wfc0) + logger.debug("Sign for wavefunc {:d}{:s}: {:.1f}".format( + nn, sc.ANGMOM_TO_SHELL[ll], sign)) + wfc012.data *= sign + newwave = (nn, ll, wfc012) + wavefuncs.append(newwave) + return wavefuncs + + @staticmethod def _get_standardized_compressed_wfcs(atomconfig, wavecomp_result): wavefuncs = [] waves_found_for_shell = {} for nn, ll in atomconfig.valenceshells: wfc012 = wavecomp_result.get_wavefunction(nn, ll) - wfc0_data = wfc012.data[:,0] + wfc0_data = wfc012.data[:, 0] wfc0_grid = wfc012.grid norm = wfc0_grid.dot(wfc0_data, wfc0_data) logger.debug("Norm for wavefunc {:d}{:s}: {:f}".format( @@ -283,7 +309,7 @@ def _get_standardized_compressed_wfcs(atomconfig, wavecomp_result): logger.debug(msg.format(*coeffs)) wfc012 = orthogonalize_wave_and_derivatives( wfc012, previous_wfcs, coeffs) - newwave = ( nn, ll, wfc012 ) + newwave = (nn, ll, wfc012) if ll in waves_found_for_shell: waves_found_for_shell[ll].append(newwave) else: @@ -343,6 +369,6 @@ def orthogonalize_wave_and_derivatives(wavefunc, prev_wavefuncs, coeffs): wfcnew_data = wavefunc.data.copy() for coeff, wfcprev in zip(coeffs, prev_wavefuncs): wfcnew_data -= coeff * wfcprev.data - norm = wavefunc.grid.dot(wfcnew_data[:,0], wfcnew_data[:,0]) + norm = wavefunc.grid.dot(wfcnew_data[:, 0], wfcnew_data[:, 0]) wfcnew_data /= norm return soc.GridData(wavefunc.grid, wfcnew_data) diff --git a/sktools/src/sktools/taggedfile.py b/sktools/src/sktools/taggedfile.py index c74a0356..d6fd5856 100644 --- a/sktools/src/sktools/taggedfile.py +++ b/sktools/src/sktools/taggedfile.py @@ -4,8 +4,8 @@ class TaggedFile(OrderedDict): - CONVERTER = { "real": np.float, - "integer": np.int, + CONVERTER = { "real": np.float64, + "integer": np.int64, "logical": lambda x: x.lower() == "t" } @@ -17,11 +17,9 @@ class TaggedFile(OrderedDict): float: "real", bool: "logical", str: "string", - } + } DTYPE_FORMATS = { - # Numpy 1.6.1 can't format "int64" as integers in Python 3.2 - #np.dtype("int64"): ( 3, "{:20d}"), np.dtype("int64"): ( 3, "{:20d}"), np.dtype("float64"): (3, "{:23.15E}"), np.dtype("bool"): (40, "{:2s}"), @@ -29,7 +27,7 @@ class TaggedFile(OrderedDict): int: " {:20d}", float: " {:23.15E}", bool: " {:s}", - } + } def __init__(self, initvalues=None): if initvalues: @@ -41,46 +39,63 @@ def tofile(self, fp): for key, value in self.items(): if isinstance(value, np.ndarray): dtype = value.dtype - fp.write("@{:s}:{:s}:{:d}:{:s}\n".format( - key, self.DTYPE_NAMES[dtype], len(value.shape), - ",".join([ str(dd) for dd in value.shape]))) + fp.write( + "@{:s}:{:s}:{:d}:{:s}\n".format( + key, + self.DTYPE_NAMES[dtype], + len(value.shape), + ",".join([str(dd) for dd in value.shape]), + ) + ) nitem, formstr = self.DTYPE_FORMATS[dtype] if dtype == np.dtype("bool"): - value = np.where(value, 'T', 'F') - self._lineformattedwrite(fp, nitem, formstr, - value.ravel(order="F")) + value = np.where(value, "T", "F") + self._lineformattedwrite(fp, nitem, formstr, value.ravel(order="F")) elif isinstance(value, str): dtype = str nn = len(value) - fp.write("@{:s}:{:s}:{:d}:{:d}\n".format( - key, self.DTYPE_NAMES[dtype], 1, nn)) + fp.write( + "@{:s}:{:s}:{:d}:{:d}\n".format(key, self.DTYPE_NAMES[dtype], 1, nn) + ) nitem, formstr = self.DTYPE_FORMATS[dtype] for ii in range(nitem, nn + 1, nitem): - fp.write(formstr.format(value[ii-nitem:ii]) + "\n") + fp.write(formstr.format(value[ii - nitem : ii]) + "\n") remaining = nn % nitem if remaining: - fp.write(formstr.format(value[nn-remaining:nn]) + "\n") + fp.write(formstr.format(value[nn - remaining : nn]) + "\n") else: dtype = type(value) - fp.write("@{:s}:{:s}:{:d}:\n".format( - key, self.DTYPE_NAMES[dtype], 0)) + fp.write("@{:s}:{:s}:{:d}:\n".format(key, self.DTYPE_NAMES[dtype], 0)) if isinstance(value, bool): value = "T" if value else "F" fp.write(self.DTYPE_FORMATS[dtype].format(value)) fp.write("\n") - def _lineformattedwrite(self, fp, nitem, formstr, valuelist): nn = len(valuelist) - lineformstr = " ".join(nitem * [ formstr, ]) + "\n" + lineformstr = ( + " ".join( + nitem + * [ + formstr, + ] + ) + + "\n" + ) for ii in range(nitem, nn + 1, nitem): - fp.write(lineformstr.format(*valuelist[ii-nitem:ii])) + fp.write(lineformstr.format(*valuelist[ii - nitem : ii])) remaining = nn % nitem if remaining: - lineformstr = " ".join(remaining * [ formstr, ]) + "\n" - fp.write(lineformstr.format(*valuelist[nn-remaining:nn])) - - + lineformstr = ( + " ".join( + remaining + * [ + formstr, + ] + ) + + "\n" + ) + fp.write(lineformstr.format(*valuelist[nn - remaining : nn])) @classmethod def fromfile(cls, fp, transpose=False): @@ -102,11 +117,11 @@ def fromfile(cls, fp, transpose=False): dtype = words[1] dim = int(words[2]) if dim: - shape = [ int(dd) for dd in words[3].split(",") ] + shape = [int(dd) for dd in words[3].split(",")] if dtype == "string": value = "".join(tmp) else: - elems = [ cls.CONVERTER[dtype](ss) for ss in tmp ] + elems = [cls.CONVERTER[dtype](ss) for ss in tmp] value = np.array(elems).reshape(shape, order="F") if transpose: value = value.transpose() diff --git a/sktools/src/sktools/xcfunctionals.py b/sktools/src/sktools/xcfunctionals.py new file mode 100644 index 00000000..47e53ec5 --- /dev/null +++ b/sktools/src/sktools/xcfunctionals.py @@ -0,0 +1,248 @@ +'''Defines supported xc-functionals.''' + + +import sktools.hsd as hsd +import sktools.hsd.converter as conv +import sktools.common as sc + + +class XCPBE0(sc.ClassDict): + '''Globald PBE0 hybrid xc-functional. + + Attributes + ---------- + alpha (float): fraction of the global exact HF exchange + ''' + + @classmethod + def fromhsd(cls, root, query): + '''Creates instance from a HSD-node and with given query object.''' + + alpha, child = query.getvalue(root, 'alpha', conv.float0, + returnchild=True) + if not 0.0 <= alpha <= 1.0: + raise hsd.HSDInvalidTagValueException( + msg='Invalid alpha CAM-parameter {:f}'.format(alpha), + node=child) + + if not 0.0 <= alpha <= 1.0: + raise hsd.HSDInvalidTagValueException( + msg='Invalid global HFX portion alpha={:f}!\n' + .format(alpha) + + 'Should satisfy 0.0 <= alpha <= 1.0', node=child) + + myself = cls() + myself.type = 'pbe0' + # dummy omega + myself.omega = 1.0 + myself.alpha = alpha + # dummy beta + myself.beta = 0.0 + return myself + + +class XCB3LYP(sc.ClassDict): + '''Globald B3LYP hybrid xc-functional.''' + + @classmethod + def fromhsd(cls, root, query): + '''Creates instance from a HSD-node and with given query object.''' + + myself = cls() + myself.type = 'b3lyp' + # dummy omega + myself.omega = 1.0 + myself.alpha = 0.2 + myself.beta = 0.0 + return myself + + +class XCCAMYB3LYP(sc.ClassDict): + '''Range-separated CAMY-B3LYP xc-functional. + + Attributes + ---------- + omega (float): range-separation parameter + alpha (float): fraction of the global exact HF exchange + beta (float): determines (alpha + beta) fraction of long-range HF exchange + ''' + + @classmethod + def fromhsd(cls, root, query): + '''Creates instance from a HSD-node and with given query object.''' + omega, child = query.getvalue(root, 'omega', conv.float0, + returnchild=True) + if omega <= 0.0: + raise hsd.HSDInvalidTagValueException( + msg='Invalid rs-parameter {:f}'.format(omega), + node=child) + + alpha, child = query.getvalue(root, 'alpha', conv.float0, + returnchild=True) + + beta, child = query.getvalue(root, 'beta', conv.float0, + returnchild=True) + + if not alpha + beta > 0.0: + raise hsd.HSDInvalidTagValueException( + msg='Invalid CAM-parameter combination alpha={:f}, beta={:f}!\n' + .format(alpha, beta) + + 'Should satisfy alpha + beta > 0.0', node=child) + + myself = cls() + myself.type = 'camy-b3lyp' + myself.omega = omega + myself.alpha = alpha + myself.beta = beta + return myself + + +class XCCAMYPBEH(sc.ClassDict): + '''Range-separated CAMY-PBEh xc-functional. + + Attributes + ---------- + omega (float): range-separation parameter + alpha (float): fraction of the global exact HF exchange + beta (float): determines (alpha + beta) fraction of long-range HF exchange + ''' + + @classmethod + def fromhsd(cls, root, query): + '''Creates instance from a HSD-node and with given query object.''' + omega, child = query.getvalue(root, 'omega', conv.float0, + returnchild=True) + if omega <= 0.0: + raise hsd.HSDInvalidTagValueException( + msg='Invalid rs-parameter {:f}'.format(omega), + node=child) + + alpha, child = query.getvalue(root, 'alpha', conv.float0, + returnchild=True) + + beta, child = query.getvalue(root, 'beta', conv.float0, + returnchild=True) + + if not alpha + beta > 0.0: + raise hsd.HSDInvalidTagValueException( + msg='Invalid CAM-parameter combination alpha={:f}, beta={:f}!\n' + .format(alpha, beta) + + 'Should satisfy alpha + beta > 0.0', node=child) + + myself = cls() + myself.type = 'camy-pbeh' + myself.omega = omega + myself.alpha = alpha + myself.beta = beta + return myself + + +class XCLCYBNL(sc.ClassDict): + '''Long-range corrected BNL xc-functional. + + Attributes + ---------- + omega (float): range-separation parameter + ''' + + @classmethod + def fromhsd(cls, root, query): + '''Creates instance from a HSD-node and with given query object.''' + omega, child = query.getvalue(root, 'omega', conv.float0, + returnchild=True) + if omega <= 0.0: + raise hsd.HSDInvalidTagValueException( + msg='Invalid rs-parameter {:f}'.format(omega), + node=child) + + myself = cls() + myself.type = 'lcy-bnl' + myself.omega = omega + myself.alpha = 0.0 + myself.beta = 1.0 + return myself + + +class XCLCYPBE(sc.ClassDict): + '''Long-range corrected PBE xc-functional. + + Attributes + ---------- + omega (float): range-separation parameter + ''' + + @classmethod + def fromhsd(cls, root, query): + '''Creates instance from a HSD-node and with given query object.''' + omega, child = query.getvalue(root, 'omega', conv.float0, + returnchild=True) + if omega <= 0.0: + raise hsd.HSDInvalidTagValueException( + msg='Invalid rs-parameter {:f}'.format(omega), + node=child) + + myself = cls() + myself.type = 'lcy-pbe' + myself.omega = omega + myself.alpha = 0.0 + myself.beta = 1.0 + return myself + + +class XCLocal(sc.ClassDict): + '''Local xc-functional.''' + + @classmethod + def fromhsd(cls, root, query): + '''Creates instance from a HSD-node and with given query object.''' + myself = cls() + myself.type = 'local' + return myself + + +class XCPBE(sc.ClassDict): + '''Semi-local PBE xc-functional.''' + + @classmethod + def fromhsd(cls, root, query): + '''Creates instance from a HSD-node and with given query object.''' + myself = cls() + myself.type = 'pbe' + return myself + + +class XCBLYP(sc.ClassDict): + '''Semi-local BLYP xc-functional.''' + + @classmethod + def fromhsd(cls, root, query): + '''Creates instance from a HSD-node and with given query object.''' + myself = cls() + myself.type = 'blyp' + return myself + + +class XCLDA(sc.ClassDict): + '''Local LDA xc-functional.''' + + @classmethod + def fromhsd(cls, root, query): + '''Creates instance from a HSD-node and with given query object.''' + myself = cls() + myself.type = 'lda' + return myself + + +# Registered xc-functionals with corresponding HSD name as key: +XCFUNCTIONALS = { + 'lcy-bnl': XCLCYBNL, + 'lcy-pbe': XCLCYPBE, + 'local': XCLocal, + 'pbe': XCPBE, + 'lda': XCLDA, + 'blyp': XCBLYP, + 'pbe0': XCPBE0, + 'b3lyp': XCB3LYP, + 'camy-b3lyp': XCCAMYB3LYP, + 'camy-pbeh': XCCAMYPBEH +} diff --git a/sktwocnt/lib/CMakeLists.txt b/sktwocnt/lib/CMakeLists.txt index fd8112cb..779ef7c0 100644 --- a/sktwocnt/lib/CMakeLists.txt +++ b/sktwocnt/lib/CMakeLists.txt @@ -1,21 +1,16 @@ set(sources-f90 bisection.f90 - coordtrans.f90 - dftbxc.f90 - gridgenerator.f90 gridorbital.f90 - interpolation.f90 - partition.f90 quadrature.f90 - sphericalharmonics.f90 - twocnt.f90) + twocnt.f90 + xcfunctionals.f90) add_library(skprogs-sktwocnt ${sources-f90}) target_link_libraries(skprogs-sktwocnt skprogs-common) -# for a potential libxc integration: -# target_link_libraries(skprogs-sktwocnt skprogs-common Libxc::xcf90 Libxc::xc) +target_link_libraries(skprogs-sktwocnt skprogs-common Libxc::xcf03 Libxc::xc) +target_link_libraries(skprogs-sktwocnt skprogs-common LAPACK::LAPACK) set(moddir ${CMAKE_CURRENT_BINARY_DIR}/modfiles) set_target_properties(skprogs-sktwocnt PROPERTIES Fortran_MODULE_DIRECTORY ${moddir}) diff --git a/sktwocnt/lib/dftbxc.f90 b/sktwocnt/lib/dftbxc.f90 deleted file mode 100644 index 45d0c3f6..00000000 --- a/sktwocnt/lib/dftbxc.f90 +++ /dev/null @@ -1,474 +0,0 @@ -!> Module that provides exchange-correlation DFT routines. -module dftxc - - use, intrinsic :: ieee_arithmetic - use common_accuracy, only : dp - use common_constants, only : pi - - !! vanderhe: proposed libxc integration - ! use, intrinsic :: iso_c_binding, only : c_size_t - ! use xc_f90_lib_m, only : xc_f90_func_t, xc_f90_func_info_t, xc_f90_func_init,& - ! & xc_f90_func_get_info, xc_f90_lda_vxc, xc_f90_gga_vxc, xc_f90_func_end, XC_LDA_X,& - ! & XC_LDA_C_PW, XC_GGA_X_PBE, XC_GGA_C_PBE, XC_UNPOLARIZED - - implicit none - private - - public :: getxcpot_ldapw91, getxcpot_ggapbe - - !> pre-factor for re-normalization - real(dp), parameter :: rec4pi = 1.0_dp / (4.0_dp * pi) - - -contains - - !> Calculates xc-potential based on the LDA-PW91 functional. - subroutine getxcpot_ldapw91(rho4pi, xcpot) - - !> density times 4pi on grid - real(dp), intent(in) :: rho4pi(:) - - !> resulting xc-potential - real(dp), intent(out) :: xcpot(:) - - !! density with libxc compatible normalization - real(dp), allocatable :: rho(:) - - !! local Seitz radius, needed for functional evaluation - real(dp), allocatable :: rs(:) - - !! exchange and correlation (up, down) potential of a single grid point - real(dp) :: vx, vcup, vcdn - - !! exchange and correlation energy of a single grid point - real(dp) :: ex, ec - - !! number of density grid points - integer :: nn - - !! auxiliary variable - integer :: ii - - nn = size(rho4pi) - allocate(rs(nn), rho(nn)) - - ! renorm rho (incoming quantity is 4pi normed) - rho = rho4pi * rec4pi - ! note: rho is normed to 4pi, therefore 4*pi missing in rs - rs = (3.0_dp / rho4pi)**(1.0_dp / 3.0_dp) - do ii = 1, nn - if (rho(ii) < epsilon(1.0_dp)) then - xcpot(ii) = 0.0_dp - else - call correlation_pbe(rs(ii), 0.0_dp, 0.0_dp, 0.0_dp, 0.0_dp, 0.0_dp, 0, ec, vcup, vcdn) - call exchange_pbe(rho(ii), 0.0_dp, 0.0_dp, 0.0_dp, 0, ex, vx) - xcpot(ii) = vcup + vx - end if - end do - - !! vanderhe: proposed libxc integration - !! --> but Hamiltonian matrix elements differ up to 1e-07 a.u. (something is wrong)!? - - ! !! libxc related objects - ! type(xc_f90_func_t) :: xcfunc_x, xcfunc_c - ! type(xc_f90_func_info_t) :: xcinfo - - ! !! density with libxc compatible normalization - ! real(dp), allocatable :: rho(:) - - ! !! exchange and correlation potential on grid - ! real(dp), allocatable :: vx(:), vc(:) - - ! !! number of density grid points - ! integer(c_size_t) :: nn - - ! call xc_f90_func_init(xcfunc_x, XC_LDA_X, XC_UNPOLARIZED) - ! xcinfo = xc_f90_func_get_info(xcfunc_x) - ! call xc_f90_func_init(xcfunc_c, XC_LDA_C_PW, XC_UNPOLARIZED) - ! xcinfo = xc_f90_func_get_info(xcfunc_x) - - ! nn = size(rho4pi) - ! allocate(vx(nn), vc(nn)) - - ! rho = rho4pi * rec4pi - - ! call xc_f90_lda_vxc(xcfunc_x, nn, rho, vx) - ! call xc_f90_lda_vxc(xcfunc_c, nn, rho, vc) - - ! xcpot(:) = vx + vc - - ! call xc_f90_func_end(xcfunc_x) - ! call xc_f90_func_end(xcfunc_c) - - end subroutine getxcpot_ldapw91 - - - !> Calculates xc-potential based on the GGA-PBE functional. - subroutine getxcpot_ggapbe(rho4pi, absgr4pi, laplace4pi, gr_grabsgr4pi, xcpot) - - !> density times 4pi on grid - real(dp), intent(in) :: rho4pi(:) - - !> absolute gradient of density times 4pi on grid - real(dp), intent(in) :: absgr4pi(:) - - !> laplace operator acting on density times 4pi on grid - real(dp), intent(in) :: laplace4pi(:) - - !> (grad rho4pi) * grad(abs(grad rho4pi)) - real(dp), intent(in) :: gr_grabsgr4pi(:) - - !> resulting xc-potential - real(dp), intent(out) :: xcpot(:) - - !! density with libxc compatible normalization - real(dp), allocatable :: rho(:) - - !! absolute gradient of density on grid - real(dp), allocatable :: absgr(:) - - !! laplace operator acting on density on grid - real(dp), allocatable :: laplace(:) - - !! (grad rho) * grad(abs(grad rho)) / rho**2 - !! actually calculated based on rho4pi, but 4pi cancels out - real(dp), allocatable :: gr_grabsgr(:) - - !! number of density grid points - integer :: nn - - !! auxiliary variables - real(dp), allocatable :: rs(:), fac(:), tt(:), uu(:), vv(:) - real(dp), allocatable :: ss(:), u2(:), v2(:) - real(dp) :: alpha, zeta, gg, ww - real(dp) :: ec, vcup, vcdn, ex, vx - integer :: ii - - nn = size(rho4pi) - allocate(rho(nn), absgr(nn), laplace(nn), gr_grabsgr(nn)) - allocate(rs(nn), fac(nn), tt(nn), uu(nn), vv(nn), ss(nn), u2(nn), v2(nn)) - - ! renorm rho and derivatives (incoming quantities are 4pi normed) - rho = rho4pi * rec4pi - absgr = absgr4pi / rho4pi - laplace = laplace4pi / rho4pi - gr_grabsgr = gr_grabsgr4pi / rho4pi**2 - - ! note: rho is normed to 4pi, therefore 4*pi missing in rs - rs = (3.0_dp / rho4pi)**(1.0_dp / 3.0_dp) - zeta = 0.0_dp - gg = 1.0_dp - alpha = (4.0_dp / (9.0_dp * pi))**(1.0_dp / 3.0_dp) - - ! factors for the correlation routine - fac = sqrt(pi / 4.0_dp * alpha * rs) / (2.0_dp * gg) - tt = absgr * fac - uu = gr_grabsgr * fac**3 - vv = laplace * fac**2 - ww = 0.0_dp - - ! factors for the exchange routine - fac = alpha * rs / 2.0_dp - ss = absgr * fac - u2 = gr_grabsgr * fac**3 - v2 = laplace * fac**2 - - do ii = 1, nn - if (rho(ii) < epsilon(1.0_dp)) then - xcpot(ii) = 0.0_dp - else - call correlation_pbe(rs(ii), zeta, tt(ii), uu(ii), vv(ii), ww, 1, ec, vcup, vcdn) - call exchange_pbe(rho(ii), ss(ii), u2(ii), v2(ii), 1, ex, vx) - if (ieee_is_nan(vcup)) then - print *, "VCUP NAN", ii, rs(ii), tt(ii), uu(ii), vv(ii) - print *, ":", absgr(ii), gr_grabsgr(ii), laplace(ii) - stop - elseif (ieee_is_nan(vx)) then - print *, "VX NAN", ii - stop - end if - xcpot(ii) = vcup + vx - end if - end do - - !! vanderhe: proposed libxc integration - !! --> but Hamiltonian matrix elements differ up to 1e-02 a.u. (something is wrong)!? - - ! !! libxc related objects - ! type(xc_f90_func_t) :: xcfunc_x, xcfunc_c - ! type(xc_f90_func_info_t) :: xcinfo - - ! !! density with libxc compatible normalization - ! real(dp), allocatable :: rho(:) - - ! !! contracted gradients of the density - ! real(dp), allocatable :: sigma(:) - - ! !! exchange and correlation potential on grid - ! real(dp), allocatable :: vx(:), vc(:) - - ! !! first partial derivative of the energy per unit volume in terms of sigma - ! real(dp), allocatable :: vxsigma(:), vcsigma(:) - - ! !! number of density grid points - ! integer(c_size_t) :: nn - - ! nn = size(rho4pi) - ! allocate(vx(nn), vc(nn), vxsigma(nn), vcsigma(nn)) - - ! rho = rho4pi * rec4pi - ! sigma = (absgr4pi * rec4pi)**2 - - ! call xc_f90_func_init(xcfunc_x, XC_GGA_X_PBE, XC_UNPOLARIZED) - ! xcinfo = xc_f90_func_get_info(xcfunc_x) - ! call xc_f90_func_init(xcfunc_c, XC_GGA_C_PBE, XC_UNPOLARIZED) - ! xcinfo = xc_f90_func_get_info(xcfunc_x) - - ! call xc_f90_gga_vxc(xcfunc_x, nn, rho, sigma, vx, vxsigma) - ! call xc_f90_gga_vxc(xcfunc_c, nn, rho, sigma, vc, vcsigma) - - ! xcpot(:) = vx + vc - - ! call xc_f90_func_end(xcfunc_x) - ! call xc_f90_func_end(xcfunc_c) - - end subroutine getxcpot_ggapbe - - - SUBROUTINE CORRELATION_PBE(RS, ZET, T, UU, VV, WW, igga, ec, vc1, vc2) - - ! - ! APART FROM COSMETICS THIS IS IN FACT BURKEs FORTRAN REFERENCE IMPLEMENTATION - ! - - ! This is the PBE and PW-LDA Correlation routine. - - IMPLICIT REAL(8) (A - H, O - Z) - !---------------------------------------------------------------------- - ! INPUT: RS=SEITZ RADIUS=(3/4pi rho)^(1/3) - ! : ZET=RELATIVE SPIN POLARIZATION = (rhoup-rhodn)/rho - ! : t=ABS(GRAD rho)/(rho*2.*KS*G) -- only needed for PBE - ! : UU=(GRAD rho)*GRAD(ABS(GRAD rho))/(rho**2 * (2*KS*G)**3) - ! : VV=(LAPLACIAN rho)/(rho * (2*KS*G)**2) - ! : WW=(GRAD rho)*(GRAD ZET)/(rho * (2*KS*G)**2 - ! : UU,VV,WW, only needed for PBE potential - ! : igga=flag to do gga (0=>LSD only) - ! output: ecl=lsd correlation energy from [a] - ! : ecn=NONLOCAL PART OF CORRELATION ENERGY PER ELECTRON - ! : vcup=lsd up correlation potential - ! : vcdn=lsd dn correlation potential - ! : dvcup=nonlocal correction to vcup - ! : dvcdn=nonlocal correction to vcdn - !---------------------------------------------------------------------- - ! References: - ! [a] J.P.~Perdew, K.~Burke, and M.~Ernzerhof, - ! {\sl Generalized gradient approximation made simple}, sub. - ! to Phys. Rev.Lett. May 1996. - ! [b] J. P. Perdew, K. Burke, and Y. Wang, {\sl Real-space cutoff - ! construction of a generalized gradient approximation: The PW91 - ! density functional}, submitted to Phys. Rev. B, Feb. 1996. - ! [c] J. P. Perdew and Y. Wang, Phys. Rev. B {\bf 45}, 13244 (1992). - !---------------------------------------------------------------------- - ! bet=coefficient in gradient expansion for correlation, [a](4). - integer :: igga - parameter(thrd=1._dp / 3._dp, thrdm=-thrd, thrd2=2._dp * thrd) - parameter(GAM=0.5198420997897463295344212145565_dp) - parameter(thrd4=4._dp * thrd, fzz=8._dp / (9._dp * GAM)) - parameter(gamma=0.03109069086965489503494086371273_dp) - parameter(bet=0.06672455060314922_dp, delt=bet / gamma) - dimension u(6), p(6), s(6) - data u/0.03109070_dp, 0.2137000_dp, 7.5957000_dp,& - & 3.58760000_dp, 1.6382000_dp, 0.4929400_dp/ - data p/0.01554535_dp, 0.2054800_dp, 14.1189000_dp,& - & 6.19770000_dp, 3.3662000_dp, 0.6251700_dp/ - data s/0.01688690_dp, 0.1112500_dp, 10.3570000_dp,& - & 3.62310000_dp, 0.8802600_dp, 0.4967100_dp/ - !---------------------------------------------------------------------- - ! find LSD energy contributions, using [c](10) . - ! EU=unpolarized LSD correlation energy , EURS=dEU/drs - ! EP=fully polarized LSD correlation energy , EPRS=dEP/drs - ! ALFM=-spin stiffness, [c](3) , ALFRSM=-dalpha/drs . - ! F=spin-scaling factor from [c](9). - ! construct ecl, using [c](8) . - ! - - rtrs = dsqrt(rs) - Q0 = -2._dp * u(1) * (1._dp + u(2) * rtrs * rtrs) - Q1 = 2._dp * u(1) * rtrs * (u(3) + rtrs * (u(4) + rtrs * (u(5) + u(6) * rtrs))) - Q2 = DLOG(1._dp + 1._dp / Q1) - Q3 = u(1) * (u(3) / rtrs + 2._dp * u(4) + rtrs * (3._dp * u(5) + 4._dp * u(6) * rtrs)) - EU = Q0 * Q2 - EURS = -2._dp * u(1) * u(2) * Q2 - Q0 * Q3 / (Q1 * (1._dp + Q1)) - Q0 = -2._dp * p(1) * (1._dp + p(2) * rtrs * rtrs) - Q1 = 2._dp * p(1) * rtrs * (p(3) + rtrs * (p(4) + rtrs * (p(5) + p(6) * rtrs))) - Q2 = DLOG(1._dp + 1._dp / Q1) - Q3 = p(1) * (p(3) / rtrs + 2._dp * p(4) + rtrs * (3._dp * p(5) + 4._dp * p(6) * rtrs)) - EP = Q0 * Q2 - EPRS = -2._dp * p(1) * p(2) * Q2 - Q0 * Q3 / (Q1 * (1._dp + Q1)) - Q0 = -2._dp * s(1) * (1._dp + s(2) * rtrs * rtrs) - Q1 = 2._dp * s(1) * rtrs * (s(3) + rtrs * (s(4) + rtrs * (s(5) + s(6) * rtrs))) - Q2 = DLOG(1._dp + 1._dp / Q1) - Q3 = s(1) * (s(3) / rtrs + 2._dp * s(4) + rtrs * (3._dp * s(5) + 4._dp * s(6) * rtrs)) - ALFM = Q0 * Q2 - ALFRSM = -2._dp * s(1) * s(2) * Q2 - Q0 * Q3 / (Q1 * (1._dp + Q1)) - - Z4 = ZET**4 - F = ((1._dp + ZET)**THRD4 + (1._dp - ZET)**THRD4 - 2._dp) / GAM - ECL = EU * (1._dp - F * Z4) + EP * F * Z4 - ALFM * F * (1._dp - Z4) / FZZ - !---------------------------------------------------------------------- - ! LSD potential from [c](A1) - ! ECRS = dEc/drs , ECZET=dEc/dzeta , FZ = dF/dzeta [c](A2-A4) - ! - ECRS = EURS * (1._dp - F * Z4) + EPRS * F * Z4 - ALFRSM * F * (1._dp - Z4) / FZZ - FZ = THRD4 * ((1._dp + ZET)**THRD - (1._dp - ZET)**THRD) / GAM - ECZET = 4._dp * (ZET**3) * F * (EP - EU + ALFM / FZZ)& - & + FZ * (Z4 * EP - Z4 * EU - (1._dp - Z4) * ALFM / FZZ) - COMM = ECL - RS * ECRS / 3._dp - ZET * ECZET - VCUP = COMM + ECZET - VCDN = COMM - ECZET - if (igga .eq. 0) then - EC = ECL - VC1 = VCUP - VC2 = VCDN - return - end if - !---------------------------------------------------------------------- - ! PBE correlation energy - ! G=phi(zeta), given after [a](3) - ! DELT=bet/gamma , B=A of [a](8) - ! - G = ((1._dp + ZET)**thrd2 + (1._dp - ZET)**thrd2) / 2._dp - G3 = G**3 - PON = -ECL / (G3 * gamma) - B = DELT / (DEXP(PON) - 1._dp) - B2 = B * B - T2 = T * T - T4 = T2 * T2 - Q4 = 1._dp + B * T2 - Q5 = 1._dp + B * T2 + B2 * T4 - ECN = G3 * (BET / DELT) * DLOG(1._dp + DELT * Q4 * T2 / Q5) - EC = ECL + ECN - !---------------------------------------------------------------------- - ! ENERGY DONE. NOW THE POTENTIAL, using appendix E of [b]. - ! - G4 = G3 * G - T6 = T4 * T2 - RSTHRD = RS / 3._dp - ! GZ=((1._dp+zet)**thirdm-(1._dp-zet)**thirdm)/3._dp - ! ckoe: hack thirdm never gets defined, but 1-1 should be zero anyway - GZ = 0.0_dp - FAC = DELT / B + 1._dp - BG = -3._dp * B2 * ECL * FAC / (BET * G4) - BEC = B2 * FAC / (BET * G3) - Q8 = Q5 * Q5 + DELT * Q4 * Q5 * T2 - Q9 = 1._dp + 2._dp * B * T2 - hB = -BET * G3 * B * T6 * (2._dp + B * T2) / Q8 - hRS = -RSTHRD * hB * BEC * ECRS - FACT0 = 2._dp * DELT - 6._dp * B - FACT1 = Q5 * Q9 + Q4 * Q9 * Q9 - hBT = 2._dp * BET * G3 * T4 * ((Q4 * Q5 * FACT0 - DELT * FACT1) / Q8) / Q8 - hRST = RSTHRD * T2 * hBT * BEC * ECRS - hZ = 3._dp * GZ * ecn / G + hB * (BG * GZ + BEC * ECZET) - hT = 2._dp * BET * G3 * Q9 / Q8 - hZT = 3._dp * GZ * hT / G + hBT * (BG * GZ + BEC * ECZET) - FACT2 = Q4 * Q5 + B * T2 * (Q4 * Q9 + Q5) - FACT3 = 2._dp * B * Q5 * Q9 + DELT * FACT2 - hTT = 4._dp * BET * G3 * T * (2._dp * B / Q8 - (Q9 * FACT3 / Q8) / Q8) - COMM = ECN + HRS + HRST + T2 * HT / 6._dp + 7._dp * T2 * T * HTT / 6._dp - PREF = HZ - GZ * T2 * HT / G - FACT5 = GZ * (2._dp * HT + T * HTT) / G - COMM = COMM - PREF * ZET - UU * HTT - VV * HT - WW * (HZT - FACT5) - DVCUP = COMM + PREF - DVCDN = COMM - PREF - VC1 = VCUP + DVCUP - VC2 = VCDN + DVCDN - - RETURN - END subroutine CORRELATION_PBE - - - subroutine exchange_pbe(rho, s, u, t, igga, EX, VX) - - ! APART FROM COSMETICS THIS IS IN FACT BURKEs FORTRAN REFERENCE IMPLEMENTATION - - ! This is the PBE and PW-LDA Exchange routine. - - implicit integer(4) (i - n) - implicit real(8) (a - h, o - z) - - parameter(thrd=1._dp / 3._dp, thrd4=4._dp / 3._dp) - parameter(pi=3.14159265358979323846264338327950_dp) - parameter(ax=-0.738558766382022405884230032680836_dp) - - parameter(um=0.21951_dp, uk=0.8040_dp, ul=um / uk) - - parameter(ap=1.647127_dp, bp=0.980118_dp, cp=0.017399_dp) - parameter(aq=1.523671_dp, bq=0.367229_dp, cq=0.011282_dp) - parameter(ah=0.19645_dp, bh=7.7956_dp) - parameter(ahp=0.27430_dp, bhp=0.15084_dp, ahq=0.004_dp) - parameter(a1=0.19645_dp, a2=0.27430_dp, a3=0.15084_dp, a4=100._dp) - parameter(a=7.79560_dp, b1=0.004_dp, eps=1.d-15) - - !---------------------------------------------------------------------- - !---------------------------------------------------------------------- - ! GGA EXCHANGE FOR A SPIN-UNPOLARIZED ELECTRONIC SYSTEM - !---------------------------------------------------------------------- - ! INPUT rho : DENSITY - ! INPUT S: ABS(GRAD rho)/(2*KF*rho), where kf=(3 pi^2 rho)^(1/3) - ! INPUT U: (GRAD rho)*GRAD(ABS(GRAD rho))/(rho**2 * (2*KF)**3) - ! INPUT V: (LAPLACIAN rho)/(rho*(2*KF)**2) (for U,V, see PW86(24)) - ! input igga: (=0=>don't put in gradient corrections, just LDA) - ! OUTPUT: EXCHANGE ENERGY PER ELECTRON (LOCAL: EXL, NONLOCAL: EXN, - ! TOTAL: EX) AND POTENTIAL (VX) - !---------------------------------------------------------------------- - ! References: - ! [a]J.P.~Perdew, K.~Burke, and M.~Ernzerhof, submitted to PRL, May96 - ! [b]J.P. Perdew and Y. Wang, Phys. Rev. B {\bf 33}, 8800 (1986); - ! {\bf 40}, 3399 (1989) (E). - !---------------------------------------------------------------------- - ! Formulas: e_x[unif]=ax*rho^(4/3) [LDA] - ! ax = -0.75*(3/pi)^(1/3) - ! e_x[PBE]=e_x[unif]*FxPBE(s) - ! FxPBE(s)=1+uk-uk/(1+ul*s*s) [a](13) - ! uk, ul defined after [a](13) - !---------------------------------------------------------------------- - !---------------------------------------------------------------------- - ! construct LDA exchange energy density - - exunif = ax * rho**thrd - if ((igga .eq. 0) .or. (s .lt. eps)) then - EXL = exunif - EXN = 0._dp - EX = EXL + EXN - VX = exunif * thrd4 - return - end if - !---------------------------------------------------------------------- - ! construct GGA enhancement factor - ! find first and second derivatives of f and: - ! fs=(1/s)*df/ds and fss=dfs/ds = (d2f/ds2 - (1/s)*df/ds)/s - - ! - ! PBE enhancement factors checked against NRLMOL - ! - if (igga .eq. 1) then - p0 = 1._dp + ul * s**2 - f = 1._dp + uk - uk / p0 - fs = 2._dp * uk * ul / p0**2 - fss = -4._dp * ul * s * fs / p0 - end if - - ! - - EXL = exunif - EXN = exunif * (f - 1.0_dp) - EX = EXL + EXN - !---------------------------------------------------------------------- - ! energy done. calculate potential from [b](24) - ! - VX = exunif * (thrd4 * f - (u - thrd4 * s**3) * fss - t * fs) - - RETURN - END subroutine exchange_pbe - -end module dftxc diff --git a/sktwocnt/lib/gridorbital.f90 b/sktwocnt/lib/gridorbital.f90 index 9c3ecb4b..06cb594c 100644 --- a/sktwocnt/lib/gridorbital.f90 +++ b/sktwocnt/lib/gridorbital.f90 @@ -3,8 +3,8 @@ module gridorbital use common_accuracy, only : dp use common_constants, only : pi + use common_interpolation, only : polyinter, poly5zero use bisection, only : bisect - use interpolation, only : polyinter, poly5zero implicit none private diff --git a/sktwocnt/lib/interpolation.f90 b/sktwocnt/lib/interpolation.f90 deleted file mode 100644 index d20bb154..00000000 --- a/sktwocnt/lib/interpolation.f90 +++ /dev/null @@ -1,186 +0,0 @@ -!> Module that contains routines for inter- and extrapolation. -module interpolation - - use common_accuracy, only : dp - - implicit none - private - - public :: poly5zero, spline3_free, polyinter - - -contains - - !> Returns the value of a polynomial of 5th degree at x. - !! \details The polynomial is created with the following boundary conditions: - !! Its value, its 1st and 2nd derivatives are zero at x = 0 and agree with the provided values - !! at x = dx. - pure function poly5zero(y0, y0p, y0pp, xx, dx) result(yy) - - !> value of the polynom at x = dx - real(dp), intent(in) :: y0 - - !> value of the 1st derivative at x = dx - real(dp), intent(in) :: y0p - - !> value of the 2nd derivative at x = dx - real(dp), intent(in) :: y0pp - - !> point where the polynomial should be calculated - real(dp), intent(in) :: xx - - !> point, where the polynomials value and first two derivatives should take the provided values - real(dp), intent(in) :: dx - - !! value of the polynomial at xx - real(dp) :: yy - - real(dp) :: dx1, dx2, cc, bb, aa, xr - - ! f(x) = ax^5 + bx^4 + cx^3 + dx^2 + ex + f - ! f(0) = 0, f'(0) = 0, f''(0) = 0 --> d = e = f = 0 - - dx1 = y0p * dx - dx2 = y0pp * dx**2 - - ! c * (dx)**3 - cc = 10.0_dp * y0 - 4.0_dp * dx1 + 0.5_dp * dx2 - - ! b * (dx)**4 - bb = - 15.0_dp * y0 + 7.0_dp * dx1 - 1.0_dp * dx2 - - ! a * (dx)**5 - aa = 6.0_dp * y0 - 3.0_dp * dx1 + 0.5_dp * dx2 - - xr = xx / dx - yy = ((aa * xr + bb) * xr + cc) * xr**3 - - end function poly5zero - - - !! Returns the value of a free spline at a certain point. - !! \details The spline is created with the following boundary conditions: - !! Its value, 1st and 2nd derivatives agree with the provided values at - !! x = 0 and its value agrees with the provided value at x = dx. - !! \note If you want the value for a derivative, you have to query them both. - pure subroutine spline3_free(y0, y0p, y0pp, dx, ydx, xx, yy, yp, ypp) - - !> function value at x = 0 - real(dp), intent(in) :: y0 - - !> first derivative at x = 0 - real(dp), intent(in) :: y0p - - !> second derivative at x = 0 - real(dp), intent(in) :: y0pp - - !> function value at dx - real(dp), intent(in) :: ydx - - !> second fitting point - real(dp), intent(in) :: dx - - !> point to interpolate - real(dp), intent(in) :: xx - - !> value of the 3rd order polynomial at xx - real(dp), intent(out), optional :: yy - - !> first derivative at xx - real(dp), intent(out), optional :: yp - - !> second derivative at xx - real(dp), intent(out), optional :: ypp - - !! spline coefficients - real(dp) :: aa, bb, cc, dd - - !! reciprocal second fitting point - real(dp) :: dx1 - - ! assert(present(yp) .eqv. present(ypp)) - - dx1 = 1.0_dp / dx - - aa = y0 - bb = y0p - cc = 0.5_dp * y0pp - dd = (((ydx - y0) * dx1 - y0p) * dx1 - 0.5_dp * y0pp) * dx1 - - if (present(yy)) then - yy = ((dd * xx + cc) * xx + bb) * xx + aa - end if - - if (present(yp)) then - yp = (3.0_dp * dd * xx + 2.0_dp * cc) * xx + bb - ypp = 6.0_dp * dd * xx + 2.0_dp * cc - end if - - end subroutine spline3_free - - - !> Polynomial interpolation through given points. - !! \note The algorithm is based on the Numerical recipes. - pure function polyinter(xp, yp, xx) result(yy) - - !> x-coordinates of the fit points - real(dp), intent(in) :: xp(:) - - !> y-coordinates of the fit points - real(dp), intent(in) :: yp(:) - - !> point, where the polynomial should be evaluated - real(dp), intent(in) :: xx - - !! value of the polynomial - real(dp) :: yy - - !! number of interpolation abscissas - integer :: nn - - !! auxiliary variables - integer :: icl, ii, mm - real(dp) :: cc(size(xp)), dd(size(xp)) - real(dp) :: dx, dxnew, dyy, rtmp - - nn = size(xp) - - ! assert(nn > 1) - ! assert(size(yp) == nn) - - cc(:) = yp - dd(:) = yp - icl = 1 - dx = abs(xx - xp(icl)) - do ii = 2, nn - dxnew = abs(xx - xp(ii)) - if (dxnew < dx) then - icl = ii - dx = dxnew - end if - end do - yy = yp(icl) - icl = icl - 1 - do mm = 1, nn - 1 - do ii = 1, nn - mm - rtmp = xp(ii) - xp(ii + mm) - ! if (abs(rtmp) < epsilon(1.0_dp)) then - ! write(*,*) "Polint failed" - ! stop - ! end if - rtmp = (cc(ii + 1) - dd(ii)) / rtmp - cc(ii) = (xp(ii) - xx) * rtmp - dd(ii) = (xp(ii + mm) - xx) * rtmp - end do - if (2 * icl < nn - mm) then - dyy = cc(icl + 1) - else - dyy = dd(icl) - icl = icl - 1 - end if - yy = yy + dyy - end do - - end function polyinter - -end module interpolation diff --git a/sktwocnt/lib/quadrature.f90 b/sktwocnt/lib/quadrature.f90 index 0ba07791..f7cdd092 100644 --- a/sktwocnt/lib/quadrature.f90 +++ b/sktwocnt/lib/quadrature.f90 @@ -20,6 +20,9 @@ module quadratures !> weights real(dp), allocatable :: ww(:) + !> + real(dp), allocatable :: zz(:) + end type TQuadrature !> relative quadrature precision diff --git a/sktwocnt/lib/twocnt.f90 b/sktwocnt/lib/twocnt.f90 index 47f777ac..db0725b8 100644 --- a/sktwocnt/lib/twocnt.f90 +++ b/sktwocnt/lib/twocnt.f90 @@ -2,15 +2,29 @@ module twocnt use common_accuracy, only : dp - use common_constants, only : pi - use coordtrans, only : coordtrans_becke_12 - use gridorbital, only : TGridorb2 - use sphericalharmonics, only : TRealTessY, TRealTessY_init - use quadratures, only : TQuadrature, gauss_legendre_quadrature - use gridgenerator, only : gengrid2_12 - use partition, only : partition_becke_homo - use dftxc, only : getxcpot_ldapw91, getxcpot_ggapbe + use common_constants, only : pi, rec4pi + use common_anglib, only : initGaunt, freeGaunt, realGaunt + use common_coordtrans, only : coordtrans_becke_12, coordtrans_radial_becke2 + use common_sphericalharmonics, only : TRealTessY, TRealTessY_init + use common_quadratures, only : TQuadrature, gauss_legendre_quadrature, gauss_chebyshev_quadrature + use common_gridgenerator, only : gengrid1_1, gengrid2_2 + use common_partition, only : partition_becke_homo + use common_splines, only : spline3ders use common_fifo, only : TFiFoReal2 + use common_interpolation, only : get2ndNaturalSplineDerivs, get_cubic_spline + use common_poisson, only : solvePoisson, TBeckeGridParams, TBeckeIntegrator,& + & TBeckeIntegrator_init, TBeckeIntegrator_setKernelParam, TBeckeIntegrator_precompFdMatrix,& + & TBeckeIntegrator_buildLU, TBeckeIntegrator_getCoords, TBeckeIntegrator_solveHelmholz + + use gridorbital, only : TGridorb2 + use xcfunctionals, only : xcFunctional + + use, intrinsic :: iso_c_binding, only : c_size_t + + use xc_f03_lib_m, only : xc_f03_func_t, xc_f03_func_init, xc_f03_func_end, xc_f03_lda_vxc,& + & xc_f03_gga_vxc, XC_LDA_X, XC_LDA_X_YUKAWA, XC_LDA_C_PW, XC_GGA_X_PBE, XC_GGA_C_PBE,& + & XC_GGA_X_B88, XC_GGA_C_LYP, XC_GGA_X_SFAT_PBE, XC_HYB_GGA_XC_B3LYP,& + & XC_HYB_GGA_XC_CAMY_B3LYP, XC_UNPOLARIZED, xc_f03_func_set_ext_params implicit none private @@ -28,6 +42,18 @@ module twocnt !> angular momenta integer, allocatable :: angmoms(:) + !> number of core orbitals + integer :: nCore + + !> angular momenta of core orbitals + integer, allocatable :: coreAngmoms(:) + + !> occupation of core orbitals + real(dp), allocatable :: coreOcc(:) + + !> radial grid-orbital portion of core orbitals + type(TGridorb2), allocatable :: coreRad(:) + !> radial grid-orbital portion and 1st/2nd derivative type(TGridorb2), allocatable :: rad(:), drad(:), ddrad(:) @@ -49,9 +75,6 @@ module twocnt !> true, if density superposition is requested, otherwise potential superposition is applied logical :: tDensitySuperpos - !> xc-functional type (0: potential superposition, 1: LDA-PW91, 2: GGA-PBE) - integer :: ixc - !> start grid distance real(dp) :: r0 @@ -67,6 +90,38 @@ module twocnt !> number of integration points integer :: ninteg1, ninteg2 + !> range-separation parameter + real(dp) :: omega + + !> CAM alpha parameter + real(dp) :: camAlpha + + !> CAM beta parameter + real(dp) :: camBeta + + !> number of radial and angular Becke integration points + integer :: nRadial, nAngular + + !> maximum angular momentum for Becke integration + integer :: ll_max + + !> scaling factor of Becke transformation + real(dp) :: rm + + !> xc-functional type + !! (1: LDA-PW91, 2: GGA-PBE96, 3: GGA-BLYP, 4: LCY-PBE96, 5: LCY-BNL, 6: PBE0, 7: B3LYP, + !! 8: CAMY-B3LYP, 9: CAMY-PBEh) + integer :: iXC + + !! true, if a global hybrid functional is requested + logical :: tGlobalHybrid + + !! true, if a (long-range corrected) range-separated hybrid functional is requested + logical :: tLC + + !! true, if a CAM functional is requested + logical :: tCam + !> atomic properties of slateratom code, in the homonuclear case only atom1 is read type(TAtomdata) :: atom1, atom2 @@ -117,11 +172,14 @@ subroutine get_twocenter_integrals(inp, imap, skham, skover) !! database that holds Hamiltonian and overlap matrices type(TFiFoReal2) :: hamfifo, overfifo + !! radial full-range Hartree-Fock quadrature information + type(TQuadrature) :: radialHFQuadrature + !! integration grids of dimer atoms, holding spherical coordinates (r, theta) - real(dp), allocatable :: grid1(:,:), grid2(:,:) + real(dp), allocatable, target :: grid1(:,:), grid2(:,:), rr3(:,:) - !! ??? and integration weights - real(dp), allocatable :: dots(:), weights(:) + !! dot product of unit distance vectors and integration weights + real(dp), allocatable :: dots(:), weights(:), dummyWeights(:) !! relative density integration error for all dimer distances of a batch real(dp), allocatable :: denserr(:) @@ -159,6 +217,94 @@ subroutine get_twocenter_integrals(inp, imap, skham, skover) !! true, if maximum absolute Hamiltonian or overlap matrix element is below given tolerance logical :: tConverged + !! libxc related objects + type(xc_f03_func_t) :: xcfunc_xc, xcfunc_x, xcfunc_xsr, xcfunc_c + + !! Becke integrator instances + type(TBeckeIntegrator) :: beckeInt + + !! grid characteristics + type(TBeckeGridParams) :: beckeGridParams + + !! number of radial and angular integration abscissas + integer :: nRad, nAng + + if (inp%iXC == xcFunctional%LDA_PW91) then + call xc_f03_func_init(xcfunc_x, XC_LDA_X, XC_UNPOLARIZED) + call xc_f03_func_init(xcfunc_c, XC_LDA_C_PW, XC_UNPOLARIZED) + elseif (inp%iXC == xcFunctional%GGA_PBE96) then + call xc_f03_func_init(xcfunc_x, XC_GGA_X_PBE, XC_UNPOLARIZED) + call xc_f03_func_init(xcfunc_c, XC_GGA_C_PBE, XC_UNPOLARIZED) + elseif (inp%iXC == xcFunctional%GGA_BLYP) then + call xc_f03_func_init(xcfunc_x, XC_GGA_X_B88, XC_UNPOLARIZED) + call xc_f03_func_init(xcfunc_c, XC_GGA_C_LYP, XC_UNPOLARIZED) + elseif (inp%iXC == xcFunctional%LCY_PBE96) then + call xc_f03_func_init(xcfunc_x, XC_GGA_X_SFAT_PBE, XC_UNPOLARIZED) + call xc_f03_func_set_ext_params(xcfunc_x, [inp%omega]) + call xc_f03_func_init(xcfunc_c, XC_GGA_C_PBE, XC_UNPOLARIZED) + elseif (inp%iXC == xcFunctional%LCY_BNL) then + call xc_f03_func_init(xcfunc_x, XC_LDA_X_YUKAWA, XC_UNPOLARIZED) + call xc_f03_func_set_ext_params(xcfunc_x, [inp%omega]) + call xc_f03_func_init(xcfunc_c, XC_GGA_C_PBE, XC_UNPOLARIZED) + elseif (inp%iXC == 6) then + ! xpbe96 + call xc_f03_func_init(xcfunc_x, XC_GGA_X_PBE, XC_UNPOLARIZED) + ! cpbe96 + call xc_f03_func_init(xcfunc_c, XC_GGA_C_PBE, XC_UNPOLARIZED) + elseif (inp%iXC == 7) then + call xc_f03_func_init(xcfunc_xc, XC_HYB_GGA_XC_B3LYP, XC_UNPOLARIZED) + call xc_f03_func_set_ext_params(xcfunc_xc, [0.20_dp, 0.72_dp, 0.81_dp]) + elseif (inp%iXC == 8) then + call xc_f03_func_init(xcfunc_xc, XC_HYB_GGA_XC_CAMY_B3LYP, XC_UNPOLARIZED) + call xc_f03_func_set_ext_params(xcfunc_xc, [0.81_dp, inp%camAlpha + inp%camBeta,& + & -inp%camBeta, inp%omega]) + elseif (inp%iXC == 9) then + ! short-range xpbe96 + call xc_f03_func_init(xcfunc_xsr, XC_GGA_X_SFAT_PBE, XC_UNPOLARIZED) + call xc_f03_func_set_ext_params(xcfunc_xsr, [inp%omega]) + ! xpbe96 + call xc_f03_func_init(xcfunc_x, XC_GGA_X_PBE, XC_UNPOLARIZED) + ! cpbe96 + call xc_f03_func_init(xcfunc_c, XC_GGA_C_PBE, XC_UNPOLARIZED) + end if + + if (inp%tLC .or. inp%tCam) then + beckeGridParams%nRadial = inp%nRadial + beckeGridParams%nAngular = inp%nAngular + beckeGridParams%ll_max = inp%ll_max + beckeGridParams%rm = inp%rm + + ! inititalize the Becke integrator + call TBeckeIntegrator_init(beckeInt, beckeGridParams) + + call TBeckeIntegrator_setKernelParam(beckeInt, 0.1e-16_dp) + call TBeckeIntegrator_precompFdMatrix(beckeInt) + call TBeckeIntegrator_buildLU(beckeInt) + + !== Note: this is a workaround! == + ! we generate the LU decomposition for \omega \approx 0 and copy the LU decomposition into H4 + ! and permutation matrix into ipiv4 + beckeInt%fdmat%H4 = beckeInt%fdmat%H3 + beckeInt%fdmat%ipiv4 = beckeInt%fdmat%ipiv2 + call TBeckeIntegrator_setKernelParam(beckeInt, inp%omega) + call TBeckeIntegrator_precompFdMatrix(beckeInt) + call TBeckeIntegrator_buildLU(beckeInt) + + end if + + if (inp%tGlobalHybrid .or. inp%tCam) then + call gauss_chebyshev_quadrature(inp%nRadial, radialHFQuadrature) + ! generate spherical coordinate (r) for full-range Hartree-Fock contribution to H0 + call gengrid1_1(radialHFQuadrature, inp%rm, coordtrans_radial_becke2, rr3, dummyWeights) + else + ! stupid workaround: rr3 is always passed as rr3(:, 1) in getskintegrals() + allocate(rr3(1, 1)) + end if + + if (inp%tGlobalHybrid) then + call initGaunt(inp%ll_max) + end if + call gauss_legendre_quadrature(inp%ninteg1, quads(1)) call gauss_legendre_quadrature(inp%ninteg2, quads(2)) @@ -168,6 +314,7 @@ subroutine get_twocenter_integrals(inp, imap, skham, skover) else atom2 => inp%atom1 end if + call TIntegMap_init(imap, atom1, atom2) ! calculate lines for 1 Bohr in one batch. @@ -183,18 +330,23 @@ subroutine get_twocenter_integrals(inp, imap, skham, skover) nBatch = 0 denserrmax = 0.0_dp allocate(denserr(nBatchline)) - do + lpBatch: do allocate(skhambuffer(imap%ninteg, nBatchline)) allocate(skoverbuffer(imap%ninteg, nBatchline)) write(*, "(A,I0,A,F6.3,A,F6.3)") "Calculating ", nBatchline, " lines: r0 = ",& & inp%r0 + inp%dr * real(nBatch * nBatchline, dp), " dr = ", inp%dr - do ir = 1, nBatchline + lpDist: do ir = 1, nBatchline dist = inp%r0 + inp%dr * real(nBatch * nBatchline + ir - 1, dp) - call gengrid2_12(quads, coordtrans_becke_12, partition_becke_homo, beckepars, dist, grid1,& + write(*, "(A,F6.2,A)") 'Calculating dimer distance: ', dist, ' Bohr' + call gengrid2_2(quads, coordtrans_becke_12, partition_becke_homo, beckepars, dist, grid1,& & grid2, dots, weights) - call getskintegrals(atom1, atom2, grid1, grid2, dots, weights, inp%tDensitySuperpos,& - & inp%ixc, imap, skhambuffer(:, ir), skoverbuffer(:, ir), denserr(ir)) - end do + nRad = size(quads(1)%xx) + nAng = size(quads(2)%xx) + call getskintegrals(beckeInt, radialHFQuadrature, nRad, nAng, atom1, atom2, grid1, grid2,& + & rr3(:, 1), dots, weights, inp%tDensitySuperpos, inp%ll_max, inp%iXC, inp%camAlpha,& + & inp%camBeta, inp%tGlobalHybrid, inp%tLC, inp%tCam, imap, xcfunc_xc, xcfunc_x,& + & xcfunc_xsr, xcfunc_c, skhambuffer(:, ir), skoverbuffer(:, ir), denserr(ir)) + end do lpDist denserrmax = max(denserrmax, maxval(denserr)) maxabs = max(maxval(abs(skhambuffer)), maxval(abs(skoverbuffer))) if (tDynlen) then @@ -210,7 +362,8 @@ subroutine get_twocenter_integrals(inp, imap, skham, skover) call overfifo%push_alloc(skoverbuffer) exit end if - end do + end do lpBatch + if (.not. tConverged) then write(*, "(A,F6.2,A,ES10.3)") "Warning, maximal distance ", inp%maxdist,& & " reached! Max integral value:", maxabs @@ -221,20 +374,55 @@ subroutine get_twocenter_integrals(inp, imap, skham, skover) call hamfifo%popall_concat(skham) call overfifo%popall_concat(skover) + ! finalize libxc objects + if (inp%tGlobalHybrid .or. inp%tCam) then + if (inp%iXC == 9) then + call xc_f03_func_end(xcfunc_xsr) + call xc_f03_func_end(xcfunc_x) + call xc_f03_func_end(xcfunc_c) + elseif (inp%iXC == 6) then + call xc_f03_func_end(xcfunc_x) + call xc_f03_func_end(xcfunc_c) + else + call xc_f03_func_end(xcfunc_xc) + end if + else + call xc_f03_func_end(xcfunc_x) + call xc_f03_func_end(xcfunc_c) + end if + + ! finalize anglib (global Hybrids only) + if (inp%tGlobalHybrid) then + call freeGaunt() + end if + end subroutine get_twocenter_integrals !> Calculates SK-integrals. - subroutine getskintegrals(atom1, atom2, grid1, grid2, dots, weights, tDensitySuperpos, ixc, imap,& - & skham, skover, denserr) + subroutine getskintegrals(beckeInt, radialHFQuadrature, nRad, nAng, atom1, atom2, grid1, grid2,& + & rr3, dots, weights, tDensitySuperpos, ll_max, iXC, camAlpha, camBeta, tGlobalHybrid, tLC,& + & tCam, imap, xcfunc_xc, xcfunc_x, xcfunc_xsr, xcfunc_c, skham, skover, denserr) + + !> Becke integrator instances + type(TBeckeIntegrator), intent(inout) :: beckeInt + + !! radial full-range Hartree-Fock quadrature information + type(TQuadrature), intent(in) :: radialHFQuadrature + + !> number of radial and angular integration abscissas + integer, intent(in) :: nRad, nAng !> atomic property instances of dimer atoms - type(TAtomdata), intent(in) :: atom1, atom2 + type(TAtomdata), intent(in), pointer :: atom1, atom2 !> integration grids of dimer atoms, holding spherical coordinates (r, theta) real(dp), intent(in), target :: grid1(:,:), grid2(:,:) - !> ??? + !> evaluation points of radial wavefunction (full-range Hartree-Fock) + real(dp), intent(in) :: rr3(:) + + !> dot product of unit distance vectors real(dp), intent(in) :: dots(:) !> integration weights @@ -243,12 +431,35 @@ subroutine getskintegrals(atom1, atom2, grid1, grid2, dots, weights, tDensitySup !> true, if density superposition is requested, otherwise potential superposition is applied logical, intent(in) :: tDensitySuperpos - !> xc-functional type (0: potential superposition, 1: LDA-PW91, 2: GGA-PBE) - integer, intent(in) :: ixc + !> maximum angular momentum for Becke integration + integer, intent(in) :: ll_max + + !> xc-functional type + !! (1: LDA-PW91, 2: GGA-PBE96, 3: GGA-BLYP, 4: LCY-PBE96, 5: LCY-BNL, 6: PBE0, 7: B3LYP, + !! 8: CAMY-B3LYP, 9: CAMY-PBEh) + integer, intent(in) :: iXC + + !> CAM alpha parameter + real(dp), intent(in) :: camAlpha + + !> CAM beta parameter + real(dp), intent(in) :: camBeta + + !> true, if a global hybrid functional is requested + logical, intent(in) :: tGlobalHybrid + + !> true, if a (long-range corrected) range-separated hybrid functional is requested + logical, intent(in) :: tLC + + !> true, if a CAM functional is requested + logical, intent(in) :: tCam !> two-center integration mapping instance type(TIntegMap), intent(in) :: imap + !! libxc related objects for exchange and correlation + type(xc_f03_func_t), intent(in) :: xcfunc_xc, xcfunc_x, xcfunc_xsr, xcfunc_c + !> resulting Hamiltonian and overlap matrix real(dp), intent(out) :: skham(:), skover(:) @@ -270,35 +481,44 @@ subroutine getskintegrals(atom1, atom2, grid1, grid2, dots, weights, tDensitySup !! total potential and electron density of two atoms real(dp), allocatable :: potval(:), densval(:) - !! atomic 1st and 2nd density derivatives of atom 1 - real(dp), allocatable :: densval1p(:), densval1pp(:) + !! atomic 1st density derivatives of atom 1 + real(dp), allocatable :: densval1p(:) - !! atomic 1st and 2nd density derivatives of atom 2 - real(dp), allocatable :: densval2p(:), densval2pp(:) + !! atomic 1st density derivatives of atom 2 + real(dp), allocatable :: densval2p(:) !! real tesseral spherical harmonic for spherical coordinate (theta) of atom 1 and atom 2 real(dp), allocatable :: spherval1(:), spherval2(:) - !! higher-level density expressions - real(dp), allocatable :: absgr(:), laplace(:), gr_grabsgr(:) - !! temporary storage for Hamiltonian, overlap, density and pre-factors real(dp) :: integ1, integ2, dens, prefac + !! full-/long-range Hartree-Fock exchange contribution + real(dp) :: frx, lrx + !! number of integration points integer :: nGrid + !> number of density grid points, compatible with libxc signature + integer(c_size_t) :: nGridLibxc + !! orbital indices/angular momenta on the two atoms and interaction type integer :: i1, i2, l1, l2, mm - !! auxiliary variable + !! integral index integer :: ii + !! libxc related objects + real(dp), allocatable :: vxc(:), vx(:), vx_sr(:), vc(:) + real(dp), allocatable :: rhor(:), sigma(:), vxcsigma(:), vxsigma(:), vxsigma_sr(:), vcsigma(:) + real(dp), allocatable :: divvxc(:), divvx(:), divvc(:) + r1 => grid1(:, 1) theta1 => grid1(:, 2) r2 => grid2(:, 1) theta2 => grid2(:, 2) nGrid = size(r1) + nGridLibxc = nGrid allocate(radval1(nGrid, atom1%nbasis)) allocate(radval2(nGrid, atom2%nbasis)) @@ -319,37 +539,95 @@ subroutine getskintegrals(atom1, atom2, grid1, grid2, dots, weights, tDensitySup radval2pp(:, ii) = atom2%ddrad(ii)%getValue(r2) end do - allocate(potval(nGrid)) ifPotSup: if (.not. tDensitySuperpos) then - potval(:) = atom1%pot%getValue(r1) + atom2%pot%getValue(r2) + potval = atom1%pot%getValue(r1) + atom2%pot%getValue(r2) else allocate(densval(nGrid)) densval(:) = atom1%rho%getValue(r1) + atom2%rho%getValue(r2) - select case (ixc) - case (1) - ! LDA-PW91 xc-functional - call getxcpot_ldapw91(densval, potval) - case (2) - ! GGA-PBE xc-functional - allocate(densval1p(nGrid)) - allocate(densval1pp(nGrid)) - allocate(densval2p(nGrid)) - allocate(densval2pp(nGrid)) - densval1p(:) = atom1%drho%getValue(r1) - densval1pp(:) = atom1%ddrho%getValue(r1) - densval2p(:) = atom2%drho%getValue(r2) - densval2pp(:) = atom2%ddrho%getValue(r2) - allocate(absgr(nGrid)) - allocate(laplace(nGrid)) - allocate(gr_grabsgr(nGrid)) - ! calculate derivatives for combined density - call getDerivs(densval1p, densval1pp, densval2p, densval2pp, r1, r2, dots, absgr, laplace,& - & gr_grabsgr) - ! get xc-potential - call getxcpot_ggapbe(densval, absgr, laplace, gr_grabsgr, potval) - case default - write(*,*) "Unknown functional type!" - stop + + ! prepare xc-functional specific arrays + ! care about correct 4pi normalization of density + rhor = getLibxcRho(densval) + allocate(vx(nGrid)) + vx(:) = 0.0_dp + allocate(vc(nGrid)) + vc(:) = 0.0_dp + if (iXC /= xcFunctional%LDA_PW91) then + allocate(vxsigma(nGrid)) + vxsigma(:) = 0.0_dp + allocate(vcsigma(nGrid)) + vcsigma(:) = 0.0_dp + densval1p = atom1%drho%getValue(r1) + densval2p = atom2%drho%getValue(r2) + ! care about correct 4pi normalization of density and compute sigma + sigma = getLibxcSigma(densval1p, densval2p, dots) + end if + if (tGlobalHybrid .or. tCam) then + allocate(vxc(nGrid)) + vxc(:) = 0.0_dp + allocate(vxcsigma(nGrid)) + vxcsigma(:) = 0.0_dp + end if + + ! CAMY-PBEh is assembled manually + if (iXC == 9) then + allocate(vxsigma_sr(nGrid)) + vxsigma_sr(:) = 0.0_dp + allocate(vx_sr(nGrid)) + vx_sr(:) = 0.0_dp + end if + + select case (iXC) + ! 1: LDA-PW91 + case(xcFunctional%LDA_PW91) + call xc_f03_lda_vxc(xcfunc_x, nGridLibxc, rhor(1), vx(1)) + call xc_f03_lda_vxc(xcfunc_c, nGridLibxc, rhor(1), vc(1)) + potval = vx + vc + ! 2: GGA-PBE96, 3: GGA-BLYP, 4: LCY-PBE96 + case(xcFunctional%GGA_PBE96, xcFunctional%GGA_BLYP, xcFunctional%LCY_PBE96) + call xc_f03_gga_vxc(xcfunc_x, nGridLibxc, rhor(1), sigma(1), vx(1), vxsigma(1)) + call xc_f03_gga_vxc(xcfunc_c, nGridLibxc, rhor(1), sigma(1), vc(1), vcsigma(1)) + call getDivergence(nRad, nAng, densval1p, densval2p, r1, r2, theta1, theta2, vxsigma, divvx) + call getDivergence(nRad, nAng, densval1p, densval2p, r1, r2, theta1, theta2, vcsigma, divvc) + potval = vx + vc + divvx + divvc + ! 5: LCY-BNL + case(xcFunctional%LCY_BNL) + call xc_f03_lda_vxc(xcfunc_x, nGridLibxc, rhor(1), vx(1)) + call xc_f03_gga_vxc(xcfunc_c, nGridLibxc, rhor(1), sigma(1), vc(1), vcsigma(1)) + call getDivergence(nRad, nAng, densval1p, densval2p, r1, r2, theta1, theta2, vcsigma, divvc) + potval = vx + vc + divvc + ! 6: PBE0 + case(6) + ! exchange + call xc_f03_gga_vxc(xcfunc_x, nGridLibxc, rhor(1), sigma(1), vx(1), vxsigma(1)) + ! correlation + call xc_f03_gga_vxc(xcfunc_c, nGridLibxc, rhor(1), sigma(1), vc(1), vcsigma(1)) + ! build PBE0 functional + vxcsigma(:) = (1.0_dp - camAlpha) * vxsigma + vcsigma + vxc(:) = (1.0_dp - camAlpha) * vx + vc + call getDivergence(nRad, nAng, densval1p, densval2p, r1, r2, theta1, theta2, vxcsigma,& + & divvxc) + potval = vxc + divvxc + ! 7: B3LYP, 8: CAMY-B3LYP + case(7:8) + call xc_f03_gga_vxc(xcfunc_xc, nGridLibxc, rhor(1), sigma(1), vxc(1), vxcsigma(1)) + call getDivergence(nRad, nAng, densval1p, densval2p, r1, r2, theta1, theta2, vxcsigma,& + & divvxc) + potval = vxc + divvxc + ! 9: CAMY-PBEh + case(9) + ! short-range exchange + call xc_f03_gga_vxc(xcfunc_xsr, nGridLibxc, rhor(1), sigma(1), vx_sr(1), vxsigma_sr(1)) + ! full-range exchange + call xc_f03_gga_vxc(xcfunc_x, nGridLibxc, rhor(1), sigma(1), vx(1), vxsigma(1)) + ! correlation + call xc_f03_gga_vxc(xcfunc_c, nGridLibxc, rhor(1), sigma(1), vc(1), vcsigma(1)) + ! build CAMY-PBEh functional + vxcsigma(:) = camBeta * vxsigma_sr + (1.0_dp - (camAlpha + camBeta)) * vxsigma + vcsigma + vxc(:) = camBeta * vx_sr + (1.0_dp - (camAlpha + camBeta)) * vx + vc + call getDivergence(nRad, nAng, densval1p, densval2p, r1, r2, theta1, theta2, vxcsigma,& + & divvxc) + potval = vxc + divvxc end select ! add nuclear and coulomb potential to obtain the effective potential potval(:) = potval + atom1%pot%getValue(r1) + atom2%pot%getValue(r2) @@ -364,12 +642,50 @@ subroutine getskintegrals(atom1, atom2, grid1, grid2, dots, weights, tDensitySup mm = imap%type(3, ii) - 1 call TRealTessY_init(tes1, l1, mm) call TRealTessY_init(tes2, l2, mm) + + ! Y_{l1 mm}(\theta_1, \phi = 0) spherval1(:) = tes1%getValue_1d(theta1) + ! Y_{l2 mm}(\theta_2, \phi = 0) spherval2(:) = tes2%getValue_1d(theta2) + + ! calculate SK-quantities + ! Hamiltonian integ1 = getHamiltonian(radval1(:, i1), radval2(:, i2), radval2p(:, i2), radval2pp(:, i2),& & r2, l2, spherval1, spherval2, potval, weights) + ! overlap integral: \sum_{r,\Omega} R_1(r) Y_1(\Omega) R_2(r) Y_2(\Omega) weight integ2 = getOverlap(radval1(:, i1), radval2(:, i2), spherval1, spherval2, weights) + ! total density: \int (|\phi_1|^2 + |\phi_2|^2) dens = getDensity(radval1(:, i1), radval2(:, i2), spherval1, spherval2, weights) + + if (iXC == xcFunctional%HYB_B3LYP) then + ! full-range Hartree-Fock exchange contribution + frx = 0.5_dp * getFullRangeHFContribution(radialHFQuadrature%xx, rr3, ll_max, atom1, atom2,& + & imap, ii, r1, theta1, r2, theta2, weights) + ! add up full-range exchange to the Hamiltonian + integ1 = integ1 - frx + elseif (iXC == xcFunctional%HYB_PBE0) then + ! full-range Hartree-Fock exchange contribution + frx = 0.5_dp * camAlpha * getFullRangeHFContribution(radialHFQuadrature%xx, rr3, ll_max,& + & atom1, atom2, imap, ii, r1, theta1, r2, theta2, weights) + ! add up full-/long-range exchange to the Hamiltonian + integ1 = integ1 - frx + elseif (tLC) then + ! long-range Hartree-Fock exchange contribution + lrx = 0.5_dp * getLongRangeHFContribution(beckeInt, atom1, atom2, imap, ii, r1, theta1, r2,& + & theta2, weights) + ! add up long-range exchange to the Hamiltonian + integ1 = integ1 - lrx + elseif (tCam) then + ! full-range Hartree-Fock exchange contribution + frx = 0.5_dp * camAlpha * getFullRangeHFContribution(radialHFQuadrature%xx, rr3, ll_max,& + & atom1, atom2, imap, ii, r1, theta1, r2, theta2, weights) + ! long-range Hartree-Fock exchange contribution + lrx = 0.5_dp * camBeta * getLongRangeHFContribution(beckeInt, atom1, atom2, imap, ii, r1,& + & theta1, r2, theta2, weights) + ! add up full-/long-range exchange to the Hamiltonian + integ1 = integ1 - frx - lrx + end if + if (mm == 0) then prefac = 2.0_dp * pi else @@ -383,6 +699,164 @@ subroutine getskintegrals(atom1, atom2, grid1, grid2, dots, weights, tDensitySup end subroutine getskintegrals + + !> Calculates libXC renormalized density superposition of dimer. + pure function getLibxcRho(rho) result(rhor) + + !> superposition of atomic densities of atom 1 and atom 2 + real(dp), intent(in) :: rho(:) + + !> renormalized density + real(dp), allocatable :: rhor(:) + + ! renorm rho (incoming quantities are 4pi normed) + rhor = rho * rec4pi + + end function getLibxcRho + + + !> Calculates libXC sigma of dimer. + pure function getLibxcSigma(drho1, drho2, dots) result(sigma) + + !> 1st derivative of atomic densities + real(dp), intent(in) :: drho1(:), drho2(:) + + !> dot product of unit distance vectors + real(dp), intent(in) :: dots(:) + + !! libXC's contracted gradients of the density + real(dp), allocatable :: sigma(:) + + !! recurring factors + real(dp), allocatable :: f1(:), f2(:) + + f1 = drho1 + dots * drho2 + f2 = drho2 + dots * drho1 + + ! get dot product of density gradients + sigma = (drho1 * f1 + drho2 * f2) * rec4pi**2 + + end function getLibxcSigma + + + !> Computes contribution div(v) to the xc-potential due to vsigma = deps/dsigma returned by libxc. + !! div(v) = -2 div(vsigma grad(n)), evaluated in spherical coordinates r1, theta1 as: + !! div(v) = -2 [(1/r1^2) d(r1^2 vsigma grad(n)_r1)/dr1 + + !! (1/r1*sin(theta1)) d(sin(theta1 vsigma grad(n)_theta1)/dtheta1] + !! where grad(n) = (drho1(r1) + cos(theta2-theta1) drho2(r2)) \vec{e}_r1 + + !! sin(theta2-theta1) drho2(r2) \vec{e}_theta1 + subroutine getDivergence(nRad, nAng, drho1, drho2, r1, r2, theta1, theta2, vsigma, divv) + + !> # radial points of grid => r1 + integer, intent(in) :: nRad + + !> # angular points of grid => theta1 + integer, intent(in) :: nAng + + !> radial derivative density atom1 on grid (nRad, nAng) + real(dp), intent(in) :: drho1(:) + + !> radial derivative density atom2 on grid (nRad, nAng) + real(dp), intent(in) :: drho2(:) + + !> values of r1 on grid points (for index <= nn), values of r2b (for index > nn) + real(dp), intent(in) :: r1(:) + + !> values of r2 on grid points (for index <= nn), values of r1 (for index > nn) + real(dp), intent(in) :: r2(:) + + !> values of theta1 on grid points (for index <= nn), values of theta2b (for index > nn) + real(dp), intent(in) :: theta1(:) + + !> values of theta2 on grid points (for index <= nn), values of theta1 (index > nn) + real(dp), intent(in) :: theta2(:) + + !> deps/dsigma returned by libxc on grid + real(dp), intent(in) :: vsigma(:) + + !> -2 div(vsigma grad(n)) on grid + real(dp), intent(out), allocatable :: divv(:) + + !! + integer :: nn, ia, ir + + !! radii and theta values of the grid + real(dp), allocatable :: rval(:), tval(:) + + !! + real(dp), allocatable :: aa(:,:), dar(:), dat(:), bb(:,:) + + allocate(divv(size(drho1))) + divv(:) = 0.0_dp + nn = size(drho1) / 2 + + allocate(dar(nRad), dat(nAng), rval(nRad), bb(nRad, nAng)) + + ! rval holds radii of the grid + rval = r1(1:nRad) + aa = reshape(theta1(1:nn), [nRad, nAng]) + + !! tval holds theta values of the grid + tval = aa(1, :) + + if ((rval(2) < rval(1)) .or. (tval(2) > tval(1))) then + write(*,*) 'getDivergence: Expected ascending order in radii and descending order in theta!' + stop + end if + + ! div n = (drho1(r1) + cos(theta2-theta1) drho2(r2)) \vec{e}_r1 + ! + sin(theta2-theta1) drho2(r2) \vec{e}_theta1 + ! elements <= nn refer to: atom1(r1) -- atom2(r2a) + aa(:,:) = reshape(rec4pi * vsigma(1:nn)& + & * (drho1(1:nn) + cos(theta2(1:nn) - theta1(1:nn)) * drho2(1:nn)) * r1(1:nn)**2,& + & [nRad, nAng]) + + ! take numerical derivative w.r.t. r1 + do ia = 1, nAng + call spline3ders(rval, aa(:, ia), rval, dynew=dar) + bb(:, ia) = dar + end do + divv(1:nn) = reshape(bb, [nRad * nAng]) / r1(1:nn)**2 + + !! elements > nn refer to: atom1(r2b) -- atom2(r1) + aa(:,:) = reshape(rec4pi * vsigma(nn+1:2*nn)& + & * (drho2(nn+1:2*nn) + cos(theta1(nn+1:2*nn) - theta2(nn+1:2*nn)) * drho1(nn+1:2*nn))& + & * r2(nn+1:2*nn)**2, [nRad, nAng]) + + do ia = 1, nAng + call spline3ders(rval, aa(:, ia), rval, dynew=dar) + bb(:, ia) = dar + end do + divv(nn+1:2*nn) = reshape(bb, [nRad * nAng]) / r2(nn+1:2*nn)**2 + + ! take numerical derivative w.r.t. theta1 + aa(:,:) = reshape(rec4pi * vsigma(1:nn)& + & * (sin(theta2(1:nn) - theta1(1:nn)) * drho2(1:nn)) * sin(theta1(1:nn)),& + & [nRad, nAng]) + + !! spline3der requires data in ascending order + do ir = 1, nRad + call spline3ders(tval(nAng:1:-1), aa(ir,nAng:1:-1), tval(nAng:1:-1), dynew=dat) + bb(ir, :) = dat(nAng:1:-1) + end do + divv(1:nn) = divv(1:nn) + reshape(bb, [nRad * nAng]) / (r1(1:nn) * sin(theta1(1:nn))) + + aa(:,:) = reshape(rec4pi * vsigma(nn+1:2*nn)& + & * (sin(theta1(nn+1:2*nn) - theta2(nn+1:2*nn)) * drho1(nn+1:2*nn)) * sin(theta1(1:nn)),& + & [nRad, nAng]) + + do ir = 1, nRad + call spline3ders(tval(nAng:1:-1), aa(ir,nAng:1:-1), tval(nAng:1:-1), dynew=dat) + bb(ir, :) = dat(nAng:1:-1) + end do + divv(nn+1:2*nn) = divv(nn+1:2*nn) + reshape(bb, [nRad * nAng]) / (r1(1:nn) * sin(theta1(1:nn))) + + ! pre-factor + divv(:) = -2.0_dp * divv + + end subroutine getDivergence + + !> Calculates overlap for a fixed orbital and interaction configuration. pure function getOverlap(rad1, rad2, spher1, spher2, weights) result(res) @@ -461,50 +935,490 @@ pure function getHamiltonian(rad1, rad2, rad2p, rad2pp, r2, l2, spher1, spher2, end function getHamiltonian - !> Calculates higher-level expressions based on the density's 1st and 2nd derivatives. - pure subroutine getDerivs(drho1, d2rho1, drho2, d2rho2, r1, r2, dots, absgr, laplace, gr_grabsgr) + !> Calculates full-range HF contribution to H0, i.e. two-center integral over Coulomb kernel. + function getFullRangeHFContribution(radialQuadratureXx, rr3, ll_max, atom1, atom2, imap, iInt,& + & rr1, theta1, rr2, theta2, weights) result(frContribution) - !> 1st and 2nd atomic density derivatives on grid - real(dp), intent(in) :: drho1(:), d2rho1(:), drho2(:), d2rho2(:) + !> radial quadrature abscissae + real(dp), intent(in) :: radialQuadratureXx(:) - !> radial spherical coordinates of atom 1 and atom 2 on grid - real(dp), intent(in) :: r1(:), r2(:) + !> evaluation points of radial wavefunction + real(dp), intent(in) :: rr3(:) - !> ??? - real(dp), intent(in) :: dots(:) + !> maximum angular momentum for Becke integration + integer, intent(in) :: ll_max - !> absolute total density gradient - real(dp), intent(out) :: absgr(:) + !> atomic property instances of dimer atoms + type(TAtomdata), intent(in) :: atom1, atom2 - !> laplace operator acting on total density - real(dp), intent(out) :: laplace(:) + !> integral mapping instance + type(TIntegMap), intent(in) :: imap - !> (grad rho4pi) * grad(abs(grad rho4pi)) - real(dp), intent(out) :: gr_grabsgr(:) + !> current integral index + integer, intent(in) :: iInt - !! temporary storage - real(dp), allocatable :: f1(:), f2(:) + !! spherical coordinates (r, theta) of atom 1 and atom 2 on grid + real(dp), intent(in) :: rr1(:), rr2(:), theta1(:), theta2(:) + + !> integration weights + real(dp), intent(in) :: weights(:) + + !> FR contribution to the Hamiltonian H0 + real(dp) :: frContribution + + !! number of radial evaluation and grid points + integer :: nGrid, nRadial + + !! interpolated (cubic splines) rho_lm at back-transformed coordinates + real(dp) :: yy2 + + !! T-symbol, see Vitalij's thesis + real(dp) :: tsymbol - !! number of grid points - integer :: nn + !! back-transformed, radial spherical coordinates of atom 1 and atom 2 + real(dp), allocatable :: tmp11(:), tmp22(:) - nn = size(drho1) - allocate(f1(nn), f2(nn)) + !! radial (core) parts of the inner integrand + real(dp), allocatable :: rrin(:), rrin2(:) + + !! solution (and temporary storage) of inner integrands + real(dp), allocatable :: V(:), V_sum(:) + + !! scaled weight/abscissa index i / (n + 1) + real(dp), allocatable :: zi(:) + + !! l-resolved integral solution on fdiff nodes (+ 2nd derivatives) and lm-resolved density + real(dp), allocatable :: V_l(:,:,:), rho_lm(:) + + !! 2nd derivatives of natural splines + real(dp), allocatable :: secondDerivs(:) + + !! angular and magnetic momenta + integer :: ll, ll_a, ll_nu, mm_nu, ll_mu, mm_mu + + !! instance of real tesseral spherical harmonics + type(TRealTessY) :: tess + + !! grid point and core iterator + integer :: iGridPt, iCore + + ! \int phi^B_a(r2) * phi^A_b(r2) \int phi^A_b(r1) phi^A_c(r1) / |r2-r1| + + nGrid = size(rr2) + nRadial = size(rr3) + + allocate(V(nGrid)) + allocate(rrin(nRadial)) + allocate(rrin2(nRadial)) + allocate(rho_lm(nRadial)) + allocate(zi(nRadial)) + allocate(V_l(nRadial, ll_max, 2)) + + allocate(tmp22(nGrid)) + allocate(tmp11(nGrid)) + tmp22(:) = acos((rr2 - 1.0_dp) / (rr2 + 1.0_dp)) / pi + tmp11(:) = acos((rr1 - 1.0_dp) / (rr1 + 1.0_dp)) / pi + + ! nu-orbital + ll_nu = atom1%angmoms(imap%type(1, iInt)) + mm_nu = imap%type(3, iInt) - 1 + rrin2(:) = atom1%rad(imap%type(1, iInt))%getValue(rr3) + + zi(:) = acos(radialQuadratureXx) / pi + + allocate(V_sum(nGrid)) + V_sum(:) = 0.0_dp + + ! start the sigma loop for all core electrons of atom1 + do iCore = 1, atom1%nCore + + ! evaluate the radial part of the inner integrand + rrin(:) = rrin2 * atom1%corerad(iCore)%getValue(rr3) + ll_a = atom1%coreAngmoms(iCore) + + ! solve the inner integral + V(:) = 0.0_dp + do ll = 0, ll_max - 1 + tsymbol = getTsymbol(ll_a, ll, ll_nu, mm_nu) * atom1%coreOcc(iCore) + if (tsymbol >= 1.0e-16_dp) then + rho_lm(:) = rrin + ! solve the equation for ll + call solvePoisson(ll, rho_lm, zi, 0.0_dp) + call get2ndNaturalSplineDerivs(zi, rho_lm, secondDerivs) + V_l(:, ll+1, 1) = rho_lm + V_l(:, ll+1, 2) = secondDerivs + do iGridPt = 1, nGrid + call get_cubic_spline(zi, V_l(:, ll+1, 1), V_l(:, ll+1, 2), tmp11(iGridPt), yy2) + V(iGridPt) = V(iGridPt) + yy2 * tsymbol + end do + end if + end do + ! end of evaluation of the inner integral + + ! radial part of sigma + V(:) = V * atom1%corerad(iCore)%getValue(rr1) + V_sum(:) = V_sum + V + end do + + ! end sigma loop + V(:) = V_sum + + ! angular part Y(ll_nu, mm_mu) + ll_mu = atom2%angmoms(imap%type(2, iInt)) + mm_mu = imap%type(3, iInt) - 1 + call TRealTessY_init(tess, ll_nu, mm_mu) + V(:) = V / rr1 * tess%getValue_1d(theta1) + + ! mu-orbital + call TRealTessY_init(tess, ll_mu, mm_mu) + V(:) = V * atom2%rad(imap%type(2, iInt))%getValue(rr2) * tess%getValue_1d(theta2) + + frContribution = sum(V * weights) + + ! nu-orbital -> mu-orbital + ll_nu = atom2%angmoms(imap%type(2, iInt)) + mm_nu = imap%type(3, iInt) - 1 + rrin2(:) = atom2%rad(imap%type(2, iInt))%getValue(rr3) + + V_sum(:) = 0.0_dp + + ! start the sigma loop for all core electrons of atom2 + do iCore = 1, atom2%nCore + + ! evaluate the radial part of the inner integrand + rrin(:) = rrin2 * atom2%corerad(iCore)%getValue(rr3) + ll_a = atom2%coreAngmoms(iCore) + zi(:) = acos(radialQuadratureXx) / pi + + ! solve the inner integral + V(:) = 0.0_dp + do ll = 0, ll_max - 1 + tsymbol = getTsymbol(ll_a, ll, ll_nu, mm_nu) * atom2%coreOcc(iCore) + if (tsymbol >= 1.0e-16_dp) then + rho_lm(:) = rrin + ! solve the equation for ll + call solvePoisson(ll, rho_lm, zi, 0.0_dp) + call get2ndNaturalSplineDerivs(zi, rho_lm, secondDerivs) + V_l(:, ll+1, 1) = rho_lm + V_l(:, ll+1, 2) = secondDerivs + do iGridPt = 1, nGrid + call get_cubic_spline(zi, V_l(:, ll+1, 1), V_l(:, ll+1, 2), tmp22(iGridPt), yy2) + V(iGridPt) = V(iGridPt) + yy2 * tsymbol + end do + end if + end do + ! end of evaluation of the inner integral + + ! radial part of sigma + V(:) = V * atom2%corerad(iCore)%getValue(rr2) + V_sum(:) = V_sum + V + end do + + ! end sigma loop + V(:) = V_sum + + ! angular part Y(ll_nu, mm_mu) + ll_mu = atom1%angmoms(imap%type(1, iInt)) + mm_mu = imap%type(3, iInt) - 1 + call TRealTessY_init(tess, ll_nu, mm_mu) + V(:) = V / rr2 * tess%getValue_1d(theta2) + + ! mu-orbital + call TRealTessY_init(tess, ll_mu, mm_mu) + V(:) = V * atom1%rad(imap%type(1, iInt))%getValue(rr1) * tess%getValue_1d(theta1) + + frContribution = frContribution + sum(V * weights) + + end function getFullRangeHFContribution + + + !> Calculates long-range HF contribution to H0, i.e. two-center integral over descreened Yukawa. + function getLongRangeHFContribution(beckeInt, atom1, atom2, imap, iInt, rr1, theta1, rr2, theta2,& + & weights) result(lcContribution) + + !> Becke integrator instance + type(TBeckeIntegrator), intent(inout) :: beckeInt + + !> atomic property instances of dimer atoms + type(TAtomdata), intent(in) :: atom1, atom2 + + !> integral mapping instance + type(TIntegMap), intent(in) :: imap - f1(:) = drho1 + dots * drho2 - f2(:) = drho2 + dots * drho1 + !> current integral index + integer, intent(in) :: iInt - absgr(:) = sqrt(drho1 * f1 + drho2 * f2) - laplace(:) = d2rho1 + d2rho2 + 2.0_dp * (drho1 / r1 + drho2 / r2) - where (absgr > epsilon(1.0_dp)) - gr_grabsgr = (d2rho1 * f1 * f1 + d2rho2 * f2 * f2& - & + (1.0_dp - dots**2) * drho1 * drho2 * (drho2 / r1 + drho1 / r2))& - & / absgr - elsewhere - gr_grabsgr = 0.0_dp - end where + !! spherical coordinates (r, theta) of atom 1 and atom 2 on grid + real(dp), intent(in) :: rr1(:), rr2(:), theta1(:), theta2(:) + + !> integration weights + real(dp), intent(in) :: weights(:) + + !> LC contribution to the Hamiltonian H0 + real(dp) :: lcContribution + + !! + real(dp), pointer :: rr3(:) + + !! + integer :: nGrid, nRadial, iGridPt, iCore + + !! + real(dp) :: yy2, tsymbol + + !! + real(dp), allocatable :: V(:), tmp11(:), tmp22(:), V_sum(:), AA2(:), rrin(:), rrin2(:) + + !! + real(dp), allocatable :: CCC(:) + + !! + real(dp), allocatable :: zi(:), V_l(:,:,:), rho_lm(:), res(:), rho_lm2(:), rho_lm3(:) + + !! + integer :: ll, ll_a, ll_nu, mm_nu, ll_mu, mm_mu + + !! + real(dp) :: charge + + !! + type(TRealTessY) :: tess + + ! \int phi^B_a(r2) * phi^A_b(r2) \int phi^A_b(r1) phi^A_c(r1) / |r2-r1| + + ! get the coordinates for the inner one-center integral + call TBeckeIntegrator_getCoords(beckeInt, [3, 1, 1], rr3) + + nGrid = size(rr2) + nRadial = size(rr3) + + allocate(V(nGrid)) + allocate(V_l(nRadial, beckeInt%beckeGridParams%ll_max, 2)) + + allocate(tmp22(nGrid)) + allocate(tmp11(nGrid)) + tmp22(:) = acos((rr2 - 1.0_dp) / (rr2 + 1.0_dp)) / pi + tmp11(:) = acos((rr1 - 1.0_dp) / (rr1 + 1.0_dp)) / pi + + allocate(rrin(nRadial)) + allocate(rrin2(nRadial)) + allocate(rho_lm(nRadial)) + allocate(rho_lm2(nRadial)) + allocate(rho_lm3(nRadial)) + allocate(zi(nRadial)) + + ! nu-orbital + ll_nu = atom1%angmoms(imap%type(1, iInt)) + mm_nu = imap%type(3, iInt) - 1 + rrin2(:) = atom1%rad(imap%type(1, iInt))%getValue(rr3) + + zi(:) = acos(beckeInt%radialQuadrature%xx) / pi + + allocate(V_sum(nGrid)) + allocate(AA2(nGrid)) + allocate(CCC(nRadial)) + V_sum(:) = 0.0_dp + AA2(:) = 0.0_dp + CCC(:) = 0.0_dp + + ! start the sigma loop for all core electrons of atom1 + do iCore = 1, atom1%nCore + + ! evaluate the radial part of the inner integrand + rrin(:) = rrin2 * atom1%corerad(iCore)%getValue(rr3) + ll_a = atom1%coreAngmoms(iCore) + + ! evaluate the correction to the poisson solver, necessary only for small omega + rho_lm3(:) = rrin + ll = 0 + if (ll_a == ll_nu) then + rho_lm3(:) = rrin + charge = sum(rho_lm3 * beckeInt%beckeGrid(3)%weight) + call solvePoisson(ll, rho_lm3, zi, charge) + CCC(:) = rho_lm3 + rho_lm3(:) = rrin + charge = 0.0_dp + call solvePoisson(ll, rho_lm3, zi, charge) + CCC(:) = (CCC - rho_lm3) / sqrt(4.0_dp * pi) + + call get2ndNaturalSplineDerivs(zi, CCC, res) + V_l(:, ll+1, 1) = CCC + V_l(:, ll+1, 2) = res + do iGridPt = 1, nGrid + call get_cubic_spline(zi, V_l(:, ll+1, 1), V_l(:, ll+1, 2), tmp11(iGridPt), yy2) + AA2(iGridPt) = AA2(iGridPt) + yy2 / rr1(iGridPt) + end do + end if + + ! solve the inner integral + V(:) = 0.0_dp + do ll = 0, beckeInt%beckeGridParams%ll_max - 1 + tsymbol = getTsymbol(ll_a, ll, ll_nu, mm_nu) * atom1%coreOcc(iCore) + if (tsymbol >= 1.0e-16_dp) then + rho_lm(:) = rrin + rho_lm2(:) = rrin + ! solve the equation for ll + charge = 0.0_dp + call solvePoisson(ll, rho_lm2, zi, charge) + call TBeckeIntegrator_solveHelmholz(beckeInt, ll, rho_lm) + ! interpolate + rho_lm(:) = rho_lm2 - rho_lm + call get2ndNaturalSplineDerivs(zi, rho_lm, res) + V_l(:, ll+1, 1) = rho_lm + V_l(:, ll+1, 2) = res + do iGridPt = 1, nGrid + call get_cubic_spline(zi, V_l(:, ll+1, 1), V_l(:, ll+1, 2), tmp11(iGridPt), yy2) + V(iGridPt) = V(iGridPt) + yy2 * tsymbol + end do + end if + end do + ! end of evaluation of the inner integral + + ! radial part of sigma + V(:) = V * atom1%corerad(iCore)%getValue(rr1) + V_sum(:) = V_sum + V + end do + + ! end sigma loop + V(:) = V_sum + + ! angular part Y(ll_nu, mm_mu) + ll_mu = atom2%angmoms(imap%type(2, iInt)) + mm_mu = imap%type(3, iInt) - 1 + call TRealTessY_init(tess, ll_nu, mm_mu) + V(:) = V / rr1 * tess%getValue_1d(theta1) + + ! evaluate the correction term + AA2(:) = AA2 * atom1%rad(imap%type(1, iInt))%getValue(rr1) * tess%getValue_1d(theta1) + + ! mu-orbital + call TRealTessY_init(tess, ll_mu, mm_mu) + V(:) = V * atom2%rad(imap%type(2, iInt))%getValue(rr2) * tess%getValue_1d(theta2) + + ! evaluate the correction term + AA2(:) = AA2 * atom2%rad(imap%type(2, iInt))%getValue(rr2) * tess%getValue_1d(theta2) + + lcContribution = sum(V * weights) + sum(AA2 * weights) + + ! nu-orbital -> mu_orbital + ll_nu = atom2%angmoms(imap%type(2, iInt)) + mm_nu = imap%type(3, iInt) - 1 + rrin2(:) = atom2%rad(imap%type(2, iInt))%getValue(rr3) + + AA2(:) = 0.0_dp + V_sum(:) = 0.0_dp + + ! start the sigma loop for all core electrons of atom2 + do iCore = 1, atom2%nCore + ! evaluate the radial part of the inner integrand + rrin(:) = rrin2 * atom2%corerad(iCore)%getValue(rr3) + ll_a = atom2%coreAngmoms(iCore) + zi(:) = acos(beckeInt%radialQuadrature%xx) / pi + + ! evaluate the correction + rho_lm3(:) = rrin + ll = 0 + if (ll_a == ll_nu) then + rho_lm3(:) = rrin + charge = sum(rho_lm3 * beckeInt%beckeGrid(3)%weight) + call solvePoisson(ll, rho_lm3, zi, charge) + CCC(:) = rho_lm3 + rho_lm3(:) = rrin + charge = 0.0_dp + call solvePoisson(ll, rho_lm3, zi, charge) + CCC(:) = (CCC - rho_lm3) / sqrt(4.0_dp * pi) + + call get2ndNaturalSplineDerivs(zi, CCC, res) + V_l(:, ll+1, 1) = CCC + V_l(:, ll+1, 2) = res + do iGridPt = 1, nGrid + call get_cubic_spline(zi, V_l(:, ll+1, 1), V_l(:, ll+1, 2), tmp22(iGridPt), yy2) + AA2(iGridPt) = AA2(iGridPt) + yy2 / rr2(iGridPt) + end do + end if + + ! solve the inner integral + V = 0.0_dp + do ll = 0, beckeInt%beckeGridParams%ll_max - 1 + tsymbol = getTsymbol(ll_a, ll, ll_nu, mm_nu) * atom2%coreOcc(iCore) + if (tsymbol >= 1.0e-16_dp) then + rho_lm(:) = rrin + rho_lm2(:) = rrin + + ! solve the equation for ll + charge = 0.0_dp + call solvePoisson(ll, rho_lm2, zi, charge) + call TBeckeIntegrator_solveHelmholz(beckeInt, ll, rho_lm) + + ! interpolate + rho_lm(:) = rho_lm2 - rho_lm + + call get2ndNaturalSplineDerivs(zi, rho_lm, res) + V_l(:, ll+1, 1) = rho_lm + V_l(:, ll+1, 2) = res + do iGridPt = 1, nGrid + call get_cubic_spline(zi, V_l(:, ll+1, 1), V_l(:, ll+1, 2), tmp22(iGridPt), yy2) + V(iGridPt) = V(iGridPt) + yy2 * tsymbol + end do + end if + end do + ! end of evaluation of the inner integral + + ! radial part of sigma + V(:) = V * atom2%corerad(iCore)%getValue(rr2) + V_sum(:) = V_sum + V + end do + + ! end sigma loop + V(:) = V_sum + + ! angular part Y(ll_nu, mm_mu) + ll_mu = atom1%angmoms(imap%type(1, iInt)) + mm_mu = imap%type(3, iInt) - 1 + call TRealTessY_init(tess, ll_nu, mm_mu) + V(:) = V / rr2 * tess%getValue_1d(theta2) + + ! evaluate the correction term + AA2(:) = AA2 * atom2%rad(imap%type(2,iInt))%getValue(rr2) * tess%getValue_1d(theta2) + + ! mu-orbital + call TRealTessY_init(tess, ll_mu, mm_mu) + V(:) = V * atom1%rad(imap%type(1, iInt))%getValue(rr1) * tess%getValue_1d(theta1) + + ! evaluate the correction term + AA2(:) = AA2 * atom1%rad(imap%type(1, iInt))%getValue(rr1) * tess%getValue_1d(theta1) + + lcContribution = lcContribution + sum(V * weights) + sum(AA2 * weights) + + end function getLongRangeHFContribution + + + !> Auxiliary function to evaluate the t-symbol. + function getTsymbol(ll1, ll2, ll3, mm3) result(res) + + !> + integer, intent(in) :: ll1, ll2, ll3, mm3 + + !> + real(dp) :: res + + !! + integer :: mm1, mm2 + + res = 0.0_dp + do mm1 = -ll1, ll1 + do mm2 = -ll2, ll2 + res = res + realGaunt(ll1, mm1, ll2, mm2, ll3, mm3)**2 + end do + end do + + if (ll1 == 1) then + res = res * (1.0_dp / 3.0_dp) + else + res = 1.0_dp * res + end if - end subroutine getDerivs + end function getTsymbol !> Initializes the two-center integration map based on the basis on two atoms. diff --git a/sktwocnt/lib/xcfunctionals.f90 b/sktwocnt/lib/xcfunctionals.f90 new file mode 100644 index 00000000..b12325d5 --- /dev/null +++ b/sktwocnt/lib/xcfunctionals.f90 @@ -0,0 +1,173 @@ +!> Module related to supported xc-functionals of the sktwocnt code. +module xcfunctionals + + implicit none + private + + public :: xcFunctional + + + !> Enumerates available xc-functionals. + type :: TXcFunctionalsEnum + + !> LDA-PW91 + integer :: LDA_PW91 = 1 + + !> GGA-PBE96 + integer :: GGA_PBE96 = 2 + + !> GGA-BLYP + integer :: GGA_BLYP = 3 + + !> LCY-PBE + integer :: LCY_PBE96 = 4 + + !> LCY-BNL + integer :: LCY_BNL = 5 + + !> HYB-PBE0 + integer :: HYB_PBE0 = 6 + + !> HYB-B3LYP + integer :: HYB_B3LYP = 7 + + !> CAMY-B3LYP + integer :: CAMY_B3LYP = 8 + + !> CAMY-PBEh + integer :: CAMY_PBEh = 9 + + contains + + procedure :: isLDA => TXcFunctionalsEnum_isLDA + procedure :: isGGA => TXcFunctionalsEnum_isGGA + procedure :: isGlobalHybrid => TXcFunctionalsEnum_isGlobalHybrid + procedure :: isLongRangeCorrected => TXcFunctionalsEnum_isLongRangeCorrected + procedure :: isCAMY => TXcFunctionalsEnum_isCAMY + procedure :: isNotImplemented => TXcFunctionalsEnum_isNotImplemented + + end type TXcFunctionalsEnum + + + !> Container for enumerated xc-functional types. + type(TXcFunctionalsEnum), parameter :: xcFunctional = TXcFunctionalsEnum() + + +contains + + pure function TXcFunctionalsEnum_isLDA(this, xcnr) result(isLDA) + + !> Class instance + class(TXcFunctionalsEnum), intent(in) :: this + + !> identifier of exchange-correlation type + integer, intent(in) :: xcnr + + !> True, if xc-functional index corresponds to an LDA functional + logical :: isLDA + + isLDA = .false. + + if (xcnr == this%LDA_PW91) isLDA = .true. + + end function TXcFunctionalsEnum_isLDA + + + pure function TXcFunctionalsEnum_isGGA(this, xcnr) result(isGGA) + + !> Class instance + class(TXcFunctionalsEnum), intent(in) :: this + + !> identifier of exchange-correlation type + integer, intent(in) :: xcnr + + !> True, if xc-functional index corresponds to a GGA functional + logical :: isGGA + + isGGA = .false. + + if (xcnr == this%GGA_PBE96 .or. xcnr == this%GGA_BLYP) isGGA = .true. + + end function TXcFunctionalsEnum_isGGA + + + pure function TXcFunctionalsEnum_isLongRangeCorrected(this, xcnr) result(isLongRangeCorrected) + + !> Class instance + class(TXcFunctionalsEnum), intent(in) :: this + + !> identifier of exchange-correlation type + integer, intent(in) :: xcnr + + !> True, if xc-functional index corresponds to a long-range corrected functional + logical :: isLongRangeCorrected + + isLongRangeCorrected = .false. + + if (xcnr == this%LCY_PBE96 .or. xcnr == this%LCY_BNL) then + isLongRangeCorrected = .true. + end if + + end function TXcFunctionalsEnum_isLongRangeCorrected + + + pure function TXcFunctionalsEnum_isGlobalHybrid(this, xcnr) result(isGlobalHybrid) + + !> Class instance + class(TXcFunctionalsEnum), intent(in) :: this + + !> identifier of exchange-correlation type + integer, intent(in) :: xcnr + + !> True, if xc-functional index corresponds to a global hybrid functional + logical :: isGlobalHybrid + + isGlobalHybrid = .false. + + if (xcnr == this%HYB_PBE0 .or. xcnr == this%HYB_B3LYP) then + isGlobalHybrid = .true. + end if + + end function TXcFunctionalsEnum_isGlobalHybrid + + + pure function TXcFunctionalsEnum_isCAMY(this, xcnr) result(isCamy) + + !> Class instance + class(TXcFunctionalsEnum), intent(in) :: this + + !> identifier of exchange-correlation type + integer, intent(in) :: xcnr + + !> True, if xc-functional index corresponds to a general CAMY functional + logical :: isCamy + + isCamy = .false. + + if (xcnr == this%CAMY_B3LYP .or. xcnr == this%CAMY_PBEh) then + isCamy = .true. + end if + + end function TXcFunctionalsEnum_isCAMY + + + pure function TXcFunctionalsEnum_isNotImplemented(this, xcnr) result(isNotImplemented) + + !> Class instance + class(TXcFunctionalsEnum), intent(in) :: this + + !> identifier of exchange-correlation type + integer, intent(in) :: xcnr + + !> True, if xc-functional index is not in the expected range + logical :: isNotImplemented + + isNotImplemented = .false. + + if (xcnr < 0 .or. xcnr > 9) then + isNotImplemented = .true. + end if + + end function TXcFunctionalsEnum_isNotImplemented + +end module xcfunctionals diff --git a/sktwocnt/prog/CMakeLists.txt b/sktwocnt/prog/CMakeLists.txt index e897711b..624afac7 100644 --- a/sktwocnt/prog/CMakeLists.txt +++ b/sktwocnt/prog/CMakeLists.txt @@ -6,6 +6,7 @@ set(sources-f90 add_executable(sktwocnt ${sources-f90}) +target_link_libraries(skprogs-sktwocnt skprogs-common Libxc::xcf03 Libxc::xc) target_link_libraries(sktwocnt skprogs-sktwocnt) install(TARGETS sktwocnt EXPORT skprogs-targets DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/sktwocnt/prog/cmdargs.f90 b/sktwocnt/prog/cmdargs.f90 index 1240f250..caf96100 100644 --- a/sktwocnt/prog/cmdargs.f90 +++ b/sktwocnt/prog/cmdargs.f90 @@ -7,7 +7,7 @@ module cmdargs public :: parse_command_arguments character(len=*), parameter :: programName = 'sktwocnt' - character(len=*), parameter :: programVersion = '0.9' + character(len=*), parameter :: programVersion = '0.2' contains diff --git a/sktwocnt/prog/input.f90 b/sktwocnt/prog/input.f90 index efd80546..f1038db9 100644 --- a/sktwocnt/prog/input.f90 +++ b/sktwocnt/prog/input.f90 @@ -4,6 +4,7 @@ module input use common_accuracy, only : dp use gridorbital, only : TGridorb2_init use twocnt, only : TTwocntInp, TAtomdata + use xcfunctionals, only : xcFunctional implicit none private @@ -43,38 +44,110 @@ subroutine readInput(inp, fname) !! error status integer :: iErr + !! xc-functional type + !! (1: LDA-PW91, 2: GGA-PBE96, 3: GGA-BLYP, 4: LCY-PBE96, 5: LCY-BNL, 6: PBE0, 7: B3LYP, + !! 8: CAMY-B3LYP, 9: CAMY-PBEh) + integer :: iXC + !! potential data columns, summed up in order to receive the total atomic potential integer, allocatable :: potcomps(:) !! true, if radial grid-orbital 1st/2nd derivative shall be read logical :: tReadRadDerivs + inp%tLC = .false. + inp%tCam = .false. + inp%tGlobalHybrid = .false. + fp = 14 open(fp, file=fname, form="formatted", action="read") ! general part iLine = 0 + call nextline_(fp, iLine, line) - read(line, *, iostat=iErr) buffer1, buffer2 + read(line, *, iostat=iErr) buffer1, buffer2, iXC call checkerror_(fname, line, iLine, iErr) - if (buffer1 /= "hetero" .and. buffer1 /= "homo") then - call error_("Wrong interaction (must be hetero or homo)", fname, line, iLine) + if ((buffer1 /= "hetero") .and. (buffer1 /= "homo")) then + call error_("Wrong interaction (must be 'hetero' or 'homo')!", fname, line, iLine) end if inp%tHetero = (buffer1 == "hetero") + select case (buffer2) - case ("potential") + case("potential") inp%tDensitySuperpos = .false. - inp%ixc = 0 - case ("density_lda") - inp%tDensitySuperpos = .true. - inp%ixc = 1 - case ("density_pbe") + case("density") inp%tDensitySuperpos = .true. - inp%ixc = 2 case default - call error_("Wrong superposition mode (must be potential, density_lda or density_pbe", fname,& - & line, iLine) + call error_("Wrong superposition mode (must be 'potential' or 'density')!", fname, line,& + & iline) end select + select case (iXC) + case(xcFunctional%LDA_PW91) + ! LDA-PW91 + case(xcFunctional%GGA_PBE96) + ! GGA-PBE96 + case(xcFunctional%GGA_BLYP) + ! GGA-BLYP + case(xcFunctional%LCY_PBE96) + ! LCY-PBE96 (long-range corrected) + inp%tLC = .true. + case(xcFunctional%LCY_BNL) + ! LCY-BNL (long-range corrected) + inp%tLC = .true. + case(xcFunctional%HYB_PBE0) + ! PBE0 (global hybrid) + inp%tGlobalHybrid = .true. + case(xcFunctional%HYB_B3LYP) + ! B3LYP (global hybrid) + inp%tGlobalHybrid = .true. + case(xcFunctional%CAMY_B3LYP) + ! CAMY-B3LYP (CAM-functional) + inp%tCam = .true. + case(xcFunctional%CAMY_PBEh) + ! CAMY-PBEh (CAM-functional) + inp%tCam = .true. + case default + call error_("Unknown exchange-correlation functional!", fname, line, iline) + end select + inp%iXC = iXC + + if (inp%iXC == xcFunctional%HYB_B3LYP) then + call nextline_(fp, iLine, line) + read(line, *, iostat=iErr) inp%nRadial, inp%nAngular, inp%ll_max, inp%rm + call checkerror_(fname, line, iLine, iErr) + elseif (inp%iXC == xcFunctional%HYB_PBE0) then + call nextline_(fp, iLine, line) + ! currently only HYB-PBE0 does support arbitrary HFX portions (HYB-B3LYP does not) + read(line, *, iostat=iErr) inp%camAlpha + call checkerror_(fname, line, iLine, iErr) + call nextline_(fp, iLine, line) + read(line, *, iostat=iErr) inp%nRadial, inp%nAngular, inp%ll_max, inp%rm + call checkerror_(fname, line, iLine, iErr) + elseif (inp%tLC) then + call nextline_(fp, iLine, line) + read(line, *, iostat=iErr) inp%omega + if (inp%omega < 1.0e-08_dp) then + write(*,'(a)') 'Chosen omega too small!' + stop + end if + call checkerror_(fname, line, iLine, iErr) + call nextline_(fp, iLine, line) + read(line, *, iostat=iErr) inp%nRadial, inp%nAngular, inp%ll_max, inp%rm + call checkerror_(fname, line, iLine, iErr) + elseif (inp%tCam) then + call nextline_(fp, iLine, line) + read(line, *, iostat=iErr) inp%omega, inp%camAlpha, inp%camBeta + if (inp%omega < 1.0e-08_dp) then + write(*,'(a)') 'Chosen omega too small!' + stop + end if + call checkerror_(fname, line, iLine, iErr) + call nextline_(fp, iLine, line) + read(line, *, iostat=iErr) inp%nRadial, inp%nAngular, inp%ll_max, inp%rm + call checkerror_(fname, line, iLine, iErr) + end if + call nextline_(fp, iLine, line) read(line, *, iostat=iErr) inp%r0, inp%dr, inp%epsilon, inp%maxdist call checkerror_(fname, line, iLine, iErr) @@ -91,9 +164,12 @@ subroutine readInput(inp, fname) potcomps = [2, 3, 4] end if tReadRadDerivs = .not. inp%tHetero - call readatom_(fname, fp, iLine, potcomps, inp%tDensitySuperpos, tReadRadDerivs, inp%atom1) + + call readatom_(fname, fp, iLine, potcomps, inp%tDensitySuperpos, tReadRadDerivs,& + & (inp%tGlobalHybrid .or. inp%tLC .or. inp%tCam), inp%atom1) if (inp%tHetero) then - call readatom_(fname, fp, iLine, potcomps, inp%tDensitySuperpos, .true., inp%atom2) + call readatom_(fname, fp, iLine, potcomps, inp%tDensitySuperpos, .true., (inp%tGlobalHybrid& + & .or. inp%tLC .or. inp%tCam), inp%atom2) end if close(fp) @@ -102,7 +178,8 @@ end subroutine readInput !> Fills TAtomdata instance based on slateratom's output. - subroutine readatom_(fname, fp, iLine, potcomps, tDensitySuperpos, tReadRadDerivs, atom) + subroutine readatom_(fname, fp, iLine, potcomps, tDensitySuperpos, tReadRadDerivs, tNonLocal,& + & atom) !> filename character(len=*), intent(in) :: fname @@ -122,12 +199,18 @@ subroutine readatom_(fname, fp, iLine, potcomps, tDensitySuperpos, tReadRadDeriv !> true, if radial grid-orbital 1st/2nd derivative shall be read logical, intent(in) :: tReadRadDerivs + !! true, there are non-local exchange contributions to calculate + logical, intent(in) :: tNonLocal + !> atomic properties instance type(TAtomdata), intent(out) :: atom !! character buffer character(maxlen) :: line, buffer + !! temporary storage for checking radial wavefunction sign + real(dp) :: vals(2) + !! temporarily stores atomic wavefunction and potential real(dp), allocatable :: data(:,:), potval(:) @@ -138,7 +221,11 @@ subroutine readatom_(fname, fp, iLine, potcomps, tDensitySuperpos, tReadRadDeriv integer :: ii, imax call nextline_(fp, iLine, line) - read(line, *, iostat=iErr) atom%nBasis + if (tNonLocal) then + read(line, *, iostat=iErr) atom%nBasis, atom%nCore + else + read(line, *, iostat=iErr) atom%nBasis + end if call checkerror_(fname, line, iLine, iErr) allocate(atom%angmoms(atom%nBasis)) @@ -172,9 +259,28 @@ subroutine readatom_(fname, fp, iLine, potcomps, tDensitySuperpos, tReadRadDeriv stop end if end do - call checkangmoms_(atom%angmoms) + ! read core orbitals, LC functionals only + if (tNonLocal) then + allocate(atom%coreAngmoms(atom%nCore)) + allocate(atom%coreOcc(atom%nCore)) + allocate(atom%coreRad(atom%nCore)) + + do ii = 1, atom%nCore + call nextline_(fp, iLine, line) + read(line, *, iostat=iErr) buffer, atom%coreAngmoms(ii), atom%coreOcc(ii) + call checkerror_(fname, line, iLine, iErr) + call readdata_(buffer, [1, 3], data) + call TGridorb2_init(atom%coreRad(ii), data(:, 1), data(:, 2)) + vals = atom%coreRad(ii)%getValue([0.01_dp, 0.02_dp]) + if ((vals(2) - vals(1)) < 0.0_dp) then + call atom%coreRad(ii)%rescale(-1.0_dp) + end if + end do + + end if + call nextline_(fp, iLine, line) read(line, *, iostat=iErr) buffer call checkerror_(fname, line, iLine, iErr) diff --git a/sktwocnt/prog/output.f90 b/sktwocnt/prog/output.f90 index 4a951046..43d941e8 100644 --- a/sktwocnt/prog/output.f90 +++ b/sktwocnt/prog/output.f90 @@ -8,12 +8,6 @@ module output public :: write_sktables - !> maximal angular momentum in the old and the extended old SK file - integer, parameter :: LMAX_OLD = 2 - - !> maximal angular momentum in the old and the extended old SK file - integer, parameter :: LMAX_EXTENDED = 3 - contains @@ -51,11 +45,10 @@ subroutine write_sktable_(fname, sktable) character(len=11) :: formstr ninteg = size(sktable, dim=1) - print *, "NINTEG:", ninteg nline = size(sktable, dim=2) write(formstr, "(A,I0,A)") "(", ninteg, "ES21.12)" - fp = 14 - open(fp, file=fname, status="replace", action="write") + + open(newunit=fp, file=fname, status="replace", action="write") write(fp, "(I0)") nline write(fp, formstr) sktable close(fp) diff --git a/slateratom/lib/CMakeLists.txt b/slateratom/lib/CMakeLists.txt index f5180ec1..fd7dc432 100644 --- a/slateratom/lib/CMakeLists.txt +++ b/slateratom/lib/CMakeLists.txt @@ -15,11 +15,13 @@ set(sources-f90 output.f90 total_energy.f90 utilities.f90 + xcfunctionals.f90 zora_routines.f90) add_library(skprogs-slateratom ${sources-f90}) -target_link_libraries(skprogs-slateratom skprogs-common Libxc::xcf90 Libxc::xc) +target_link_libraries(skprogs-slateratom skprogs-common Libxc::xcf03 Libxc::xc) +target_link_libraries(skprogs-slateratom skprogs-common LAPACK::LAPACK) set(moddir ${CMAKE_CURRENT_BINARY_DIR}/modfiles) set_target_properties(skprogs-slateratom PROPERTIES Fortran_MODULE_DIRECTORY ${moddir}) diff --git a/slateratom/lib/broyden.f90 b/slateratom/lib/broyden.f90 index edea85b7..0ae18072 100644 --- a/slateratom/lib/broyden.f90 +++ b/slateratom/lib/broyden.f90 @@ -1,3 +1,4 @@ +!> Module that provides the density mixing functionality (simple, Broyden). module broyden use common_accuracy, only : dp @@ -7,82 +8,122 @@ module broyden public :: mixing_driver + contains - ! This is the main driver for simple and broyden mixers, both mix one - ! big one-dimensional array. - subroutine mixing_driver(pot_old,pot_new,max_l,num_alpha,& - &poly_order,problemsize,iter,broyden,mixing_factor) + !> This is the main driver for simple and broyden mixers, both mix one big one-dimensional array. + subroutine mixing_driver(pot_old, pot_new, max_l, num_alpha, poly_order, problemsize, iter,& + & tBroyden, mixing_factor) + + !> old potential + real(dp), intent(in) :: pot_old(:,0:,:,:) + + !> contains current potential on entry and mixed potential on exit + real(dp), intent(inout) :: pot_new(:,0:,:,:) + + !> maximum angular momentum + integer, intent(in) :: max_l + + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) + + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) - integer, intent(in) :: max_l,num_alpha(0:),poly_order(0:),problemsize,iter - logical, intent(in) :: broyden + !> maximum size of the eigenproblem + integer, intent(in) :: problemsize + + !> current SCF iteration + integer, intent(in) :: iter + + !> true, if Broyden mixing is desired, otherwise simple mixing is applied + logical, intent(in) :: tBroyden + + !> mixing factor real(dp), intent(in) :: mixing_factor - integer :: actualsize,titer - real(dp) :: pot_old(:,0:,:,:),pot_new(:,0:,:,:) - real(dp), allocatable :: vecin(:),vecout(:) - integer :: ii,jj,kk,ll,mm,nn,oo,pp - - allocate(vecout(10000)) - allocate(vecin(10000)) - vecout=0.0d0 - vecin=0.0d0 - - pp=0 - do ii=1,2 - do jj=0,max_l - do kk=1,num_alpha(jj)*poly_order(jj) - do ll=1,problemsize - pp=pp+1 - vecin(pp)=pot_old(ii,jj,kk,ll) - vecout(pp)=pot_new(ii,jj,kk,ll) + !> serialized potentials + real(dp), allocatable :: vecin(:), vecout(:) + + !> equals current SCF iteration or next one if (iter == 0) + integer :: titer + + !> auxiliary variables + integer :: ii, jj, kk, ll, pp + + allocate(vecout(size(pot_old))) + allocate(vecin(size(pot_old))) + + ! serialize potentials + pp = 0 + do ii = 1, 2 + do jj = 0, max_l + do kk = 1, num_alpha(jj) * poly_order(jj) + do ll = 1, problemsize + pp = pp + 1 + vecin(pp) = pot_old(ii, jj, kk, ll) + vecout(pp) = pot_new(ii, jj, kk, ll) end do end do end do end do - if (pp>10000) then - write(*,*) 'Static dimensions in broyden_mixer too small',pp - STOP + ! this check is still necessary, since max. 10000 entries is hardcoded in broyden_mixer + if (pp > 10000) then + write(*,*) 'Static dimensions in broyden_mixer too small: ', pp + stop end if - titer=iter - ! broyden returns if iter==0 - if (iter==0) titer=1 + titer = iter + ! broyden returns if (iter == 0) + if (iter == 0) titer = 1 - if (broyden) then - call broyden_mixer(titer,mixing_factor,10000,vecin,vecout) + if (tBroyden) then + call broyden_mixer(titer, mixing_factor, size(vecin), vecin, vecout) else - call simple_mix(vecin,vecout,mixing_factor) + call simple_mix(vecin, vecout, mixing_factor) end if - pp=0 - do ii=1,2 - do jj=0,max_l - ! do kk=1,problemsize - do kk=1,num_alpha(jj)*poly_order(jj) - do ll=1,problemsize - pp=pp+1 - ! cof_alt(ii,jj,kk,ll)=vecin(pp) - ! cof_neu(ii,jj,kk,ll)=vecout(pp) - pot_new(ii,jj,kk,ll)=vecin(pp) + ! deserialize obtained potential + pp = 0 + do ii = 1, 2 + do jj = 0, max_l + do kk = 1, num_alpha(jj) * poly_order(jj) + do ll = 1, problemsize + pp = pp + 1 + pot_new(ii, jj, kk, ll) = vecin(pp) end do end do end do end do - deallocate(vecout) - deallocate(vecin) - end subroutine mixing_driver + + !> Simple mixer for last and current density. + subroutine simple_mix(last, cur, factor) + + !> old vector, holds mixed values at exit + real(dp), intent(inout) :: last(:) + + !> new vector + real(dp), intent(in) :: cur(:) + + !> mixing factor + real(dp), intent(in) :: factor + + last(:) = factor * cur + (1.0_dp - factor) * last + + end subroutine simple_mix + + ! !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SUBROUTINE BROYDEN_mixer(NITER,ALPHA,JTOP,VECIN,VECOUT) ! This is the Broyden routine as also implemented in the old DFTB code. - IMPLICIT REAL*8 (A-H,O-Z) + IMPLICIT real(dp) (A-H,O-Z) IMPLICIT INTEGER (I-N) ! !************************************************************ @@ -122,7 +163,7 @@ SUBROUTINE BROYDEN_mixer(NITER,ALPHA,JTOP,VECIN,VECOUT) DIMENSION D(IMATSZ,IMATSZ),W(IMATSZ) DIMENSION UNIT31(MAXSIZ,2),UNIT32(MAXSIZ,2,MAXITER+15) ! DATA NAMES/'BROYD01','BROYD02','BROYD03'/ - REAL*8 UAMIX,WTMP + real(dp) UAMIX,WTMP INTEGER ILASTIT common /broyd/ uamix, w, WTMP, unit31, unit32, ilastit save @@ -160,9 +201,10 @@ SUBROUTINE BROYDEN_mixer(NITER,ALPHA,JTOP,VECIN,VECOUT) !++++++ SET UP THE VECTOR OF THE CURRENT ITERATION FOR MIXING ++++++ ! ! FOR THIS METHOD WE HAVE ONLY SAVED INPUT/OUTPUT CHG. DENSITIES, - DO 38 K=1,JTOP + DO K=1,JTOP VECTOR(K,1)= VECIN(K) - 38 VECTOR(K,2)= VECOUT(K) + VECTOR(K,2)= VECOUT(K) + END DO !++++++ END OF PROGRAM SPECIFIC LOADING OF VECTOR FROM MAIN ++++++++ ! ! IVSIZ IS THE LENGTH OF THE VECTOR @@ -205,19 +247,22 @@ SUBROUTINE BROYDEN_mixer(NITER,ALPHA,JTOP,VECIN,VECOUT) ! ALPHA(OR AMIX)IS SIMPLE MIXING PARAMETERS ! WRITE(66,1002)AMIX,ITER+1 ! - DO 104 K=1,IVSIZ + DO K=1,IVSIZ DUMVI(K)=VECTOR(K,1)-DUMVI(K) - 104 DF(K)=VECTOR(K,2)-VECTOR(K,1)-F(K) - DO 114 K=1,IVSIZ - 114 F(K)=VECTOR(K,2)-VECTOR(K,1) + DF(K)=VECTOR(K,2)-VECTOR(K,1)-F(K) + END DO + DO K=1,IVSIZ + F(K)=VECTOR(K,2)-VECTOR(K,1) + END DO ! ! FOR I-TH ITER.,DFNORM IS ( F(I) MINUS F(I-1) ), USED FOR NORMALIZATION ! DFNORM=ZERO FNORM=ZERO - DO 113 K=1,IVSIZ - DFNORM=DFNORM + DF(K)*DF(K) - 113 FNORM=FNORM + F(K)*F(K) + DO K=1,IVSIZ + DFNORM=DFNORM + DF(K)*DF(K) + FNORM=FNORM + F(K)*F(K) + END DO DFNORM=SQRT(DFNORM) FNORM=SQRT(FNORM) ! WRITE(66,'('' DFNORM '',E12.6,'' FNORM '',E12.6)')DFNORM,FNORM @@ -225,9 +270,10 @@ SUBROUTINE BROYDEN_mixer(NITER,ALPHA,JTOP,VECIN,VECOUT) FAC2=ONE/DFNORM FAC1=AMIX*FAC2 ! - DO 105 K=1,IVSIZ - UI(K) = FAC1*DF(K) + FAC2*DUMVI(K) - 105 VTI(K)= FAC2*DF(K) + DO K=1,IVSIZ + UI(K) = FAC1*DF(K) + FAC2*DUMVI(K) + VTI(K)= FAC2*DF(K) + END DO ! !*********** CALCULATION OF COEFFICIENT MATRICES ************* !*********** AND THE SUM FOR CORRECTIONS ************* @@ -244,7 +290,7 @@ SUBROUTINE BROYDEN_mixer(NITER,ALPHA,JTOP,VECIN,VECOUT) ! REWIND(32) ! WRITE(66,1003)LASTIT,LASTM1 IF(LASTIT.GT.2)THEN - DO 500 J=1,LASTM2 + DO J=1,LASTM2 ! READ(32)(DUMVI(K),K=1,IVSIZ) DO k=1,IVSIZ DUMVI(k)=UNIT32(k,1,J) @@ -256,20 +302,22 @@ SUBROUTINE BROYDEN_mixer(NITER,ALPHA,JTOP,VECIN,VECOUT) ! AIJ=ZERO CMJ=ZERO - DO 501 K=1,IVSIZ - CMJ=CMJ + T1(K)*F(K) - 501 AIJ=AIJ + T1(K)*VTI(K) + DO K=1,IVSIZ + CMJ=CMJ + T1(K)*F(K) + AIJ=AIJ + T1(K)*VTI(K) + END DO A(LASTM1,J)=AIJ A(J,LASTM1)=AIJ CM(J)=CMJ - 500 CONTINUE + END DO ENDIF ! AIJ=ZERO CMJ=ZERO - DO 106 K=1,IVSIZ - CMJ= CMJ + VTI(K)*F(K) - 106 AIJ= AIJ + VTI(K)*VTI(K) + DO K=1,IVSIZ + CMJ= CMJ + VTI(K)*F(K) + AIJ= AIJ + VTI(K)*VTI(K) + END DO A(LASTM1,LASTM1)=AIJ CM(LASTM1)=CMJ ! @@ -316,33 +364,39 @@ SUBROUTINE BROYDEN_mixer(NITER,ALPHA,JTOP,VECIN,VECOUT) ! WRITE(31)(W(I),I=1,LASTM1) ! ! SET UP AND CALCULATE BETA MATRIX - DO 506 LM=1,LASTM1 - DO 507 LN=1,LASTM1 - D(LN,LM)= A(LN,LM)*W(LN)*W(LM) - 507 B(LN,LM)= ZERO - B(LM,LM)= ONE - 506 D(LM,LM)= W0**2 + A(LM,LM)*W(LM)*W(LM) + DO LM=1,LASTM1 + DO LN=1,LASTM1 + D(LN,LM)= A(LN,LM)*W(LN)*W(LM) + B(LN,LM)= ZERO + END DO + B(LM,LM)= ONE + D(LM,LM)= W0**2 + A(LM,LM)*W(LM)*W(LM) + END DO ! CALL INVERSE(D,B,LASTM1) ! ! CALCULATE THE VECTOR FOR THE NEW ITERATION - DO 505 K=1,IVSIZ - 505 DUMVI(K)= VECTOR(K,1) + AMIX*F(K) + DO K=1,IVSIZ + DUMVI(K)= VECTOR(K,1) + AMIX*F(K) + END DO ! - DO 504 I=1,LASTM1 + DO I=1,LASTM1 ! READ(32)(UI(K),K=1,IVSIZ) - DO k=1,IVSIZ - UI(k)=UNIT32(k,1,I) - END DO -! READ(32)(VTI(K),K=1,IVSIZ) - DO k=1,IVSIZ - VTI(k)=UNIT32(k,2,I) + DO k=1,IVSIZ + UI(k)=UNIT32(k,1,I) + END DO +! READ(32)(VTI(K),K=1,IVSIZ) + DO k=1,IVSIZ + VTI(k)=UNIT32(k,2,I) + END DO + GMI=ZERO + DO IP=1,LASTM1 + GMI=GMI + CM(IP)*B(IP,I)*W(IP) + END DO + DO K=1,IVSIZ + DUMVI(K)=DUMVI(K)-GMI*UI(K)*W(I) + END DO END DO - GMI=ZERO - DO 503 IP=1,LASTM1 - 503 GMI=GMI + CM(IP)*B(IP,I)*W(IP) - DO 504 K=1,IVSIZ - 504 DUMVI(K)=DUMVI(K)-GMI*UI(K)*W(I) ! END OF THE CALCULATION OF DUMVI, THE NEW VECTOR ! ! REWIND(31) @@ -359,8 +413,9 @@ SUBROUTINE BROYDEN_mixer(NITER,ALPHA,JTOP,VECIN,VECOUT) ! WRITE(31)AMIX,LASTIT UAMIX=AMIX ILASTIT=LASTIT - DO 101 K=1,IVSIZ - 101 F(K)=VECTOR(K,2)-VECTOR(K,1) + DO K=1,IVSIZ + F(K)=VECTOR(K,2)-VECTOR(K,1) + END DO ! WRITE(31)(F(K),K=1,IVSIZ) DO k=1,IVSIZ UNIT31(K,1)=F(k) @@ -371,8 +426,9 @@ SUBROUTINE BROYDEN_mixer(NITER,ALPHA,JTOP,VECIN,VECOUT) END DO ! ! SINCE WE ARE ON THE FIRST ITERATION, SIMPLE MIX THE VECTOR. - DO 102 K=1,IVSIZ - 102 DUMVI(K)= VECTOR(K,1) + AMIX*F(K) + DO K=1,IVSIZ + DUMVI(K)= VECTOR(K,1) + AMIX*F(K) + END DO ! WRITE( 6,1000) 120 CONTINUE ! @@ -384,9 +440,9 @@ SUBROUTINE BROYDEN_mixer(NITER,ALPHA,JTOP,VECIN,VECOUT) !+++++++ PROGRAM SPECIFIC CODE OF RELOADING ARRAYS +++++++++ ! ! NEED TO UNLOAD THE NEW VECTOR INTO THE APPROPRIATE ARRAYS. - DO 606 K=1,JTOP - VECIN(K)=DUMVI(K) - 606 CONTINUE + DO K=1,JTOP + VECIN(K)=DUMVI(K) + END DO ! !+++++++++ END OF PROGRAM SPECIFIC RELOADING OF ARRAYS +++++++++ ! @@ -404,7 +460,7 @@ END subroutine broyden_mixer ! ! CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC SUBROUTINE INVERSE(A,B,M) - IMPLICIT REAL*8 (A-H,O-Z) + IMPLICIT real(dp) (A-H,O-Z) IMPLICIT INTEGER (I-N) ! ============================================================= @@ -426,39 +482,45 @@ SUBROUTINE INVERSE(A,B,M) STOP END IF ! - DO 14 I=1,N + DO I=1,N ATMP=A(I,I) IF(ABS(ATMP) .LT. 1.0D-08)THEN ! WRITE(66,'('' INVERT: MATRIX HAS ZERO DIAGONAL'', ! & '' ELEMENT IN THE '',I4,'' ROW'')')I STOP ENDIF - 14 CONTINUE + END DO ! IF(N.EQ.1) GO TO 605 ! - DO 23 I=1,N + DO I=1,N ! - DO 35 J=1,N - 35 TD(J)=A(J,I)/A(I,I) + DO J=1,N + TD(J)=A(J,I)/A(I,I) + END DO ! -! TD(I)=(0.0E+00,0.0E+00) - TD(I)=0.0D0 +! TD(I)=(0.0E+00,0.0E+00) + TD(I)=0.0D0 ! - DO 71 K=1,N - BD(K)=B(I,K) - 71 AD(K)=A(I,K) + DO K=1,N + BD(K)=B(I,K) + AD(K)=A(I,K) + END DO ! - DO 601 K=1,N - DO 601 J=1,N - B(J,K)=B(J,K)-(TD(J)*BD(K)) - 601 A(J,K)=A(J,K)-(TD(J)*AD(K)) + DO K=1,N + DO J=1,N + B(J,K)=B(J,K)-(TD(J)*BD(K)) + A(J,K)=A(J,K)-(TD(J)*AD(K)) + END DO + END DO ! - 23 CONTINUE + END DO ! - DO 603 I=1,N - DO 603 J=1,N - 603 B(J,I)=B(J,I)/A(J,J) + DO I=1,N + DO J=1,N + B(J,I)=B(J,I)/A(J,J) + END DO + END DO ! RETURN ! @@ -467,15 +529,4 @@ SUBROUTINE INVERSE(A,B,M) END subroutine inverse ! - ! Simple mix, nothing else. - subroutine simple_mix(alt,neu,factor) - real(dp), intent(inout) :: alt(:) - real(dp), intent(in) :: neu(:), factor - - -! simple mix - alt=factor*neu+(1.0d0-factor)*alt - - end subroutine simple_mix - end module broyden diff --git a/slateratom/lib/core_overlap.f90 b/slateratom/lib/core_overlap.f90 index ae484a03..258386c6 100644 --- a/slateratom/lib/core_overlap.f90 +++ b/slateratom/lib/core_overlap.f90 @@ -1,276 +1,246 @@ +!> Module that builds up various supervectors. module core_overlap use common_accuracy, only : dp - use common_constants - use utilities - use integration + use utilities, only : fak implicit none private public :: overlap, kinetic, nuclear, moments, v, confinement + + interface v + module procedure v_int, v_real + end interface + + contains - subroutine overlap(s,max_l,num_alpha,alpha,poly_order) - - ! Overlap matrix elements, see rmp_32_186_1960.pdf eqn. 5 and eqn. 19 - - - ! Definition of the primitive basis functions based on Roothaan: - ! R_{\lambda p}=1/sqrt((2n_{\lambda p})!)* - ! (2*\zeta_{\lambda p})**(n_{\lambda p}+0.5)* - ! r**(n_{\lambda p}-1)*exp(-\zeta_{\lambda p}*r) - ! - ! For every exponent \zeta_{\lambda p} there are num_power coefficients, - ! each connected to one r**(n_{\lambda p}-1). The sum over all - ! coefficients, e.g. implicitely \zeta and r**n, gives the usual DFTB - ! basis function. - ! - ! Note: in DFTB one usually has r**(n+l-1) explicitely, here the angular - ! momentum index l is implicit. Result: - ! for l=0, e.g. s, n_{\lambda p}=0,1,...,num_power - ! for l=1, e.g. p, n_{\lambda p}=1,2,...,num_power+1 - ! for l=2, e.g. d, n_{\lambda p}=2,3,...,num_power+2 - ! - - real(dp), intent(out) :: s(0:,:,:) + !> Calculates overlap matrix elements, + !! see Rev. Mod. Phys. 32, 186 (1960) eqn. 5 and eqn. 19. + !! + !! Definition of the primitive basis functions based on Roothaan: + !! R_{\lambda p}=1/sqrt((2n_{\lambda p})!)* + !! (2*\zeta_{\lambda p})**(n_{\lambda p}+0.5)* + !! r**(n_{\lambda p}-1)*exp(-\zeta_{\lambda p}*r) + !! + !! For every exponent \zeta_{\lambda p} there are num_power coefficients, + !! each connected to one r**(n_{\lambda p}-1). The sum over all + !! coefficients, e.g. implicitely \zeta and r**n, gives the usual DFTB + !! basis function. + !! + !! Note: in DFTB one usually has r**(n+l-1) explicitely, here the angular + !! momentum index l is implicit. Result: + !! for l=0, e.g. s, n_{\lambda p}=0,1,..., num_power + !! for l=1, e.g. p, n_{\lambda p}=1,2,..., num_power + 1 + !! for l=2, e.g. d, n_{\lambda p}=2,3,..., num_power + 2 + pure subroutine overlap(ss, max_l, num_alpha, alpha, poly_order) + + !> overlap supervector + real(dp), intent(out) :: ss(0:,:,:) + + !> maximum angular momentum integer, intent(in) :: max_l + + !> number of exponents in each shell integer, intent(in) :: num_alpha(0:) - integer, intent(in) :: poly_order(0:) + + !> basis exponents real(dp), intent(in) :: alpha(0:,:) - integer :: ii,jj,kk,ll,mm,nn,oo,pp,nlp,nlq + + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) + + !> temporary storage real(dp) :: alpha1 - s=0.0d0 + !> auxiliary variables + integer :: ii, jj, kk, ll, mm, nn, oo, nlp, nlq + + ss(:,:,:) = 0.0_dp - ! These loops define the indizes S_{\lambda p q} + ! these loops define the indizes S_{\lambda p q} ! p=alpha1/n=0+l,alpha1/n=1+l,...,alpha2/n=0+l,alpha2/n=1+l... - ! - ! write(*,*) 'max_l',max_l - ! write(*,*) 'num_alpha',num_alpha - ! write(*,*) 'poly_order',poly_order - ! write(*,'(A)') 'ii jj ll kk mm nn oo' - do ii=0,max_l - nn=0 - do jj=1,num_alpha(ii) - do ll=1,poly_order(ii) - nn=nn+1 - oo=0 - nlp=ll+ii - do kk=1,num_alpha(ii) - alpha1=0.5d0*(alpha(ii,jj)+alpha(ii,kk)) - do mm=1,poly_order(ii) - oo=oo+1 - nlq=mm+ii - ! write(*,'(I2,I2,I2,I2,I2,I2,I2)') ii,jj,ll,kk,mm,nn,oo - ! - ! use ll+ii and mm+ii becaue of DFTB basis function definition - s(ii,nn,oo)=1.0d0/sqrt(v(alpha(ii,jj),2*nlp)*& - &v(alpha(ii,kk),2*nlq))*v(alpha1,nlp+nlq) + + do ii = 0, max_l + nn = 0 + do jj = 1, num_alpha(ii) + do ll = 1, poly_order(ii) + nn = nn + 1 + oo = 0 + nlp = ll + ii + do kk = 1, num_alpha(ii) + alpha1 = 0.5_dp * (alpha(ii, jj) + alpha(ii, kk)) + do mm = 1, poly_order(ii) + oo = oo + 1 + nlq = mm + ii + ! use ll+ii and mm+ii because of DFTB basis function definition + ss(ii, nn, oo) = 1.0_dp / sqrt(v(alpha(ii, jj), 2 * nlp)& + & * v(alpha(ii, kk), 2 * nlq)) * v(alpha1, nlp + nlq) end do end do end do end do end do - ! write(*,*) 'OVERLAP' - ! write(*,*) s - end subroutine overlap - subroutine nuclear(u,max_l,num_alpha,alpha,poly_order) - ! Nuclear attraction matrix elements, see rmp_32_186_1960.pdf eqn. 5 and eqn.19 + !> Calculates nuclear attraction matrix elements, + !! see Rev. Mod. Phys. 32, 186 (1960) eqn. 5 and eqn. 19. + pure subroutine nuclear(uu, max_l, num_alpha, alpha, poly_order) + !> nucleus-electron supervector + real(dp), intent(out) :: uu(0:,:,:) - real(dp), intent(out) :: u(0:,:,:) + !> maximum angular momentum integer, intent(in) :: max_l + + !> number of exponents in each shell integer, intent(in) :: num_alpha(0:) - integer, intent(in) :: poly_order(0:) + + !> basis exponents real(dp), intent(in) :: alpha(0:,:) - integer :: ii,jj,kk,ll,mm,nn,oo,pp,nlp,nlq + + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) + + !> temporary storage real(dp) :: alpha1 - u=0.0d0 - - do ii=0,max_l - nn=0 - do jj=1,num_alpha(ii) - do ll=1,poly_order(ii) - nn=nn+1 - oo=0 - nlp=ll+ii - do kk=1,num_alpha(ii) - alpha1=0.5d0*(alpha(ii,jj)+alpha(ii,kk)) - do mm=1,poly_order(ii) - oo=oo+1 - nlq=mm+ii - u(ii,nn,oo)=2.0d0/sqrt(v(alpha(ii,jj),2*nlp)*& - &v(alpha(ii,kk),2*nlq))*v(alpha1,nlp+nlq-1) + !> auxiliary variables + integer :: ii, jj, kk, ll, mm, nn, oo, nlp, nlq + + uu = 0.0_dp + + do ii = 0, max_l + nn = 0 + do jj = 1, num_alpha(ii) + do ll = 1, poly_order(ii) + nn = nn + 1 + oo = 0 + nlp = ll + ii + do kk = 1, num_alpha(ii) + alpha1 = 0.5_dp * (alpha(ii, jj) + alpha(ii, kk)) + do mm = 1, poly_order(ii) + oo = oo + 1 + nlq = mm + ii + uu(ii, nn, oo) = 2.0_dp / sqrt(v(alpha(ii, jj), 2 * nlp) *& + &v(alpha(ii, kk), 2 * nlq)) * v(alpha1, nlp + nlq - 1) end do end do end do end do end do - ! write(*,*) 'NUCLEAR' - ! write(*,*) u - end subroutine nuclear - ! WARNING: a finite nucleus is a bad idea with the currently implemented ZORA, - ! because the integration by parts done there does certainly fail with a finite - ! nucleus. Second: this routine does not even work without ZORA, unknown bug. - ! - ! subroutine nuclear_finite(u,nuc,max_l,num_alpha,alpha,poly_order) - !! simple finite nucleus - !! v=-Z/(2R_0)*(3-r^2/R_0^2) for r<=R_0 - !! v=-Z/r for r>R_0 - ! - ! implicit none - ! - ! real(dp), intent(out) :: u(0:,:,:) - ! integer, intent(in) :: max_l,nuc - ! integer, intent(in) :: num_alpha(0:) - ! integer, intent(in) :: poly_order(0:) - ! real(dp), intent(in) :: alpha(0:,:) - ! integer :: ii,jj,kk,ll,mm,nn,oo,pp,nlp,nlq - ! real(dp) :: alpha1,alpha2,part1,part2,part3,part4,part5,part6,r0,normalization - ! integer :: iso(109) - ! DATA iso/& - ! &1, 4, 7, 9, 11, 12, 14, 16, 19, 20, 23, 24, 27, 28, 31, 32, 35, 40, 39, 40,& - ! &45, 48, 51, 52, 55, 56, 59, 58, 63, 64, 69, 74, 75, 80, 79, 84, 85, 88, 89,& - ! &90, 93, 98, 98, 102, 103, 106, 107, 114, 115, 120, 121, 130, 127, 132, 133,& - ! &138, 139, 140, 141, 144, 145, 152, 153, 158, 159, 162, 162, 168, 169, 174, & - ! &175, 180, 181, 184, 187, 192, 193, 195, 197, 202, 205, 208, 209, 209, 210,& - ! &222, 223, 226, 227, 232, 231, 238, 237, 244, 243, 247, 247, 251, 252, 257,& - ! &258, 259, 262, 261, 262, 263, 262, 265, 266/ - ! - ! r0=sqrt(5.0d0/3.0d0)*(0.836*(iso(nuc)**(1.0d0/3.0d0))+0.570)*1.0d-5/0.529177d0 - ! - ! write(*,'(A,E)') 'FINITE NUCLEUS MODEL, RADIUS ',r0 - ! - ! u=0.0d0 - ! - ! do ii=0,max_l - ! nn=0 - ! do jj=1,num_alpha(ii) - ! do ll=1,poly_order(ii) - ! nn=nn+1 - ! oo=0 - ! nlp=ll+ii - ! do kk=1,num_alpha(ii) - ! alpha1=0.5d0*(alpha(ii,jj)+alpha(ii,kk)) - ! alpha2=-(alpha(ii,jj)+alpha(ii,kk)) - ! do mm=1,poly_order(ii) - ! oo=oo+1 - ! nlq=mm+ii - ! - ! normalization=real(2**(nlp+nlq+1),dp)/& - ! sqrt(v(alpha(ii,jj),2*nlp)*v(alpha(ii,kk),2*nlq)) - ! - ! part1=exp_int(alpha2,nlp+nlq-1,r0)-exp_int(alpha2,nlp+nlq-1,0.0d0) - ! part2=(exp_int(alpha2,nlp+nlq,r0)-& - ! &exp_int(alpha2,nlp+nlq,0.0d0))*3.0d0/(2.0d0*r0) - ! part3=(exp_int(alpha2,nlp+nlq+2,r0)-& - ! &exp_int(alpha2,nlp+nlq+2,0.0d0))/(2.0d0*(r0**3)) - ! - ! u(ii,nn,oo)=2.0d0/sqrt(v(alpha(ii,jj),2*nlp)*& - ! &v(alpha(ii,kk),2*nlq))*v(alpha1,nlp+nlq-1)& - ! &-normalization*(+part1-part2+part3) - ! write(*,*) 'part1',part1 - ! write(*,*) 'part2',part2 - ! write(*,*) 'part3',part3 - ! write(*,*) 'norma',normalization - ! end do - ! end do - ! end do - ! end do - ! end do - ! - ! write(*,*) 'NUCLEAR FINITE' - ! write(*,*) u - ! - ! end subroutine nuclear_finite - - subroutine kinetic(t,max_l,num_alpha,alpha,poly_order) - - ! Kinetic matrix elements, see rmp_32_186_1960.pdf eqn. 5 and eqn. 19 - - real(dp), intent(out) :: t(0:,:,:) + + !> Calculates the kinetic matrix elements, + !! see Rev. Mod. Phys. 32, 186 (1960) eqn. 5 and eqn. 19. + pure subroutine kinetic(tt, max_l, num_alpha, alpha, poly_order) + + !> kinetic supervector + real(dp), intent(out) :: tt(0:,:,:) + + !> maximum angular momentum integer, intent(in) :: max_l + + !> number of exponents in each shell integer, intent(in) :: num_alpha(0:) - integer, intent(in) :: poly_order(0:) + + !> basis exponents real(dp), intent(in) :: alpha(0:,:) - integer :: ii,jj,kk,ll,mm,nn,oo,pp,nlp,nlq + + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) + + !> temporary storage real(dp) :: alpha1 - t=0.0d0 - - do ii=0,max_l - nn=0 - do jj=1,num_alpha(ii) - do ll=1,poly_order(ii) - nn=nn+1 - oo=0 - nlp=ll+ii - do kk=1,num_alpha(ii) - alpha1=0.5d0*(alpha(ii,jj)+alpha(ii,kk)) - do mm=1,poly_order(ii) - oo=oo+1 - nlq=mm+ii - t(ii,nn,oo)=0.5d0*alpha(ii,jj)*alpha(ii,kk)/& - &sqrt(v(alpha(ii,jj),2*nlp)*v(alpha(ii,kk),2*nlq))*& - &(v(alpha1,nlp+nlq)-& - &(w(alpha(ii,jj),ii,nlp)+w(alpha(ii,kk),ii,nlq))*& - &v(alpha1,nlp+nlq-1)+& - &(w(alpha(ii,jj),ii,nlp)*w(alpha(ii,kk),ii,nlq))*& - &v(alpha1,nlp+nlq-2)& - &) + !> auxiliary variables + integer :: ii, jj, kk, ll, mm, nn, oo, nlp, nlq + + tt(:,:,:) = 0.0_dp + + do ii = 0, max_l + nn = 0 + do jj = 1, num_alpha(ii) + do ll = 1, poly_order(ii) + nn = nn + 1 + oo = 0 + nlp = ll + ii + do kk = 1, num_alpha(ii) + alpha1 = 0.5_dp * (alpha(ii, jj) + alpha(ii, kk)) + do mm = 1, poly_order(ii) + oo = oo + 1 + nlq = mm + ii + tt(ii, nn, oo) = 0.5_dp * alpha(ii, jj) * alpha(ii, kk) /& + & sqrt(v(alpha(ii, jj), 2 * nlp) * v(alpha(ii, kk), 2 * nlq)) *& + & (v(alpha1, nlp + nlq) -& + & (w(alpha(ii, jj), ii, nlp) + w(alpha(ii, kk), ii, nlq)) *& + & v(alpha1, nlp + nlq - 1) +& + & (w(alpha(ii, jj), ii, nlp) * w(alpha(ii, kk), ii, nlq)) *& + & v(alpha1, nlp + nlq - 2)) end do end do end do end do end do - ! write(*,*) 'KINETIC' - ! write(*,*) t - end subroutine kinetic - subroutine confinement(vconf,max_l,num_alpha,alpha,poly_order,& - &conf_r0,conf_power) - ! Analytic matrix elements of confining potential - ! No checking for power, e.g. power==0 or power<0 etc. ! + !> Calculates analytic matrix elements of confining potential. + !! No checking for power, e.g. power==0 or power<0 etc. ! + pure subroutine confinement(vconf, max_l, num_alpha, alpha, poly_order, conf_r0, conf_power) + !> confinement supervector real(dp), intent(out) :: vconf(0:,:,:) - integer, intent(in) :: max_l,conf_power(0:) + + !> maximum angular momentum + integer, intent(in) :: max_l + + !> number of exponents in each shell integer, intent(in) :: num_alpha(0:) + + !> basis exponents + real(dp), intent(in) :: alpha(0:,:) + + !> highest polynomial order + l in each shell integer, intent(in) :: poly_order(0:) - real(dp), intent(in) :: alpha(0:,:),conf_r0(0:) - integer :: ii,jj,kk,ll,mm,nn,oo,pp,nlp,nlq + + !> confinement radii + real(dp), intent(in) :: conf_r0(0:) + + !> power of confinement + real(dp), intent(in) :: conf_power(0:) + + !> temporary storage real(dp) :: alpha1 - vconf=0.0d0 - - do ii=0,max_l - if (conf_power(ii)/=0) then - nn=0 - do jj=1,num_alpha(ii) - do ll=1,poly_order(ii) - nn=nn+1 - oo=0 - nlp=ll+ii - do kk=1,num_alpha(ii) - alpha1=0.5d0*(alpha(ii,jj)+alpha(ii,kk)) - do mm=1,poly_order(ii) - oo=oo+1 - nlq=mm+ii - vconf(ii,nn,oo)=1.0d0/sqrt(v(alpha(ii,jj),2*nlp)*& - &v(alpha(ii,kk),2*nlq))/(conf_r0(ii)*2.0d0)**conf_power(ii)*& - &v(alpha1,nlp+nlq+conf_power(ii)) + !> auxiliary variables + integer :: ii, jj, kk, ll, mm, nn, oo, nlp, nlq + + vconf(:,:,:) = 0.0_dp + + do ii = 0, max_l + if (conf_power(ii) > 1.0e-06_dp) then + nn = 0 + do jj = 1, num_alpha(ii) + do ll = 1, poly_order(ii) + nn = nn + 1 + oo = 0 + nlp = ll + ii + do kk = 1, num_alpha(ii) + alpha1 = 0.5_dp * (alpha(ii, jj) + alpha(ii, kk)) + do mm = 1, poly_order(ii) + oo = oo + 1 + nlq = mm + ii + vconf(ii, nn, oo) = 1.0_dp / sqrt(v(alpha(ii, jj), 2 * nlp)& + & * v(alpha(ii, kk), 2 * nlq)) / (conf_r0(ii) * 2.0_dp)**conf_power(ii)& + & * v(alpha1, nlp + nlq + conf_power(ii)) end do end do end do @@ -278,51 +248,65 @@ subroutine confinement(vconf,max_l,num_alpha,alpha,poly_order,& end if end do - ! write(*,*) 'CONFINEMENT' - ! write(*,*) vconf - end subroutine confinement - subroutine moments(moment,max_l,num_alpha,alpha,poly_order,problemsize,cof,& - &power) - ! Arbitrary moments of electron distribution, e.g. expectation values - ! of , etc.; this is implemented analytically for arbitrary - ! powers + !> Calculates arbitrary moments of electron distribution, e.g. expectation values of , + !! etc.; this is implemented analytically for arbitrary powers. + pure subroutine moments(moment, max_l, num_alpha, alpha, poly_order, cof, power) + !> moment of electron distribution real(dp), intent(out) :: moment(:,0:,:) - integer, intent(in) :: max_l,problemsize + + !> maximum angular momentum + integer, intent(in) :: max_l + + !> number of exponents in each shell integer, intent(in) :: num_alpha(0:) - integer, intent(in) :: poly_order(0:),power - real(dp), intent(in) :: alpha(0:,:),cof(:,0:,:,:) - integer :: ii,jj,kk,ll,mm,nn,oo,pp,nlp,nlq + + !> basis exponents + real(dp), intent(in) :: alpha(0:,:) + + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) + + !> wavefunction coefficients + real(dp), intent(in) :: cof(:,0:,:,:) + + !> power of moment + integer, intent(in) :: power + + !> temporary storage real(dp) :: alpha1 - moment=0.0d0 + !> auxiliary variables + integer :: ii, jj, kk, ll, mm, nn, oo, pp, nlp, nlq + + moment(:,:,:) = 0.0_dp ! only computed for p-functions and higher - if (power>-3) then - do ii=0,max_l - do pp=1,num_alpha(ii)*poly_order(ii) - nn=0 - do jj=1,num_alpha(ii) - do ll=1,poly_order(ii) - nn=nn+1 - oo=0 - nlp=ll+ii - do kk=1,num_alpha(ii) - alpha1=0.5d0*(alpha(ii,jj)+alpha(ii,kk)) - do mm=1,poly_order(ii) - oo=oo+1 - nlq=mm+ii - - moment(1,ii,pp)=moment(1,ii,pp)+1.0d0/sqrt(v(alpha(ii,jj),2*nlp)*& - &v(alpha(ii,kk),2*nlq))/(2.0d0**power)*& - &v(alpha1,nlp+nlq+power)*cof(1,ii,nn,pp)*cof(1,ii,oo,pp) - - moment(2,ii,pp)=moment(2,ii,pp)+1.0d0/sqrt(v(alpha(ii,jj),2*nlp)*& - &v(alpha(ii,kk),2*nlq))/(2.0d0**power)*& - &v(alpha1,nlp+nlq+power)*cof(2,ii,nn,pp)*cof(2,ii,oo,pp) + if (power > -3) then + do ii = 0, max_l + do pp = 1, num_alpha(ii) * poly_order(ii) + nn = 0 + do jj = 1, num_alpha(ii) + do ll = 1, poly_order(ii) + nn = nn + 1 + oo = 0 + nlp = ll + ii + do kk = 1, num_alpha(ii) + alpha1 = 0.5_dp * (alpha(ii, jj) + alpha(ii, kk)) + do mm = 1, poly_order(ii) + oo = oo + 1 + nlq = mm + ii + + moment(1, ii, pp) = moment(1, ii, pp) + 1.0_dp / sqrt(v(alpha(ii, jj), 2 * nlp)& + & * v(alpha(ii, kk), 2 * nlq)) / (2.0_dp**power)& + & * v(alpha1, nlp + nlq + power) * cof(1, ii, nn, pp) * cof(1, ii, oo, pp) + + moment(2, ii, pp) = moment(2, ii, pp) + 1.0_dp / sqrt(v(alpha(ii, jj), 2 * nlp)& + & * v(alpha(ii, kk), 2 * nlq)) / (2.0_dp**power)& + & * v(alpha1, nlp + nlq + power) * cof(2, ii, nn, pp) * cof(2, ii, oo, pp) end do end do @@ -330,28 +314,28 @@ subroutine moments(moment,max_l,num_alpha,alpha,poly_order,problemsize,cof,& end do end do end do - else if (power==-3) then - do ii=1,max_l - do pp=1,num_alpha(ii)*poly_order(ii) - nn=0 - do jj=1,num_alpha(ii) - do ll=1,poly_order(ii) - nn=nn+1 - oo=0 - nlp=ll+ii - do kk=1,num_alpha(ii) - alpha1=0.5d0*(alpha(ii,jj)+alpha(ii,kk)) - do mm=1,poly_order(ii) - oo=oo+1 - nlq=mm+ii - - moment(1,ii,pp)=moment(1,ii,pp)+1.0d0/sqrt(v(alpha(ii,jj),2*nlp)*& - &v(alpha(ii,kk),2*nlq))/(2.0d0**power)*& - &v(alpha1,nlp+nlq+power)*cof(1,ii,nn,pp)*cof(1,ii,oo,pp) - - moment(2,ii,pp)=moment(2,ii,pp)+1.0d0/sqrt(v(alpha(ii,jj),2*nlp)*& - &v(alpha(ii,kk),2*nlq))/(2.0d0**power)*& - &v(alpha1,nlp+nlq+power)*cof(2,ii,nn,pp)*cof(2,ii,oo,pp) + else if (power == -3) then + do ii = 1, max_l + do pp = 1, num_alpha(ii) * poly_order(ii) + nn = 0 + do jj = 1, num_alpha(ii) + do ll = 1, poly_order(ii) + nn = nn + 1 + oo = 0 + nlp = ll + ii + do kk = 1, num_alpha(ii) + alpha1 = 0.5_dp * (alpha(ii, jj) + alpha(ii, kk)) + do mm = 1, poly_order(ii) + oo = oo + 1 + nlq = mm + ii + + moment(1, ii, pp) = moment(1, ii, pp) + 1.0_dp / sqrt(v(alpha(ii, jj), 2 * nlp)& + & * v(alpha(ii, kk), 2 * nlq)) / (2.0_dp**power)& + & * v(alpha1, nlp + nlq + power) * cof(1, ii, nn, pp) * cof(1, ii, oo, pp) + + moment(2, ii, pp) = moment(2, ii, pp) + 1.0_dp / sqrt(v(alpha(ii, jj), 2 * nlp)& + & * v(alpha(ii, kk), 2 * nlq)) / (2.0_dp**power)& + & * v(alpha1, nlp + nlq + power) * cof(2, ii, nn, pp) * cof(2, ii, oo, pp) end do end do @@ -361,35 +345,57 @@ subroutine moments(moment,max_l,num_alpha,alpha,poly_order,problemsize,cof,& end do end if - ! write(*,*) 'MOMENT' - ! write(*,*) moment - end subroutine moments - function v(x,i) ! V_{i}(x) - ! Auxilliary function, see rmp_32_186_1960.pdf eqn. 20 + !> Auxiliary function V_{i}(x), see Rev. Mod. Phys. 32, 186 (1960) eqn. 20. + pure function v_int(xx, ii) result(res) + + !> argument + real(dp), intent(in) :: xx + + !> index + integer, intent(in) :: ii + + !> result + real(dp) :: res + + res = fak(ii) / (xx**(ii + 1)) + + end function v_int + + + !> Auxiliary function V_{i}(x), see Rev. Mod. Phys. 32, 186 (1960) eqn. 20. + pure function v_real(xx, ii) result(res) + + !> argument + real(dp), intent(in) :: xx + + !> index + real(dp), intent(in) :: ii + + !> result + real(dp) :: res + + res = gamma(ii + 1.0_dp) / xx**(ii + 1.0_dp) - real(dp), intent(in) :: x - integer, intent(in) :: i - real(dp) :: v + end function v_real - v=fak(i)/(x**(i+1)) - return - end function v + !> Auxiliary function W_{ij}(x), see Rev. Mod. Phys. 32, 186 (1960) eqn. 20. + pure function w(xx, ii, jj) result(res) - function w(x,i,j) ! W_{ij}(x) + !> argument + real(dp), intent(in) :: xx - ! Auxilliary function, see rmp_32_186_1960.pdf eqn. 20 + !> indices + integer, intent(in) :: ii, jj - real(dp), intent(in) :: x - integer, intent(in) :: i,j - real(dp) :: w + !> result + real(dp) :: res - w=2.0d0*real((j-i-1),dp)/x + res = 2.0_dp * real(jj - ii - 1, dp) / xx - return end function w end module core_overlap diff --git a/slateratom/lib/coulomb_hfex.f90 b/slateratom/lib/coulomb_hfex.f90 index 36d64272..55974349 100644 --- a/slateratom/lib/coulomb_hfex.f90 +++ b/slateratom/lib/coulomb_hfex.f90 @@ -1,76 +1,88 @@ +!> Module that builds up Coulomb and Hartree-Fock exchange supermatrix elements. module coulomb_hfex use common_accuracy, only : dp - use common_constants - use utilities - use core_overlap + use common_anglib, only : realGaunt + use common_poisson, only : TBeckeGridParams, TBeckeIntegrator, TBeckeIntegrator_init,& + & TBeckeIntegrator_setKernelParam, TBeckeIntegrator_precompFdMatrix,& + & TBeckeIntegrator_buildLU, TBeckeIntegrator_getCoords, TBeckeIntegrator_solveHelmholz + use utilities, only : fak + use core_overlap, only : v implicit none private - public :: coulomb, hfex - - + public :: coulomb, hfex, hfex_lr + + contains - subroutine coulomb(j,max_l,num_alpha,alpha,poly_order,u,s) + !> Calculates Coulomb supermatrix elements, + !! see Rev. Mod. Phys. 32, 186 (1960) eqn. 6 and eqn. 21 + pure subroutine coulomb(jj, max_l, num_alpha, alpha, poly_order, uu, ss) - ! Coulomb supermatrix, see rmp_32_186_1960.pdf eqn. 6 and eqn. 21 + !> coulomb supermatrix + real(dp), intent(out) :: jj(0:,:,:,0:,:,:) - - real(dp), intent(out) :: j(0:,:,:,0:,:,:) + !> maximum angular momentum integer, intent(in) :: max_l + + !> number of exponents in each shell integer, intent(in) :: num_alpha(0:) + + !> basis exponents + real(dp), intent(in) :: alpha(0:,:) + + !> highest polynomial order + l in each shell integer, intent(in) :: poly_order(0:) - real(dp), intent(in) :: alpha(0:4,10) - real(dp), intent(in) :: u(0:,:,:) - real(dp), intent(in) :: s(0:,:,:) - real(dp) :: alpha1,alpha2 - integer :: ii,jj,kk,ll,mm,nn,oo,pp,qq,rr,ss,tt,uu,vv,ww,xx,yy,zz - integer :: nlpq,nmrs - - j=0.0d0 - - do ii=0,max_l - ss=0 - do jj=1,num_alpha(ii) - do kk=1,poly_order(ii) - ss=ss+1 - tt=0 - do ll=1,num_alpha(ii) - do mm=1,poly_order(ii) - tt=tt+1 - do nn=0,max_l - uu=0 - do oo=1,num_alpha(nn) - do pp=1,poly_order(nn) - uu=uu+1 - vv=0 - do qq=1,num_alpha(nn) - do rr=1,poly_order(nn) - vv=vv+1 - - alpha1=(alpha(ii,jj)+alpha(ii,ll))/& - &(alpha(nn,oo)+alpha(nn,qq)) - alpha2=(alpha(nn,oo)+alpha(nn,qq))/& - &(alpha(ii,jj)+alpha(ii,ll)) - nlpq=kk+mm+2*ii - nmrs=pp+rr+2*nn - - j(ii,ss,tt,nn,uu,vv)=& - &u(ii,ss,tt)*s(nn,uu,vv)*& - &c(nlpq-1,nmrs,alpha1)+& - &u(nn,uu,vv)*s(ii,ss,tt)*& - &c(nmrs-1,nlpq,alpha2) - ! write(*,'(A,F12.8,6I3)') 'j ',j(ii,ss,tt,nn,uu,vv),ii,ss,tt,nn,uu,vv - ! write(*,'(A,F12.8,3I3)') 's1',s(ii,ss,tt),ii,ss,tt - ! write(*,'(A,F12.8,3I3)') 's2',s(nn,uu,vv),nn,uu,vv - ! write(*,'(A,F12.8,3I3)') 'u1',u(ii,ss,tt),ii,ss,tt - ! write(*,'(A,F12.8,3I3)') 'u2',u(nn,uu,vv),nn,uu,vv - ! write(*,'(A,F12.8,2I3,F12.8)') 'c1',c(kk+mm+2*ii-1,pp+rr+2*nn,alpha1),& - ! &kk+mm+2*ii-1,pp+rr+2*nn,alpha1 - ! write(*,'(A,F12.8,2I3,F12.8)') 'c2',c(pp+rr+2*nn-1,kk+mm+2*ii,alpha2),& - ! &pp+rr+2*ii-1,kk+mm+2*nn,alpha2 + + !> nucleus-electron supervector + real(dp), intent(in) :: uu(0:,:,:) + + !> overlap supervector + real(dp), intent(in) :: ss(0:,:,:) + + !> temporary storage + real(dp) :: alpha1, alpha2 + + !> auxiliary variables + integer :: ii, jjj, kk, ll, mm, nn, oo, pp, qq, rr, sss, tt, uuu, vv + integer :: nlpq, nmrs + + jj(:,:,:,:,:,:) = 0.0_dp + + do ii = 0, max_l + sss = 0 + do jjj = 1, num_alpha(ii) + do kk = 1, poly_order(ii) + sss = sss + 1 + tt = 0 + do ll = 1, num_alpha(ii) + do mm = 1, poly_order(ii) + tt = tt + 1 + do nn = 0, max_l + uuu = 0 + do oo = 1, num_alpha(nn) + do pp = 1, poly_order(nn) + uuu = uuu + 1 + vv = 0 + do qq = 1, num_alpha(nn) + do rr = 1, poly_order(nn) + vv = vv + 1 + + alpha1 = (alpha(ii, jjj) + alpha(ii, ll)) /& + &(alpha(nn, oo) + alpha(nn, qq)) + alpha2 = (alpha(nn, oo) + alpha(nn, qq)) /& + &(alpha(ii, jjj) + alpha(ii, ll)) + nlpq = kk + mm + 2 * ii + nmrs = pp + rr + 2 * nn + + jj(ii, sss, tt, nn, uuu, vv) =& + & uu(ii, sss, tt) * ss(nn, uuu, vv) *& + & cc(nlpq - 1, nmrs, alpha1) +& + & uu(nn, uuu, vv) * ss(ii, sss, tt) *& + & cc(nmrs - 1, nlpq, alpha2) + end do end do end do @@ -82,92 +94,102 @@ subroutine coulomb(j,max_l,num_alpha,alpha,poly_order,u,s) end do end do - ! do ii=0,max_l - ! do jj=0,max_l - ! j(ii,:,:,jj,:,:)=j(ii,:,:,jj,:,:)/& - ! &((2.0d0*real(ii,dp)+1.0d0)*(2.0d0*real(jj,dp)+1.0d0)) - ! end do - ! end do - - ! write(*,*) 'COULOMB' - ! write(*,*) j - end subroutine coulomb - subroutine hfex(k,max_l,num_alpha,alpha,poly_order,problemsize) - ! HF Exchange supermatrix, see rmp_32_186_1960.pdf eqn. 7/8 and eqn. 21 + !> Builds HF exchange supermatrix, + !! see Rev. Mod. Phys. 32, 186 (1960) eqn. 7/8 and eqn. 21 + pure subroutine hfex(kk, max_l, num_alpha, alpha, poly_order, problemsize) - - real(dp), intent(out) :: k(0:,:,:,0:,:,:) + !> Hartree-Fock exchange supermatrix + real(dp), intent(out) :: kk(0:,:,:,0:,:,:) + + !> maximum angular momentum integer, intent(in) :: max_l + + !> number of exponents in each shell integer, intent(in) :: num_alpha(0:) + + !> basis exponents + real(dp), intent(in) :: alpha(0:,:) + + !> highest polynomial order + l in each shell integer, intent(in) :: poly_order(0:) - real(dp), intent(in) :: alpha(0:4,10) - real(dp),allocatable :: knu(:,:,:,:,:,:,:) - real(dp) :: alpha1,alpha2,alpha3,alpha4,beta1,beta2,beta3,beta4 - real(dp) :: pre,t1,t2,t3,t4 - integer :: ii,jj,kk,ll,mm,nn,oo,pp,qq,rr,ss,tt,uu,vv,ww,xx,yy,zz - integer :: nu,problemsize - integer :: nlp,nlq,nmr,nms - - allocate(knu(0:max_l,problemsize,problemsize,0:max_l,problemsize,& - &problemsize,0:2*max_l+2)) - - k=0.0d0 - knu=0.0d0 - - ! Build knu according to eqn. 8 - - do ii=0,max_l - ss=0 - do jj=1,num_alpha(ii) - do kk=1,poly_order(ii) - ss=ss+1 - tt=0 - do ll=1,num_alpha(ii) - do mm=1,poly_order(ii) - tt=tt+1 - do nn=0,max_l - uu=0 - do oo=1,num_alpha(nn) - do pp=1,poly_order(nn) - uu=uu+1 - vv=0 - do qq=1,num_alpha(nn) - do rr=1,poly_order(nn) - vv=vv+1 - - alpha1=0.5d0*(alpha(ii,jj)+alpha(nn,oo)) - alpha2=0.5d0*(alpha(ii,ll)+alpha(nn,qq)) - alpha3=0.5d0*(alpha(ii,jj)+alpha(nn,qq)) - alpha4=0.5d0*(alpha(ii,ll)+alpha(nn,oo)) - beta1=alpha1/alpha2 - beta2=alpha2/alpha1 - beta3=alpha3/alpha4 - beta4=alpha4/alpha3 - nlp=kk+ii - nlq=mm+ii - nmr=pp+nn - nms=rr+nn - - pre=1.0d0/sqrt(v(alpha(ii,jj),2*(kk+ii))*& - & v(alpha(ii,ll),2*(mm+ii))*& - & v(alpha(nn,oo),2*(pp+nn))*& - & v(alpha(nn,qq),2*(rr+nn))) - - do nu=abs(ii-nn),ii+nn,2 - - t1=v(alpha1,nlp+nmr-nu-1)*v(alpha2,nlq+nms+nu)*& - &c(nlp+nmr-nu-1,nlq+nms+nu,beta1) - t2=v(alpha2,nlq+nms-nu-1)*v(alpha1,nlp+nmr+nu)*& - &c(nlq+nms-nu-1,nlp+nmr+nu,beta2) - t3=v(alpha3,nlp+nms-nu-1)*v(alpha4,nlq+nmr+nu)*& - &c(nlp+nms-nu-1,nlq+nmr+nu,beta3) - t4=v(alpha4,nlq+nmr-nu-1)*v(alpha3,nlp+nms+nu)*& - &c(nlq+nmr-nu-1,nlp+nms+nu,beta4) - - knu(ii,ss,tt,nn,uu,vv,nu)=pre*(t1+t2+t3+t4) + + !> maximum size of the eigenproblem + integer, intent(in) :: problemsize + + !> Rev. Mod. Phys. 32, 186 (1960) eqn. 21 + real(dp), allocatable :: knu(:,:,:,:,:,:,:) + + !> temporary storage + real(dp) :: alpha1, alpha2, alpha3, alpha4, beta1, beta2, beta3, beta4 + + !> four terms of Rev. Mod. Phys. 32, 186 (1960) eqn. 21 + real(dp) :: pre, t1, t2, t3, t4 + + !> auxiliary variables + integer :: ii, jj, kkk, ll, mm, nn, oo, pp, qq, rr, ss, tt, uu, vv + integer :: nu, nlp, nlq, nmr, nms + + allocate(knu(0:max_l, problemsize, problemsize, 0:max_l, problemsize, problemsize,& + & 0:2 * max_l + 2)) + + kk(:,:,:,:,:,:) = 0.0_dp + knu(:,:,:,:,:,:,:) = 0.0_dp + + ! build knu according to Rev. Mod. Phys. 32, 186 (1960) eqn. 8 + + do ii = 0, max_l + ss = 0 + do jj = 1, num_alpha(ii) + do kkk = 1, poly_order(ii) + ss = ss + 1 + tt = 0 + do ll = 1, num_alpha(ii) + do mm = 1, poly_order(ii) + tt = tt + 1 + do nn = 0, max_l + uu = 0 + do oo = 1, num_alpha(nn) + do pp = 1, poly_order(nn) + uu = uu + 1 + vv = 0 + do qq = 1, num_alpha(nn) + do rr = 1, poly_order(nn) + vv = vv + 1 + + alpha1 = 0.5_dp * (alpha(ii, jj) + alpha(nn, oo)) + alpha2 = 0.5_dp * (alpha(ii, ll) + alpha(nn, qq)) + alpha3 = 0.5_dp * (alpha(ii, jj) + alpha(nn, qq)) + alpha4 = 0.5_dp * (alpha(ii, ll) + alpha(nn, oo)) + beta1 = alpha1 / alpha2 + beta2 = alpha2 / alpha1 + beta3 = alpha3 / alpha4 + beta4 = alpha4 / alpha3 + nlp = kkk + ii + nlq = mm + ii + nmr = pp + nn + nms = rr + nn + + pre = 1.0_dp / sqrt(& + & v(alpha(ii, jj), 2 * (kkk + ii))& + & * v(alpha(ii, ll), 2 * (mm + ii))& + & * v(alpha(nn, oo), 2 * (pp + nn))& + & * v(alpha(nn, qq), 2 * (rr + nn))) + + do nu = abs(ii - nn), ii + nn, 2 + + t1 = v(alpha1, nlp + nmr - nu - 1) * v(alpha2, nlq + nms + nu)& + & * cc(nlp + nmr - nu - 1, nlq + nms + nu, beta1) + t2 = v(alpha2, nlq + nms - nu - 1) * v(alpha1, nlp + nmr + nu)& + & * cc(nlq + nms - nu - 1, nlp + nmr + nu, beta2) + t3 = v(alpha3, nlp + nms - nu - 1) * v(alpha4, nlq + nmr + nu)& + & * cc(nlp + nms - nu - 1, nlq + nmr + nu, beta3) + t4 = v(alpha4, nlq + nmr - nu - 1) * v(alpha3, nlp + nms + nu)& + & * cc(nlq + nmr - nu - 1, nlp + nms + nu, beta4) + + knu(ii, ss, tt, nn, uu, vv, nu) = pre * (t1 + t2 + t3 + t4) end do end do @@ -181,31 +203,31 @@ subroutine hfex(k,max_l,num_alpha,alpha,poly_order,problemsize) end do end do - ! Build k according to eqn. 7 - - do ii=0,max_l - ss=0 - do jj=1,num_alpha(ii) - do kk=1,poly_order(ii) - ss=ss+1 - tt=0 - do ll=1,num_alpha(ii) - do mm=1,poly_order(ii) - tt=tt+1 - do nn=0,max_l - uu=0 - do oo=1,num_alpha(nn) - do pp=1,poly_order(nn) - uu=uu+1 - vv=0 - do qq=1,num_alpha(nn) - do rr=1,poly_order(nn) - vv=vv+1 - - do nu=abs(ii-nn),ii+nn,2 - - k(ii,ss,tt,nn,uu,vv)=k(ii,ss,tt,nn,uu,vv)+& - &almn(ii,nn,nu)*knu(ii,ss,tt,nn,uu,vv,nu) + ! build kk according to Rev. Mod. Phys. 32, 186 (1960) eqn. 7 + + do ii = 0, max_l + ss = 0 + do jj = 1, num_alpha(ii) + do kkk = 1, poly_order(ii) + ss = ss + 1 + tt = 0 + do ll = 1, num_alpha(ii) + do mm = 1, poly_order(ii) + tt = tt + 1 + do nn = 0, max_l + uu = 0 + do oo = 1, num_alpha(nn) + do pp = 1, poly_order(nn) + uu = uu + 1 + vv = 0 + do qq = 1, num_alpha(nn) + do rr = 1, poly_order(nn) + vv = vv + 1 + + do nu = abs(ii - nn), ii + nn, 2 + + kk(ii, ss, tt, nn, uu, vv) = kk(ii, ss, tt, nn, uu, vv)& + & + almn(ii, nn, nu) * knu(ii, ss, tt, nn, uu, vv, nu) end do end do @@ -219,92 +241,444 @@ subroutine hfex(k,max_l,num_alpha,alpha,poly_order,problemsize) end do end do - ! do ii=0,max_l - ! do jj=0,max_l - ! k(ii,:,:,jj,:,:)=k(ii,:,:,jj,:,:)/& - ! &((2.0d0*real(ii,dp)+1.0d0)*(2.0d0*real(jj,dp)+1.0d0)) - ! end do - ! end do + end subroutine hfex - ! write(*,*) 'HF EXCHANGE' - ! write(*,*) k + !> Builds HF exchange supermatrix (long-range, range-separated version), + !! see Rev. Mod. Phys. 32, 186 (1960) eqn. 7/8 and eqn. 21 + subroutine hfex_lr(kk, max_l, num_alpha, alpha, poly_order, problemsize, omega, grid_params) - end subroutine hfex + !> Hartree-Fock exchange supermatrix + real(dp), intent(out) :: kk(0:,:,:,0:,:,:) + + !> maximum angular momentum + integer, intent(in) :: max_l + + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) + + !> basis exponents + real(dp), intent(in) :: alpha(0:,:) + + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) + + !> maximum size of the eigenproblem + integer, intent(in) :: problemsize + + !> range-separation parameter + real(dp), intent(in) :: omega + + !> holds parameters, defining a Becke integration grid + type(TBeckeGridParams), intent(in) :: grid_params + + !! Rev. Mod. Phys. 32, 186 (1960) eqn. 21 + real(dp), allocatable :: knu(:,:,:,:,:,:,:) + + !! temporary storage + real(dp) :: alpha1, alpha2, alpha3, alpha4, beta1, beta2, beta3, beta4 + + !! four terms of Rev. Mod. Phys. 32, 186 (1960) eqn. 21 + real(dp) :: pre, t1, t2, t3, t4 + + !! auxiliary variables + integer :: ii, jj, kkk, ll, mm, nn, oo, pp, qq, rr, ss, tt, uu, vv + integer :: nu, nlp, nlq, nmr, nms + + !! instance of becke integrator + type(TBeckeIntegrator) :: t_integ + + !! inner integral + real(dp), allocatable :: Vin(:,:,:,:) + integer :: eta_max, sigma_max, ll_max, nRadial + integer :: porder, nalpha, ll1, ll2, alp, bet, sigma1, sigma2 + integer :: eta1, eta2, aa, bb, lambda, mu, maxllind, npl + + integer, allocatable :: llind(:,:), lambdamu(:,:) + integer, allocatable :: aind(:,:), ps(:,:), ne_ind(:,:), ne(:,:) + integer, allocatable :: sigmaind(:,:), ep_es(:,:) + + real(dp), allocatable :: Integrand(:,:,:) + real(dp), pointer :: rr1(:) + real(dp), allocatable :: rho_lm(:), expon(:), IK(:,:,:) + + real(dp), allocatable :: gauntFaktor(:,:,:), innerint(:), normfaktor(:,:,:) + real(dp) :: gaunt_lm, gaunt2_lm, norm + + nRadial = grid_params%nRadial + ll_max = grid_params%ll_max + + ! inititalize the becke integrator + call TBeckeIntegrator_init(t_integ, grid_params) + + ! set the kernel parameter + call TBeckeIntegrator_setKernelParam(t_integ, omega) + call TBeckeIntegrator_precompFdMatrix(t_integ) + call TBeckeIntegrator_buildLU(t_integ) + + call TBeckeIntegrator_getCoords(t_integ, [3, 1, 1], rr1) + + ! if poly order is not the same for all shells this will give a bug! + porder = poly_order(0) + nalpha = num_alpha(0) + + eta_max = 2 * (porder + max_l) + + sigma_max = nalpha * (nalpha + 1) / 2 + + allocate(Vin(ll_max, eta_max, sigma_max, nRadial)) + allocate(rho_lm(nRadial)) + allocate(expon(sigma_max)) + allocate(Integrand(eta_max, sigma_max, nRadial)) + + maxllind = (max_l + 1) * (max_l + 2) / 2 + + allocate(llind(max_l + 1, max_l + 1)) + allocate(lambdamu(maxllind, 2)) + + ss = 1 + do ii = 1, max_l + 1 + do jj = 1, ii + llind(ii, jj) = ss + llind(jj, ii) = ss + lambdamu(ss, 1) = ii + lambdamu(ss, 2) = jj + ss = ss + 1 + end do + end do + + allocate(aind(porder * nalpha, porder * nalpha)) + allocate(ps(porder * nalpha * (porder * nalpha + 1) / 2, 2)) + + ss = 1 + do ii = 1, porder * nalpha + do jj = 1, ii + aind(ii, jj) = ss + aind(jj, ii) = ss + ps(ss, 1) = ii + ps(ss, 2) = jj + ss = ss + 1 + end do + end do + + allocate(ne_ind(nalpha, porder)) + allocate(ne(porder * nalpha, 2)) + + ss = 1 + do ii = 1, nalpha + do jj = 1, porder + ne_ind(ii, jj) = ss + ne(ss, 1) = ii + ne(ss, 2) = jj + ss = ss + 1 + end do + end do + + allocate(sigmaind(nalpha, nalpha)) + allocate(ep_es(sigma_max, 2)) + + ss = 1 + do ii = 1, nalpha + do jj = 1, ii + sigmaind(ii, jj) = ss + sigmaind(jj, ii) = ss + ep_es(ss, 1) = ii + ep_es(ss, 2) = jj + ss = ss + 1 + end do + end do + + ! precompute the angular part + allocate(gauntFaktor(max_l + 1, max_l + 1, ll_max)) + + do ll1 = 0, max_l + do ll2 = 0, max_l + do ll = 0, ll_max - 1 + gaunt2_lm = 0.0_dp + do alp = -ll1, ll1 + do bet = -ll2, ll2 + do mm = -ll,ll + gaunt_lm = realGaunt(ll1, alp, ll2, bet, ll, mm)**2 + gaunt2_lm = gaunt2_lm + gaunt_lm + end do + end do + end do + gauntFaktor(ll1 + 1, ll2 + 1, ll + 1) = gaunt2_lm + end do + end do + end do + + do ii = 1, sigma_max + expon(ii) = alpha(0, ep_es(ii, 1)) + alpha(0, ep_es(ii, 2)) + end do + + ! fill in the integrands + do ii = 1, eta_max + do kkk = 1, sigma_max + Integrand(ii, kkk, :) = rr1**(ii - 1) * exp(-expon(kkk) * rr1) + do ll = 0, ll_max - 1 + rho_lm(:) = Integrand(ii, kkk, :) + call TBeckeIntegrator_solveHelmholz(t_integ, ll, rho_lm) + Vin(ll + 1, ii, kkk, :) = rho_lm / rr1 * t_integ%beckeGrid(3)%weight + end do + end do + end do + + allocate(innerint(nRadial)) + allocate(IK(2 * (max_l + 1) * (max_l + 2) - 1, porder * nalpha * (porder * nalpha + 1) / 2,& + & porder * nalpha * (porder * nalpha + 1) / 2)) + + ! perform the integrals and construct the exchange supermatrix + do ll = 0, maxllind - 1 ! 2 * (max_l + 1) * (max_l + 2) - 1 + do aa = 1, porder * nalpha * (porder * nalpha + 1) / 2 + do bb = 1, aa + + lambda = lambdamu(ll + 1, 1) - 1 + mu = lambdamu(ll + 1, 2) - 1 + + pp = ps(aa, 1) + ss = ps(aa, 2) + qq = ps(bb, 1) + rr = ps(bb, 2) + + eta1 = ne(pp, 2) + ne(ss, 2) + lambda + mu - 1 + sigma1 = sigmaind(ne(pp, 1), ne(ss, 1)) ! ne(pp, 1) + ne(ss, 1) + eta2 = ne(qq, 2) + ne(rr, 2) + lambda + mu - 1 + sigma2 = sigmaind(ne(qq, 1), ne(rr, 1)) ! ne(qq, 1) + ne(rr, 1) + + innerint(:) = 0.0_dp + do ll1 = abs(lambda - mu), lambda + mu, 2 + if(gauntFaktor(lambda + 1,mu + 1, ll1 + 1) .ge. 1.0e-16_dp) then + innerint(:) = innerint + Vin(ll1 + 1, eta1, sigma1, :)& + & * gauntFaktor(lambda + 1, mu + 1, ll1 + 1) + end if + end do + IK(ll + 1, aa, bb) = sum(innerint * Integrand(eta2, sigma2, :)) + IK(ll + 1, bb, aa) = IK(ll + 1, aa, bb) + end do + end do + end do + + allocate(normfaktor(porder, nalpha, max_l + 1)) + + do ii = 1, porder + do kkk = 1, nalpha + do jj = 1, max_l + 1 + npl = ii + jj - 1 + normfaktor(ii, kkk, jj) = sqrt(2.0_dp * alpha(0, kkk) / fak(2 * npl))& + & * (2.0_dp * alpha(0, kkk))**npl + end do + end do + end do + + allocate(knu(0:max_l, problemsize, problemsize, 0:max_l, problemsize, problemsize, 0:2*max_l+2)) + + kk(:,:,:,:,:,:) = 0.0_dp + knu(:,:,:,:,:,:,:) = 0.0_dp + + ! build kk according to Rev. Mod. Phys. 32, 186 (1960) eqn. 8 + + do ii = 0, max_l + ss = 0 + do jj = 1, num_alpha(ii) + do kkk = 1, poly_order(ii) + ss = ss + 1 + tt = 0 + do ll = 1, num_alpha(ii) + do mm = 1, poly_order(ii) + tt = tt + 1 + do nn = 0, max_l + uu = 0 + do oo = 1, num_alpha(nn) + do pp = 1, poly_order(nn) + uu = uu + 1 + vv = 0 + do qq = 1, num_alpha(nn) + do rr = 1, poly_order(nn) + vv = vv + 1 + + alpha1 = 0.5_dp * (alpha(ii, jj) + alpha(nn, oo)) + alpha2 = 0.5_dp * (alpha(ii, ll) + alpha(nn, qq)) + alpha3 = 0.5_dp * (alpha(ii, jj) + alpha(nn, qq)) + alpha4 = 0.5_dp * (alpha(ii, ll) + alpha(nn, oo)) + beta1 = alpha1 / alpha2 + beta2 = alpha2 / alpha1 + beta3 = alpha3 / alpha4 + beta4 = alpha4 / alpha3 + nlp = kkk + ii + nlq = mm + ii + nmr = pp + nn + nms = rr + nn + + pre = 1.0_dp / sqrt(& + & v(alpha(ii, jj), 2 * (kkk + ii))& + & * v(alpha(ii, ll), 2 * (mm + ii))& + & * v(alpha(nn, oo), 2 * (pp + nn))& + & * v(alpha(nn, qq), 2 * (rr + nn))) + + do nu = abs(ii - nn), ii + nn, 2 + + t1 = v(alpha1, nlp + nmr - nu - 1) * v(alpha2, nlq + nms + nu)& + & * cc(nlp + nmr - nu - 1, nlq + nms + nu, beta1) + t2 = v(alpha2, nlq + nms - nu - 1) * v(alpha1, nlp + nmr + nu)& + & * cc(nlq + nms - nu - 1, nlp + nmr + nu, beta2) + t3 = v(alpha3, nlp + nms - nu - 1) * v(alpha4, nlq + nmr + nu)& + & * cc(nlp + nms - nu - 1, nlq + nmr + nu, beta3) + t4 = v(alpha4, nlq + nmr - nu - 1) * v(alpha3, nlp + nms + nu)& + & * cc(nlq + nmr - nu - 1, nlp + nms + nu, beta4) + + knu(ii, ss, tt, nn, uu, vv, nu) = pre * (t1 + t2 + t3 + t4) + + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + ! build kk according to Rev. Mod. Phys. 32, 186 (1960) eqn. 7 + + do ii = 0, max_l + ss = 0 + do jj = 1, num_alpha(ii) + do kkk = 1, poly_order(ii) + ss = ss + 1 + tt = 0 + do ll = 1, num_alpha(ii) + do mm = 1, poly_order(ii) + tt = tt + 1 + do nn = 0, max_l + uu = 0 + do oo = 1, num_alpha(nn) + do pp = 1, poly_order(nn) + uu = uu + 1 + vv = 0 + do qq = 1, num_alpha(nn) + do rr = 1, poly_order(nn) + vv = vv + 1 + + do nu = abs(ii - nn), ii + nn, 2 + kk(ii, ss, tt, nn, uu, vv) = kk(ii, ss, tt, nn, uu, vv)& + & + almn(ii, nn, nu) * knu(ii, ss, tt, nn, uu, vv, nu) + end do - function c(alpha,beta,t) + norm = normfaktor(kkk, jj, ii + 1) * normfaktor(mm, ll, ii + 1)& + & * normfaktor(pp, oo, nn + 1) * normfaktor(rr, qq, nn + 1)& + & / (real((2 * ii + 1) * (2 * nn + 1), dp)) - ! Auxilliary function, see rmp_32_186_1960.pdf eqn. 22 and eqn. 23 + kk(ii, ss, tt, nn, uu, vv) = kk(ii, ss, tt, nn, uu, vv)& + & - 0.5_dp * norm& + & * (IK(llind(ii + 1, nn + 1), aind(ss, vv), aind(tt, uu))& + & + IK(llind(ii + 1, nn + 1), aind(ss, uu), aind(tt, vv))) - integer, intent(in) :: alpha - integer, intent(in) :: beta - real(dp), intent(in) :: t - real(dp) :: c,factor + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + end subroutine hfex_lr + + + !> Auxiliary function, + !! see Rev. Mod. Phys. 32, 186 (1960) eqn. 22 and eqn. 23 + pure function cc(alpha, beta, tt) + + !> indices of Rev. Mod. Phys. 32, 186 (1960) eqn. 22 and eqn. 23 + integer, intent(in) :: alpha, beta + + !> argument of Rev. Mod. Phys. 32, 186 (1960) eqn. 22 and eqn. 23 + real(dp), intent(in) :: tt + + !> result + real(dp) :: cc + + !> prefactor of Rev. Mod. Phys. 32, 186 (1960) eqn. 23 + real(dp) :: factor + + !> array that holds all C_{\alpha, \beta}(t) real(dp), allocatable :: carray(:,:) - integer :: ii,jj + + !> alpha and beta indices to carry out the recursion + integer :: aa, bb ! early return if index smaller than zero - if (alpha<0) then - c=0.0d0 + if (alpha < 0) then + cc = 0.0_dp return end if - if (beta<0) then - c=0.0d0 + if (beta < 0) then + cc = 0.0_dp return end if - allocate(carray(0:alpha,0:beta)) + allocate(carray(0:alpha, 0:beta)) - factor=1.0d0/(1.0d0+t) + factor = 1.0_dp / (1.0_dp + tt) ! Overall this is naive, the matrix could be reused to some extent ... ! OTOH, the matrices are relatively small. ! first handle Kronecker delta, three cases - carray(0,0)=factor - do ii=1,alpha - carray(ii,0)=factor*(t*carray(ii-1,0)+1.0d0) + carray(0, 0) = factor + do aa = 1, alpha + carray(aa, 0) = factor * (tt * carray(aa - 1, 0) + 1.0_dp) end do - do ii=1,beta - carray(0,ii)=factor*(carray(0,ii-1)) + do bb = 1, beta + carray(0, bb) = factor * (carray(0, bb - 1)) end do - ! now build up from 1 - do ii=1,alpha - do jj=1,beta - carray(ii,jj)=factor*(t*carray(ii-1,jj)+carray(ii,jj-1)) + ! now build up from alpha, beta = 1 + do aa = 1, alpha + do bb = 1, beta + carray(aa, bb) = factor * (tt * carray(aa - 1, bb) + carray(aa, bb - 1)) end do end do - c=carray(alpha,beta) + cc = carray(alpha, beta) - return - end function c + end function cc - function a(rho) - ! Auxilliary function, see rmp_32_186_1960.pdf eqn. 9 + !> Auxiliary function, + !! see Rev. Mod. Phys. 32, 186 (1960) eqn. 9 + pure function aa(rho) - + !> even integer, according to Rev. Mod. Phys. 32, 186 (1960) eqn. 9 integer, intent(in) :: rho - real(dp) :: a - a=fak(rho)/((fak(rho/2))**2) + !> result + real(dp) :: aa + + aa = fak(rho) / ((fak(rho / 2))**2) + + end function aa - end function a - function almn(lambda,mu,nu) + !> Auxiliary function, + !! see Rev. Mod. Phys. 32, 186 (1960) eqn. 9 + pure function almn(lambda, mu, nu) - ! Auxilliary function, see rmp_32_186_1960.pdf eqn. 9 + !> indices of Rev. Mod. Phys. 32, 186 (1960) eqn. 9 + integer, intent(in) :: lambda, mu, nu - - integer, intent(in) :: lambda,mu,nu + !> result real(dp) :: almn - almn=a(lambda+mu-nu)*a(lambda-mu+nu)*a(mu-lambda+nu)/& - &(real(lambda+mu+nu+1,dp)*a(lambda+mu+nu)) + almn = aa(lambda + mu - nu) * aa(lambda - mu + nu) * aa(mu - lambda + nu)& + & / (real(lambda + mu + nu + 1, dp) * aa(lambda + mu + nu)) end function almn diff --git a/slateratom/lib/coulomb_potential.f90 b/slateratom/lib/coulomb_potential.f90 index 5f183884..93fcd147 100644 --- a/slateratom/lib/coulomb_potential.f90 +++ b/slateratom/lib/coulomb_potential.f90 @@ -1,80 +1,100 @@ +!> Module that serves output purposes during SCF, except in the ZORA case, +!! but even then the Coulomb matrix (J supermatrix) elements are calculated directly. module coulomb_potential -! the routines in this module server output purposes only -! during SCF except in the ZORA case, but even then the Coulomb matrix -! (J supermatrix) elements are calculated directly - use common_accuracy, only : dp - use utilities - use integration - use core_overlap + use integration, only : exp_int + use core_overlap, only : v + implicit none private public :: cou_pot - + + contains - subroutine cou_pot(p,max_l,num_alpha,poly_order,alpha,problemsize,& - &num_points,abcissa,cpot) - ! calculate coulomb potential on arbitraty set of points - ! by analytical evaluation of the integrals indicated - ! _ _ - ! | | - ! | 1 r 2 rmax | - ! V(r)= 4*PI * | - int * r' * rho(r') + int r' * rho (r') | - ! | r 0 r | - ! |_ _| - ! help1 help2 - - implicit none - - real(dp), intent(in) :: p(0:,:,:),abcissa(:),alpha(0:,:) - integer, intent(in) :: max_l,num_alpha(0:),poly_order(0:),num_points + !> Calculates Coulomb potential on arbitraty set of points, + !! by an analytical evaluation of the integrals indicated. + !! _ _ + !! | | + !! | 1 r 2 rmax | + !! V(r)= 4*PI * | - int * r' * rho(r') + int r' * rho (r') | + !! | r 0 r | + !! |_ _| + !! help1 help2 + subroutine cou_pot(ptot, max_l, num_alpha, poly_order, alpha, problemsize, num_mesh_points,& + & abcissa, cpot) + + !> total density matrix supervector (spins summed up) + real(dp), intent(in) :: ptot(0:,:,:) + + !> maximum angular momentum + integer, intent(in) :: max_l + + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) + + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) + + !> basis exponents + real(dp), intent(in) :: alpha(0:,:) + + !> maximum size of the eigenproblem integer, intent(in) :: problemsize + + !> number of numerical integration points + integer, intent(in) :: num_mesh_points + + !> numerical integration abcissas + real(dp), intent(in) :: abcissa(:) + + !> coulomb potential on mesh real(dp), intent(out) :: cpot(:) - real(dp), allocatable :: help1(:,:,:,:),help2(:,:,:,:) + + !> auxiliary variables + integer :: ii, jj, kk, ll, mm, nn, oo, pp, nlp, nlq real(dp) :: alpha1 - integer :: ii,jj,kk,ll,mm,nn,oo,pp,nlp,nlq + real(dp), allocatable :: help1(:,:,:,:), help2(:,:,:,:) - allocate(help1(num_points,0:max_l,problemsize,problemsize)) - allocate(help2(num_points,0:max_l,problemsize,problemsize)) + allocate(help1(num_mesh_points, 0:max_l, problemsize, problemsize)) + allocate(help2(num_mesh_points, 0:max_l, problemsize, problemsize)) - help1=0.0d0 - help2=0.0d0 - cpot=0.0d0 + help1(:,:,:,:) = 0.0_dp + help2(:,:,:,:) = 0.0_dp + cpot(:) = 0.0_dp ! get integrals for pairs of basis functions - do ii=0,max_l - ll=0 - do jj=1,num_alpha(ii) - do kk=1,poly_order(ii) - ll=ll+1 - oo=0 - nlp=kk+ii - do mm=1,num_alpha(ii) - - ! exp_int has no notion of implicit "-" of alpha - alpha1=-(alpha(ii,jj)+alpha(ii,mm)) - - do nn=1,poly_order(ii) - oo=oo+1 - nlq=nn+ii + do ii = 0, max_l + ll = 0 + do jj = 1, num_alpha(ii) + do kk = 1, poly_order(ii) + ll = ll + 1 + oo = 0 + nlp = kk + ii + do mm = 1, num_alpha(ii) + + ! exp_int has no notion of implicit "-" of alpha + alpha1 = -(alpha(ii, jj) + alpha(ii, mm)) + + do nn = 1, poly_order(ii) + oo = oo + 1 + nlq = nn + ii ! integrals as indicated in comment, no normalization - do pp=1,num_points - help1(pp,ii,ll,oo)=(exp_int(alpha1,nlp+nlq,abcissa(pp))-& - &exp_int(alpha1,nlp+nlq,0.0d0))/abcissa(pp) - help2(pp,ii,ll,oo)=& - &-exp_int(alpha1,nlp+nlq-1,abcissa(pp)) + do pp = 1, num_mesh_points + help1(pp, ii, ll, oo) = (exp_int(alpha1, nlp + nlq, abcissa(pp))& + & - exp_int(alpha1, nlp + nlq, 0.0_dp)) / abcissa(pp) + help2(pp, ii, ll, oo) = - exp_int(alpha1, nlp + nlq - 1, abcissa(pp)) end do ! add normalization of basis functions ! watch out for 2**(nlp+nlq+1) needed because variable integration ranges - help1(:,ii,ll,oo)=help1(:,ii,ll,oo)*real(2**(nlp+nlq+1),dp)/& - &sqrt(v(alpha(ii,jj),2*nlp)*v(alpha(ii,mm),2*nlq)) - help2(:,ii,ll,oo)=help2(:,ii,ll,oo)*real(2**(nlp+nlq+1),dp)/& - &sqrt(v(alpha(ii,jj),2*nlp)*v(alpha(ii,mm),2*nlq)) + help1(:, ii, ll, oo) = help1(:, ii, ll, oo) * real(2**(nlp + nlq + 1), dp)& + & / sqrt(v(alpha(ii, jj), 2 * nlp) * v(alpha(ii, mm), 2 * nlq)) + help2(:, ii, ll, oo) = help2(:, ii, ll, oo) * real(2**(nlp + nlq + 1), dp)& + & / sqrt(v(alpha(ii, jj), 2 * nlp) * v(alpha(ii, mm), 2 * nlq)) end do end do @@ -83,18 +103,18 @@ subroutine cou_pot(p,max_l,num_alpha,poly_order,alpha,problemsize,& end do ! now actually get potential, multiply with density matrix - do pp=1,num_points - do ii=0,max_l - ll=0 - do jj=1,num_alpha(ii) - do kk=1,poly_order(ii) - ll=ll+1 - oo=0 - do mm=1,num_alpha(ii) - do nn=1,poly_order(ii) - oo=oo+1 - cpot(pp)=cpot(pp)+p(ii,ll,oo)*& - &(help1(pp,ii,ll,oo)+help2(pp,ii,ll,oo)) + do pp = 1, num_mesh_points + do ii = 0, max_l + ll = 0 + do jj = 1, num_alpha(ii) + do kk = 1, poly_order(ii) + ll = ll + 1 + oo = 0 + do mm = 1, num_alpha(ii) + do nn = 1, poly_order(ii) + oo = oo + 1 + cpot(pp) = cpot(pp) + ptot(ii, ll, oo)& + & * (help1(pp, ii, ll, oo) + help2(pp, ii, ll, oo)) end do end do end do @@ -102,12 +122,6 @@ subroutine cou_pot(p,max_l,num_alpha,poly_order,alpha,problemsize,& end do end do - ! write(*,*) 'CPOT' - ! write(*,*) cpot - - deallocate(help1) - deallocate(help2) - end subroutine cou_pot end module coulomb_potential diff --git a/slateratom/lib/density.f90 b/slateratom/lib/density.f90 index 89ef944c..1af7c7f1 100644 --- a/slateratom/lib/density.f90 +++ b/slateratom/lib/density.f90 @@ -1,7 +1,8 @@ +!> Module that provides functionality to calculate the electron density at a radial point in space. module density use common_accuracy, only : dp - use utilities + use utilities, only : fak implicit none private @@ -11,48 +12,67 @@ module density public :: basis, basis_1st, basis_2nd public :: basis_times_basis, basis_times_basis_1st, basis_times_basis_2nd public :: basis_1st_times_basis_1st, basis_2nd_times_basis_2nd - public :: basis_times_basis_times_r2, basis_times_basis_1st_times_r2, & - &basis_times_basis_2nd_times_r2, basis_times_basis_1st_times_r, & - &basis_1st_times_basis_1st_times_r2 + public :: basis_times_basis_times_r2, basis_times_basis_1st_times_r2,& + & basis_times_basis_2nd_times_r2, basis_times_basis_1st_times_r,& + & basis_1st_times_basis_1st_times_r2 + contains - function density_at_point(p,max_l,num_alpha,poly_order,alpha,r) + !> Calculates electron density at a radial point in space. + pure function density_at_point(pp, max_l, num_alpha, poly_order, alpha, rr) + + !> density matrix supervector + real(dp), intent(in) :: pp(0:,:,:) + + !> maximum angular momentum + integer, intent(in) :: max_l + + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) + + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) - ! Calculate electron density at a radial point in space + !> basis exponents + real(dp), intent(in) :: alpha(0:,:) - real(dp), intent(in) :: p(0:,:,:),r,alpha(0:,:) - integer, intent(in) :: max_l,num_alpha(0:),poly_order(0:) + !> radial point in space, i.e. abcissa + real(dp), intent(in) :: rr + + !> resulting electron density at a radial point in space real(dp) :: density_at_point - integer :: ii,jj,kk,ll,mm,nn,oo,start - density_at_point=0.0d0 + !> auxiliary variables + integer :: ii, jj, kk, ll, mm, nn, oo, start + + density_at_point = 0.0_dp - do ii=0,max_l - ll=0 - do jj=1,num_alpha(ii) - do kk=1,poly_order(ii) - ll=ll+1 + do ii = 0, max_l + ll = 0 + do jj = 1, num_alpha(ii) + do kk = 1, poly_order(ii) + ll = ll + 1 ! set global index correctly - oo=ll-1 - do mm=jj,num_alpha(ii) + oo = ll - 1 + do mm = jj, num_alpha(ii) ! catch start index for polynomials, different depending on alpha block - start=1 - if (mm==jj) start=kk + start = 1 + if (mm == jj) start = kk - do nn=start,poly_order(ii) - oo=oo+1 + do nn = start, poly_order(ii) + oo = oo + 1 - if (ll==oo) then - density_at_point=density_at_point+p(ii,ll,oo)*& - &basis_times_basis(alpha(ii,jj),kk,alpha(ii,mm),nn,ii,r) + if (ll == oo) then + density_at_point = density_at_point + pp(ii, ll, oo)& + & * basis_times_basis(alpha(ii, jj), kk, alpha(ii, mm), nn, ii, rr) end if - if (ll/=oo) then - density_at_point=density_at_point+2.0d0*p(ii,ll,oo)*& - &basis_times_basis(alpha(ii,jj),kk,alpha(ii,mm),nn,ii,r) + if (ll /= oo) then + density_at_point = density_at_point + 2.0_dp * pp(ii, ll, oo)& + & * basis_times_basis(alpha(ii, jj), kk, alpha(ii, mm), nn, ii, rr) end if end do @@ -63,65 +83,63 @@ function density_at_point(p,max_l,num_alpha,poly_order,alpha,r) end function density_at_point - function density_at_point_1st(p,max_l,num_alpha,poly_order,alpha,r) - ! Calculate 1st derivative at a radial point in space analytically + !> Calculates 1st derivative at a radial point in space analytically. + pure function density_at_point_1st(pp, max_l, num_alpha, poly_order, alpha, rr) + + !> density matrix supervector + real(dp), intent(in) :: pp(0:,:,:) + + !> maximum angular momentum + integer, intent(in) :: max_l + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) - real(dp), intent(in) :: p(0:,:,:),r,alpha(0:,:) - integer, intent(in) :: max_l,num_alpha(0:),poly_order(0:) + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) + + !> basis exponents + real(dp), intent(in) :: alpha(0:,:) + + !> radial point in space, i.e. abcissa + real(dp), intent(in) :: rr + + !> resulting analytical 1st derivative at a radial point in space real(dp) :: density_at_point_1st - integer :: ii,jj,kk,ll,mm,nn,oo,start - - density_at_point_1st=0.0d0 - ! - ! do ii=0,max_l - ! ll=0 - ! do jj=1,num_alpha(ii) - ! do kk=1,poly_order(ii) - ! ll=ll+1 - ! oo=0 - ! do mm=1,num_alpha(ii) - ! do nn=1,poly_order(ii) - ! oo=oo+1 - ! density_at_point_1st=density_at_point_1st+p(ii,ll,oo)*(& - !! &basis(alpha(ii,jj),kk,ii,r)*basis_1st(alpha(ii,mm),nn,ii,r)& - !! &+basis_1st(alpha(ii,jj),kk,ii,r)*basis(alpha(ii,mm),nn,ii,r)) - ! &basis_times_basis_1st(alpha(ii,jj),kk,alpha(ii,mm),nn,ii,r)+& - ! &basis_times_basis_1st(alpha(ii,mm),nn,alpha(ii,jj),kk,ii,r)) - ! end do - ! end do - ! end do - ! end do - ! end do - - do ii=0,max_l - ll=0 - do jj=1,num_alpha(ii) - do kk=1,poly_order(ii) - ll=ll+1 + + !> auxiliary variables + integer :: ii, jj, kk, ll, mm, nn, oo, start + + density_at_point_1st = 0.0_dp + + do ii = 0, max_l + ll = 0 + do jj = 1, num_alpha(ii) + do kk = 1, poly_order(ii) + ll = ll + 1 ! set global index correctly - oo=ll-1 - do mm=jj,num_alpha(ii) + oo = ll - 1 + do mm = jj, num_alpha(ii) ! catch start index for polynomials, different depending on alpha block - start=1 - if (mm==jj) start=kk + start = 1 + if (mm == jj) start = kk - do nn=start,poly_order(ii) - oo=oo+1 + do nn = start, poly_order(ii) + oo = oo + 1 - if (ll==oo) then - density_at_point_1st=density_at_point_1st+p(ii,ll,oo)*(& - &basis_times_basis_1st(alpha(ii,jj),kk,alpha(ii,mm),nn,ii,r)+& - &basis_times_basis_1st(alpha(ii,mm),nn,alpha(ii,jj),kk,ii,r)) + if (ll == oo) then + density_at_point_1st = density_at_point_1st + pp(ii, ll, oo) * (& + &basis_times_basis_1st(alpha(ii, jj), kk, alpha(ii, mm), nn, ii, rr) +& + &basis_times_basis_1st(alpha(ii, mm), nn, alpha(ii, jj), kk, ii, rr)) end if - if (ll/=oo) then - density_at_point_1st=density_at_point_1st+2.0d0*p(ii,ll,oo)*(& - &basis_times_basis_1st(alpha(ii,jj),kk,alpha(ii,mm),nn,ii,r)+& - &basis_times_basis_1st(alpha(ii,mm),nn,alpha(ii,jj),kk,ii,r)) + if (ll /= oo) then + density_at_point_1st = density_at_point_1st + 2.0_dp * pp(ii, ll, oo) * (& + &basis_times_basis_1st(alpha(ii, jj), kk, alpha(ii, mm), nn, ii, rr) +& + &basis_times_basis_1st(alpha(ii, mm), nn, alpha(ii, jj), kk, ii, rr)) end if end do @@ -132,68 +150,67 @@ function density_at_point_1st(p,max_l,num_alpha,poly_order,alpha,r) end function density_at_point_1st - function density_at_point_2nd(p,max_l,num_alpha,poly_order,alpha,r) - ! Calculate 2nd derivative at a radial point in space analytically + !> Calculates 2nd derivative at a radial point in space analytically. + pure function density_at_point_2nd(pp, max_l, num_alpha, poly_order, alpha, rr) + + !> density matrix supervector + real(dp), intent(in) :: pp(0:,:,:) + + !> maximum angular momentum + integer, intent(in) :: max_l + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) - real(dp), intent(in) :: p(0:,:,:),r,alpha(0:,:) - integer, intent(in) :: max_l,num_alpha(0:),poly_order(0:) + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) + + !> basis exponents + real(dp), intent(in) :: alpha(0:,:) + + !> radial point in space, i.e. abcissa + real(dp), intent(in) :: rr + + !> resulting analytical 2nd derivative at a radial point in space real(dp) :: density_at_point_2nd - integer :: ii,jj,kk,ll,mm,nn,oo,start - - density_at_point_2nd=0.0d0 - ! - ! do ii=0,max_l - ! ll=0 - ! do jj=1,num_alpha(ii) - ! do kk=1,poly_order(ii) - ! ll=ll+1 - ! oo=0 - ! do mm=1,num_alpha(ii) - ! do nn=1,poly_order(ii) - ! oo=oo+1 - ! density_at_point_2nd=density_at_point_2nd+p(ii,ll,oo)*(& - ! &basis_times_basis_2nd(alpha(ii,jj),kk,alpha(ii,mm),nn,ii,r)+& - ! &+2.0d0*basis_1st_times_basis_1st(alpha(ii,jj),kk,alpha(ii,mm),nn,ii,r)+& - ! &basis_times_basis_2nd(alpha(ii,mm),nn,alpha(ii,jj),kk,ii,r)) - ! end do - ! end do - ! end do - ! end do - ! end do - - do ii=0,max_l - ll=0 - do jj=1,num_alpha(ii) - do kk=1,poly_order(ii) - ll=ll+1 + + !> auxiliary variables + integer :: ii, jj, kk, ll, mm, nn, oo, start + + density_at_point_2nd = 0.0_dp + + do ii = 0, max_l + ll = 0 + do jj = 1, num_alpha(ii) + do kk = 1, poly_order(ii) + ll = ll + 1 ! set global index correctly - oo=ll-1 - do mm=jj,num_alpha(ii) + oo = ll - 1 + do mm = jj, num_alpha(ii) ! catch start index for polynomials, different depending on alpha block - start=1 - if (mm==jj) start=kk - - do nn=start,poly_order(ii) - oo=oo+1 - - if (ll==oo) then - density_at_point_2nd=density_at_point_2nd+p(ii,ll,oo)*(& - &basis_times_basis_2nd(alpha(ii,jj),kk,alpha(ii,mm),nn,ii,r)+& - &+2.0d0*basis_1st_times_basis_1st(alpha(ii,jj),kk,alpha(ii,mm),& - &nn,ii,r)+& - &basis_times_basis_2nd(alpha(ii,mm),nn,alpha(ii,jj),kk,ii,r)) + start = 1 + if (mm == jj) start = kk + + do nn = start, poly_order(ii) + oo = oo + 1 + + if (ll == oo) then + density_at_point_2nd = density_at_point_2nd + pp(ii, ll, oo) * (& + & basis_times_basis_2nd(alpha(ii, jj), kk, alpha(ii, mm), nn, ii, rr)& + & + 2.0_dp * basis_1st_times_basis_1st(alpha(ii, jj), kk, alpha(ii, mm),& + & nn, ii, rr)& + & + basis_times_basis_2nd(alpha(ii, mm), nn, alpha(ii, jj), kk, ii, rr)) end if - if (ll/=oo) then - density_at_point_2nd=density_at_point_2nd+2.0d0*p(ii,ll,oo)*(& - &basis_times_basis_2nd(alpha(ii,jj),kk,alpha(ii,mm),nn,ii,r)+& - &+2.0d0*basis_1st_times_basis_1st(alpha(ii,jj),kk,alpha(ii,mm),& - &nn,ii,r)+& - &basis_times_basis_2nd(alpha(ii,mm),nn,alpha(ii,jj),kk,ii,r)) + if (ll /= oo) then + density_at_point_2nd = density_at_point_2nd + 2.0_dp * pp(ii, ll, oo) * (& + & basis_times_basis_2nd(alpha(ii, jj), kk, alpha(ii, mm), nn, ii, rr)& + & + 2.0_dp * basis_1st_times_basis_1st(alpha(ii, jj), kk, alpha(ii, mm),& + & nn, ii, rr) +& + & basis_times_basis_2nd(alpha(ii, mm), nn, alpha(ii, jj), kk, ii, rr)) end if end do @@ -204,500 +221,771 @@ function density_at_point_2nd(p,max_l,num_alpha,poly_order,alpha,r) end function density_at_point_2nd - function wavefunction(cof,alpha,num_alpha,poly_order,ang,r) - ! Calculate value of wavefunction at a radial point in space + !> Calculates wavefunction at a radial point in space analytically. + pure function wavefunction(cof, alpha, num_alpha, poly_order, ang, rr) + + !> expansion coefficients + real(dp), intent(in) :: cof(:) + + !> basis exponents + real(dp), intent(in) :: alpha(0:,:) + + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) - integer, intent(in) :: num_alpha(0:),poly_order(0:) + !> angular momentum integer, intent(in) :: ang - real(dp), intent(in) :: cof(:),alpha(0:,:),r + + !> radial point in space, i.e. abcissa + real(dp), intent(in) :: rr + + !> wavefunction at a radial point in space real(dp) :: wavefunction - integer :: ii,jj,kk - wavefunction=0.0d0 - kk=0 + !> auxiliary variables + integer :: ii, jj, kk - do ii=1,num_alpha(ang) - do jj=1,poly_order(ang) - kk=kk+1 - ! write(*,'(3I3,F12.6,I3,F12.6)') ang,ii,jj,alpha(ang,ii),jj+ang,cof(kk) - wavefunction=wavefunction+cof(kk)*basis(alpha(ang,ii),jj,ang,r) + wavefunction = 0.0_dp + kk = 0 + + do ii = 1, num_alpha(ang) + do jj = 1, poly_order(ang) + kk = kk + 1 + wavefunction = wavefunction + cof(kk) * basis(alpha(ang, ii), jj, ang, rr) end do end do end function wavefunction - function wavefunction_1st(cof,alpha,num_alpha,poly_order,ang,r) - ! Calculate value of 1st derivative of wavefunction at a radial point in - ! space analytically + !> Calculates 1st derivative of wavefunction at a radial point in space analytically. + pure function wavefunction_1st(cof, alpha, num_alpha, poly_order, ang, rr) + + !> expansion coefficients + real(dp), intent(in) :: cof(:) + !> basis exponents + real(dp), intent(in) :: alpha(0:,:) - integer, intent(in) :: num_alpha(0:),poly_order(0:) + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) + + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) + + !> angular momentum integer, intent(in) :: ang - real(dp), intent(in) :: cof(:),alpha(0:,:),r + + !> radial point in space, i.e. abcissa + real(dp), intent(in) :: rr + + !> 1st derivative of wavefunction at a radial point in space real(dp) :: wavefunction_1st - integer :: ii,jj,kk - wavefunction_1st=0.0d0 - kk=0 + !> auxiliary variables + integer :: ii, jj, kk - do ii=1,num_alpha(ang) - do jj=1,poly_order(ang) - kk=kk+1 - wavefunction_1st=wavefunction_1st+cof(kk)*basis_1st(alpha(ang,ii),jj,ang,r) + wavefunction_1st = 0.0_dp + kk = 0 + + do ii = 1, num_alpha(ang) + do jj = 1, poly_order(ang) + kk = kk + 1 + wavefunction_1st = wavefunction_1st + cof(kk) * basis_1st(alpha(ang, ii), jj, ang, rr) end do end do end function wavefunction_1st - function wavefunction_2nd(cof,alpha,num_alpha,poly_order,ang,r) - ! Calculate value of 2nd derivative of wavefunction at a radial point in - ! space analytically + !> Calculates 2nd derivative of wavefunction at a radial point in space analytically. + pure function wavefunction_2nd(cof, alpha, num_alpha, poly_order, ang, rr) + + !> expansion coefficients + real(dp), intent(in) :: cof(:) + + !> basis exponents + real(dp), intent(in) :: alpha(0:,:) + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) - integer, intent(in) :: num_alpha(0:),poly_order(0:) + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) + + !> angular momentum integer, intent(in) :: ang - real(dp), intent(in) :: cof(:),alpha(0:,:),r + + !> radial point in space, i.e. abcissa + real(dp), intent(in) :: rr + + !> 2nd derivative of wavefunction at a radial point in space real(dp) :: wavefunction_2nd - integer :: ii,jj,kk - wavefunction_2nd=0.0d0 - kk=0 + !> auxiliary variables + integer :: ii, jj, kk + + wavefunction_2nd = 0.0_dp + kk = 0 - do ii=1,num_alpha(ang) - do jj=1,poly_order(ang) - kk=kk+1 - wavefunction_2nd=wavefunction_2nd+cof(kk)*basis_2nd(alpha(ang,ii),jj,ang,r) + do ii = 1, num_alpha(ang) + do jj = 1, poly_order(ang) + kk = kk + 1 + wavefunction_2nd = wavefunction_2nd + cof(kk) * basis_2nd(alpha(ang, ii), jj, ang, rr) end do end do end function wavefunction_2nd - function basis(alpha,poly_order,l,r) - ! Value of a primitive Slater basis function at a radial point in space - ! See rmp_32_186_1960.pdf eqn. 3 + !> Evaluates a primitive Slater basis function at a radial point in space, + !! see Rev. Mod. Phys. 32, 186 (1960) eqn. 3. + pure function basis(alpha, poly_order, ll, rr) + + !> basis exponent + real(dp), intent(in) :: alpha + + !> highest polynomial order in shell + integer, intent(in) :: poly_order + !> angular momentum + integer, intent(in) :: ll - integer, intent(in) :: l,poly_order - real(dp), intent(in) :: alpha,r - real(dp) :: basis,normalization + !> radial point in space, i.e. abcissa + real(dp), intent(in) :: rr - normalization=(2.0d0*alpha)**(poly_order+l)*sqrt(2.0d0*alpha)/& - &sqrt(fak(2*(poly_order+l))) + !> value of a primitive Slater basis function at a radial point in space + real(dp) :: basis + + !> normalization pre-factor + real(dp) :: normalization + + normalization = (2.0_dp * alpha)**(poly_order + ll) * sqrt(2.0_dp * alpha)& + & / sqrt(fak(2 * (poly_order + ll))) ! catch 0^0 - if ((r==0.0d0).and.((poly_order+l-1)==0)) then - basis=normalization*exp(-alpha*r) + if ((rr == 0.0_dp) .and. ((poly_order + ll - 1) == 0)) then + basis = normalization * exp(- alpha * rr) else - basis=normalization*r**(poly_order+l-1)*exp(-alpha*r) + basis = normalization * rr**(poly_order + ll - 1) * exp(- alpha * rr) end if end function basis - function basis_1st(alpha,poly_order,l,r) - ! Value of 1st derivative of a primitive Slater basis function at a radial - ! point in space + !> Evaluates 1st derivative of a primitive Slater basis function at a radial point in space. + pure function basis_1st(alpha, poly_order, ll, rr) + + !> basis exponent + real(dp), intent(in) :: alpha + + !> highest polynomial order in shell + integer, intent(in) :: poly_order + !> angular momentum + integer, intent(in) :: ll - integer, intent(in) :: l,poly_order - real(dp), intent(in) :: alpha,r - real(dp) :: basis_1st,normalization + !> radial point in space, i.e. abcissa + real(dp), intent(in) :: rr - normalization=(2.0d0*alpha)**(poly_order+l)*sqrt(2.0d0*alpha)/& - &sqrt(fak(2*(poly_order+l))) + !> 1st derivative of a primitive Slater basis function at a radial point in space + real(dp) :: basis_1st + + !> normalization pre-factor + real(dp) :: normalization + + normalization = (2.0_dp * alpha)**(poly_order + ll) * sqrt(2.0_dp * alpha)& + & / sqrt(fak(2 * (poly_order + ll))) ! catch 0^0, setting 0^0=1 and 0^-1=0.0 - if ((r==0.0d0).and.((poly_order+l-1)==0)) then - basis_1st=normalization*(-alpha*exp(-alpha*r)) - else if ((r==0.0d0).and.((poly_order+l-2)==0)) then - basis_1st=normalization*(real(poly_order+l-1,dp)*& - &exp(-alpha*r)-alpha*r**(poly_order+l-1)*exp(-alpha*r)) + if ((rr == 0.0_dp) .and. ((poly_order + ll - 1) == 0)) then + basis_1st = normalization * (- alpha * exp(- alpha * rr)) + else if ((rr == 0.0_dp) .and. ((poly_order + ll - 2) == 0)) then + basis_1st = normalization * (real(poly_order + ll - 1, dp)& + & * exp(- alpha * rr) - alpha * rr**(poly_order + ll - 1) * exp(- alpha * rr)) else - basis_1st=normalization*(real(poly_order+l-1,dp)*r**(poly_order+l-2)*& - &exp(-alpha*r)-alpha*r**(poly_order+l-1)*exp(-alpha*r)) + basis_1st = normalization * (real(poly_order + ll - 1, dp) * rr**(poly_order + ll - 2)& + & * exp(- alpha * rr) - alpha * rr**(poly_order + ll - 1) * exp(- alpha * rr)) end if end function basis_1st - function basis_2nd(alpha,poly_order,l,r) - ! Value of 2nd derivative of a primitive Slater basis function at a radial - ! point in space + !> Evaluates 2nd derivative of a primitive Slater basis function at a radial point in space. + pure function basis_2nd(alpha, poly_order, ll, rr) + + !> basis exponent + real(dp), intent(in) :: alpha + + !> highest polynomial order in shell + integer, intent(in) :: poly_order + !> angular momentum + integer, intent(in) :: ll - integer, intent(in) :: l,poly_order - real(dp), intent(in) :: alpha,r - real(dp) :: basis_2nd,normalization + !> radial point in space, i.e. abcissa + real(dp), intent(in) :: rr - normalization=(2.0d0*alpha)**(poly_order+l)*sqrt(2.0d0*alpha)/& - &sqrt(fak(2*(poly_order+l))) + !> 2nd derivative of a primitive Slater basis function at a radial point in space + real(dp) :: basis_2nd + + !> normalization pre-factor + real(dp) :: normalization + + normalization = (2.0_dp * alpha)**(poly_order + ll) * sqrt(2.0_dp * alpha)& + & / sqrt(fak(2 * (poly_order + ll))) ! catch 0^0 - if ((r==0.0d0).and.((poly_order+l-3)==0)) then - basis_2nd=normalization*(real(poly_order+l-1,dp)*real(poly_order+l-2,dp)*& - &exp(-alpha*r)) - else if ((r==0.0d0).and.((poly_order+l-2)==0)) then - basis_2nd=normalization*(-2.0d0*alpha*real(poly_order+l-1,dp)*& - &exp(-alpha*r)) - else if ((r==0.0d0).and.((poly_order+l-1)==0)) then - basis_2nd=normalization*(alpha**2*exp(-alpha*r)) + if ((rr == 0.0_dp) .and. ((poly_order + ll - 3) == 0)) then + basis_2nd = normalization * (real(poly_order + ll - 1, dp) * real(poly_order + ll - 2, dp)& + & * exp(- alpha * rr)) + else if ((rr == 0.0_dp) .and. ((poly_order + ll - 2) == 0)) then + basis_2nd = normalization * (- 2.0_dp * alpha * real(poly_order + ll - 1, dp)& + & * exp(- alpha * rr)) + else if ((rr == 0.0_dp) .and. ((poly_order + ll - 1) == 0)) then + basis_2nd = normalization * (alpha**2 * exp(- alpha * rr)) else - basis_2nd=normalization*(real(poly_order+l-1,dp)*real(poly_order+l-2,dp)*& - &r**(poly_order+l-3)*exp(-alpha*r)-2.0d0*alpha*real(poly_order+l-1,dp)*& - &r**(poly_order+l-2)*exp(-alpha*r)+alpha**2*r**(poly_order+l-1)*& - &exp(-alpha*r)) + basis_2nd = normalization * (real(poly_order + ll - 1, dp) * real(poly_order + ll - 2, dp)& + & * rr**(poly_order + ll - 3) * exp(- alpha * rr) - 2.0_dp * alpha& + & * real(poly_order + ll - 1, dp) * rr**(poly_order + ll - 2) * exp(- alpha * rr)& + & + alpha**2 * rr**(poly_order + ll - 1) * exp(- alpha * rr)) end if end function basis_2nd - function basis_times_basis(alpha,poly1,beta,poly2,l,r) - ! Value of a product of two primitive Slater basis functions at a radial - ! point in space - ! r^(m-1)*e^(-alpha*r)*r^(n-1)*exp(-beta*r)=r^(m+n-2)*exp(-(alpha+beta)*r) + !> Evaluates product of two primitive Slater basis functions at a radial point in space. + !! r^(m-1)*e^(-alpha*r)*r^(n-1)*exp(-beta*r)=r^(m+n-2)*exp(-(alpha+beta)*r) + pure function basis_times_basis(alpha, poly1, beta, poly2, ll, rr) - integer, intent(in) :: l,poly1,poly2 - real(dp), intent(in) :: alpha,beta,r - real(dp) :: basis_times_basis,normalization1,normalization2 - real(dp) :: ab - integer :: m,n + !> basis exponent of 1st basis + real(dp), intent(in) :: alpha + + !> highest polynomial order in 1st basis shell + integer, intent(in) :: poly1 + + !> basis exponent of 2nd basis + real(dp), intent(in) :: beta - m=poly1+l - n=poly2+l - ab=-(alpha+beta) + !> highest polynomial order in 2nd basis shell + integer, intent(in) :: poly2 - normalization1=(2.0d0*alpha)**(m)*sqrt(2.0d0*alpha)/& - &sqrt(fak(2*m)) - normalization2=(2.0d0*beta)**(n)*sqrt(2.0d0*beta)/& - &sqrt(fak(2*n)) + !> angular momentum + integer, intent(in) :: ll + !> radial point in space, i.e. abcissa + real(dp), intent(in) :: rr + + !> product of two primitive Slater basis functions at a radial point in space + real(dp) :: basis_times_basis + + !> normalization pre-factors + real(dp) :: normalization1, normalization2 + + !> auxiliary variables + integer :: mm, nn + real(dp) :: ab + + mm = poly1 + ll + nn = poly2 + ll + ab = - (alpha + beta) + + normalization1 = (2.0_dp * alpha)**(mm) * sqrt(2.0_dp * alpha) / sqrt(fak(2 * mm)) + normalization2 = (2.0_dp * beta)**(nn) * sqrt(2.0_dp * beta) / sqrt(fak(2 * nn)) ! catch 0^0 - if ((r==0.0d0).and.((m+n-2)==0)) then - basis_times_basis=normalization1*normalization2*exp(ab*r) + if ((rr == 0.0_dp) .and. ((mm + nn - 2) == 0)) then + basis_times_basis = normalization1 * normalization2 * exp(ab * rr) else - basis_times_basis=normalization1*normalization2*& - &r**(m+n-2)*exp(ab*r) + basis_times_basis = normalization1 * normalization2 * rr**(mm + nn - 2) * exp(ab * rr) end if - if (abs(basis_times_basis)<1.0d-20) basis_times_basis=0.0d0 + if (abs(basis_times_basis) < 1.0d-20) basis_times_basis = 0.0_dp end function basis_times_basis - function basis_times_basis_1st(alpha,poly1,beta,poly2,l,r) - ! evaluation of product of a basis function with first the derivative of another - ! basis function - ! beta and poly2 are the arguments of the derivative + !> Evaluates product of a basis function with 1st derivative of another basis function. + !! beta and poly2 are the arguments of the derivative. + pure function basis_times_basis_1st(alpha, poly1, beta, poly2, ll, rr) + + !> basis exponent of basis + real(dp), intent(in) :: alpha + + !> highest polynomial order in basis shell + integer, intent(in) :: poly1 + + !> basis exponent of basis 1st derivative + real(dp), intent(in) :: beta + + !> highest polynomial order in basis 1st derivative shell + integer, intent(in) :: poly2 + + !> angular momentum + integer, intent(in) :: ll + + !> radial point in space, i.e. abcissa + real(dp), intent(in) :: rr - integer, intent(in) :: l,poly1,poly2 - real(dp), intent(in) :: alpha,beta,r - real(dp) :: basis_times_basis_1st,normalization1,normalization2 + !> product of a basis function with the 1st derivative of another basis function + real(dp) :: basis_times_basis_1st + + !> normalization pre-factors + real(dp) :: normalization1, normalization2 + + !> auxiliary variables + integer :: mm, nn real(dp) :: ab - integer :: m,n - m=poly1+l - n=poly2+l - ab=-(alpha+beta) + mm = poly1 + ll + nn = poly2 + ll + ab = - (alpha + beta) - normalization1=(2.0d0*alpha)**(m)*sqrt(2.0d0*alpha)/& - &sqrt(fak(2*m)) - normalization2=(2.0d0*beta)**(n)*sqrt(2.0d0*beta)/& - &sqrt(fak(2*n)) + normalization1 = (2.0_dp * alpha)**(mm) * sqrt(2.0_dp * alpha) / sqrt(fak(2 * mm)) + normalization2 = (2.0_dp * beta)**(nn) * sqrt(2.0_dp * beta) / sqrt(fak(2 * nn)) - ! WARNING: without summing negative and positive contributions independently + ! WARNING: without summing negative and positive contributions independently, ! zora becomes completely unstable ! ! catch 0^0, setting 0^0=1 and 0^1=0 - if ((r==0.0d0).and.((m+n-2)==0)) then - basis_times_basis_1st=normalization1*normalization2*& - &(-beta)*exp(ab*r) - else if ((r==0.0d0).and.((m+n-3)==0)) then - basis_times_basis_1st=normalization1*normalization2*& - &(real(n-1,dp))*exp(ab*r) + if ((rr == 0.0_dp) .and. ((mm + nn - 2) == 0)) then + basis_times_basis_1st = normalization1 * normalization2 * (- beta) * exp(ab * rr) + elseif ((rr == 0.0_dp) .and. ((mm + nn - 3) == 0)) then + basis_times_basis_1st = normalization1 * normalization2 * real(nn - 1, dp) * exp(ab * rr) else - basis_times_basis_1st=normalization1*normalization2*& - &(real(n-1,dp)*r**(m+n-3)-beta*r**(n+m-2))*exp(ab*r) + basis_times_basis_1st = normalization1 * normalization2& + & * (real(nn - 1, dp) * rr**(mm + nn - 3) - beta * rr**(nn + mm - 2)) * exp(ab * rr) end if - if (abs(basis_times_basis_1st)<1.0d-20) basis_times_basis_1st=0.0d0 + if (abs(basis_times_basis_1st) < 1.0d-20) basis_times_basis_1st = 0.0_dp end function basis_times_basis_1st - function basis_times_basis_2nd(alpha,poly1,beta,poly2,l,r) - ! evaluation of product of a basis function with the second derivative of - ! another basis function - ! beta and poly2 are the arguments of the derivative + !> Evaluates product of a basis function with 2nd derivative of another basis function. + !! beta and poly2 are the arguments of the derivative. + pure function basis_times_basis_2nd(alpha, poly1, beta, poly2, ll, rr) + + !> basis exponent of basis + real(dp), intent(in) :: alpha + + !> highest polynomial order in basis shell + integer, intent(in) :: poly1 + + !> basis exponent of basis 2nd derivative + real(dp), intent(in) :: beta + + !> highest polynomial order in basis 2nd derivative shell + integer, intent(in) :: poly2 + + !> angular momentum + integer, intent(in) :: ll + + !> radial point in space, i.e. abcissa + real(dp), intent(in) :: rr + + !> product of a basis function with the 2nd derivative of another basis function + real(dp) :: basis_times_basis_2nd - integer, intent(in) :: l,poly1,poly2 - real(dp), intent(in) :: alpha,beta,r - real(dp) :: basis_times_basis_2nd,normalization1,normalization2 - real(dp) :: ab,positive,negative - integer :: m,n + !> normalization pre-factors + real(dp) :: normalization1, normalization2 - m=poly1+l - n=poly2+l - ab=-(alpha+beta) + !> auxiliary variables + integer :: mm, nn + real(dp) :: ab, positive, negative - normalization1=(2.0d0*alpha)**(m)*sqrt(2.0d0*alpha)/& - &sqrt(fak(2*m)) - normalization2=(2.0d0*beta)**(n)*sqrt(2.0d0*beta)/& - &sqrt(fak(2*n)) + mm = poly1 + ll + nn = poly2 + ll + ab = - (alpha + beta) - ! WARNING: without summing negative and positive contributions independently + normalization1 = (2.0_dp * alpha)**(mm) * sqrt(2.0_dp * alpha) / sqrt(fak(2 * mm)) + normalization2 = (2.0_dp * beta)**(nn) * sqrt(2.0_dp * beta) / sqrt(fak(2 * nn)) + + ! WARNING: without summing negative and positive contributions independently, ! zora becomes completely unstable ! - positive=real((n-1)*(n-2),dp)*r**(m+n-4)+beta**2*r**(m+n-2) - negative=real(2*(n-1),dp)*beta*r**(n+m-3) + positive = real((nn - 1) * (nn - 2), dp) * rr**(mm + nn - 4) + beta**2 * rr**(mm + nn - 2) + negative = real(2 * (nn - 1), dp) * beta * rr**(nn + mm - 3) - basis_times_basis_2nd=normalization1*normalization2*& - &(positive-negative)*exp(ab*r) + basis_times_basis_2nd = normalization1 * normalization2 * (positive - negative) * exp(ab * rr) - if (abs(basis_times_basis_2nd)<1.0d-20) basis_times_basis_2nd=0.0d0 + if (abs(basis_times_basis_2nd) < 1.0d-20) basis_times_basis_2nd = 0.0_dp end function basis_times_basis_2nd - function basis_1st_times_basis_1st(alpha,poly1,beta,poly2,l,r) - ! evaluation of product of a first derivatives of basis functions + !> Evaluates product of 1st derivatives of basis functions. + !! beta and poly2 are the arguments of the 2nd basis. + pure function basis_1st_times_basis_1st(alpha, poly1, beta, poly2, ll, rr) - integer, intent(in) :: l,poly1,poly2 - real(dp), intent(in) :: alpha,beta,r - real(dp) :: basis_1st_times_basis_1st,normalization1,normalization2 - real(dp) :: ab,positive,negative - integer :: m,n + !> basis exponent of 1st basis derivative + real(dp), intent(in) :: alpha - m=poly1+l - n=poly2+l - ab=-(alpha+beta) + !> highest polynomial order in 1st basis shell + integer, intent(in) :: poly1 - normalization1=(2.0d0*alpha)**(m)*sqrt(2.0d0*alpha)/& - &sqrt(fak(2*m)) - normalization2=(2.0d0*beta)**(n)*sqrt(2.0d0*beta)/& - &sqrt(fak(2*n)) + !> basis exponent of 2nd basis derivative + real(dp), intent(in) :: beta - ! WARNING: without summing negative and positive contributions independently - ! zora becomes completely unstable ! + !> highest polynomial order in 2nd basis shell + integer, intent(in) :: poly2 + + !> angular momentum + integer, intent(in) :: ll + + !> radial point in space, i.e. abcissa + real(dp), intent(in) :: rr + + !> product of 1st derivatives of basis functions + real(dp) :: basis_1st_times_basis_1st + + !> normalization pre-factors + real(dp) :: normalization1, normalization2 + + !> auxiliary variables + integer :: mm, nn + real(dp) :: ab, positive, negative + + mm = poly1 + ll + nn = poly2 + ll + ab = - (alpha + beta) + + normalization1 = (2.0_dp * alpha)**(mm) * sqrt(2.0_dp * alpha) / sqrt(fak(2 * mm)) + normalization2 = (2.0_dp * beta)**(nn) * sqrt(2.0_dp * beta) / sqrt(fak(2 * nn)) + + ! WARNING: without summing negative and positive contributions independently, + ! zora becomes completely unstable! ! catch 0^0 - if ((r==0.0d0).and.((m+n-2)==0)) then - positive=alpha*beta - else if ((r==0.0d0).and.((m+n-4)==0)) then - positive=real((m-1)*(n-1),dp) + if ((rr == 0.0_dp) .and. ((mm + nn - 2) == 0)) then + positive = alpha * beta + elseif ((rr == 0.0_dp) .and. ((mm + nn - 4) == 0)) then + positive = real((mm - 1) * (nn - 1), dp) else - positive=real((m-1)*(n-1),dp)*r**(m+n-4)+& - &alpha*beta*r**(m+n-2) + positive = real((mm - 1) * (nn - 1), dp) * rr**(mm + nn - 4)& + & + alpha * beta * rr**(mm + nn - 2) end if - if ((r==0.0d0).and.((m+n-3)==0)) then - negative=(alpha*real(n-1,dp)+beta*real(m-1,dp)) + if ((rr == 0.0_dp) .and. ((mm + nn - 3) == 0)) then + negative = (alpha * real(nn - 1, dp) + beta * real(mm - 1, dp)) else - negative=(alpha*real(n-1,dp)+beta*real(m-1,dp))*r**(m+n-3) + negative = (alpha * real(nn - 1, dp) + beta * real(mm - 1, dp)) * rr**(mm + nn - 3) end if - basis_1st_times_basis_1st=normalization1*normalization2*& - &(positive-negative)*exp(ab*r) + basis_1st_times_basis_1st = normalization1 * normalization2& + & * (positive - negative) * exp(ab * rr) - if (abs(basis_1st_times_basis_1st)<1.0d-20) basis_1st_times_basis_1st=0.0d0 + if (abs(basis_1st_times_basis_1st) < 1.0d-20) basis_1st_times_basis_1st = 0.0_dp end function basis_1st_times_basis_1st - function basis_2nd_times_basis_2nd(alpha,poly1,beta,poly2,l,r) - ! evaluation of product of a first derivatives of basis functions + !> Evaluates product of two 2nd derivatives of basis functions. + !! beta and poly2 are the arguments of the 2nd basis. + pure function basis_2nd_times_basis_2nd(alpha, poly1, beta, poly2, ll, rr) + + !> basis exponent of 1st basis derivative + real(dp), intent(in) :: alpha + + !> highest polynomial order in 1st basis shell + integer, intent(in) :: poly1 + + !> basis exponent of 2nd basis derivative + real(dp), intent(in) :: beta + + !> highest polynomial order in 2nd basis shell + integer, intent(in) :: poly2 + + !> angular momentum + integer, intent(in) :: ll + + !> radial point in space, i.e. abcissa + real(dp), intent(in) :: rr + + !> product of 2nd derivatives of basis functions + real(dp) :: basis_2nd_times_basis_2nd - integer, intent(in) :: l,poly1,poly2 - real(dp), intent(in) :: alpha,beta,r - real(dp) :: basis_2nd_times_basis_2nd,normalization1,normalization2 - real(dp) :: ab,positive,negative - integer :: m,n + !> normalization pre-factors + real(dp) :: normalization1, normalization2 - m=poly1+l - n=poly2+l - ab=-(alpha+beta) + !> auxiliary variables + integer :: mm, nn + real(dp) :: ab, positive, negative - normalization1=(2.0d0*alpha)**(m)*sqrt(2.0d0*alpha)/& - &sqrt(fak(2*m)) - normalization2=(2.0d0*beta)**(n)*sqrt(2.0d0*beta)/& - &sqrt(fak(2*n)) + mm = poly1 + ll + nn = poly2 + ll + ab = - (alpha + beta) - ! WARNING: without summing negative and positive contributions independently + normalization1 = (2.0_dp * alpha)**(mm) * sqrt(2.0_dp * alpha) / sqrt(fak(2 * mm)) + normalization2 = (2.0_dp * beta)**(nn) * sqrt(2.0_dp * beta) / sqrt(fak(2 * nn)) + + ! WARNING: without summing negative and positive contributions independently, ! zora becomes completely unstable ! - positive=real((m-1)*(m-2)*(n-1)*(n-2),dp)*r**(n+m-6)+& - &r**(m+n-4)*(beta**2*real((m-1)*(m-2),dp)+alpha**2*real((n-1)*(n-2),dp)+& - &alpha*beta*real(4*(m-1)*(n-1),dp))+& - &alpha**2*beta**2*r**(m+n-2) + positive = real((mm - 1) * (mm - 2) * (nn - 1) * (nn - 2), dp) * rr**(nn + mm - 6)& + & + rr**(mm + nn - 4) * (beta**2 * real((mm - 1) * (mm - 2), dp) + alpha**2& + & * real((nn - 1) * (nn - 2), dp) + alpha * beta * real(4 * (mm - 1) * (nn - 1), dp))& + & + alpha**2 * beta**2 * rr**(mm + nn - 2) - negative=r**(m+n-5)*(beta*real(2*(n-1)*(m-1)*(m-2),dp)+& - &alpha*real(2*(m-1)*(n-1)*(n-2),dp))+& - &r**(m+n-3)*(alpha*beta**2*real(2*(m-1),dp)+& - &beta*alpha**2*real(2*(n-1),dp)) + negative = rr**(mm + nn - 5) * (beta * real(2 * (nn - 1) * (mm - 1) * (mm - 2), dp)& + & + alpha * real(2 * (mm - 1) * (nn - 1) * (nn - 2), dp)) + rr**(mm + nn - 3)& + & * (alpha * beta**2 * real(2 * (mm - 1), dp) + beta * alpha**2 * real(2 * (nn - 1), dp)) - basis_2nd_times_basis_2nd=normalization1*normalization2*& - &(positive-negative)*exp(ab*r) + basis_2nd_times_basis_2nd = normalization1 * normalization2& + & * (positive - negative) * exp(ab * rr) - if (abs(basis_2nd_times_basis_2nd)<1.0d-20) basis_2nd_times_basis_2nd=0.0d0 + if (abs(basis_2nd_times_basis_2nd) < 1.0d-20) basis_2nd_times_basis_2nd = 0.0_dp end function basis_2nd_times_basis_2nd - function basis_times_basis_times_r2(alpha,poly1,beta,poly2,l,r) - ! evaluation of product of two basis functions and r^2 in one go - ! r^(m-1)*e^(-alpha*r)*r^(n-1)*exp(-beta*r) *r^2=r^(m+n)*exp(-(alpha+beta)*r) + !> Evaluates product of two basis functions and r^2. + !! r^(m-1)*e^(-alpha*r)*r^(n-1)*exp(-beta*r)*r^2=r^(m+n)*exp(-(alpha+beta)*r) + pure function basis_times_basis_times_r2(alpha, poly1, beta, poly2, ll, rr) + + !> basis exponent of 1st basis + real(dp), intent(in) :: alpha + + !> highest polynomial order in 1st basis shell + integer, intent(in) :: poly1 + + !> basis exponent of 2nd basis + real(dp), intent(in) :: beta + + !> highest polynomial order in 2nd basis shell + integer, intent(in) :: poly2 + + !> angular momentum + integer, intent(in) :: ll + + !> radial point in space, i.e. abcissa + real(dp), intent(in) :: rr + + !> product of two basis functions and r^2 + real(dp) :: basis_times_basis_times_r2 - integer, intent(in) :: l,poly1,poly2 - real(dp), intent(in) :: alpha,beta,r - real(dp) :: basis_times_basis_times_r2,normalization1,normalization2 + !> normalization pre-factors + real(dp) :: normalization1, normalization2 + + !> auxiliary variables + integer :: mm, nn real(dp) :: ab - integer :: m,n - m=poly1+l - n=poly2+l - ab=-(alpha+beta) + mm = poly1 + ll + nn = poly2 + ll + ab = - (alpha + beta) - normalization1=(2.0d0*alpha)**(m)*sqrt(2.0d0*alpha)/& - &sqrt(fak(2*m)) - normalization2=(2.0d0*beta)**(n)*sqrt(2.0d0*beta)/& - &sqrt(fak(2*n)) + normalization1 = (2.0_dp * alpha)**(mm) * sqrt(2.0_dp * alpha) / sqrt(fak(2 * mm)) + normalization2 = (2.0_dp * beta)**(nn) * sqrt(2.0_dp * beta) / sqrt(fak(2 * nn)) - basis_times_basis_times_r2=normalization1*normalization2*& - &r**(m+n)*exp(ab*r) + basis_times_basis_times_r2 = normalization1 * normalization2 * rr**(mm + nn) * exp(ab * rr) - if (abs(basis_times_basis_times_r2)<1.0d-20) basis_times_basis_times_r2=0.0d0 + if (abs(basis_times_basis_times_r2) < 1.0d-20) basis_times_basis_times_r2 = 0.0_dp end function basis_times_basis_times_r2 - function basis_times_basis_1st_times_r2(alpha,poly1,beta,poly2,l,r) - ! evaluation of product of a basis function with first the derivative of another - ! basis function and r^2 - ! beta and poly2 are the arguments of the derivative + !> Evaluates product of a basis function with 1st derivative of another basis function and r^2. + !! beta and poly2 are the arguments of the derivative. + pure function basis_times_basis_1st_times_r2(alpha, poly1, beta, poly2, ll, rr) + + !> basis exponent of basis + real(dp), intent(in) :: alpha + + !> highest polynomial order in basis shell + integer, intent(in) :: poly1 + + !> basis exponent of basis derivative + real(dp), intent(in) :: beta + + !> highest polynomial order in basis derivative shell + integer, intent(in) :: poly2 + + !> angular momentum + integer, intent(in) :: ll + + !> radial point in space, i.e. abcissa + real(dp), intent(in) :: rr + + !> product of a basis function with 1st derivative of another basis function and r^2 + real(dp) :: basis_times_basis_1st_times_r2 + + !> normalization pre-factors + real(dp) :: normalization1, normalization2 - integer, intent(in) :: l,poly1,poly2 - real(dp), intent(in) :: alpha,beta,r - real(dp) :: basis_times_basis_1st_times_r2,normalization1,normalization2 + !> auxiliary variables + integer :: mm, nn real(dp) :: ab - integer :: m,n - m=poly1+l - n=poly2+l - ab=-(alpha+beta) + mm = poly1 + ll + nn = poly2 + ll + ab = - (alpha + beta) - normalization1=(2.0d0*alpha)**(m)*sqrt(2.0d0*alpha)/& - &sqrt(fak(2*m)) - normalization2=(2.0d0*beta)**(n)*sqrt(2.0d0*beta)/& - &sqrt(fak(2*n)) + normalization1 = (2.0_dp * alpha)**(mm) * sqrt(2.0_dp * alpha) / sqrt(fak(2 * mm)) + normalization2 = (2.0_dp * beta)**(nn) * sqrt(2.0_dp * beta) / sqrt(fak(2 * nn)) - ! WARNING: without summing negative and positive contributions independently + ! WARNING: without summing negative and positive contributions independently, ! zora becomes completely unstable ! - basis_times_basis_1st_times_r2=normalization1*normalization2*& - &(real(n-1,dp)*r**(m+n-1)-beta*r**(n+m))*exp(ab*r) + basis_times_basis_1st_times_r2 = normalization1 * normalization2& + & * (real(nn - 1, dp) * rr**(mm + nn - 1) - beta * rr**(nn + mm)) * exp(ab * rr) - if (abs(basis_times_basis_1st_times_r2)<1.0d-20) & - &basis_times_basis_1st_times_r2=0.0d0 + if (abs(basis_times_basis_1st_times_r2) < 1.0d-20) basis_times_basis_1st_times_r2 = 0.0_dp end function basis_times_basis_1st_times_r2 - function basis_times_basis_2nd_times_r2(alpha,poly1,beta,poly2,l,r) - ! evaluation of product of a basis function with the second derivative of - ! another basis function and r^2 - ! beta and poly2 are the arguments of the derivative + !> Evaluates product of a basis function with 2nd derivative of another basis function and r^2. + !! beta and poly2 are the arguments of the derivative. + pure function basis_times_basis_2nd_times_r2(alpha, poly1, beta, poly2, ll, rr) + + !> basis exponent of basis + real(dp), intent(in) :: alpha + + !> highest polynomial order in basis shell + integer, intent(in) :: poly1 + + !> basis exponent of basis 2nd derivative + real(dp), intent(in) :: beta + + !> highest polynomial order in basis 2nd derivative shell + integer, intent(in) :: poly2 + + !> angular momentum + integer, intent(in) :: ll + + !> radial point in space, i.e. abcissa + real(dp), intent(in) :: rr + + !> product of a basis function with 2nd derivative of another basis function and r^2 + real(dp) :: basis_times_basis_2nd_times_r2 + + !> normalization pre-factors + real(dp) :: normalization1, normalization2 - integer, intent(in) :: l,poly1,poly2 - real(dp), intent(in) :: alpha,beta,r - real(dp) :: basis_times_basis_2nd_times_r2,normalization1,normalization2 - real(dp) :: ab,positive,negative - integer :: m,n + !> auxiliary variables + integer :: mm, nn + real(dp) :: ab, positive, negative - m=poly1+l - n=poly2+l - ab=-(alpha+beta) + mm = poly1 + ll + nn = poly2 + ll + ab = - (alpha + beta) - normalization1=(2.0d0*alpha)**(m)*sqrt(2.0d0*alpha)/& - &sqrt(fak(2*m)) - normalization2=(2.0d0*beta)**(n)*sqrt(2.0d0*beta)/& - &sqrt(fak(2*n)) + normalization1 = (2.0_dp * alpha)**(mm) * sqrt(2.0_dp * alpha) / sqrt(fak(2 * mm)) + normalization2 = (2.0_dp * beta)**(nn) * sqrt(2.0_dp * beta) / sqrt(fak(2 * nn)) - ! WARNING: without summing negative and positive contributions independently + ! WARNING: without summing negative and positive contributions independently, ! zora becomes completely unstable ! - positive=real((n-1)*(n-2),dp)*r**(m+n-2)+beta**2*r**(m+n) - negative=real(2*(n-1),dp)*beta*r**(n+m-1) + positive = real((nn - 1) * (nn - 2), dp) * rr**(mm + nn - 2) + beta**2 * rr**(mm + nn) + negative = real(2 * (nn - 1), dp) * beta * rr**(nn + mm - 1) - basis_times_basis_2nd_times_r2=normalization1*normalization2*& - &(positive-negative)*exp(ab*r) + basis_times_basis_2nd_times_r2 = normalization1 * normalization2& + & * (positive - negative) * exp(ab * rr) - if (abs(basis_times_basis_2nd_times_r2)<1.0d-20) & - &basis_times_basis_2nd_times_r2=0.0d0 + if (abs(basis_times_basis_2nd_times_r2) < 1.0d-20) basis_times_basis_2nd_times_r2 = 0.0_dp end function basis_times_basis_2nd_times_r2 - function basis_times_basis_1st_times_r(alpha,poly1,beta,poly2,l,r) - ! evaluation of product of a basis function with first the derivative of another - ! basis function and r - ! beta and poly2 are the arguments of the derivative + !> Evaluates product of a basis function with 1st derivative of another and r. + !! beta and poly2 are the arguments of the derivative. + pure function basis_times_basis_1st_times_r(alpha, poly1, beta, poly2, ll, rr) - integer, intent(in) :: l,poly1,poly2 - real(dp), intent(in) :: alpha,beta,r - real(dp) :: basis_times_basis_1st_times_r,normalization1,normalization2 + !> basis exponent of basis + real(dp), intent(in) :: alpha + + !> highest polynomial order in basis shell + integer, intent(in) :: poly1 + + !> basis exponent of basis derivative + real(dp), intent(in) :: beta + + !> highest polynomial order in basis derivative shell + integer, intent(in) :: poly2 + + !> angular momentum + integer, intent(in) :: ll + + !> radial point in space, i.e. abcissa + real(dp), intent(in) :: rr + + !> product of a basis function with 1st derivative of another and r + real(dp) :: basis_times_basis_1st_times_r + + !> normalization pre-factors + real(dp) :: normalization1, normalization2 + + !> auxiliary variables + integer :: mm, nn real(dp) :: ab - integer :: m,n - m=poly1+l - n=poly2+l - ab=-(alpha+beta) + mm = poly1 + ll + nn = poly2 + ll + ab = - (alpha + beta) - normalization1=(2.0d0*alpha)**(m)*sqrt(2.0d0*alpha)/& - &sqrt(fak(2*m)) - normalization2=(2.0d0*beta)**(n)*sqrt(2.0d0*beta)/& - &sqrt(fak(2*n)) + normalization1 = (2.0_dp * alpha)**(mm) * sqrt(2.0_dp * alpha) / sqrt(fak(2 * mm)) + normalization2 = (2.0_dp * beta)**(nn) * sqrt(2.0_dp * beta) / sqrt(fak(2 * nn)) - ! WARNING: without summing negative and positive contributions independently + ! WARNING: without summing negative and positive contributions independently, ! zora becomes completely unstable ! - basis_times_basis_1st_times_r=normalization1*normalization2*& - &(real(n-1,dp)*r**(m+n-2)-beta*r**(n+m-1))*exp(ab*r) + basis_times_basis_1st_times_r = normalization1 * normalization2& + & * (real(nn - 1, dp) * rr**(mm + nn - 2) - beta * rr**(nn + mm - 1)) * exp(ab * rr) - if (abs(basis_times_basis_1st_times_r)<1.0d-20) & - &basis_times_basis_1st_times_r=0.0d0 + if (abs(basis_times_basis_1st_times_r) < 1.0d-20) basis_times_basis_1st_times_r = 0.0_dp end function basis_times_basis_1st_times_r - function basis_1st_times_basis_1st_times_r2(alpha,poly1,beta,poly2,l,r) - ! evaluation of product of a first derivatives of basis functions and r^2 + !> Evaluates product of 1st derivatives of basis functions and r^2. + !! beta and poly2 are the arguments of the 2nd basis. + pure function basis_1st_times_basis_1st_times_r2(alpha, poly1, beta, poly2, ll, rr) + + !> basis exponent of 1st basis derivative + real(dp), intent(in) :: alpha + + !> highest polynomial order in 1st basis shell + integer, intent(in) :: poly1 + + !> basis exponent of 2nd basis derivative + real(dp), intent(in) :: beta + + !> highest polynomial order in 2nd basis shell + integer, intent(in) :: poly2 + + !> angular momentum + integer, intent(in) :: ll + + !> radial point in space, i.e. abcissa + real(dp), intent(in) :: rr + + !> product of 1st derivatives of basis functions and r^2 + real(dp) :: basis_1st_times_basis_1st_times_r2 + + !> normalization pre-factors + real(dp) :: normalization1, normalization2 - integer, intent(in) :: l,poly1,poly2 - real(dp), intent(in) :: alpha,beta,r - real(dp) :: basis_1st_times_basis_1st_times_r2,normalization1,normalization2 - real(dp) :: ab,positive,negative - integer :: m,n + !> auxiliary variables + integer :: mm, nn + real(dp) :: ab, positive, negative - m=poly1+l - n=poly2+l - ab=-(alpha+beta) + mm = poly1 + ll + nn = poly2 + ll + ab = - (alpha + beta) - normalization1=(2.0d0*alpha)**(m)*sqrt(2.0d0*alpha)/& - &sqrt(fak(2*m)) - normalization2=(2.0d0*beta)**(n)*sqrt(2.0d0*beta)/& - &sqrt(fak(2*n)) + normalization1 = (2.0_dp * alpha)**(mm) * sqrt(2.0_dp * alpha) / sqrt(fak(2 * mm)) + normalization2 = (2.0_dp * beta)**(nn) * sqrt(2.0_dp * beta) / sqrt(fak(2 * nn)) - ! WARNING: without summing negative and positive contributions independently + ! WARNING: without summing negative and positive contributions independently, ! zora becomes completely unstable ! - positive=real((m-1)*(n-1),dp)*r**(m+n-2)+& - &alpha*beta*r**(m+n) - negative=(alpha*real(n-1,dp)+beta*real(m-1,dp))*r**(m+n-1) + positive = real((mm - 1) * (nn - 1), dp) * rr**(mm + nn - 2) + alpha * beta * rr**(mm + nn) + negative = (alpha * real(nn - 1, dp) + beta * real(mm - 1, dp)) * rr**(mm + nn - 1) - basis_1st_times_basis_1st_times_r2=normalization1*normalization2*& - &(positive-negative)*exp(ab*r) + basis_1st_times_basis_1st_times_r2 = normalization1 * normalization2& + & * (positive - negative) * exp(ab * rr) - if (abs(basis_1st_times_basis_1st_times_r2)<1.0d-20) & - &basis_1st_times_basis_1st_times_r2=0.0d0 + if (abs(basis_1st_times_basis_1st_times_r2) < 1.0d-20)& + & basis_1st_times_basis_1st_times_r2 = 0.0_dp end function basis_1st_times_basis_1st_times_r2 diff --git a/slateratom/lib/densitymatrix.f90 b/slateratom/lib/densitymatrix.f90 index c44a852a..b1090f83 100644 --- a/slateratom/lib/densitymatrix.f90 +++ b/slateratom/lib/densitymatrix.f90 @@ -1,44 +1,53 @@ +!> Module that sets up the density matrix, based on occupations and wavefunction coefficients. module densitymatrix use common_accuracy, only : dp - use common_constants - use utilities implicit none private public :: densmatrix - + + contains - subroutine densmatrix(problemsize,max_l,occ,cof,p) + !> Get density matrix from wavefunction coefficients. + pure subroutine densmatrix(problemsize, max_l, occ, cof, pp) + + !> maximum size of the eigenproblem + integer, intent(in) :: problemsize + + !> maximum angular momentum + integer, intent(in) :: max_l - ! Get density matrix from wavefunction coefficients. + !> occupation numbers + real(dp), intent(in) :: occ(:,0:,:) - real(dp), intent(in) :: cof(:,0:,:,:),occ(:,0:,:) - integer, intent(in) :: problemsize,max_l - real(dp), intent(out) :: p(:,0:,:,:) - integer :: ii,jj,kk,ll,mm + !> wavefunction coefficients + real(dp), intent(in) :: cof(:,0:,:,:) - p=0.0d0 + !> density matrix supervector + real(dp), intent(out) :: pp(:,0:,:,:) - do ii=1,2 - do jj=0,max_l - do kk=1,problemsize - do ll=kk,problemsize - do mm=1,problemsize - p(ii,jj,kk,ll)=p(ii,jj,kk,ll)+occ(ii,jj,mm)*& - &cof(ii,jj,kk,mm)*cof(ii,jj,ll,mm) - p(ii,jj,ll,kk)=p(ii,jj,kk,ll) + !> auxiliary variables + integer :: ii, jj, kk, ll, mm + + pp(:,:,:,:) = 0.0_dp + + do ii = 1, 2 + do jj = 0, max_l + do kk = 1, problemsize + do ll = kk, problemsize + do mm = 1, problemsize + pp(ii, jj, kk, ll) = pp(ii, jj, kk, ll)& + & + occ(ii, jj, mm) * cof(ii, jj, kk, mm) * cof(ii, jj, ll, mm) + pp(ii, jj, ll, kk) = pp(ii, jj, kk, ll) end do end do end do end do end do - ! write(*,*) 'DENSITY MATRIX' - ! write(*,*) p - end subroutine densmatrix end module densitymatrix diff --git a/slateratom/lib/dft.f90 b/slateratom/lib/dft.f90 index 8ad24c75..4568acc4 100644 --- a/slateratom/lib/dft.f90 +++ b/slateratom/lib/dft.f90 @@ -1,897 +1,459 @@ +!> Module that provides various functionality related to density functional theory. module dft use, intrinsic :: iso_c_binding, only : c_size_t use common_accuracy, only : dp - use common_constants - use density - use integration - use xc_f90_lib_m + use common_constants, only : pi, rec4pi + use xcfunctionals, only : xcFunctional, getExcVxc_LDA_PW91,& + & getExcVxc_GGA_PBE96, getExcVxc_GGA_BLYP, getExcVxc_LCY_PBE96, getExcVxc_LCY_BNL,& + & getExcVxc_HYB_B3LYP, getExcVxc_HYB_PBE0, getExcVxc_CAMY_B3LYP, getExcVxc_CAMY_PBEh + use density, only : basis, basis_times_basis_times_r2, density_at_point, density_at_point_1st,& + & density_at_point_2nd implicit none private public :: dft_start_pot, density_grid, dft_exc_energy, dft_vxc_energy - public :: dft_exc_matrixelement, xalpha, pbe_driver + public :: dft_exc_matrixelement, xalpha public :: check_accuracy - public :: derive, radial_divergence, derive1_5, derive2_5 + contains - subroutine dft_start_pot(abcissa,num_mesh_points,nuc,vxc) + !> Total potential to initialize a DFT calculation from Thomas-Fermi theory. This does not work as + !! intended in the current code, since we do not have a numerical Coulomb-Potential. + !! + !! Generalized Thomas-Fermi atomic potential as published by R. Latter, + !! Phys. Rev. 99, 510 (1955) eqn. 5/9 and implemented in Dirk Porezags scfatom. + pure subroutine dft_start_pot(abcissa, num_mesh_points, nuc, vxc) + + !> numerical integration abcissas + real(dp), intent(in) :: abcissa(:) - ! Total potential to initialize a DFT calculation from Thomas-Fermi - ! Theory. this does not work as intended in the current code, since - ! we do not have a numerical Coulomb-Potential. + !> number of numerical integration points + integer, intent(in) :: num_mesh_points - ! Generalized Thomas-Fermi atomic potential - ! as published by R. Latter, Phys. Rev. 99, 510 (1955). - ! and implemented in Dirk Porezags scfatom + !> nuclear charge, i.e. atomic number + integer, intent(in) :: nuc - real(dp), intent(in) :: abcissa(:) - integer, intent(in) :: nuc,num_mesh_points + !> xc potential on grid for two spin channels vxc(:, 1) and vxc(:, 2) real(dp), intent(out) :: vxc(:,:) - real(dp) :: b,t,x,rtx + + !> auxiliary variables integer :: ii + real(dp) :: bb, tt, xx, rtx - b= (0.69395656d0/real(nuc,dp))**(1.0d0/3.0d0) + bb = (0.69395656_dp / real(nuc, dp))**(1.0_dp / 3.0_dp) - do ii=1,num_mesh_points + do ii = 1, num_mesh_points - x= abcissa(ii)/b - rtx= sqrt(x) + xx = abcissa(ii) / bb + rtx = sqrt(xx) - t= real(nuc,dp)/(1.0d0+rtx*(0.02747d0-x*(0.1486d0-0.007298d0*x))& - &+x*(1.243d0+x*(0.2302d0+0.006944d0*x))); - if (t < 1.0d0) t= 1.0d0 + tt = real(nuc, dp) / (1.0_dp + rtx * (0.02747_dp - xx * (0.1486_dp - 0.007298_dp * xx))& + & + xx * (1.243_dp + xx * (0.2302_dp + 0.006944_dp * xx))) + if (tt < 1.0_dp) tt = 1.0_dp - vxc(ii,1)= (t/abcissa(ii))/2.0d0 - vxc(ii,2)= (t/abcissa(ii))/2.0d0 + vxc(ii, 1) = (tt / abcissa(ii)) / 2.0_dp + vxc(ii, 2) = (tt / abcissa(ii)) / 2.0_dp end do end subroutine dft_start_pot - subroutine density_grid(p,max_l,num_alpha,poly_order,alpha,num_mesh_points,& - &abcissa, dzdr, d2zdr2, dz, xcnr, rho,drho,ddrho,vxc,exc,xalpha_const) - ! Calculate and store density and density derivatives on radial grid. - ! Also calculate and store exchange-correlation potential and energy - ! density on grid. + !> Calculate and store density and density derivatives on radial grid. + !! Further calculates and stores exchange-correlation potential and energy density on grid. + subroutine density_grid(pp, max_l, num_alpha, poly_order, alpha, num_mesh_points, abcissa, dzdr,& + & dz, xcnr, omega, camAlpha, camBeta, rho, drho, ddrho, vxc, exc, xalpha_const) - real(dp), intent(in) :: p(:,0:,:,:),abcissa(:),alpha(0:,:) - integer, intent(in) :: max_l,num_alpha(0:),poly_order(0:),num_mesh_points - real(dp), intent(in) :: dzdr(:), d2zdr2(:) - real(dp), intent(in) :: dz,xalpha_const - integer, intent(in) :: xcnr - real(dp), intent(out) :: rho(:,:),drho(:,:),ddrho(:,:),vxc(:,:),exc(:) - real(dp) :: rhotot,rhodiff,drhotot,ddrhotot,drhodiff,ddrhodiff - integer :: ii,jj,kk,ll,mm,oo - integer(c_size_t) :: nn - type(xc_f90_func_t) :: xcfunc_x, xcfunc_c - type(xc_f90_func_info_t) :: xcinfo - real(dp), allocatable :: tmprho(:,:), ex(:), ec(:), vx(:,:), vc(:,:) - real(dp), allocatable :: tmpsigma(:,:), vxsigma(:,:), vcsigma(:,:) - real(dp), allocatable :: tmpv(:), tmpv2(:) - integer :: ispin, ispin2, isigma - real(dp), parameter :: rec4pi = 1.0_dp / (4.0_dp * pi) - - - if (xcnr==0) return - if (xcnr == 2) then - call xc_f90_func_init(xcfunc_x, XC_LDA_X, XC_POLARIZED) - xcinfo = xc_f90_func_get_info(xcfunc_x) - call xc_f90_func_init(xcfunc_c, XC_LDA_C_PW, XC_POLARIZED) - xcinfo = xc_f90_func_get_info(xcfunc_x) - elseif (xcnr == 3) then - call xc_f90_func_init(xcfunc_x, XC_GGA_X_PBE, XC_POLARIZED) - xcinfo = xc_f90_func_get_info(xcfunc_x) - call xc_f90_func_init(xcfunc_c, XC_GGA_C_PBE, XC_POLARIZED) - xcinfo = xc_f90_func_get_info(xcfunc_x) - end if + !> density matrix supervector + real(dp), intent(in) :: pp(:, 0:,:,:) - do ii=1,num_mesh_points + !> maximum angular momentum + integer, intent(in) :: max_l - rho(ii,1)=density_at_point(p(1,:,:,:),max_l,num_alpha,poly_order,alpha,& - &abcissa(ii)) - rho(ii,2)=density_at_point(p(2,:,:,:),max_l,num_alpha,poly_order,alpha,& - &abcissa(ii)) + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) - end do - - rho = max(rho, 0.0_dp) - !rho(:,:) = sign(max(abs(rho), 1e-14_dp), rho) - !drho(ii,:) = sign(max(abs(drho(ii,:)), 1e-14_dp), drho(ii,:)) - !ddrho(ii,:) = sign(max(abs(ddrho(ii,:)), 1e-14_dp), ddrho(ii,:)) - !if (abs(rho(ii,1))<1.0d-16) rho(ii,1)=0.0d0 - !if (abs(rho(ii,2))<1.0d-16) rho(ii,2)=0.0d0 - !if (abs(drho(ii,1))<1.0d-16) drho(ii,1)=0.0d0 - !if (abs(drho(ii,2))<1.0d-16) drho(ii,2)=0.0d0 - !if (abs(ddrho(ii,1))<1.0d-16) ddrho(ii,1)=0.0d0 - !if (abs(ddrho(ii,2))<1.0d-16) ddrho(ii,2)=0.0d0 - - if (xcnr > 2) then - - !call derive2_5(rho(:,1), dz, ddrho(:,1), dzdr, d2zdr2, drho(:,1)) - !call derive2_5(rho(:,2), dz, ddrho(:,2), dzdr, d2zdr2, drho(:,2)) - - do ii = 1, num_mesh_points + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) - drho(ii,1)=density_at_point_1st(p(1,:,:,:),max_l,num_alpha,poly_order,& - &alpha,abcissa(ii)) - drho(ii,2)=density_at_point_1st(p(2,:,:,:),max_l,num_alpha,poly_order,& - &alpha,abcissa(ii)) + !> basis exponents + real(dp), intent(in) :: alpha(0:,:) - ddrho(ii,1)=density_at_point_2nd(p(1,:,:,:),max_l,num_alpha,poly_order,& - &alpha,abcissa(ii)) - ddrho(ii,2)=density_at_point_2nd(p(2,:,:,:),max_l,num_alpha,poly_order,& - &alpha,abcissa(ii)) - end do + !> number of numerical integration points + integer, intent(in) :: num_mesh_points - end if + !> numerical integration abcissas + real(dp), intent(in) :: abcissa(:) - ! divide by 4*pi to catch different normalization of spherical harmonics - if (xcnr==1) then - do ii = 1, num_mesh_points - rhotot = (rho(ii,1) + rho(ii,2)) * rec4pi - rhodiff = (rho(ii,1) - rho(ii,2)) * rec4pi - call xalpha(rhotot,rhodiff,vxc(ii,:),exc(ii),xalpha_const) - end do + !> dz/dr + real(dp), intent(in) :: dzdr(:) - else if (xcnr==2) then - nn = size(rho, dim=1) - allocate(tmprho(2, nn)) - allocate(ex(nn)) - allocate(ec(nn)) - allocate(vx(2, nn)) - allocate(vc(2, nn)) - tmprho(:,:) = transpose(rho) * rec4pi - call xc_f90_lda_exc_vxc(xcfunc_x, nn, tmprho(1,1), ex(1), vx(1,1)) - call xc_f90_lda_exc_vxc(xcfunc_c, nn, tmprho(1,1), ec(1), vc(1,1)) - vxc(:,:) = transpose(vx + vc) - exc = ec + ex -!!! OLD hand coded XC version -! do ii = 1, num_mesh_points -! rhotot = (rho(ii,1) + rho(ii,2)) * rec4pi -! rhodiff = (rho(ii,1) - rho(ii,2)) * rec4pi -! call pbe_driver(0,rhotot,0.0d0,0.0d0,& -! &rhodiff,0.0d0,0.0d0,0.0d0,vxc(ii,:),exc(ii)) -! end do -!!! - else if (xcnr==3) then - nn = size(rho, dim=1) - allocate(tmprho(2, nn)) - allocate(ex(nn)) - allocate(ec(nn)) - allocate(vx(2, nn)) - allocate(vc(2, nn)) - allocate(tmpsigma(3, nn)) - allocate(vxsigma(3, nn)) - allocate(vcsigma(3, nn)) - allocate(tmpv(nn)) - allocate(tmpv2(nn)) - tmprho(:,:) = transpose(rho) * rec4pi - tmpsigma(1,:) = drho(:,1) * drho(:,1) * rec4pi * rec4pi - tmpsigma(2,:) = drho(:,1) * drho(:,2) * rec4pi * rec4pi - tmpsigma(3,:) = drho(:,2) * drho(:,2) * rec4pi * rec4pi - call xc_f90_gga_exc_vxc(xcfunc_x, nn, tmprho(1,1), tmpsigma(1,1),& - & ex(1), vx(1,1), vxsigma(1,1)) - call xc_f90_gga_exc_vxc(xcfunc_c, nn, tmprho(1,1), tmpsigma(1,1), ec(1), & - &vc(1,1), vcsigma(1,1)) - vxc = transpose(vx + vc) - do ispin = 1, 2 - ispin2 = 3 - ispin ! the other spin - isigma = 2 * ispin - 1 ! 1 for spin up, 3 for spin down - tmpv(:) = (vxsigma(isigma,:) + vcsigma(isigma,:)) & - & * drho(:,ispin) * rec4pi - call radial_divergence(tmpv, abcissa, dz, tmpv2, dzdr) - vxc(:,ispin) = vxc(:,ispin) - 2.0_dp * tmpv2 - tmpv(:) = (vxsigma(2,:) + vcsigma(2,:)) & - & * drho(:,ispin2) * rec4pi - call radial_divergence(tmpv, abcissa, dz, tmpv2, dzdr) - vxc(:,ispin) = vxc(:,ispin) - tmpv2 - end do - exc = ex + ec -!!! OLD: hand coded xc-version -! do ii = 1, num_mesh_points -! rhotot = (rho(ii,1) + rho(ii,2)) * rec4pi -! rhodiff = (rho(ii,1) - rho(ii,2)) * rec4pi -! drhotot=(drho(ii,1)+drho(ii,2))/4.0d0/pi -! ddrhotot=(ddrho(ii,1)+ddrho(ii,2))/4.0d0/pi -! drhodiff=(drho(ii,1)-drho(ii,2))/4.0d0/pi -! ddrhodiff=(ddrho(ii,1)-ddrho(ii,2))/4.0d0/pi -! call pbe_driver(1,rhotot,drhotot,ddrhotot,& -! &rhodiff,drhodiff,ddrhodiff,abcissa(ii),vxc(ii,:),exc(ii)) -! end do -!!! - - else - - write(*,'(A,I2,A)') 'XCNR= ',xcnr,' not implemented' - STOP + !> step width in linear coordinates + real(dp), intent(in) :: dz - end if + !> identifier of exchange-correlation type + integer, intent(in) :: xcnr + !> range-separation parameter + real(dp), intent(in) :: omega - call xc_f90_func_end(xcfunc_x) - call xc_f90_func_end(xcfunc_c) + !> CAM alpha parameter + real(dp), intent(in) :: camAlpha - end subroutine density_grid + !> CAM beta parameter + real(dp), intent(in) :: camBeta - subroutine dft_exc_energy(num_mesh_points,rho,exc,weight,abcissa,& - &xcnr,exc_energy) + !> density on grid + real(dp), intent(out) :: rho(:,:) - ! Calculate DFT Exc energy from energy density and electron density on - ! grid. + !> 1st deriv. of density on grid + real(dp), intent(out) :: drho(:,:) - real(dp),intent(out) :: exc_energy - real(dp), intent(in) :: rho(:,:),weight(:),exc(:),abcissa(:) - integer, intent(in) :: num_mesh_points,xcnr - integer :: ii,jj,kk,ll,mm,nn,oo - real(dp) :: rhotot,rhodiff + !> 2nd deriv. of density on grid + real(dp), intent(out) :: ddrho(:,:) - exc_energy=0.0d0 + !> xc potential on grid + real(dp), intent(out) :: vxc(:,:) - do ii=1,num_mesh_points + !> exc energy density on grid + real(dp), intent(out) :: exc(:) - exc_energy=exc_energy+weight(ii)*exc(ii)*(rho(ii,1)+rho(ii,2))*& - &abcissa(ii)**2 + !> exchange parameter for X-Alpha exchange + real(dp), intent(in) :: xalpha_const - end do + !! total density on grid (spins summed up) + real(dp) :: rhotot - ! - ! For usual DFT functionals E_xc=\int \rho \eps(\rho,\zeta) d^3r - ! so there is only one exchange-correlation energy density \eps(\rho,\zeta) and - ! exc_energy could be a scalar without problems. - ! + !! difference between spin densities + real(dp) :: rhodiff - end subroutine dft_exc_energy + !! number of density grid points + integer(c_size_t) :: nn - subroutine dft_vxc_energy(num_mesh_points,rho,vxc,weight,abcissa,& - &xcnr,vxc_energy) - ! vxc contribution for double counting correction + !! density in libxc compatible format, i.e. rho/(4pi) + real(dp), allocatable :: rhor(:,:) - real(dp),intent(out) :: vxc_energy(2) - real(dp), intent(in) :: rho(:,:),weight(:),vxc(:,:),abcissa(:) - integer, intent(in) :: num_mesh_points,xcnr - integer :: ii,jj,kk,ll,mm,nn,oo - real(dp) :: rhotot,rhodiff + !! temporary storage + real(dp), allocatable :: sigma(:,:) - vxc_energy=0.0d0 + !! auxiliary variable + integer :: ii - do ii=1,num_mesh_points + nn = size(rho, dim=1) - vxc_energy(1)=vxc_energy(1)+weight(ii)*vxc(ii,1)*(rho(ii,1))*& - &abcissa(ii)**2 - vxc_energy(2)=vxc_energy(2)+weight(ii)*vxc(ii,2)*(rho(ii,2))*& - &abcissa(ii)**2 + rho(:,:) = 0.0_dp + drho(:,:) = 0.0_dp + ddrho(:,:) = 0.0_dp + exc(:) = 0.0_dp + vxc(:,:) = 0.0_dp + ! get density on grid + do ii = 1, num_mesh_points + rho(ii, 1) = density_at_point(pp(1, :,:,:), max_l, num_alpha, poly_order, alpha, abcissa(ii)) + rho(ii, 2) = density_at_point(pp(2, :,:,:), max_l, num_alpha, poly_order, alpha, abcissa(ii)) end do + rho = max(rho, 0.0_dp) + ! get density derivatives on grid + if (xcFunctional%isGGA(xcnr) .or. xcFunctional%isLongRangeCorrected(xcnr)& + & .or. xcFunctional%isGlobalHybrid(xcnr) .or. xcFunctional%isCAMY(xcnr)) then + do ii = 1, num_mesh_points - end subroutine dft_vxc_energy - - subroutine dft_exc_matrixelement(num_mesh_points,weight,abcissa,rho,vxc,& - &xcnr,alpha1,poly1,alpha2,poly2,l,exc_matrixelement) - - ! Calculate a single matrix element of the exchange correlation potential. + drho(ii, 1) = density_at_point_1st(pp(1, :,:,:), max_l, num_alpha, poly_order, alpha,& + & abcissa(ii)) + drho(ii, 2) = density_at_point_1st(pp(2, :,:,:), max_l, num_alpha, poly_order, alpha,& + & abcissa(ii)) - real(dp),intent(out) :: exc_matrixelement(2) - real(dp), intent(in) :: weight(:),abcissa(:),rho(:,:),vxc(:,:) - real(dp), intent(in) :: alpha1,alpha2 - integer, intent(in) :: num_mesh_points,xcnr - integer, intent(in) :: poly1,poly2,l - real(dp) :: basis - integer :: ii,jj,kk,ll,mm,nn,oo + ddrho(ii, 1) = density_at_point_2nd(pp(1, :,:,:), max_l, num_alpha, poly_order, alpha,& + & abcissa(ii)) + ddrho(ii, 2) = density_at_point_2nd(pp(2, :,:,:), max_l, num_alpha, poly_order, alpha,& + & abcissa(ii)) + end do + end if - exc_matrixelement=0.0d0 + ! divide by 4*pi to catch different normalization of spherical harmonics + rhor = transpose(rho) * rec4pi + + ! get contracted gradients of the density + if (xcFunctional%isGGA(xcnr) .or. xcFunctional%isLongRangeCorrected(xcnr)& + & .or. xcFunctional%isGlobalHybrid(xcnr) .or. xcFunctional%isCAMY(xcnr)) then + allocate(sigma(3, nn)) + sigma(1, :) = drho(:, 1) * drho(:, 1) * rec4pi**2 + sigma(2, :) = drho(:, 1) * drho(:, 2) * rec4pi**2 + sigma(3, :) = drho(:, 2) * drho(:, 2) * rec4pi**2 + end if - do ii=1,num_mesh_points + select case (xcnr) + case(xcFunctional%HF_Exchange) + return + case(xcFunctional%X_Alpha) + do ii = 1, num_mesh_points + rhotot = (rho(ii, 1) + rho(ii, 2)) * rec4pi + rhodiff = (rho(ii, 1) - rho(ii, 2)) * rec4pi + ! Xalpha handled by our in-house routine + call xalpha(rhotot, rhodiff, vxc(ii, :), exc(ii), xalpha_const) + end do + return + case(xcFunctional%LDA_PW91) + call getExcVxc_LDA_PW91(rho, exc, vxc) + case(xcFunctional%GGA_PBE96) + call getExcVxc_GGA_PBE96(abcissa, dz, dzdr, rho, drho, sigma, exc, vxc) + case(xcFunctional%GGA_BLYP) + call getExcVxc_GGA_BLYP(abcissa, dz, dzdr, rho, drho, sigma, exc, vxc) + case(xcFunctional%LCY_PBE96) + call getExcVxc_LCY_PBE96(abcissa, dz, dzdr, rho, drho, sigma, omega, exc, vxc) + case(xcFunctional%LCY_BNL) + call getExcVxc_LCY_BNL(abcissa, dz, dzdr, rho, drho, sigma, omega, exc, vxc) + case(xcFunctional%HYB_PBE0) + call getExcVxc_HYB_PBE0(abcissa, dz, dzdr, rho, drho, sigma, camAlpha, exc, vxc) + case(xcFunctional%HYB_B3LYP) + call getExcVxc_HYB_B3LYP(abcissa, dz, dzdr, rho, drho, sigma, exc, vxc) + case(xcFunctional%CAMY_B3LYP) + call getExcVxc_CAMY_B3LYP(abcissa, dz, dzdr, rho, drho, sigma, omega, camAlpha, camBeta, exc,& + & vxc) + case(xcFunctional%CAMY_PBEh) + call getExcVxc_CAMY_PBEh(abcissa, dz, dzdr, rho, drho, sigma, omega, camAlpha, camBeta, exc,& + & vxc) + case default + write(*, '(A,I2,A)') 'XCNR=', xcnr, ' not implemented!' + stop + end select + + end subroutine density_grid + + + !> Calculates DFT xc-energy from energy density and electron density on grid. + pure subroutine dft_exc_energy(num_mesh_points, rho, exc, weight, abcissa, exc_energy) + + !> number of numerical integration points + integer, intent(in) :: num_mesh_points + + !> density on grid + real(dp), intent(in) :: rho(:,:) + + !> exc energy density on grid + real(dp), intent(in) :: exc(:) + + !> numerical integration weights + real(dp), intent(in) :: weight(:) + + !> numerical integration abcissas + real(dp), intent(in) :: abcissa(:) - basis=basis_times_basis_times_r2(alpha1,poly1,alpha2,poly2,l,abcissa(ii)) + !> xc-energy obtained from the energy density and electron density on the grid + real(dp), intent(out) :: exc_energy - exc_matrixelement(1)=exc_matrixelement(1)-weight(ii)*vxc(ii,1)*basis + !> auxiliary variable + integer :: ii - exc_matrixelement(2)=exc_matrixelement(2)-weight(ii)*vxc(ii,2)*basis + exc_energy = 0.0_dp + do ii = 1, num_mesh_points + exc_energy = exc_energy + weight(ii) * exc(ii) * (rho(ii, 1) + rho(ii, 2)) * abcissa(ii)**2 end do + ! + ! For usual DFT functionals E_xc=\int \rho \eps(\rho,\zeta) d^3r + ! so there is only one exchange-correlation energy density \eps(\rho,\zeta) and + ! exc_energy could be a scalar without problems. + ! - end subroutine dft_exc_matrixelement + end subroutine dft_exc_energy - subroutine xalpha(rhotot,rhodiff,vxc,exc,alpha) - ! Xalpha potential and energy density. + !> Calculates vxc contribution for double counting correction. + pure subroutine dft_vxc_energy(num_mesh_points, rho, vxc, weight, abcissa, vxc_energy) - ! alpha=2/3 recovers the Gaspar/Kohn/Sham functional commonly used as - ! exchange part in most current LSDA and GGA functionals - ! the original Slater exchange is recoverd with alpha=1 + !> number of numerical integration points + integer, intent(in) :: num_mesh_points - real(dp), intent(in) :: rhotot,rhodiff,alpha - real(dp), intent(out) :: exc,vxc(2) - real(dp) :: third,fourthird,vfac,cx,fzeta,dfzeta,eps0,eps1,spinpart,zeta + !> density on grid + real(dp), intent(in) :: rho(:,:) - third=1.0d0/3.0d0 - fourthird=4.0d0/3.0d0 - vfac=2.0d0**third - cx=0.75d0*(3.d0/pi)**third + !> xc potential on grid + real(dp), intent(in) :: vxc(:,:) - if (abs(rhotot)<1.0d-12) then - exc=0.0d0 - vxc(1)=0.0d0 - vxc(2)=0.0d0 - return - end if + !> numerical integration weights + real(dp), intent(in) :: weight(:) - zeta=rhodiff/rhotot + !> numerical integration abcissas + real(dp), intent(in) :: abcissa(:) - if (abs(zeta)>1.0d12) write(*,*) 'ZETA LARGE IN X-ALPHA' + !> vxc contribution for double counting correction + real(dp), intent(out) :: vxc_energy(2) - fzeta=((1.0d0+zeta)**fourthird+(1.0d0-zeta)**fourthird-2.0d0)/(2.0d0*(vfac-1.0d0)) - dfzeta=fourthird*((1.0d0+zeta)**third-(1.0d0-zeta)**third)/(2.0d0*(vfac-1.0d0)) + !> auxiliary variable + integer :: ii - eps0=-3.0d0/2.0d0*alpha*cx*rhotot**third - eps1=vfac*eps0 + vxc_energy(:) = 0.0_dp - exc=eps0+(eps1-eps0)*fzeta + do ii = 1, num_mesh_points + vxc_energy(1) = vxc_energy(1) + weight(ii) * vxc(ii, 1) * (rho(ii, 1)) * abcissa(ii)**2 + vxc_energy(2) = vxc_energy(2) + weight(ii) * vxc(ii, 2) * (rho(ii, 2)) * abcissa(ii)**2 + end do - spinpart=(eps1-eps0)*dfzeta*(1.0d0-zeta) + end subroutine dft_vxc_energy - vxc(1)=fourthird*exc+spinpart - vxc(2)=fourthird*exc-spinpart - end subroutine xalpha + !> Calculates a single matrix element of the exchange correlation potential. + pure subroutine dft_exc_matrixelement(num_mesh_points, weight, abcissa, vxc, alpha1, poly1,& + & alpha2, poly2, ll, exc_matrixelement) - subroutine pbe_driver(xcnr,rho,drho,ddrho,zeta,dzeta,ddzeta,r,vxc,exc) + !> number of numerical integration points + integer, intent(in) :: num_mesh_points - ! Driver for the PBE routines. Note: this does a lot of Voodoo but seems - ! to work. + !> numerical integration weights + real(dp), intent(in) :: weight(:) - integer, intent(in) :: xcnr - real(dp), intent(in) :: rho,drho,ddrho,zeta,dzeta,ddzeta,r - real(dp), intent(out) :: vxc(2),exc - real(dp) :: z,dz,rs,alfa,gg,t,u,v,w,vc(2),rho1,rho2,drho1,drho2,ec - real(dp) :: ddrho1,ddrho2,rs1,rs2,s1,s2,u1,u2,eps,t1,t2,ex(2),vx(2) - integer :: igga,idft - - igga=xcnr - - if(abs(rho).lt.1.d-14)then - vxc(1)=0.0d0 - vxc(2)=0.0d0 - exc=0.0d0 - return - endif + !> numerical integration abcissas + real(dp), intent(in) :: abcissa(:) - ! FROM BURKEs FORTRAN REFERENCE SOURCE - ! - ! Now do correlation - ! zet=(up-dn)/rho - ! g=phi(zeta) - ! rs=(3/(4pi*rho))^(1/3)=local Seitz radius=alpha/fk - ! sk=Ks=Thomas-Fermi screening wavevector=sqrt(4fk/pi) - ! twoksg=2*Ks*phi - ! t=correlation dimensionless gradient=|grad rho|/(2*Ks*phi*rho) - ! uu=delgrad/(rho^2*twoksg^3) - ! rholap=Laplacian - ! vv=Laplacian/(rho*twoksg^2) - ! ww=(|grad up|^2-|grad dn|^2-zet*|grad rho|^2)/(rho*twoksg)^2 - ! ec=lsd correlation energy - ! vcup=lsd up correlation potential - ! vcdn=lsd down correlation potential - ! h=gradient correction to correlation energy - ! dvcup=gradient correction to up correlation potential - ! dvcdn=gradient correction to down correlation potential - - alfa=(4.d0/(9.d0*pi))**(1.d0/3.d0) - - eps=1.d0-1.0d-12 - z=zeta/rho - if(z.ge. eps) z= eps - if(z.le.-eps) z=-eps - dz=(dzeta*rho-zeta*drho)/rho**2 - - rs=(4.d0*pi*rho/3.d0)**(-1.d0/3.d0) - gg=((1+z)**(2.d0/3.d0)+(1-z)**(2.d0/3.d0))/2.d0 - t=dabs(drho)/rho*dsqrt(pi/4.d0*alfa*rs)/(2.d0*gg) - u=dabs(drho)*ddrho/(rho**2)*(dsqrt(pi/4.d0*alfa*rs)/(2.d0*gg))**3 - v=(ddrho+2.d0/r*drho)/rho * (dsqrt(pi/4.d0*alfa*rs)/(2.d0*gg))**2 - w=drho*dz/rho*(dsqrt(pi/4.d0*alfa*rs)/(2.d0*gg))**2 - call correlation(rs,z,t,u,v,w,igga,ec,vc(1),vc(2)) - - ! rho1=up electron desnity - rho1 =(rho+zeta)/2.d0 - - ! rho2=down electron desnity - rho2 =(rho-zeta)/2.d0 - - ! derivatives - drho1 =(drho+dzeta)/2.d0 - drho2 =(drho-dzeta)/2.d0 - ddrho1=(ddrho+ddzeta)/2.d0 - ddrho2=(ddrho-ddzeta)/2.d0 - - ! FROM BURKEs FORTRAN REFERENCE SOURCE - ! - ! PBE exchange - ! use Ex[up,dn]=0.5*(Ex[2*up]+Ex[2*dn]) (i.e., exact spin-scaling) - ! do up exchange - ! fk=local Fermi wavevector for 2*up=(3 pi^2 (2up))^(1/3) - ! s=dimensionless density gradient=|grad rho|/ (2*fk*rho)_(rho=2*up) - ! u=delgrad/(rho^2*(2*fk)**3)_(rho=2*up) - ! v=Laplacian/(rho*(2*fk)**2)_(rho=2*up) - ! - ! Wigner-Seitz Radii of up (rs1) and down (rs2) electrons - ! - ! actually this should be rs=((4*pi*rho)/3)**(-1/3) - ! but s is calculated correctly later compared to Burkes comments + !> xc potential on grid + real(dp), intent(in) :: vxc(:,:) - rs1=(8.d0*pi*rho1/3.d0)**(-1.d0/3.d0) - rs2=(8.d0*pi*rho2/3.d0)**(-1.d0/3.d0) + !> basis exponent of 1st basis + real(dp), intent(in) :: alpha1 - ! alfa=(4.d0/(9.d0*pi))**(1.d0/3.d0) + !> highest polynomial order in 1st basis shell + integer, intent(in) :: poly1 - s1=dabs(drho1)*(alfa*rs1/2.d0)/rho1 - s2=dabs(drho2)*(alfa*rs2/2.d0)/rho2 - u1=dabs(drho1)*ddrho1/(rho1**2)*(alfa*rs1/2.d0)**3 - u2=dabs(drho2)*ddrho2/(rho2**2)*(alfa*rs2/2.d0)**3 - t1=(ddrho1+2.d0/r*drho1)/rho1*(alfa*rs1/2.d0)**2 - t2=(ddrho2+2.d0/r*drho2)/rho2*(alfa*rs2/2.d0)**2 + !> basis exponent of 2nd basis + real(dp), intent(in) :: alpha2 - ! - ! use 2.d0*rho1 and 2.d0*rho2 because of spin scaling, see Burkes comment - ! - call exchange(2.d0*rho1,s1,u1,t1,igga,ex(1),vx(1)) - call exchange(2.d0*rho2,s2,u2,t2,igga,ex(2),vx(2)) + !> highest polynomial order in 2nd basis shell + integer, intent(in) :: poly2 - exc=0.5d0*((1.d0+z)*ex(1)+(1.d0-z)*ex(2))+ec + !> angular momentum + integer, intent(in) :: ll - vxc(1)=vx(1)+vc(1) - vxc(2)=vx(2)+vc(2) + !> single matrix element of the exchange correlation potential + real(dp), intent(out) :: exc_matrixelement(2) - end subroutine pbe_driver + !> stores product of two basis functions and r^2 + real(dp) :: basis - SUBROUTINE CORRELATION(RS,ZET,T,UU,VV,WW,igga,ec,vc1,vc2) + !> auxiliary variable + integer :: ii - ! - ! APART FROM COSMETICS THIS IS IN FACT BURKEs FORTRAN REFERENCE IMPLEMENTATION - ! + exc_matrixelement(:) = 0.0_dp - ! This is the PBE and PW-LDA Correlation routine. - - IMPLICIT REAL*8 (A-H,O-Z) - !---------------------------------------------------------------------- - ! INPUT: RS=SEITZ RADIUS=(3/4pi rho)^(1/3) - ! : ZET=RELATIVE SPIN POLARIZATION = (rhoup-rhodn)/rho - ! : t=ABS(GRAD rho)/(rho*2.*KS*G) -- only needed for PBE - ! : UU=(GRAD rho)*GRAD(ABS(GRAD rho))/(rho**2 * (2*KS*G)**3) - ! : VV=(LAPLACIAN rho)/(rho * (2*KS*G)**2) - ! : WW=(GRAD rho)*(GRAD ZET)/(rho * (2*KS*G)**2 - ! : UU,VV,WW, only needed for PBE potential - ! : igga=flag to do gga (0=>LSD only) - ! output: ecl=lsd correlation energy from [a] - ! : ecn=NONLOCAL PART OF CORRELATION ENERGY PER ELECTRON - ! : vcup=lsd up correlation potential - ! : vcdn=lsd dn correlation potential - ! : dvcup=nonlocal correction to vcup - ! : dvcdn=nonlocal correction to vcdn - !---------------------------------------------------------------------- - ! References: - ! [a] J.P.~Perdew, K.~Burke, and M.~Ernzerhof, - ! {\sl Generalized gradient approximation made simple}, sub. - ! to Phys. Rev.Lett. May 1996. - ! [b] J. P. Perdew, K. Burke, and Y. Wang, {\sl Real-space cutoff - ! construction of a generalized gradient approximation: The PW91 - ! density functional}, submitted to Phys. Rev. B, Feb. 1996. - ! [c] J. P. Perdew and Y. Wang, Phys. Rev. B {\bf 45}, 13244 (1992). - !---------------------------------------------------------------------- - ! bet=coefficient in gradient expansion for correlation, [a](4). - integer :: igga - parameter(thrd=1.d0/3.d0,thrdm=-thrd,thrd2=2.d0*thrd) - parameter(GAM=0.5198420997897463295344212145565d0) - parameter(thrd4=4.d0*thrd, fzz=8.d0/(9.d0*GAM)) - parameter(gamma=0.03109069086965489503494086371273d0) - parameter(bet=0.06672455060314922d0,delt=bet/gamma) - dimension u(6),p(6),s(6) - data u/ 0.03109070D0, 0.2137000D0, 7.5957000D0,& - & 3.58760000D0, 1.6382000D0, 0.4929400D0/ - data p/ 0.01554535D0, 0.2054800D0,14.1189000D0,& - & 6.19770000D0, 3.3662000D0, 0.6251700D0/ - data s/ 0.01688690D0, 0.1112500D0,10.3570000D0,& - & 3.62310000D0, 0.8802600D0, 0.4967100D0/ - !---------------------------------------------------------------------- - ! find LSD energy contributions, using [c](10) . - ! EU=unpolarized LSD correlation energy , EURS=dEU/drs - ! EP=fully polarized LSD correlation energy , EPRS=dEP/drs - ! ALFM=-spin stiffness, [c](3) , ALFRSM=-dalpha/drs . - ! F=spin-scaling factor from [c](9). - ! construct ecl, using [c](8) . - ! + do ii = 1, num_mesh_points + basis = basis_times_basis_times_r2(alpha1, poly1, alpha2, poly2, ll, abcissa(ii)) - rtrs=dsqrt(rs) - Q0 = -2.D0*u(1)*(1.D0+u(2)*rtrs*rtrs) - Q1 = 2.D0*u(1)*rtrs*(u(3)+rtrs*(u(4)+rtrs*(u(5)+u(6)*rtrs))) - Q2 = DLOG(1.D0+1.D0/Q1) - Q3 = u(1)*(u(3)/rtrs+2.D0*u(4)+rtrs*(3.D0*u(5)+4.D0*u(6)*rtrs)) - EU = Q0*Q2 - EURS = -2.D0*u(1)*u(2)*Q2-Q0*Q3/(Q1*(1.d0+Q1)) - Q0 = -2.D0*p(1)*(1.D0+p(2)*rtrs*rtrs) - Q1 = 2.D0*p(1)*rtrs*(p(3)+rtrs*(p(4)+rtrs*(p(5)+p(6)*rtrs))) - Q2 = DLOG(1.D0+1.D0/Q1) - Q3 = p(1)*(p(3)/rtrs+2.D0*p(4)+rtrs*(3.D0*p(5)+4.D0*p(6)*rtrs)) - EP = Q0*Q2 - EPRS = -2.D0*p(1)*p(2)*Q2-Q0*Q3/(Q1*(1.d0+Q1)) - Q0 = -2.D0*s(1)*(1.D0+s(2)*rtrs*rtrs) - Q1 = 2.D0*s(1)*rtrs*(s(3)+rtrs*(s(4)+rtrs*(s(5)+s(6)*rtrs))) - Q2 = DLOG(1.D0+1.D0/Q1) - Q3 = s(1)*(s(3)/rtrs+2.D0*s(4)+rtrs*(3.D0*s(5)+4.D0*s(6)*rtrs)) - ALFM = Q0*Q2 - ALFRSM = -2.D0*s(1)*s(2)*Q2-Q0*Q3/(Q1*(1.d0+Q1)) - - Z4 = ZET**4 - F=((1.D0+ZET)**THRD4+(1.D0-ZET)**THRD4-2.D0)/GAM - ECL= EU*(1.D0-F*Z4)+EP*F*Z4-ALFM*F*(1.D0-Z4)/FZZ - !---------------------------------------------------------------------- - ! LSD potential from [c](A1) - ! ECRS = dEc/drs , ECZET=dEc/dzeta , FZ = dF/dzeta [c](A2-A4) - ! - ECRS = EURS*(1.D0-F*Z4)+EPRS*F*Z4-ALFRSM*F*(1.D0-Z4)/FZZ - FZ = THRD4*((1.D0+ZET)**THRD-(1.D0-ZET)**THRD)/GAM - ECZET = 4.D0*(ZET**3)*F*(EP-EU+ALFM/FZZ)& - & +FZ*(Z4*EP-Z4*EU-(1.D0-Z4)*ALFM/FZZ) - COMM = ECL -RS*ECRS/3.D0-ZET*ECZET - VCUP = COMM + ECZET - VCDN = COMM - ECZET - if(igga.eq.0)then - EC=ECL - VC1=VCUP - VC2=VCDN - return - endif - !---------------------------------------------------------------------- - ! PBE correlation energy - ! G=phi(zeta), given after [a](3) - ! DELT=bet/gamma , B=A of [a](8) - ! - G=((1.d0+ZET)**thrd2+(1.d0-ZET)**thrd2)/2.d0 - G3 = G**3 - PON=-ECL/(G3*gamma) - B = DELT/(DEXP(PON)-1.D0) - B2 = B*B - T2 = T*T - T4 = T2*T2 - Q4 = 1.D0+B*T2 - Q5 = 1.D0+B*T2+B2*T4 - ECN= G3*(BET/DELT)*DLOG(1.D0+DELT*Q4*T2/Q5) - EC = ECL + ECN - !---------------------------------------------------------------------- - ! ENERGY DONE. NOW THE POTENTIAL, using appendix E of [b]. - ! - G4 = G3*G - T6 = T4*T2 - RSTHRD = RS/3.D0 - ! GZ=((1.d0+zet)**thirdm-(1.d0-zet)**thirdm)/3.d0 - ! ckoe: hack thirdm never gets defined, but 1-1 should be zero anyway - GZ=0.0d0 - FAC = DELT/B+1.D0 - BG = -3.D0*B2*ECL*FAC/(BET*G4) - BEC = B2*FAC/(BET*G3) - Q8 = Q5*Q5+DELT*Q4*Q5*T2 - Q9 = 1.D0+2.D0*B*T2 - hB = -BET*G3*B*T6*(2.D0+B*T2)/Q8 - hRS = -RSTHRD*hB*BEC*ECRS - FACT0 = 2.D0*DELT-6.D0*B - FACT1 = Q5*Q9+Q4*Q9*Q9 - hBT = 2.D0*BET*G3*T4*((Q4*Q5*FACT0-DELT*FACT1)/Q8)/Q8 - hRST = RSTHRD*T2*hBT*BEC*ECRS - hZ = 3.D0*GZ*ecn/G + hB*(BG*GZ+BEC*ECZET) - hT = 2.d0*BET*G3*Q9/Q8 - hZT = 3.D0*GZ*hT/G+hBT*(BG*GZ+BEC*ECZET) - FACT2 = Q4*Q5+B*T2*(Q4*Q9+Q5) - FACT3 = 2.D0*B*Q5*Q9+DELT*FACT2 - hTT = 4.D0*BET*G3*T*(2.D0*B/Q8-(Q9*FACT3/Q8)/Q8) - COMM = ECN+HRS+HRST+T2*HT/6.D0+7.D0*T2*T*HTT/6.D0 - PREF = HZ-GZ*T2*HT/G - FACT5 = GZ*(2.D0*HT+T*HTT)/G - COMM = COMM-PREF*ZET-UU*HTT-VV*HT-WW*(HZT-FACT5) - DVCUP = COMM + PREF - DVCDN = COMM - PREF - VC1 = VCUP + DVCUP - VC2 = VCDN + DVCDN - ! print*,'c igga is',dvcup - - END subroutine correlation - - subroutine exchange(rho,s,u,t,igga,EX,VX) - - ! APART FROM COSMETICS THIS IS IN FACT BURKEs FORTRAN REFERENCE IMPLEMENTATION - - ! This is the PBE and PW-LDA Exchange routine. - - implicit integer*4 (i-n) - implicit real*8 (a-h,o-z) - - parameter(thrd=1.d0/3.d0,thrd4=4.d0/3.d0) - parameter(pi=3.14159265358979323846264338327950d0) - parameter(ax=-0.738558766382022405884230032680836d0) - - parameter(um=0.21951d0,uk=0.8040d0,ul=um/uk) - - parameter(ap=1.647127d0,bp=0.980118d0,cp=0.017399d0) - parameter(aq=1.523671d0,bq=0.367229d0,cq=0.011282d0) - parameter(ah=0.19645d0,bh=7.7956d0) - parameter(ahp=0.27430d0,bhp=0.15084d0,ahq=0.004d0) - parameter(a1=0.19645d0,a2=0.27430d0,a3=0.15084d0,a4=100.d0) - parameter(a=7.79560d0,b1=0.004d0,eps=1.d-15) - - !---------------------------------------------------------------------- - !---------------------------------------------------------------------- - ! GGA EXCHANGE FOR A SPIN-UNPOLARIZED ELECTRONIC SYSTEM - !---------------------------------------------------------------------- - ! INPUT rho : DENSITY - ! INPUT S: ABS(GRAD rho)/(2*KF*rho), where kf=(3 pi^2 rho)^(1/3) - ! INPUT U: (GRAD rho)*GRAD(ABS(GRAD rho))/(rho**2 * (2*KF)**3) - ! INPUT V: (LAPLACIAN rho)/(rho*(2*KF)**2) (for U,V, see PW86(24)) - ! input igga: (=0=>don't put in gradient corrections, just LDA) - ! OUTPUT: EXCHANGE ENERGY PER ELECTRON (LOCAL: EXL, NONLOCAL: EXN, - ! TOTAL: EX) AND POTENTIAL (VX) - !---------------------------------------------------------------------- - ! References: - ! [a]J.P.~Perdew, K.~Burke, and M.~Ernzerhof, submiited to PRL, May96 - ! [b]J.P. Perdew and Y. Wang, Phys. Rev. B {\bf 33}, 8800 (1986); - ! {\bf 40}, 3399 (1989) (E). - !---------------------------------------------------------------------- - ! Formulas: e_x[unif]=ax*rho^(4/3) [LDA] - ! ax = -0.75*(3/pi)^(1/3) - ! e_x[PBE]=e_x[unif]*FxPBE(s) - ! FxPBE(s)=1+uk-uk/(1+ul*s*s) [a](13) - ! uk, ul defined after [a](13) - !---------------------------------------------------------------------- - !---------------------------------------------------------------------- - ! construct LDA exchange energy density - - exunif = ax*rho**thrd - if((igga.eq.0).or.(s.lt.eps))then - EXL=exunif - EXN=0.d0 - EX=EXL+EXN - VX= exunif*thrd4 - return - endif - !---------------------------------------------------------------------- - ! construct GGA enhancement factor - ! find first and second derivatives of f and: - ! fs=(1/s)*df/ds and fss=dfs/ds = (d2f/ds2 - (1/s)*df/ds)/s + exc_matrixelement(1) = exc_matrixelement(1) - weight(ii) * vxc(ii, 1) * basis + exc_matrixelement(2) = exc_matrixelement(2) - weight(ii) * vxc(ii, 2) * basis + end do - ! - ! PBE enhancement factors checked against NRLMOL - ! - if(igga.eq.1)then - p0 =1.d0+ul*s**2 - f =1.d0+uk-uk/p0 - fs =2.d0*uk*ul/p0**2 - fss=-4.d0*ul*s*fs/p0 - endif + end subroutine dft_exc_matrixelement - ! - EXL= exunif - EXN= exunif*(f-1.0d0) - EX = EXL+EXN - !---------------------------------------------------------------------- - ! energy done. calculate potential from [b](24) - ! - VX = exunif*(thrd4*f-(u-thrd4*s**3)*fss-t*fs ) - ! print*,'e igga is',igga,vx,xunif*thrd4 + !> Calculates Xalpha potential and energy density. + !! + !! alpha=2/3 recovers the Gaspar/Kohn/Sham functional commonly used as exchange part in most + !! current LSDA and GGA functionals. The original Slater exchange is recoverd with alpha=1. + subroutine xalpha(rhotot, rhodiff, vxc, exc, xalpha_const) + !> total density on grid (spins summed up) + real(dp), intent(in) :: rhotot - END subroutine exchange + !> difference between spin densities + real(dp), intent(in) :: rhodiff - subroutine check_accuracy(weight,abcissa,num_mesh_points,max_l,& - &num_alpha,alpha,poly_order) + !> Xalpha energy density and potential + real(dp), intent(out) :: exc, vxc(2) - ! Test integration to check the accuracy of the radial mesh by - ! integrating the square of a primitive Slater basis function which are - ! analytically normalized to 1.0d0 ! + !> exchange parameter for X-Alpha exchange + real(dp), intent(in) :: xalpha_const - real(dp), intent(in) :: weight(:),abcissa(:),alpha(0:,:) - integer, intent(in) :: num_mesh_points,max_l,num_alpha(0:),poly_order(0:) - real(dp) :: value - integer :: ii,jj,kk,ll + !> auxiliary variables + real(dp) :: third, fourthird, vfac, cx, fzeta, dfzeta, eps0, eps1, spinpart, zeta - do ii=0,max_l - do jj=1,num_alpha(ii) - do kk=1,poly_order(ii) - value=0.0d0 - do ll=1,num_mesh_points + third = 1.0_dp / 3.0_dp + fourthird = 4.0_dp / 3.0_dp + vfac = 2.0_dp**third + cx = 0.75_dp * (3.0_dp / pi)**third - value=value+weight(ll)*abcissa(ll)**2*& - &basis(alpha(ii,jj),kk,ii,abcissa(ll))**2 + if (abs(rhotot) < 1.0d-12) then + exc = 0.0_dp + vxc(:) = 0.0_dp + return + end if - end do - if (abs(1.0d0-value)>1.0d-12) then - write(*,'(A,F12.6,I3,E12.3)') 'WARNING: Integration bad for basis & - &function ',alpha(ii,jj),kk+ii-1,abs(1.0d0-value) - write(*,'(A)') 'Accuracy is not better than 1.0d-12' - end if - end do - end do - end do + zeta = rhodiff / rhotot - end subroutine check_accuracy + if (abs(zeta) > 1.0d12) write(*,*) 'ZETA LARGE IN X-ALPHA' + fzeta = ((1.0_dp + zeta)**fourthird + (1.0_dp - zeta)**fourthird - 2.0_dp)& + & / (2.0_dp * (vfac - 1.0_dp)) + dfzeta = fourthird * ((1.0_dp + zeta)**third - (1.0_dp - zeta)**third)& + & / (2.0_dp * (vfac - 1.0_dp)) - subroutine radial_divergence(ff, rr, dr, rdiv, jacobi) - real(dp), intent(in) :: ff(:) - real(dp), intent(in) :: rr(:) - real(dp), intent(in) :: dr - real(dp), intent(out) :: rdiv(:) - real(dp), intent(in), optional :: jacobi(:) + eps0 = -3.0_dp / 2.0_dp * xalpha_const * cx * rhotot**third + eps1 = vfac * eps0 - call derive1_5(ff, dr, rdiv, jacobi) - rdiv = rdiv + 2.0_dp / rr * ff + exc = eps0 + (eps1 - eps0) * fzeta - end subroutine radial_divergence + spinpart = (eps1 - eps0) * dfzeta * (1.0_dp - zeta) + vxc(1) = fourthird * exc + spinpart + vxc(2) = fourthird * exc - spinpart - subroutine derive(ff, dx, jacobi) - real(dp), intent(inout) :: ff(:) - real(dp), intent(in) :: dx - real(dp), intent(in), optional :: jacobi(:) + end subroutine xalpha - real(dp), allocatable :: tmp1(:) - integer :: nn - nn = size(ff) - allocate(tmp1(nn)) - tmp1(:) = ff - ff(2:nn-1) = (ff(3:nn) - ff(1:nn-2)) / (2.0 * dx) - ff(1) = (tmp1(2) - tmp1(1)) / dx - ff(nn) = (tmp1(nn) - tmp1(nn-1)) / dx - if (present(jacobi)) then - ff = ff * jacobi - end if + !> Tests integration to check the accuracy of the radial mesh by integrating the square of a + !! primitive Slater basis function which are analytically normalized to 1.0_dp. + subroutine check_accuracy(weight, abcissa, num_mesh_points, max_l, num_alpha, alpha, poly_order) - end subroutine derive - - - subroutine derive1_5(ff, dx, dfdx, dudx) - real(dp), intent(in) :: ff(:) - real(dp), intent(in) :: dx - real(dp), intent(out) :: dfdx(:) - real(dp), intent(in), optional :: dudx(:) - - integer, parameter :: np = 5 - integer, parameter :: nleft = np / 2 - integer, parameter :: nright = nleft - integer, parameter :: imiddle = nleft + 1 - real(dp), parameter :: dxprefac = 12.0_dp - real(dp), parameter :: coeffs(np, np) = & - reshape([ & - &-25.0_dp, 48.0_dp, -36.0_dp, 16.0_dp, -3.0_dp, & - & -3.0_dp, -10.0_dp, 18.0_dp, -6.0_dp, 1.0_dp, & - & 1.0_dp, -8.0_dp, 0.0_dp, 8.0_dp, -1.0_dp, & - & -1.0_dp, 6.0_dp, -18.0_dp, 10.0_dp, 3.0_dp, & - & 3.0_dp, -16.0_dp, 36.0_dp, -48.0_dp, 25.0_dp ], [ np, np ]) - - integer :: ngrid - integer :: ii + !> numerical integration weights + real(dp), intent(in) :: weight(:) - ngrid = size(ff) - do ii = 1, nleft - dfdx(ii) = dot_product(coeffs(:,ii), ff(1:np)) - end do - do ii = nleft + 1, ngrid - nright - dfdx(ii) = dot_product(coeffs(:,imiddle), ff(ii-nleft:ii+nright)) - end do - do ii = ngrid - nright + 1, ngrid - dfdx(ii) = dot_product(coeffs(:,np-(ngrid-ii)), ff(ngrid-np+1:ngrid)) - end do + !> numerical integration abcissas + real(dp), intent(in) :: abcissa(:) - if (present(dudx)) then - dfdx = dfdx * (dudx / (dxprefac * dx)) - else - dfdx = dfdx / (dxprefac * dx) - end if + !> number of numerical integration points + integer, intent(in) :: num_mesh_points - end subroutine derive1_5 + !> maximum angular momentum + integer, intent(in) :: max_l + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) + !> basis exponents + real(dp), intent(in) :: alpha(0:,:) - subroutine derive2_5(ff, dx, d2fdx2, dudx, d2udx2, dfdx) - real(dp), intent(in) :: ff(:) - real(dp), intent(in) :: dx - real(dp), intent(out) :: d2fdx2(:) - real(dp), intent(in), optional :: dudx(:), d2udx2(:) - real(dp), intent(out), target, optional :: dfdx(:) + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) - integer, parameter :: np = 5 - integer, parameter :: nleft = np / 2 - integer, parameter :: nright = nleft - integer, parameter :: imiddle = nleft + 1 - real(dp), parameter :: dxprefac = 12.0_dp - real(dp), parameter :: coeffs(np, np) = & - reshape([ & - & 35.0_dp, -104.0_dp, 114.0_dp, -56.0_dp, 11.0_dp, & - & 11.0_dp, -20.0_dp, 6.0_dp, 4.0_dp, -1.0_dp, & - & -1.0_dp, 16.0_dp, -30.0_dp, 16.0_dp, -1.0_dp, & - & -1.0_dp, 4.0_dp, 6.0_dp, -20.0_dp, 11.0_dp, & - & 11.0_dp, -56.0_dp, 114.0_dp, -104.0_dp, 35.0_dp ], [ np, np ]) + !> integrated primitive Slater basis function + real(dp) :: value - integer :: ngrid - integer :: ii - real(dp), allocatable, target :: dfdxlocal(:) - real(dp), pointer :: pdfdx(:) - - ngrid = size(ff) - if (present(dfdx)) then - pdfdx => dfdx - elseif (present(d2udx2)) then - allocate(dfdxlocal(ngrid)) - pdfdx => dfdxlocal - end if + !> auxiliary variables + integer :: ii, jj, kk, ll - do ii = 1, nleft - d2fdx2(ii) = dot_product(coeffs(:,ii), ff(1:np)) - end do - do ii = nleft + 1, ngrid - nright - d2fdx2(ii) = dot_product(coeffs(:,imiddle), ff(ii-nleft:ii+nright)) - end do - do ii = ngrid - nright + 1, ngrid - d2fdx2(ii) = dot_product(coeffs(:,np-(ngrid-ii)), ff(ngrid-np+1:ngrid)) - end do + do ii = 0, max_l + do jj = 1, num_alpha(ii) + do kk = 1, poly_order(ii) + value = 0.0_dp + do ll = 1, num_mesh_points - if (present(dudx)) then - d2fdx2 = d2fdx2 * (dudx * dudx / (dxprefac * dx * dx)) - else - d2fdx2 = d2fdx2 / (dxprefac * dx * dx) - end if + value = value + weight(ll) * abcissa(ll)**2& + & * basis(alpha(ii, jj), kk, ii, abcissa(ll))**2 - if (present(d2udx2) .or. present(dfdx)) then - call derive1_5(ff, dx, pdfdx) - if (present(d2udx2)) then - d2fdx2 = d2fdx2 + pdfdx * d2udx2 - end if - if (present(dfdx) .and. present(dudx)) then - dfdx = dfdx * dudx - end if - end if + end do + if (abs(1.0_dp - value) > 1.0d-12) then + write(*, '(A,F12.6,I3,E12.3)') 'WARNING: Integration bad for basis function ',& + & alpha(ii, jj), kk + ii - 1, abs(1.0_dp - value) + write(*, '(A)') 'Accuracy is not better than 1.0d-12' + end if + end do + end do + end do - end subroutine derive2_5 - - - ! subroutine grad_test(p,max_l,num_alpha,poly_order,alpha,num_mesh_points,& - ! &abcissa,xcnr,rho,drho,ddrho,vxc,exc) - ! - ! implicit none - ! - ! real(dp), intent(in) :: p(:,0:,:,:),abcissa(:),alpha(0:,:) - ! integer, intent(in) :: max_l,num_alpha(0:),poly_order(0:),num_mesh_points - ! integer, intent(in) :: xcnr - ! real(dp), intent(out) :: rho(:,:),drho(:,:),ddrho(:,:),vxc(:,:),exc(:) - ! real(dp) :: rhotot,rhodiff,drhotot,ddrhotot - ! integer :: ii,jj,kk,ll,mm,nn,oo - ! - ! do ii=1,500 - ! - ! rho(1,ii)=density_at_point(p(1,:,:,:),max_l,num_alpha,poly_order,alpha,& - ! &0.01d0*ii) - ! rho(2,ii)=density_at_point(p(2,:,:,:),max_l,num_alpha,poly_order,alpha,& - ! &0.01d0*ii) - ! - ! drho(1,ii)=density_at_point_1st(p(1,:,:,:),max_l,num_alpha,poly_order,& - ! &alpha,0.01d0*ii) - ! drho(2,ii)=density_at_point_1st(p(2,:,:,:),max_l,num_alpha,poly_order,& - ! &alpha,0.01d0*ii) - ! - ! ddrho(1,ii)=density_at_point_2nd(p(1,:,:,:),max_l,num_alpha,poly_order,& - ! &alpha,0.01d0*ii) - ! ddrho(2,ii)=density_at_point_2nd(p(2,:,:,:),max_l,num_alpha,poly_order,& - ! &alpha,0.01d0*ii) - ! - ! write(*,'(F12.4,3F20.8)') ii*0.01d0,rho(1,ii),drho(1,ii),ddrho(1,ii) - ! end do - ! STOP - ! - ! end subroutine grad_test + end subroutine check_accuracy end module dft diff --git a/slateratom/lib/diagonalizations.f90 b/slateratom/lib/diagonalizations.f90 index 7493e0b8..2fd4a10a 100644 --- a/slateratom/lib/diagonalizations.f90 +++ b/slateratom/lib/diagonalizations.f90 @@ -1,896 +1,130 @@ +!> Module that provides routines for matrix diagonalization. module diagonalizations use common_accuracy, only : dp + use common_eigensolver, only : heev, hegv implicit none private public :: diagonalize_overlap, diagonalize - contains - subroutine diagonalize_overlap(max_l,num_alpha,poly_order,s) +contains -! Diagonalize overlap matrix to check for linear dependency of basis -! set. Implicitely ewevge is called, but with a unit matrix instead of -! a real overlap. + !> Diagonalizes overlap matrix to check for linear dependency of basis set. + !! Implicitely LAPACK's dsyev is called. + subroutine diagonalize_overlap(max_l, num_alpha, poly_order, ss) - integer, intent(in) :: max_l,num_alpha(0:),poly_order(0:) - real(dp), intent(in) :: s(0:,:,:) - real(dp), allocatable :: temp1(:,:),temp2(:),dummy2(:,:),dummy1(:) - integer :: ii,jj,diagsize,kk,ll,ier + !> maximum angular momentum + integer, intent(in) :: max_l - do jj=0,max_l + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) - diagsize=num_alpha(jj)*poly_order(jj) + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) - allocate(temp1(diagsize,diagsize)) - allocate(temp2(diagsize)) - allocate(dummy2(diagsize,diagsize)) - allocate(dummy1(diagsize)) - temp1=0.0d0 - temp2=0.0d0 - dummy1=0.0d0 - dummy2=0.0d0 + !> overlap supervector + real(dp), intent(in) :: ss(0:, :,:) - do kk=1,diagsize - do ll=1,diagsize - temp1(kk,ll)=s(jj,kk,ll) - end do - dummy2(kk,kk)=1.0d0 - end do + !! overlap matrices + real(dp), allocatable :: overlap(:,:) - call ewevge(diagsize,diagsize,diagsize,& - &temp1,dummy2,temp2,dummy1,1,-1,ier) - - if (ier /= 0) then - write(*,*) 'Error in Diagonalization',ier - STOP - end if - - write(*,'(A,I3,A,E16.8)') 'Smallest eigenvalue of overlap for l= ',jj,& - &' : ',temp2(1) - - if (temp2(1)<1.0d-10) then - write(*,'(A)') ' ' - write(*,'(A)') 'Basis set is nearly linear dependent, reduction necessary' - write(*,'(A)') ' ' - STOP - end if - - deallocate(temp1) - deallocate(temp2) - deallocate(dummy2) - deallocate(dummy1) - - end do - write(*,*) ' ' + !! eigenvalues of overlap matrices + real(dp), allocatable :: eigenvalues(:) - end subroutine diagonalize_overlap + !> auxiliary variables + integer :: ll, diagsize - subroutine diagonalize(max_l,num_alpha,poly_order,f,s,cof_neu,eigval) - -! This is a driver for ewevge. The idea is that the matrices -! are allocated in the main program for the maximum size of the problem -! but ewevge is only fed with a matrix of the current size of the -! eigenproblem. - - integer, intent(in) :: max_l,num_alpha(0:),poly_order(0:) - real(dp), intent(in) :: f(:,0:,:,:),s(0:,:,:) - real(dp) :: cof_neu(:,0:,:,:),eigval(:,0:,:) - real(dp), allocatable :: temp1(:,:),temp2(:),dummy2(:,:),dummy1(:) - integer :: ii,jj,diagsize,kk,ll,ier - - do ii=1,2 - do jj=0,max_l - - diagsize=num_alpha(jj)*poly_order(jj) - - allocate(temp1(diagsize,diagsize)) - allocate(temp2(diagsize)) - allocate(dummy2(diagsize,diagsize)) - allocate(dummy1(4*diagsize)) - temp1=0.0d0 - temp2=0.0d0 - dummy1=0.0d0 - dummy2=0.0d0 - - do kk=1,diagsize - do ll=1,diagsize - temp1(kk,ll)=f(ii,jj,kk,ll) - dummy2(kk,ll)=s(jj,kk,ll) - end do - end do + do ll = 0, max_l - call ewevge(diagsize,diagsize,diagsize,& - &temp1,dummy2,temp2,dummy1,1,-1,ier) + diagsize = num_alpha(ll) * poly_order(ll) - if (ier /= 0) then - write(*,*) 'Error in Diagonalization',ier - STOP - end if + allocate(eigenvalues(diagsize)) + eigenvalues(:) = 0.0_dp - do kk=1,diagsize - do ll=1,diagsize - cof_neu(ii,jj,kk,ll)=temp1(kk,ll) - end do - eigval(ii,jj,kk)=temp2(kk) - end do + overlap = ss(ll, :,:) + + call heev(overlap, eigenvalues, 'U', 'N') + + write(*, '(A,I3,A,E16.8)') 'Smallest eigenvalue of overlap for l= ', ll, ' : ', eigenvalues(1) + + if (eigenvalues(1) < 1.0e-10_dp) then + write(*, '(A)') ' ' + write(*, '(A)') 'Basis set is nearly linear dependent, reduction necessary' + write(*, '(A)') ' ' + stop + end if - deallocate(temp1) - deallocate(temp2) - deallocate(dummy2) - deallocate(dummy1) + deallocate(overlap, eigenvalues) end do - end do + write(*,*) ' ' - end subroutine diagonalize + end subroutine diagonalize_overlap + + + !> This is a driver for hegv. The idea is that the matrices are allocated in the main program + !! for the maximum size of the problem but hegv is only fed with a matrix of the current size of + !! the eigenproblem. + subroutine diagonalize(max_l, num_alpha, poly_order, ff, ss, cof_new, eigval) + + !> maximum angular momentum + integer, intent(in) :: max_l + + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) + + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) + + !> fock matrix supervector + real(dp), intent(in) :: ff(:, 0:, :,:) + !> overlap supervector + real(dp), intent(in) :: ss(0:, :,:) -! -! ********************************************************************** -! -! This is a collection of subroutines designated to solve the real*8 -! general symmetric eigenvalue problem with or without eigenvectors. -! The routines have been taken from different freeware FORTRAN -! libraries and optimized by hand (or eye ?! ;-)). Most of the -! optimizations have been done with respect to stride minimization -! for the innermost loops of the subroutines. Problems with -! bugs, roaches and other lifestock please report to -! -! Dirk Porezag porezag@physik.tu-chemnitz.de -! -! or to your nearest pest control agency (I doubt they will help). -! Have fun !! -! -! Copyright for this file by Dirk Porezag -! Washington, DC, Janurary 8th, 1995 -! -! Modifications with some fortran90 features by ckoe -! -! ********************************************************************** -! -! SUBROUTINE EWEVGE -! ================= -! -! ********************************************************************** -! -! Evevge calculates eigenvalues and eigenvectors of the general -! symmetric eigenvalue problem. -! -! Method: * A*C = E*S*C -! * Choleski decomposition S = R'*R -! * A*C = E*R'*R*C -> INV(R')*A*C = E*R*C -! * Transformation Y = R*C -> C = INV(R)*Y -! * Solve INV(R')*A*INV(R)*Y = E*Y (Householder + IQL) -! * Back transformation C = INV(R)*Y -! * Sorting of eigenvalues and eigenvectors -! -! Parameters: -! -! NA (I) : Dimension of A -! NB (I) : Dimension of B -! N (I) : Dimension of Problem -! A (I) : Matrix A (lower triangle) -! (O) : Eigenvector matrix -! B (I) : Matrix B (lower triangle) -! (O) : R where B = R'*R (upper triangle) -! EW (O) : Eigenvalues -! H (-) : Auxiliary vector -! IEV (I) : 0: No eigenvectors -! IORD (I) : 1: Descending order of eigenvalues -! -1: Ascending order of eigenvalues -! otherwise: no sorting -! IER (O) : Error indication -! 0: No error -! K: (K <= N) B is not positive definite -! K: (K > N) Convergence failure for eigenvalue -! (K-N), (K-N-1) eigenvalues are correct -! -! ********************************************************************** -! - SUBROUTINE EWEVGE (NA,NB,N,A,B,EW,H,IEV,IORD,IER) - use common_accuracy, only : dp - IMPLICIT NONE - integer, intent(in) :: NA,NB,N - integer, intent(in) :: iev,iord - integer :: IER,ii,i,j - real(dp) :: a,b,ew,h,eps -! IMPLICIT REAL*8 (A-H,O-Z) - DIMENSION A(NA,N),B(NB,N),EW(N),H(N) -! -! do i=1,n -! do j=1,n -! write(*,*) 'we',i,j,a(i,j),b(i,j) -! end do -! end do - IER = 0 - EPS = 0.0_dp - CALL CHOLES(N,B,NB,IER) - IF (IER .NE. 0) RETURN - CALL MATRAF(N,A,NA,B,NB,H) - CALL TRIDIA(NA,N,EW,H,A,IEV) - CALL IQLDIA(NA,N,EW,H,A,IEV,IER) - IF (IER .GT. 0) IER = IER+N - IF (IER .NE. 0) RETURN - IF (IEV .NE. 0) CALL BACKTR(N,N,B,NB,A,NA,A,NA,H) - II = 0 - IF (IEV .NE. 0) II = 1 - CALL SORTVC(NA,N,N,EW,A,IORD,II,H) - RETURN - END SUBROUTINE EWEVGE -! -! ****************************************************************** -! -! SUBROUTINE CHOLES -! ================= -! -! ****************************************************************** -! -! Choles calculates the Choleski decomposition B = R' * R of B -! into an upper triangle matrix R for the symmetric positive -! definite Matrix B. The elements of the main diagonal are -! stored inverted. -! -! Parameters: -! -! N (I) : Dimension of problem -! B (I) : Matrix B (lower triangle) -! (O) : Matrix R (upper triangle), inverted main diagonal -! NB (I) : Dimension of B -! ICHO (I) : ICHO - 1 is the dimension of the submatrix that -! is available as Choleski decomposition ( < 1 = 1) -! (O) : Row number where decomposition failed (0 if success) -! -! ****************************************************************** -! - SUBROUTINE CHOLES (N,B,NB,ICHO) - use common_accuracy, only : dp - IMPLICIT NONE - integer :: N,NB,ICHO,i,ii,j,K,i1 - real(dp) :: B,d,s -! IMPLICIT REAL*8 (A-H,O-Z) - DIMENSION B(NB,N) -! - IF (ICHO .GT. N) GOTO 200 - IF (ICHO .LT. 1) ICHO = 1 - DO I = ICHO,N - I1 = I - 1 - DO J = I,N - S = B(J,I) - DO K = 1,I1 - S = S - B(K,I) * B(K,J) - END DO - IF (I .NE. J) GOTO 40 - IF (S .LE. 0.0_dp) GOTO 100 - S = 1.0_dp / SQRT(S) - D = S - GOTO 60 - 40 S = S * D - 60 B(I,J) = S - END DO - END DO - ICHO = 0 - GOTO 200 - 100 ICHO = I - 200 RETURN - END SUBROUTINE CHOLES -! -! ****************************************************************** -! -! SUBROUTINE MATRAF -! ================= -! -! ****************************************************************** -! -! Matraf calculates out of the symmetric matrix A and the -! upper triangular matrix R the product INV(R') * A * INV(R), -! where the main diagonal of R is given inverted. -! -! Parameters: -! -! N (I) : Dimension of problem -! A (I) : Matrix A (lower triangle) -! (O) : Transformed matrix (lower triangle) -! NA (I) : Dimension of A -! B (I) : Matrix R (upper triangle), inverted main diagonal -! NB (I) : Dimension of B -! -! ********************************************************************* -! - SUBROUTINE MATRAF (N,A,NA,B,NB,H) - use common_accuracy, only : dp - IMPLICIT NONE - integer :: N,NA,NB,i,j,ii,k,i1 - real(dp) :: A,B,H,s,d -! IMPLICIT REAL*8 (A-H,O-Z) - DIMENSION A(NA,N),B(NB,N),H(N) -! -! FILL MATRIX -! - DO I = 1,N - DO J = I+1,N - A(I,J) = A(J,I) - END DO - END DO -! -! CALCULATION OF A = INV(R') * A -! - DO I = 1,N - I1 = I-1 - D = B(I,I) - DO J = 1,N - S = A(I,J) - DO K = 1,I1 - S = S - B(K,I) * A(K,J) - END DO - A(I,J) = S * D - END DO - END DO -! -! CALCULATION OF A = A * INV(R) (USE BUFFER FOR STRIDE OPTIMIZATION) -! - DO I = 1,N - I1 = I-1 - D = B(I,I) - DO J = I,N - H(J) = A(J,I) - END DO - DO K = 1,I1 - S = B(K,I) - DO J = I,N - H(J) = H(J) - S * A(J,K) - END DO - END DO - DO J = I,N - A(J,I) = H(J) * D - END DO - END DO - RETURN - END SUBROUTINE MATRAF -! -! ****************************************************************** -! -! SUBROUTINE TRIDIA -! ================= -! -! ****************************************************************** -! -! Tridiagonalization of a given symmetric matrix A using Householder -! -! Parameters: -! -! NM (I) : Dimension of A -! N (I) : Dimension of problem -! D (O) : Diagonal of tridiagonal matrix -! E (O) : Subdiagonal of tridiagonal matrix (E(1) = 0.0) -! A (I) : Matrix A (lower triangle) -! (O) : Transformation Matrix -! IEV (I) : 0: No eigenvectors -! -! ****************************************************************** -! - SUBROUTINE TRIDIA (NM,N,D,E,A,IEV) - use common_accuracy, only : dp - IMPLICIT NONE - integer :: NM,N,iev,i,j,ii,K,JP1,L - real(dp) :: A,D,E,H,HH,G,F,scale -! IMPLICIT REAL*8 (A-H,O-Z) - DIMENSION A(NM,N),D(N),E(N) -! - DO I = 1,N - D(I) = A(N,I) - END DO - IF (N .EQ. 1) GOTO 510 -! -! FOR I = N STEP -1 UNTIL 2 DO -! - DO II = 2,N - I = N + 2 - II - L = I - 1 - H = 0.0_dp - SCALE = 0.0_dp - IF (L .LT. 2) GOTO 130 -! -! SCALE ROW -! - DO K = 1,L - SCALE = SCALE + ABS(D(K)) - END DO -! - IF (SCALE .NE. 0.0_dp) GOTO 140 - 130 E(I) = D(L) - DO J = 1,L - D(J) = A(L,J) - A(I,J) = 0.0_dp - A(J,I) = 0.0_dp - END DO - GOTO 290 -! - 140 DO K = 1,L - D(K) = D(K) / SCALE - H = H + D(K) * D(K) - END DO - F = D(L) - G = -SIGN(SQRT(H),F) - E(I) = SCALE * G - H = H - F * G - D(L) = F - G -! -! FORM A * U -! - DO J = 1,L - E(J) = 0.0_dp - END DO - DO J = 1,L - F = D(J) - A(J,I) = F - G = E(J) + A(J,J) * F - JP1 = J + 1 - DO K = JP1,L - G = G + A(K,J) * D(K) - E(K) = E(K) + A(K,J) * F - END DO - E(J) = G - END DO -! -! FORM P -! - F = 0.0_dp - DO J = 1,L - E(J) = E(J) / H - F = F + E(J) * D(J) - END DO - HH = F / (H + H) -! -! FORM Q -! - DO J = 1,L - E(J) = E(J) - HH * D(J) - END DO -! -! FORM REDUCED A -! - DO J = 1,L - F = D(J) - G = E(J) - DO K = J,L - A(K,J) = A(K,J) - F * E(K) - G * D(K) - END DO - D(J) = A(L,J) - A(I,J) = 0.0_dp - END DO -! -! DONE WITH THIS TRANSFORMATION -! - 290 D(I) = H - END DO -! -! ACCUMULATION OF TRANSFORMATION MATRICES -! - IF (IEV .EQ. 0) GOTO 600 - DO I = 2,N - L = I - 1 - A(N,L) = A(L,L) - A(L,L) = 1.0_dp - H = D(I) - IF (H .EQ. 0.0_dp) GOTO 380 - DO K = 1,L - D(K) = A(K,I) / H - END DO - DO J = 1,L - G = 0.0_dp - DO K = 1,L - G = G + A(K,I) * A(K,J) - END DO - DO K = 1,L - A(K,J) = A(K,J) - G * D(K) - END DO - END DO -! - 380 DO K = 1,L - A(K,I) = 0.0_dp - END DO - END DO - 510 DO I = 1,N - D(I) = A(N,I) - A(N,I) = 0.0_dp - END DO - GOTO 700 -! -! DEAL WITH EIGENVALUES ONLY -! - 600 DO I = 1,N - D(I) = A(I,I) - END DO -! - 700 A(N,N) = 1.0_dp - E(1) = 0.0_dp - RETURN - END SUBROUTINE TRIDIA -! -! ****************************************************************** -! -! SUBROUTINE IQLDIA -! ================= -! -! ****************************************************************** -! -! Iqldia calculates eigenvalues and eigenvectors of a tridiagonal -! matrix using the QL algorithm with implicit shifting. -! -! Parameters: -! -! NM (I) : Dimension of Z -! N (I) : Dimension of the problem -! D (I) : Diagonal of tridiagonal matrix -! (O) : Eigenvalues -! E (I) : Subdiagonal of tridiagonal matrix -! Z (I) : Transformation matrix -! (O) : Eigenvectors according to Z -! IEV (I) : 0: No eigenvectors -! IER (O) : Error indication -! 0: no error -! K: Convergence failure for the eigenvalue -! number k, k-1 eigenvalues are correct -! -! ********************************************************************** -! - SUBROUTINE IQLDIA (NM,N,D,E,Z,IEV,IER) - use common_accuracy, only : dp - IMPLICIT NONE - integer :: NM,N,iev,ier,i,j,ii,k,M,L,MM1,KK,MML - real(dp) :: E,Z,D,DD,P,G,R,S,T,PSI,PSJ,F,B,C,anorm - real(dp) :: big,eps4,eps,epss -! IMPLICIT REAL*8 (A-H,O-Z) - DIMENSION D(N),E(N),Z(NM,N) -! - IER = 0 - IF (N .EQ. 1) RETURN -! -! GET MACHINE EPSILON AND BIG -! - EPS = 1.0e-2_dp - 10 IF ((1.0_dp + EPS) .EQ. 1.0_dp) GOTO 20 - EPS = 0.5_dp * EPS - GOTO 10 - 20 EPS = 2.0_dp * EPS - EPSS = SQRT(EPS) - EPS4 = EPS * 1.0e-4_dp - BIG = 1.0_dp/EPS4 -! - ANORM = 0.0_dp - R = 0.0_dp - DO I = 2, N - S = E(I) - E(I-1) = S - S = ABS(S) - P = ABS(D(I-1)) + R + S - IF (P .GT. ANORM) ANORM = P - R = S - END DO - P = ABS(D(N)) + R - IF (P .GT. ANORM) ANORM = P - E(N) = 0.0_dp - DO 250 L = 1, N - J = 0 -! -! LOOK FOR SMALL SUBDIAGONAL ELEMENT -! - 50 DO M = L, N-1 - DD = ABS(D(M)) + ABS(D(M+1)) - IF (ABS(E(M)) .LE. (EPS * DD)) GOTO 70 - IF (ABS(E(M)) .LE. (EPS4 * ANORM)) GOTO 70 - END DO - M = N - 70 P = D(L) - MM1 = M - 1 - IF (M .EQ. L) GOTO 250 - IF (J .EQ. 30) GOTO 900 - J = J + 1 -! -! FORM SHIFT. THIS IS A SLIGHTLY ADVANCED FORM OF SHIFTING MAKING -! THE ROUTINE ABOUT 20 PERCENT FASTER THAN THE USUAL STUFF. -! - G = (D(L+1) - P) / (2.0_dp * E(L)) - R = SQRT (G * G + 1.0_dp) - S = P - E(L) / (G + SIGN (R, G)) - IF (M .EQ. L+1) GOTO 120 - T = S - R = MAX(ABS(S),(ANORM / N)) - DO I = 1, 6 - PSI = D(M) - T - PSJ = -1.0_dp - DO 90 KK = L, MM1 - K = L + MM1 - KK - IF (ABS(PSI) .GE. (EPS * ABS(E(K)))) GOTO 80 - PSI = BIG - PSJ = BIG * BIG - GOTO 90 - 80 P = E(K) / PSI - PSI = D(K) - T - P * E(K) - PSJ = P * P * PSJ - 1.0_dp - 90 CONTINUE - IF (ABS(PSJ) .LE. EPS4) GOTO 120 - P = PSI / PSJ - C = P - IF (ABS(P) .GT. (0.5_dp * R)) C = SIGN(R,P) - T = T - C - IF (ABS(P) .LE. (EPSS * R)) GOTO 110 - END DO - GOTO 120 - 110 S = T - 120 G = D(M) - S - S = 1.0_dp - C = 1.0_dp - P = 0.0_dp - MML = M - L -! -! FOR I = M - 1 STEP -1 UNTIL L DO -! - DO 200 II = 1, MML - I = M - II - F = S * E(I) - B = C * E(I) -! -! SAFE CALCULATION OF SQRT(G * G + F * F) AND SIMILAR STUFF -! - IF (ABS(F) .LT. ABS(G)) GOTO 150 - C = G / F - R = SQRT(1.0_dp + C * C) - E(I+1) = F * R - S = 1.0_dp / R - C = C * S - GOTO 160 - 150 S = F / G - R = SQRT (1.0_dp + S * S) - E(I+1) = G * R - C = 1.0_dp / R - S = S * C - 160 G = D(I+1) - P - R = (D(I) - G) * S + 2.0_dp * C * B - P = S * R - D(I+1) = G + P - G = C * R - B - IF (IEV .EQ. 0) GOTO 200 -! -! FORM VECTOR -! - DO K = 1,N - F = Z(K,I+1) - B = Z(K,I) - Z(K,I+1) = S * B + C * F - Z(K,I) = C * B - S * F - END DO - 200 CONTINUE - D(L) = D(L) - P - E(L) = G - E(M) = 0.0_dp - GOTO 50 - 250 CONTINUE - RETURN - 900 IER = L - RETURN - END SUBROUTINE IQLDIA -! -! ****************************************************************** -! -! This is another version of Iqldia using a less sophisticated -! shifting algorithm. It is much simpler but 20 percent slower. -! -! ****************************************************************** -! -! SUBROUTINE IQLDIA (NM,N,D,E,Z,IEV,IER) -! IMPLICIT REAL*8 (A-H,O-Z) -! DIMENSION D(N),E(N),Z(NM,N) -! -! IER = 0 -! IF (N .EQ. 1) RETURN -! DO 10 I = 2, N -! E(I-1) = E(I) -! 10 CONTINUE -! E(N) = 0.0d0 -! DO 250 L = 1, N -! ITER = 0 -! -! LOOK FOR SMALL SUBDIAGONAL ELEMENT -! -! 100 DO 110 M = L, N-1 -! DD = ABS(D(M)) + ABS(D(M+1)) -! IF ((ABS(E(M)) + DD) .EQ. DD) GOTO 120 -! 110 CONTINUE -! M = N -! 120 IF (M .EQ. L) GOTO 250 -! IF (ITER .EQ. 30) GOTO 900 -! ITER = ITER + 1 -! -! FORM SHIFT -! -! G = (D(L+1) - D(L)) / (2.0 * E(L)) -! R = SQRT (G * G + 1.0) -! G = D(M) - D(L) + E(L) / (G + SIGN(R,G)) -! S = 1.0 -! C = 1.0 -! P = 0.0 -! -! FOR I = M - 1 STEP -1 UNTIL L DO -! -! DO 200 II = 1, M-L -! I = M - II -! F = S * E(I) -! B = C * E(I) -! -! SAFE CALCULATION OF SQRT(G * G + F * F) AND SIMILAR STUFF -! -! IF (ABS(F) .LT. ABS(G)) GOTO 150 -! C = G / F -! R = SQRT(1.0 + C * C) -! E(I+1) = F * R -! S = 1.0 / R -! C = C * S -! GOTO 160 -! 150 S = F / G -! R = SQRT (1.0d0 + S * S) -! E(I+1) = G * R -! C = 1.0d0 / R -! S = S * C -! 160 G = D(I+1) - P -! R = (D(I) - G) * S + 2.0d0 * C * B -! P = S * R -! D(I+1) = G + P -! G = C * R - B -! IF (IEV .EQ. 0) GOTO 200 -! -! FORM VECTOR -! -! DO 180 K = 1, N -! F = Z(K,I+1) -! Z(K,I+1) = S * Z(K,I) + C * F -! Z(K,I) = C * Z(K,I) - S * F -! 180 CONTINUE -! 200 CONTINUE -! D(L) = D(L) - P -! E(L) = G -! E(M) = 0.0d0 -! GOTO 100 -! 250 CONTINUE -! RETURN -! 900 IER = L -! RETURN -! END -! -! ****************************************************************** -! -! SUBROUTINE BACKTR -! ================= -! -! ****************************************************************** -! -! Backtr solves the system R * X = Y (R upper triangular matrix), -! where the main diagonal of R is given inverted. -! -! Parameters: -! N (I) : Dimension of problem -! M (I) : Number of columns in X and Y -! R (I) : Matrix R (upper triangle) -! NR (I) : Dimension of R -! X (O) : Matrix X (solution of system) -! NX (I) : Dimension of X -! Y (I) : Matrix Y (right side) -! NY (I) : Dimension of Y -! H (I) : Auxiliary vector -! -! ********************************************************************** -! - SUBROUTINE BACKTR(N,M,R,NR,X,NX,Y,NY,H) - use common_accuracy, only : dp - IMPLICIT NONE - integer :: N,M,NR,NX,NY,i,j,ii,I1,K - real(dp) :: R,X,Y,H,D,S -! IMPLICIT REAL*8 (A-H,O-Z) - DIMENSION R(NR,N),X(NX,M),Y(NY,M),H(N) -! -! CALCULATION OF X = INV(R) * Y -! - DO II = 1,N - I = N + 1 - II - I1 = I + 1 - D = R(I,I) - DO J= I,N - H(J)= R(I,J) - END DO - DO J = 1,M - S = Y(I,J) - DO K = I1,N - S = S - H(K) * X(K,J) - END DO - X(I,J) = S * D - END DO - END DO - RETURN - END SUBROUTINE BACKTR -! -! ****************************************************************** -! -! SUBROUTINE SORTVC -! ================= -! -! ****************************************************************** -! -! Sortvc sorts D and (if required) E and the columns of Q. -! -! Prameters: -! -! NM (I) : Dimension of Q -! N (I) : Dimension of problem (size of one vector in Q) -! NQ (I) : Number of elements in D (or columns in Q) -! D (I) : Vector to sort -! (O) : Sorted vector -! Q (I) : Matrix to sort (vectors in columns) -! (O) : Sorted matrix (vectors in columns) -! M (I) : 1: Descending order in D -! -1: Ascending order in D -! otherwise: no sorting -! IEV (I) : 0: No sorting of Q and E -! 1: Sorting of Q, no sorting of E -! 2: Sorting of Q and E -! E (I) : Additional Vector to sort -! (O) : Sorted additional vector -! -! ********************************************************************** -! - SUBROUTINE SORTVC (NM,N,NQ,D,Q,M,IEV,E) - use common_accuracy, only : dp - IMPLICIT NONE - integer :: NM,M,NQ,IEV,i,j,ii,KK,K,N - real(dp) :: D,Q,E,H,S -! IMPLICIT REAL*8 (A-H,O-Z) - LOGICAL LMIN,LMAX - DIMENSION D(NQ),E(NQ),Q(NM,NQ) -! - IF (NQ .LT. 2) RETURN - LMAX = (M .EQ. 1) - LMIN = (M .EQ. -1) - IF (.NOT. (LMAX .OR. LMIN)) RETURN - DO 40 KK = 2,NQ - K = KK - 1 - J = K - H = D(K) -! -! FIND EXTREMUM -! - DO 10 I = KK,NQ - S = D(I) - IF (LMIN .AND. (S .GE. H)) GOTO 10 - IF (LMAX .AND. (S .LE. H)) GOTO 10 - J = I - H = S - 10 CONTINUE - IF (J .EQ. K) GOTO 40 -! -! SORT D -! - D(J) = D(K) - D(K) = H - IF (IEV .EQ. 0) GOTO 40 -! -! SORT Q -! - DO I = 1,N - H = Q(I,K) - Q(I,K) = Q(I,J) - Q(I,J) = H - END DO - IF (IEV .LT. 2) GOTO 40 -! -! SORT E -! - H = E(K) - E(K) = E(J) - E(J) = H - 40 CONTINUE - RETURN - END SUBROUTINE SORTVC + !> new wavefunction coefficients + real(dp), intent(inout) :: cof_new(:, 0:, :,:) + + !> eigenvalues + real(dp), intent(inout) :: eigval(:, 0:, :) + + !! fock matrices + real(dp), allocatable :: fock(:,:) + + !! overlap matrices + real(dp), allocatable :: overlap(:,:) + + !! eigenvalues of overlap matrices + real(dp), allocatable :: eigenvalues(:) + + !! auxiliary variables + integer :: iSpin, ll, diagsize + + do iSpin = 1, 2 + do ll = 0, max_l + + diagsize = num_alpha(ll) * poly_order(ll) + + allocate(eigenvalues(diagsize)) + eigenvalues(:) = 0.0_dp + + fock = ff(iSpin, ll, :,:) + overlap = ss(ll, :,:) + + call hegv(fock, overlap, eigenvalues, 'U', 'V', itype=1) + + ! fock matrix overwritten by eigenvectors + cof_new(iSpin, ll, :,:) = fock + eigval(iSpin, ll, :) = eigenvalues + + deallocate(fock, overlap, eigenvalues) + + end do + end do + + end subroutine diagonalize end module diagonalizations diff --git a/slateratom/lib/globals.f90 b/slateratom/lib/globals.f90 index 196152dc..acd2970c 100644 --- a/slateratom/lib/globals.f90 +++ b/slateratom/lib/globals.f90 @@ -1,125 +1,235 @@ +!> Module that defines all global variables of the project. module globals use common_accuracy, only : dp implicit none - real(dp) :: conf_r0(0:4) ! confinement radius - integer :: conf_power(0:4) ! power of confinement - real(dp) :: alpha(0:4,10) ! exponents - integer :: occ_shells(0:4) ! number of occupied shells - integer :: num_alpha(0:4) ! number of exponents in each shell - integer :: poly_order(0:4) ! highest polynomial order + l in each shell - integer :: nuc ! nuclear charge - integer :: max_l ! maximum angular momentum - integer :: maxiter ! maximum number of SCF calculations - logical :: generate_alpha ! generate alphas automatically - logical :: eigprint ! print eigenvectors to stdout - real(dp) :: min_alpha ! smallest exponent if generate_alpha - real(dp) :: max_alpha ! largest exponent if generate_alpha - integer :: num_occ ! maximal occupied shell - integer :: num_power ! maximum number of coefficients - integer :: num_alphas ! maximum number of exponents - real(dp), allocatable :: occ(:,:,:) ! occupation numbers - - real(dp), allocatable :: s(:,:,:) ! overlap supervector - real(dp), allocatable :: u(:,:,:) ! nucleus-electron supervector - real(dp), allocatable :: t(:,:,:) ! kinetic supervector - real(dp), allocatable :: vconf(:,:,:) ! confinement supervector - - real(dp), allocatable :: j(:,:,:,:,:,:) ! coulomb supermatrix - real(dp), allocatable :: k(:,:,:,:,:,:) ! (hf) exchange supermatrix - - real(dp), allocatable :: cof(:,:,:,:) ! wavefunction coefficients - real(dp) :: change_max ! relative changes during scf - real(dp), allocatable :: p(:,:,:,:) ! density matrix supervector - - real(dp), allocatable :: f(:,:,:,:) ! fock matrix supervector - real(dp), allocatable :: pot_new(:,:,:,:) ! potential matrix supervector - real(dp), allocatable :: pot_old(:,:,:,:) ! potential matrix supervector - - real(dp), allocatable :: eigval(:,:,:) ! eigenvalues - real(dp), allocatable :: eigval_scaled(:,:,:) ! zora scaled eigenvalues - - real(dp) :: total_ene,kinetic_energy,nuclear_energy,conf_energy - real(dp) :: coulomb_energy,exchange_energy - - integer :: xcnr ! switch exchange-correlation - real(dp) :: xalpha_const ! exchange parameter for X-Alpha exchange - - integer :: num_mesh_points ! number of numerical integration points - real(dp), allocatable :: weight(:) ! numerical integration weights - real(dp), allocatable :: abcissa(:) ! numerical integration abcissas - real(dp), allocatable :: dzdr(:) ! dz/dr - real(dp), allocatable :: d2zdr2(:) ! d2z/dr2 - real(dp) :: dz ! step width in linear coordinates - real(dp), allocatable :: rho(:,:) ! density on grid - real(dp), allocatable :: drho(:,:) ! 1st deriv. of density on grid - real(dp), allocatable :: ddrho(:,:) ! 2nd deriv. of density on grid - real(dp), allocatable :: vxc(:,:) ! xc potential on grid - real(dp), allocatable :: exc(:) ! exc energy density on grid - - logical :: zora,final - - logical :: broyden ! switch broyden/simplemix - real(dp) :: mixing_factor ! mixing factor - real(dp) :: zora_ekin ! zora kinetic energy contribution to total energy + !> confinement radii + real(dp) :: conf_r0(0:4) + !> power of confinement + real(dp) :: conf_power(0:4) + + !> basis exponents + real(dp) :: alpha(0:4, 10) + + !> number of occupied shells + integer :: occ_shells(0:4) + + !> number of exponents in each shell + integer :: num_alpha(0:4) + + !> highest polynomial order + l in each shell + integer :: poly_order(0:4) + + !> nuclear charge, i.e. atomic number + integer :: nuc + + !> maximum angular momentum + integer :: max_l + + !> maximum number of SCF calculations + integer :: maxiter + + !> scf tolerance, i.e. convergence criteria + real(dp) :: scftol + + !> smallest exponent if generate_alpha + real(dp) :: min_alpha + + !> largest exponent if generate_alpha + real(dp) :: max_alpha + + !> maximal occupied shell + integer :: num_occ + + !> maximum number of coefficients + integer :: num_power + + !> maximum number of exponents + integer :: num_alphas + + !> occupation numbers + real(dp), allocatable :: occ(:,:,:) + + !> overlap supervector + real(dp), allocatable :: ss(:,:,:) + + !> nucleus-electron supervector + real(dp), allocatable :: uu(:,:,:) + + !> kinetic supervector + real(dp), allocatable :: tt(:,:,:) + + !> confinement supervector + real(dp), allocatable :: vconf(:,:,:) + + !> coulomb supermatrix + real(dp), allocatable :: jj(:,:,:,:,:,:) + + !> (hf) exchange supermatrix + real(dp), allocatable :: kk(:,:,:,:,:,:) + + !> (hf) exchange supermatrix (long-range, range-separated version) + real(dp), allocatable :: kk_lr(:,:,:,:,:,:) + + !> wavefunction coefficients + real(dp), allocatable :: cof(:,:,:,:) + + !> relative changes during scf + real(dp) :: change_max + + !> density matrix supervector + real(dp), allocatable :: pp(:,:,:,:) + + !> fock matrix supervector + real(dp), allocatable :: ff(:,:,:,:) + + !> potential matrix supervectors + real(dp), allocatable :: pot_new(:,:,:,:), pot_old(:,:,:,:) + + !> eigenvalues + real(dp), allocatable :: eigval(:,:,:) + + !> zora scaled eigenvalues + real(dp), allocatable :: eigval_scaled(:,:,:) + + !> total energy + real(dp) :: total_ene + + !> kinetic energy + real(dp) :: kinetic_energy + + !> nuclear energy + real(dp) :: nuclear_energy + + !> confinement energy + real(dp) :: conf_energy + + !> coulomb energy + real(dp) :: coulomb_energy + + !> exchange energy + real(dp) :: exchange_energy + + !> identifier of exchange-correlation type + integer :: xcnr + + !> exchange parameter for X-Alpha exchange + real(dp) :: xalpha_const + + !> number of numerical integration points + integer :: num_mesh_points + + !> numerical integration weights + real(dp), allocatable :: weight(:) + + !> numerical integration abcissas + real(dp), allocatable :: abcissa(:) + + !> dz/dr + real(dp), allocatable :: dzdr(:) + + !> d2z/dr2 + real(dp), allocatable :: d2zdr2(:) + + !> step width in linear coordinates + real(dp) :: dz + + !> density on grid + real(dp), allocatable :: rho(:,:) + + !> 1st deriv. of density on grid + real(dp), allocatable :: drho(:,:) + + !> 2nd deriv. of density on grid + real(dp), allocatable :: ddrho(:,:) + + !> xc potential on grid + real(dp), allocatable :: vxc(:,:) + + !> exc energy density on grid + real(dp), allocatable :: exc(:) + + !> generate alphas automatically + logical :: tAutoAlphas + + !> print eigenvectors to stdout + logical :: tPrintEigvecs + + !> true, if zero-order regular approximation for relativistic effects is desired + logical :: tZora + + !> true, if SCF cycle reached convergency + logical :: tConverged + + !> true, if Broyden mixing is desired, otherwise simple mixing is applied + logical :: tBroyden + + !> mixing factor + real(dp) :: mixing_factor + + !> zora kinetic energy contribution to total energy + real(dp) :: zora_ekin + + !> maximum size of the eigenproblem integer :: problemsize -contains - subroutine allocate_globals +contains - ! Allocate all the variables in the globals module + !> Allocates all the variables in the globals module. + subroutine allocate_globals() allocate(weight(num_mesh_points)) allocate(abcissa(num_mesh_points)) allocate(dzdr(num_mesh_points)) allocate(d2zdr2(num_mesh_points)) - allocate(rho(num_mesh_points,2)) - allocate(drho(num_mesh_points,2)) - allocate(ddrho(num_mesh_points,2)) + allocate(rho(num_mesh_points, 2)) + allocate(drho(num_mesh_points, 2)) + allocate(ddrho(num_mesh_points, 2)) allocate(exc(num_mesh_points)) - allocate(vxc(num_mesh_points,2)) + allocate(vxc(num_mesh_points, 2)) + + allocate(ss(0:max_l, problemsize, problemsize)) + write(*, '(A,I0,A)') 'Size of one Supervectors is ', size(ss), ' double precision elements' + + allocate(uu(0:max_l, problemsize, problemsize)) + allocate(tt(0:max_l, problemsize, problemsize)) + allocate(vconf(0:max_l, problemsize, problemsize)) + allocate(ff(2, 0:max_l, problemsize, problemsize)) + allocate(pot_old(2, 0:max_l, problemsize, problemsize)) + allocate(pot_new(2, 0:max_l, problemsize, problemsize)) - allocate(s(0:max_l,problemsize,problemsize)) - allocate(u(0:max_l,problemsize,problemsize)) - allocate(t(0:max_l,problemsize,problemsize)) - allocate(vconf(0:max_l,problemsize,problemsize)) - allocate(f(2,0:max_l,problemsize,problemsize)) - allocate(pot_old(2,0:max_l,problemsize,problemsize)) - allocate(pot_new(2,0:max_l,problemsize,problemsize)) - write(*,'(A,I0,A)') 'Size of one Supervectors is ',size(s),' & - &double precision elements' + allocate(eigval(2, 0:max_l, problemsize)) + allocate(eigval_scaled(2, 0:max_l, problemsize)) - allocate(eigval(2,0:max_l,problemsize)) - allocate(eigval_scaled(2,0:max_l,problemsize)) + allocate(jj(0:max_l, problemsize, problemsize, 0:max_l, problemsize, problemsize)) + write(*, '(A,I0,A)') 'Size of one Supermatrix is ', size(jj), ' double precision elements' - allocate(j(0:max_l,problemsize,problemsize,0:max_l,problemsize,problemsize)) - allocate(k(0:max_l,problemsize,problemsize,0:max_l,problemsize,problemsize)) - write(*,'(A,I0,A)') 'Size of one Supermatrix is ',size(j),' & - &double precision elements' + allocate(kk(0:max_l, problemsize, problemsize, 0:max_l, problemsize, problemsize)) + allocate(kk_lr(0:max_l, problemsize, problemsize, 0:max_l, problemsize, problemsize)) - write(*,'(A,I3)') 'MAXIMUM SIZE OF EIGENPROBLEM IS ',problemsize - write(*,'(A)') ' ' + write(*, '(A,I3)') 'MAXIMUM SIZE OF EIGENPROBLEM IS ', problemsize + write(*, '(A)') ' ' ! first index reserved for spin ! fourth index of cof is the eigenvalue index, see densmatrix build - allocate(cof(2,0:max_l,problemsize,problemsize)) - allocate(p(2,0:max_l,problemsize,problemsize)) + allocate(cof(2, 0:max_l, problemsize, problemsize)) + allocate(pp(2, 0:max_l, problemsize, problemsize)) - weight=0.0d0 - abcissa=0.0d0 - rho=0.0d0 - drho=0.0d0 - ddrho=0.0d0 + weight(:) = 0.0_dp + abcissa(:) = 0.0_dp + rho(:,:) = 0.0_dp + drho(:,:) = 0.0_dp + ddrho(:,:) = 0.0_dp - eigval=0.0d0 - eigval_scaled=0.0d0 + eigval(:,:,:) = 0.0_dp + eigval_scaled(:,:,:) = 0.0_dp - cof=0.0d0 - p=0.0d0 + cof(:,:,:,:) = 0.0_dp + pp(:,:,:,:) = 0.0_dp end subroutine allocate_globals diff --git a/slateratom/lib/grid_differentiation_sign_1.txt b/slateratom/lib/grid_differentiation_sign_1.txt index 433a693d..33c0c17c 100644 --- a/slateratom/lib/grid_differentiation_sign_1.txt +++ b/slateratom/lib/grid_differentiation_sign_1.txt @@ -1,40 +1,38 @@ > r(z)=a*(1+cos(pi*z))/(1-cos(pi*z)); a (1 + cos(pi z)) r(z) = ----------------- - 1 - cos(pi z) + 1 - cos(pi z) > simplify(diff(a*(1+cos(pi*z))/(1-cos(pi*z)),z)); -> - 2 a sin(pi z) pi +> + 2 a sin(pi z) pi - ---------------------------- 2 - 1 - 2 cos(pi z) + cos(pi z) + 1 - 2 cos(pi z) + cos(pi z) > z(r)=1/pi*arccos((r-a)/(r+a)); /r - a\ arccos|-----| \r + a/ z(r) = ------------- - pi + pi > simplify(diff(1/pi*arccos((r-a)/(r+a)),r)); - a + a - --------------------------- (1/2) - 2 / r a \ - pi (r + a) |--------| - | 2| - \(r + a) / + 2 / r a \ + pi (r + a) |--------| + | 2| + \(r + a) / > simplify(diff(simplify(diff(a*(1+cos(pi*z))/(1-cos(pi*z)),z)),z)); - 2 - 2 (cos(pi z) + 2) a pi + 2 + 2 (cos(pi z) + 2) a pi ---------------------------- 2 - 1 - 2 cos(pi z) + cos(pi z) + 1 - 2 cos(pi z) + cos(pi z) > simplify(diff(diff(1/pi*arccos((r-a)/(r+a)),r),r)); - (a + 3 r) a + (a + 3 r) a ------------------------------- (1/2) - 3 / r a \ - 2 pi (r + a) r |--------| - | 2| - \(r + a) / - - + 3 / r a \ + 2 pi (r + a) r |--------| + | 2| + \(r + a) / diff --git a/slateratom/lib/grid_differentiation_sign_2.txt b/slateratom/lib/grid_differentiation_sign_2.txt index a1503f85..38666d3b 100644 --- a/slateratom/lib/grid_differentiation_sign_2.txt +++ b/slateratom/lib/grid_differentiation_sign_2.txt @@ -1,40 +1,38 @@ > r(z)=a*(1-cos(pi*z))/(1+cos(pi*z)); a (1 - cos(pi z)) r(z) = ----------------- - 1 + cos(pi z) + 1 + cos(pi z) > simplify(diff(a*(1-cos(pi*z))/(1+cos(pi*z)),z)); -> - 2 a sin(pi z) pi +> + 2 a sin(pi z) pi ---------------------------- 2 - 1 + 2 cos(pi z) + cos(pi z) + 1 + 2 cos(pi z) + cos(pi z) > z(r)=1/pi*arccos((a-r)/(r+a)); /-r + a\ arccos|------| \r + a / z(r) = -------------- - pi + pi > simplify(diff(1/pi*arccos((a-r)/(r+a)),r)); - a + a --------------------------- (1/2) - 2 / r a \ - pi (r + a) |--------| - | 2| - \(r + a) / + 2 / r a \ + pi (r + a) |--------| + | 2| + \(r + a) / > simplify(diff(simplify(diff(a*(1-cos(pi*z))/(1+cos(pi*z)),z)),z)); - 2 - 2 (cos(pi z) - 2) a pi + 2 + 2 (cos(pi z) - 2) a pi - ---------------------------- 2 - 1 + 2 cos(pi z) + cos(pi z) + 1 + 2 cos(pi z) + cos(pi z) > simplify(diff(diff(1/pi*arccos((a-r)/(r+a)),r),r)); - (a + 3 r) a + (a + 3 r) a - ------------------------------- (1/2) - 3 / r a \ - 2 pi (r + a) r |--------| - | 2| - \(r + a) / - - + 3 / r a \ + 2 pi (r + a) r |--------| + | 2| + \(r + a) / diff --git a/slateratom/lib/hamiltonian.f90 b/slateratom/lib/hamiltonian.f90 index 865921e3..fc088c8c 100644 --- a/slateratom/lib/hamiltonian.f90 +++ b/slateratom/lib/hamiltonian.f90 @@ -1,106 +1,213 @@ +!> Module that provides the functionality to build-up the HF-Hamiltonian. module hamiltonian use common_accuracy, only : dp - use common_constants - use dft - use broyden - use utilities - use zora_routines + use dft, only : dft_exc_matrixelement + use broyden, only : mixing_driver + use zora_routines, only : zora_t_correction + use xcfunctionals, only : xcFunctional implicit none private - public :: build_fock, build_coulomb_matrix + public :: build_hamiltonian, build_coulomb_matrix public :: build_hf_ex_matrix, build_dft_exc_matrix + contains - subroutine build_fock(iter,t,u,nuc,vconf,j,k,p,max_l,num_alpha,poly_order,& - &problemsize,xcnr,num_mesh_points,weight,abcissa,rho,vxc,alpha,pot_old,& - &pot_new,zora,broyden,mixing_factor,f) + !> Main driver routine for Fock matrix build-up. Also calls mixer with potential matrix. + subroutine build_hamiltonian(iScf, tt, uu, nuc, vconf, jj, kk, kk_lr, pp, max_l, num_alpha,& + & poly_order, problemsize, xcnr, num_mesh_points, weight, abcissa, vxc, alpha, pot_old,& + & pot_new, tZora, tBroyden, mixing_factor, ff, camAlpha, camBeta) + + !> current SCF step + integer, intent(in) :: iScf + + !> kinetic supervector + real(dp), intent(in) :: tt(0:,:,:) + + !> nucleus-electron supervector + real(dp), intent(in) :: uu(0:,:,:) - ! Main driver routine for Fock matrix build-up. Calls also mixer with - ! potential matrix. + !> nuclear charge, i.e. atomic number + integer, intent(in) :: nuc - real(dp), intent(in) :: t(0:,:,:),u(0:,:,:),j(0:,:,:,0:,:,:),k(0:,:,:,0:,:,:) + !> confinement supervector real(dp), intent(in) :: vconf(0:,:,:) - real(dp), intent(in) :: p(:,0:,:,:),weight(:),abcissa(:),alpha(0:,:),rho(:,:) - real(dp), intent(in) :: pot_old(:,0:,:,:),vxc(:,:),mixing_factor - real(dp), intent(out) :: f(:,0:,:,:),pot_new(:,0:,:,:) - integer, intent(in) :: max_l,num_alpha(0:),poly_order(0:),problemsize,nuc,xcnr - integer, intent(in) :: num_mesh_points,iter - logical, intent(in) :: zora,broyden - real(dp), allocatable :: j_matrix(:,:,:),k_matrix(:,:,:,:),p_total(:,:,:) - real(dp), allocatable :: t_zora(:,:,:,:) - integer :: ii,jj,kk,ll,mm,nn,oo,pp,qq,rr,ss,tt,uu,vv,ww,biter - - f=0.0d0 - - allocate(j_matrix(0:max_l,problemsize,problemsize)) - allocate(k_matrix(2,0:max_l,problemsize,problemsize)) - allocate(p_total(0:max_l,problemsize,problemsize)) - allocate(t_zora(2,0:max_l,problemsize,problemsize)) - p_total=0.0d0 - t_zora=0.0d0 - - ! form total densitymatrix supervector - do ii=0,max_l - do jj=1,problemsize - do kk=1,problemsize - p_total(ii,jj,kk)=p(1,ii,jj,kk)+p(2,ii,jj,kk) - end do - end do - end do - ! build coulomb and exchange potential matrices + !> coulomb supermatrix + real(dp), intent(in) :: jj(0:,:,:,0:,:,:) - call build_coulomb_matrix(j,p_total,max_l,num_alpha,poly_order,alpha,j_matrix) + !> (hf) exchange supermatrix + real(dp), intent(in) :: kk(0:,:,:,0:,:,:) - if (xcnr==0) then - call build_hf_ex_matrix(k,p,max_l,num_alpha,poly_order,alpha,k_matrix) - else - call build_dft_exc_matrix(max_l,num_alpha,poly_order,alpha,& - &num_mesh_points,abcissa,weight,rho,vxc,xcnr,k_matrix) - end if + !> (hf) exchange supermatrix (long-range, range-separated version) + real(dp), intent(in) :: kk_lr(0:,:,:,0:,:,:) - ! build mixer input + !> density matrix supervector + real(dp), intent(in) :: pp(:,0:,:,:) - pot_new(1,:,:,:)=-real(nuc,dp)*u(:,:,:)+j_matrix(:,:,:)-k_matrix(1,:,:,:) - pot_new(2,:,:,:)=-real(nuc,dp)*u(:,:,:)+j_matrix(:,:,:)-k_matrix(2,:,:,:) + !> maximum angular momentum + integer, intent(in) :: max_l + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) - ! mixer - biter=int((iter)/40) - call mixing_driver(pot_old,pot_new,max_l,num_alpha,& - &poly_order,problemsize,iter-biter*40,broyden,mixing_factor) + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) + + !> maximum size of the eigenproblem + integer, intent(in) :: problemsize + + !> identifier of exchange-correlation type + integer, intent(in) :: xcnr + + !> number of numerical integration points + integer, intent(in) :: num_mesh_points + + !> numerical integration weights + real(dp), intent(in) :: weight(:) + + !> numerical integration abcissas + real(dp), intent(in) :: abcissa(:) + + !> xc potential on grid + real(dp), intent(in) :: vxc(:,:) + + !> basis exponents + real(dp), intent(in) :: alpha(0:,:) + + !> old potential + real(dp), intent(in) :: pot_old(:,0:,:,:) + + !> new potential + real(dp), intent(out) :: pot_new(:,0:,:,:) + + !> true, if zero-order regular approximation for relativistic effects is desired + logical, intent(in) :: tZora + + !> true, if Broyden mixing is desired, otherwise simple mixing is applied + logical, intent(in) :: tBroyden + + !> mixing factor + real(dp), intent(in) :: mixing_factor + + !> fock matrix supervector + real(dp), intent(out) :: ff(:,0:,:,:) + + !> CAM alpha parameter + real(dp), intent(in) :: camAlpha + + !> CAM beta parameter + real(dp), intent(in) :: camBeta + + !> auxiliary matrices + real(dp), allocatable :: j_matrix(:,:,:), k_matrix(:,:,:,:), p_total(:,:,:), t_zora(:,:,:,:) + + !> auxiliary matrices for (CAM) hybrids + real(dp), allocatable :: k_matrix2(:,:,:,:), k_matrix3(:,:,:,:) + + !! auxiliary variables + integer :: ii, jjj, kkk, ll, mm, ss, ttt, iMix + + ff(:,:,:,:) = 0.0_dp + + allocate(j_matrix(0:max_l, problemsize, problemsize)) + allocate(k_matrix(2, 0:max_l, problemsize, problemsize)) + + ! additional k_matrix for (CAM) hybrids + allocate(k_matrix2(2, 0:max_l, problemsize, problemsize)) + allocate(k_matrix3(2, 0:max_l, problemsize, problemsize)) + + allocate(t_zora(2, 0:max_l, problemsize, problemsize)) + t_zora(:,:,:,:) = 0.0_dp -! Not sure: before or after mixer .... ? Potential .ne. Matrix elements -! Should be irrelevant once self-consistency is reached - if (zora) then + ! form total densitymatrix supervector from spin channels + allocate(p_total(0:max_l, problemsize, problemsize)) + p_total(:,:,:) = pp(1, :,:,:) + pp(2, :,:,:) - call zora_t_correction(1,t_zora,max_l,num_alpha,alpha,poly_order,& - &num_mesh_points,weight,abcissa,vxc,rho,nuc,p,problemsize) + ! build coulomb matrices + call build_coulomb_matrix(jj, p_total, max_l, num_alpha, poly_order, j_matrix) + ! build exchange(-correlation) potential matrices: + + ! pure Hartree-Fock + if (xcnr == xcFunctional%HF_Exchange) then + call build_hf_ex_matrix(kk, pp, max_l, num_alpha, poly_order, k_matrix) + end if + + ! pure DFT + if (xcFunctional%isLDA(xcnr) .or. xcFunctional%isGGA(xcnr)) then + call build_dft_exc_matrix(max_l, num_alpha, poly_order, alpha, num_mesh_points, abcissa,& + & weight, vxc, k_matrix) + end if + + ! HF - DFT hybrid + if (xcFunctional%isLongRangeCorrected(xcnr)) then + call build_hf_ex_matrix(kk_lr, pp, max_l, num_alpha, poly_order, k_matrix) + call build_dft_exc_matrix(max_l, num_alpha, poly_order, alpha, num_mesh_points, abcissa,& + & weight, vxc, k_matrix2) + k_matrix(:,:,:,:) = k_matrix + k_matrix2 + elseif (xcnr == xcFunctional%HYB_B3LYP) then + call build_hf_ex_matrix(kk, pp, max_l, num_alpha, poly_order, k_matrix) + call build_dft_exc_matrix(max_l, num_alpha, poly_order, alpha, num_mesh_points, abcissa,& + & weight, vxc, k_matrix2) + ! B3LYP parameters a=0.20, b=0.72, c=0.81 (libXC defaults) + ! --> 0.20 * HF exchange + full libXC DFT exchange + k_matrix(:,:,:,:) = 0.20_dp * k_matrix + k_matrix2 + elseif (xcnr == xcFunctional%HYB_PBE0) then + call build_hf_ex_matrix(kk, pp, max_l, num_alpha, poly_order, k_matrix) + call build_dft_exc_matrix(max_l, num_alpha, poly_order, alpha, num_mesh_points, abcissa,& + & weight, vxc, k_matrix3) + k_matrix(:,:,:,:) = camAlpha * k_matrix + k_matrix3 + elseif (xcFunctional%isCAMY(xcnr)) then + call build_hf_ex_matrix(kk, pp, max_l, num_alpha, poly_order, k_matrix) + call build_hf_ex_matrix(kk_lr, pp, max_l, num_alpha, poly_order, k_matrix2) + call build_dft_exc_matrix(max_l, num_alpha, poly_order, alpha, num_mesh_points, abcissa,& + & weight, vxc, k_matrix3) + if (xcnr == xcFunctional%CAMY_B3LYP) then + ! CAMY-B3LYP parameters (libXC defaults) + k_matrix(:,:,:,:) = camAlpha * k_matrix + camBeta * k_matrix2 + k_matrix3 + elseif (xcnr == xcFunctional%CAMY_PBEh) then + ! CAMY-PBEh + k_matrix(:,:,:,:) = camAlpha * k_matrix + camBeta * k_matrix2 + k_matrix3 + end if end if + ! build mixer input + pot_new(1, :,:,:) = - real(nuc, dp) * uu + j_matrix - k_matrix(1, :,:,:) + pot_new(2, :,:,:) = - real(nuc, dp) * uu + j_matrix - k_matrix(2, :,:,:) + + ! mixer + iMix = int(iScf / 40) + call mixing_driver(pot_old, pot_new, max_l, num_alpha, poly_order, problemsize,& + & iScf - iMix * 40, tBroyden, mixing_factor) + + ! Not sure: before or after mixer (potential .ne. Matrix elements)? + ! Should be irrelevant once self-consistency is reached. + if (tZora .and. (iScf /= 0)) then + call zora_t_correction(1, t_zora, max_l, num_alpha, alpha, poly_order, num_mesh_points,& + & weight, abcissa, vxc, nuc, pp, problemsize) + end if ! finally build Fock matrix - do ii=0,max_l - ss=0 - do jj=1,num_alpha(ii) - do kk=1,poly_order(ii) - ss=ss+1 - tt=0 - do ll=1,num_alpha(ii) - do mm=1,poly_order(ii) - tt=tt+1 - - f(1,ii,ss,tt)=t(ii,ss,tt)+pot_new(1,ii,ss,tt)+vconf(ii,ss,tt) - f(2,ii,ss,tt)=t(ii,ss,tt)+pot_new(2,ii,ss,tt)+vconf(ii,ss,tt) - - if (zora) then - f(1,ii,ss,tt)=f(1,ii,ss,tt)+t_zora(1,ii,ss,tt) - f(2,ii,ss,tt)=f(2,ii,ss,tt)+t_zora(2,ii,ss,tt) + do ii = 0, max_l + ss = 0 + do jjj = 1, num_alpha(ii) + do kkk = 1, poly_order(ii) + ss = ss + 1 + ttt = 0 + do ll = 1, num_alpha(ii) + do mm = 1, poly_order(ii) + ttt = ttt + 1 + + ff(1, ii, ss, ttt) = tt(ii, ss, ttt) + pot_new(1, ii, ss, ttt) + vconf(ii, ss, ttt) + ff(2, ii, ss, ttt) = tt(ii, ss, ttt) + pot_new(2, ii, ss, ttt) + vconf(ii, ss, ttt) + + if (tZora) then + ff(1, ii, ss, ttt) = ff(1, ii, ss, ttt) + t_zora(1, ii, ss, ttt) + ff(2, ii, ss, ttt) = ff(2, ii, ss, ttt) + t_zora(2, ii, ss, ttt) end if end do @@ -109,51 +216,58 @@ subroutine build_fock(iter,t,u,nuc,vconf,j,k,p,max_l,num_alpha,poly_order,& end do end do - ! write(*,*) 'FOCK MATRIX' - ! write(*,*) f + end subroutine build_hamiltonian - deallocate(j_matrix) - deallocate(k_matrix) - deallocate(p_total) - deallocate(t_zora) - end subroutine build_fock + !> Builds Coulomb matrix to be added to the Fock matrix from Coulomb supermatrix by multiplying + !! with density matrix supervector. + subroutine build_coulomb_matrix(jj, pp, max_l, num_alpha, poly_order, j_matrix) - subroutine build_coulomb_matrix(j,p,max_l,num_alpha,poly_order,alpha,j_matrix) + !> coulomb supermatrix + real(dp), intent(in) :: jj(0:,:,:,0:,:,:) - ! Build Coulomb matrix to be added to the Fock matrix from Coulomb Supermatrix - ! by multiplying with density matrix supervector + !> density matrix supervector + real(dp), intent(in) :: pp(0:,:,:) - real(dp), intent(in) :: j(0:,:,:,0:,:,:),p(0:,:,:) - real(dp), intent(in) :: alpha(0:,:) - integer, intent(in) :: max_l,num_alpha(0:),poly_order(0:) + !> maximum angular momentum + integer, intent(in) :: max_l + + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) + + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) + + !> coulomb matrix real(dp), intent(out) :: j_matrix(0:,:,:) - integer :: ii,jj,kk,ll,mm,nn,oo,pp,qq,rr,ss,tt,uu,vv,ww - - j_matrix=0.0d0 - - do ii=0,max_l - ss=0 - do jj=1,num_alpha(ii) - do kk=1,poly_order(ii) - ss=ss+1 - tt=0 - do ll=1,num_alpha(ii) - do mm=1,poly_order(ii) - tt=tt+1 - do nn=0,max_l - uu=0 - do oo=1,num_alpha(nn) - do pp=1,poly_order(nn) - uu=uu+1 - vv=0 - do qq=1,num_alpha(nn) - do rr=1,poly_order(nn) - vv=vv+1 - - ! multiply coulomb supermatrix with total densitymatrix supervector - j_matrix(ii,ss,tt)=j_matrix(ii,ss,tt)+& - &j(ii,ss,tt,nn,uu,vv)*p(nn,uu,vv) + + !> auxiliary variables + integer :: ii, jjj, kk, ll, mm, nn, oo, ppp, qq, rr, ss, tt, uu, vv + + j_matrix(:,:,:) = 0.0_dp + + do ii = 0, max_l + ss = 0 + do jjj = 1, num_alpha(ii) + do kk = 1, poly_order(ii) + ss = ss + 1 + tt = 0 + do ll = 1, num_alpha(ii) + do mm = 1, poly_order(ii) + tt = tt + 1 + do nn = 0, max_l + uu = 0 + do oo = 1, num_alpha(nn) + do ppp = 1, poly_order(nn) + uu = uu + 1 + vv = 0 + do qq = 1, num_alpha(nn) + do rr = 1, poly_order(nn) + vv = vv + 1 + + ! multiply Coulomb supermatrix with total density matrix supervector + j_matrix(ii, ss, tt) = j_matrix(ii, ss, tt)& + & + jj(ii, ss, tt, nn, uu, vv) * pp(nn, uu, vv) end do end do @@ -168,43 +282,58 @@ subroutine build_coulomb_matrix(j,p,max_l,num_alpha,poly_order,alpha,j_matrix) end subroutine build_coulomb_matrix - subroutine build_hf_ex_matrix(k,p,max_l,num_alpha,poly_order,alpha,k_matrix) - ! Build Hartree-Fock exchange matrix to be added to the Fock matrix from - ! supermatrix by multiplying with density matrix supervector + !> Builds Hartree-Fock exchange matrix to be added to the Fock matrix from supermatrix by + !! multiplying with density matrix supervector. + subroutine build_hf_ex_matrix(kk, pp, max_l, num_alpha, poly_order, k_matrix) - real(dp), intent(in) :: k(0:,:,:,0:,:,:),p(:,0:,:,:) - real(dp), intent(in) :: alpha(0:,:) - integer, intent(in) :: max_l,num_alpha(0:),poly_order(0:) + !> (hf) exchange supermatrix + real(dp), intent(in) :: kk(0:,:,:,0:,:,:) + + !> density matrix supervector + real(dp), intent(in) :: pp(:,0:,:,:) + + !> maximum angular momentum + integer, intent(in) :: max_l + + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) + + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) + + !> Hartree-Fock exchange matrix real(dp), intent(out) :: k_matrix(:,0:,:,:) - integer :: ii,jj,kk,ll,mm,nn,oo,pp,qq,rr,ss,tt,uu,vv,ww - - k_matrix=0.0d0 - - do ii=0,max_l - ss=0 - do jj=1,num_alpha(ii) - do kk=1,poly_order(ii) - ss=ss+1 - tt=0 - do ll=1,num_alpha(ii) - do mm=1,poly_order(ii) - tt=tt+1 - do nn=0,max_l - uu=0 - do oo=1,num_alpha(nn) - do pp=1,poly_order(nn) - uu=uu+1 - vv=0 - do qq=1,num_alpha(nn) - do rr=1,poly_order(nn) - vv=vv+1 - - ! multiply hf exchange supermatrix with densitymatrix supervector per spin - k_matrix(1,ii,ss,tt)=k_matrix(1,ii,ss,tt)+& - &k(ii,ss,tt,nn,uu,vv)*p(1,nn,uu,vv) - k_matrix(2,ii,ss,tt)=k_matrix(2,ii,ss,tt)+& - &k(ii,ss,tt,nn,uu,vv)*p(2,nn,uu,vv) + + !> auxiliary variables + integer :: ii, jj, kkk, ll, mm, nn, oo, ppp, qq, rr, ss, tt, uu, vv + + k_matrix(:,:,:,:) = 0.0_dp + + do ii = 0, max_l + ss = 0 + do jj = 1, num_alpha(ii) + do kkk = 1, poly_order(ii) + ss = ss + 1 + tt = 0 + do ll = 1, num_alpha(ii) + do mm = 1, poly_order(ii) + tt = tt + 1 + do nn = 0, max_l + uu = 0 + do oo = 1, num_alpha(nn) + do ppp = 1, poly_order(nn) + uu = uu + 1 + vv = 0 + do qq = 1, num_alpha(nn) + do rr = 1, poly_order(nn) + vv = vv + 1 + + ! multiply HF exchange supermatrix with density matrix supervector per spin + k_matrix(1, ii, ss, tt) = k_matrix(1, ii, ss, tt)& + & + kk(ii, ss, tt, nn, uu, vv) * pp(1, nn, uu, vv) + k_matrix(2, ii, ss, tt) = k_matrix(2, ii, ss, tt)& + & + kk(ii, ss, tt, nn, uu, vv) * pp(2, nn, uu, vv) end do end do @@ -219,45 +348,70 @@ subroutine build_hf_ex_matrix(k,p,max_l,num_alpha,poly_order,alpha,k_matrix) end subroutine build_hf_ex_matrix - subroutine build_dft_exc_matrix(max_l,num_alpha,poly_order,alpha,& - &num_mesh_points,abcissa,weight,rho,vxc,xcnr,k_matrix) - ! Build DFT exchange matrix to be added to the Fock matrix by calculating - ! the single matrix elements and putting them together + !> Builds DFT exchange matrix to be added to the Fock matrix by calculating the single matrix + !! elements and putting them together. + subroutine build_dft_exc_matrix(max_l, num_alpha, poly_order, alpha, num_mesh_points, abcissa,& + & weight, vxc, k_matrix) + !> maximum angular momentum + integer, intent(in) :: max_l + + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) + + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) + + !> basis exponents real(dp), intent(in) :: alpha(0:,:) - integer, intent(in) :: max_l,num_alpha(0:),poly_order(0:),xcnr,num_mesh_points - real(dp), intent(in) :: weight(:),abcissa(:),rho(:,:),vxc(:,:) + + !> number of numerical integration points + integer, intent(in) :: num_mesh_points + + !> numerical integration abcissas + real(dp), intent(in) :: abcissa(:) + + !> numerical integration weights + real(dp), intent(in) :: weight(:) + + !> xc potential on grid + real(dp), intent(in) :: vxc(:,:) + + !> DFT exchange matrix real(dp), intent(out) :: k_matrix(:,0:,:,:) - integer :: ii,jj,kk,ll,mm,nn,oo,pp,qq,rr,ss,tt,uu,vv,ww,start + + !> single matrix element of the exchange correlation potential real(dp) :: exc_matrixelement(2) - k_matrix=0.0d0 - exc_matrixelement=0.0d0 + !> auxiliary variables + integer :: ii, jj, kk, ll, mm, ss, tt, start + + k_matrix(:,:,:,:) = 0.0_dp + exc_matrixelement(:) = 0.0_dp - do ii=0,max_l - ss=0 - do jj=1,num_alpha(ii) - do kk=1,poly_order(ii) - ss=ss+1 + do ii = 0, max_l + ss = 0 + do jj = 1, num_alpha(ii) + do kk = 1, poly_order(ii) + ss = ss + 1 - tt=ss-1 - do ll=jj,num_alpha(ii) + tt = ss - 1 + do ll = jj, num_alpha(ii) - start=1 - if (ll==jj) start=kk + start = 1 + if (ll == jj) start = kk - do mm=start,poly_order(ii) - tt=tt+1 + do mm = start, poly_order(ii) + tt = tt + 1 - call dft_exc_matrixelement(num_mesh_points,weight,abcissa,rho,& - &vxc,xcnr,alpha(ii,jj),kk,& - &alpha(ii,ll),mm,ii,exc_matrixelement) + call dft_exc_matrixelement(num_mesh_points, weight, abcissa, vxc, alpha(ii, jj), kk,& + & alpha(ii, ll), mm, ii, exc_matrixelement) - k_matrix(1,ii,ss,tt)=exc_matrixelement(1) - k_matrix(2,ii,ss,tt)=exc_matrixelement(2) - k_matrix(1,ii,tt,ss)=exc_matrixelement(1) - k_matrix(2,ii,tt,ss)=exc_matrixelement(2) + k_matrix(1, ii, ss, tt) = exc_matrixelement(1) + k_matrix(2, ii, ss, tt) = exc_matrixelement(2) + k_matrix(1, ii, tt, ss) = exc_matrixelement(1) + k_matrix(2, ii, tt, ss) = exc_matrixelement(2) end do end do @@ -265,7 +419,6 @@ subroutine build_dft_exc_matrix(max_l,num_alpha,poly_order,alpha,& end do end do - end subroutine build_dft_exc_matrix end module hamiltonian diff --git a/slateratom/lib/input.f90 b/slateratom/lib/input.f90 index f25af8bb..bb2b75fc 100644 --- a/slateratom/lib/input.f90 +++ b/slateratom/lib/input.f90 @@ -1,289 +1,450 @@ -!!* Read input from stdin +!> Module that reads input values from stdin. module input use common_accuracy, only : dp + use common_poisson, only : TBeckeGridParams + + use xcfunctionals, only : xcFunctional implicit none - private - + private + public :: read_input_1, read_input_2, echo_input - + + contains - subroutine read_input_1(nuc,max_l,occ_shells,maxiter,poly_order,& - &min_alpha,max_alpha,num_alpha,generate_alpha,alpha,& - &conf_r0,conf_power,num_occ,num_power,num_alphas,xcnr,& - &eigprint,zora,broyden,mixing_factor,xalpha_const) + !> Reads in all properties, except for occupation numbers. + subroutine read_input_1(nuc, max_l, occ_shells, maxiter, scftol, poly_order, min_alpha,& + & max_alpha, num_alpha, tAutoAlphas, alpha, conf_r0, conf_power, num_occ, num_power,& + & num_alphas, xcnr, tPrintEigvecs, tZora, tBroyden, mixing_factor, xalpha_const, omega,& + & camAlpha, camBeta, grid_params) + + !> nuclear charge, i.e. atomic number + integer, intent(out) :: nuc + + !> maximum angular momentum + integer, intent(out) :: max_l + + !> number of occupied shells + integer, intent(out) :: occ_shells(0:4) + + !> maximum number of SCF calculations + integer, intent(out) :: maxiter + + !> scf tolerance, i.e. convergence criteria + real(dp), intent(out) :: scftol + + !> highest polynomial order + l in each shell + integer, intent(out) :: poly_order(0:4) + + !> smallest exponent if automatically generate alphas, i.e. tAutoAlphas = .true. + real(dp), intent(out) :: min_alpha + + !> largest exponent if automatically generate alphas, i.e. tAutoAlphas = .true. + real(dp), intent(out) :: max_alpha + + !> number of exponents in each shell + integer, intent(out) :: num_alpha(0:4) + + !> generate alphas automatically + logical, intent(out) :: tAutoAlphas + + !> basis exponents + real(dp), intent(out) :: alpha(0:4, 10) + + !> confinement radii + real(dp), intent(out) :: conf_r0(0:4) + + !> power of confinement + real(dp), intent(out) :: conf_power(0:4) + + !> maximal occupied shell + integer, intent(out) :: num_occ + + !> maximum number of coefficients + integer, intent(out) :: num_power + + !> maximum number of exponents + integer, intent(out) :: num_alphas + + !> identifier of exchange-correlation type + integer, intent(out) :: xcnr + + !> print eigenvectors to stdout + logical, intent(out) :: tPrintEigvecs + + !> true, if zero-order regular approximation for relativistic effects is desired + logical, intent(out) :: tZora + + !> true, if Broyden mixing is desired, otherwise simple mixing is applied + logical, intent(out) :: tBroyden + + !> mixing factor + real(dp), intent(out) :: mixing_factor - ! Read in everything except occupation numbers. + !> exchange parameter for X-Alpha exchange + real(dp), intent(out) :: xalpha_const - integer :: ii,jj - integer, intent(out) :: nuc,max_l,maxiter,conf_power(0:),num_occ,num_power - integer, intent(out) :: num_alphas,xcnr - logical, intent(out) :: generate_alpha,eigprint,zora,broyden - real(dp), intent(out) :: conf_r0(0:),min_alpha,max_alpha,mixing_factor - real(dp), intent(out) :: alpha(0:,:),xalpha_const - integer, intent(out) :: occ_shells(0:),num_alpha(0:),poly_order(0:) + !> range-separation parameter + real(dp), intent(out) :: omega + !> CAM alpha parameter + real(dp), intent(out) :: camAlpha - write(*,'(A)') 'Enter nuclear charge, maximal angular momentum (s=0), & - &max. SCF, ZORA' - read(*,*) nuc,max_l,maxiter,zora + !> CAM beta parameter + real(dp), intent(out) :: camBeta - write(*,'(A)') 'Enter XC functional, 0=HF, 1=X-Alpha, 2=PW-LDA, 3=PBE' + !> holds parameters, defining a Becke integration grid + type(TBeckeGridParams), intent(out) :: grid_params + + !! auxiliary variables + integer :: ii, jj + + write(*, '(A)') 'Enter nuclear charge, maximal angular momentum (s=0), max. SCF, SCF tol., ZORA' + read(*,*) nuc, max_l, maxiter, scftol, tZora + + write(*, '(A)') 'Enter XC functional:& + & 0: HF, 1: X-Alpha, 2: LDA-PW91, 3: GGA-PBE96, 4: GGA-BLYP, 5: LCY-PBE96, 6: LCY-BNL,& + & 7: PBE0, 8: B3LYP, 9: CAMY-B3LYP, 10: CAMY-PBEh' read(*,*) xcnr - if (xcnr==0) write(*,'(A)') 'WARNING: ONLY CORRECT FOR CLOSED SHELL 1S !' - if ((xcnr==0).and.zora) then - write(*,'(A)') 'ZORA only available for DFT !' - STOP + + if (xcFunctional%isNotImplemented(xcnr)) then + write(*, '(A,I2,A)') 'XCNR=', xcnr, ' not implemented!' + stop + end if + + if (xcFunctional%isLongRangeCorrected(xcnr)) then + write(*, '(A)') 'Enter range-separation parameter:' + read(*,*) omega + elseif (xcnr == xcFunctional%HYB_PBE0) then + ! currently only HYB-PBE0 does support arbitrary HFX portions (HYB-B3LYP does not) + write(*, '(A)') 'Enter portion of HFX (CAM alpha):' + read(*,*) camAlpha + elseif (xcFunctional%isCAMY(xcnr)) then + write(*, '(A)') 'Enter range-separation parameter, CAM alpha, CAM beta:' + read(*,*) omega, camAlpha, camBeta end if - if (xcnr==1) then - write(*,'(A)') 'Enter empirical parameter for X-Alpha exchange' + + if (xcFunctional%isLongRangeCorrected(xcnr) .or. xcFunctional%isCAMY(xcnr)& + & .or. xcFunctional%isGlobalHybrid(xcnr)) then + write(*, '(A)') 'NRadial NAngular ll_max rm' + read(*,*) grid_params%nRadial, grid_params%nAngular, grid_params%ll_max, grid_params%rm + end if + + if ((xcnr == xcFunctional%HF_Exchange) .and. tZora) then + write(*, '(A)') 'ZORA only available for DFT!' + stop + end if + if (xcnr == xcFunctional%X_Alpha) then + write(*, '(A)') 'Enter empirical parameter for X-Alpha exchange.' read(*,*) xalpha_const end if - if (max_l>4) then - write(*,'(A)') 'Sorry, l=',max_l,' is a bit too large. No nuclear weapons& - &allowed.' - STOP + if (max_l > 4) then + write(*, '(A)') 'Sorry, l=', max_l, ' is a bit too large. No nuclear weapons allowed.' + stop end if - write(*,'(A)') 'Enter Confinement: r_0 and integer power, power=0 -> off' - do ii=0,max_l - write(*,'(A,I3)') 'l=',ii - read(*,*) conf_r0(ii),conf_power(ii) + write(*, '(A)') 'Enter Confinement: r_0 and integer power, power=0.0 -> off' + do ii = 0, max_l + write(*, '(A,I3)') 'l=', ii + read(*,*) conf_r0(ii), conf_power(ii) end do - write(*,'(A)') 'Enter number of occupied shells for each angular momentum' - do ii=0,max_l - write(*,'(A,I3)') 'l=',ii + write(*, '(A)') 'Enter number of occupied shells for each angular momentum.' + do ii = 0, max_l + write(*, '(A,I3)') 'l=', ii read(*,*) occ_shells(ii) end do - write(*,'(A)') 'Enter number of exponents and polynomial coefficients for each angular momentum' - do ii=0,max_l - write(*,'(A,I3)') 'l=',ii - read(*,*) num_alpha(ii),poly_order(ii) - if (num_alpha(ii)>10) then - write(*,'(A)') ' Sorry, num_alpha must be smaller than 11.' - STOP + write(*, '(A)') 'Enter number of exponents and polynomial coefficients for each angular ' //& + & 'momentum.' + do ii = 0, max_l + write(*, '(A,I3)') 'l=', ii + read(*,*) num_alpha(ii), poly_order(ii) + if (num_alpha(ii) > 10) then + write(*, '(A)') ' Sorry, number of exponents in each shell must be smaller than 11.' + stop end if end do - ! write(*,'(A)') 'Enter number of exponents for each angular momentum' - ! do ii=0,max_l - ! write(*,'(A,I3)') 'l=',ii - ! read(*,*) num_alpha(ii) - ! if (num_alpha(ii)>10) then - ! write(*,'(A)') ' Sorry, num_alpha must be smaller than 11.' - ! STOP - ! end if - ! end do - - write(*,'(A)') 'Do you want to generate the exponents ? .true./.false.' - read(*,*) generate_alpha - - if (generate_alpha) then - ! generate alphas - ! - do ii=0,max_l - write(*,'(A)') 'Enter smallest exponent and largest exponent.' - read(*,*) min_alpha,max_alpha - ! - call gen_alphas(min_alpha,max_alpha,num_alpha(ii),alpha(ii,:)) + write(*, '(A)') 'Do you want to automatically generate the exponents (.true./.false.)?' + read(*,*) tAutoAlphas + + if (tAutoAlphas) then + ! automatically generate alphas + do ii = 0, max_l + write(*, '(A)') 'Enter smallest exponent and largest exponent.' + read(*,*) min_alpha, max_alpha + call gen_alphas(min_alpha, max_alpha, num_alpha(ii), alpha(ii, :)) end do else - do ii=0,max_l - write(*,'(A,I3,A,I3,A)') 'Enter ',num_alpha(ii),'exponents for l=',& - &ii,' one per line' - do jj=1,num_alpha(ii) - read(*,*) alpha(ii,jj) + do ii = 0, max_l + write(*, '(A,I3,A,I3,A)') 'Enter ', num_alpha(ii), 'exponents for l=', ii, ', one per line.' + do jj = 1, num_alpha(ii) + read(*,*) alpha(ii, jj) end do end do end if - num_occ=0 - do ii=0,max_l - num_occ=max(num_occ,occ_shells(ii)) + num_occ = 0 + do ii = 0, max_l + num_occ = max(num_occ, occ_shells(ii)) end do - num_power=0 - do ii=0,max_l - num_power=max(num_power,poly_order(ii)) + num_power = 0 + do ii = 0, max_l + num_power = max(num_power, poly_order(ii)) end do - num_alphas=0 - do ii=0,max_l - num_alphas=max(num_alphas,num_alpha(ii)) + num_alphas = 0 + do ii = 0, max_l + num_alphas = max(num_alphas, num_alpha(ii)) end do - write(*,'(A)') 'Print Eigenvectors ? .true./.false.' - read(*,*) eigprint + write(*, '(A)') 'Print Eigenvectors ? .true./.false.' + read(*,*) tPrintEigvecs - write(*,'(A)') ' Use Broyden mixer ? .true./.false. and mixing parameter <1' - read(*,*) broyden,mixing_factor + write(*, '(A)') ' Use Broyden mixer (.true./.false.)? And mixing parameter <1' + read(*,*) tBroyden, mixing_factor end subroutine read_input_1 - subroutine read_input_2(occ,max_l,occ_shells, qnvalorbs) - ! Read in occupation numbers. + !> Reads in occupation numbers and quantum numbers of wavefunctions to write out. + subroutine read_input_2(occ, max_l, occ_shells, qnvalorbs) + !> occupation numbers real(dp), intent(out) :: occ(:,0:,:) - integer, intent(in) :: max_l,occ_shells(0:) + + !> maximum angular momentum + integer, intent(in) :: max_l + + !> number of occupied shells + integer, intent(in) :: occ_shells(0:) + + !> quantum numbers of wavefunctions to be written integer, intent(out) :: qnvalorbs(:,0:) - integer :: ii,jj - write(*,'(A)') 'Enter the occupation numbers for each angular momentum& - & and shell, up and down in one row' + !> auxiliary variables + integer :: ii, jj + + occ(:,:,:) = 0.0_dp - occ=0.0d0 + write(*, '(A)') 'Enter the occupation numbers for each angular momentum and shell, up and ' //& + & 'down in one row.' - write(*,'(A)') ' ' - write(*,'(A)') 'UP Electrons DOWN Electrons' - do ii=0,max_l - do jj=1,occ_shells(ii) - write(*,'(A,I3,A,I3)') 'l= ',ii,' and shell ',jj - read(*,*) occ(1,ii,jj),occ(2,ii,jj) + write(*, '(A)') ' ' + write(*, '(A)') 'UP Electrons; DOWN Electrons' + do ii = 0, max_l + do jj = 1, occ_shells(ii) + write(*, '(A,I3,A,I3)') 'l= ', ii, ' and shell ', jj + read(*,*) occ(1, ii, jj), occ(2, ii, jj) end do end do - write(*,"(A)") "Quantum numbers of wavefunctions to be written:" + write(*, '(A)') 'Quantum numbers of wavefunctions to be written:' do ii = 0, max_l - write(*, "(A,I0,A)") "l= ", ii, ": from to" + write(*, '(A,I0,A)') 'l= ', ii, ': from to' read(*,*) qnvalorbs(:, ii) - qnvalorbs(:,ii) = (/ minval(qnvalorbs(:,ii)), maxval(qnvalorbs(:,ii)) /) - qnvalorbs(:,ii) = qnvalorbs(:,ii) - ii + qnvalorbs(:, ii) = [minval(qnvalorbs(:, ii)), maxval(qnvalorbs(:, ii))] + qnvalorbs(:, ii) = qnvalorbs(:, ii) - ii end do end subroutine read_input_2 - subroutine echo_input(nuc,max_l,occ_shells,maxiter,poly_order,num_alpha,& - &alpha,conf_r0,conf_power,occ,num_occ,num_power,& - &num_alphas,xcnr,zora,num_mesh_points,xalpha_const) - - ! Echo completed input to stdout. - - integer :: ii,jj - integer, intent(in) :: nuc,max_l,maxiter,conf_power(0:),num_occ,num_power - integer, intent(in) :: num_alphas,xcnr,num_mesh_points - real(dp), intent(in) :: conf_r0(0:),occ(:,0:,:) - real(dp), intent(in) :: alpha(0:,:),xalpha_const - integer, intent(in) :: occ_shells(0:),num_alpha(0:),poly_order(0:) - logical, intent(in) :: zora - - write(*,'(A)') ' ' - write(*,'(A)') '--------------' - write(*,'(A)') 'INPUT SUMMARY ' - write(*,'(A)') '--------------' - - if (zora) write(*,'(A)') 'SCALAR RELATIVISTIC ZORA CALCULATION' - if (.not.zora) write(*,'(A)') 'NON-RELATIVISTIC CALCULATION' - write(*,'(A)') ' ' - write(*,'(A,I3)') 'Nuclear Charge: ',nuc - if (xcnr==0) write(*,'(A,I3)') 'HF Exchange, only correct for closed shell !' - if (xcnr==1) write(*,'(A,F12.8)') 'X-Alpha, alpha= ',xalpha_const - if (xcnr==2) write(*,'(A,I3)') 'LDA, Perdew-Wang Parametrization' - if (xcnr==3) write(*,'(A,I3)') 'PBE' - write(*,'(A,I1)') 'Max. angular momentum: ',max_l - write(*,'(A,I5)') 'Number of points for numerical radial integration: ',& - &num_mesh_points - - write(*,'(A)') ' ' - do ii=0,max_l - write(*,'(A,I1,A,I2)') 'Occupied Shells for l=',ii,': ',occ_shells(ii) + + !> Echos gathered input to stdout. + subroutine echo_input(nuc, max_l, occ_shells, maxiter, scftol, poly_order, num_alpha, alpha,& + & conf_r0, conf_power, occ, num_occ, num_power, num_alphas, xcnr, tZora, num_mesh_points,& + & xalpha_const) + + !> nuclear charge, i.e. atomic number + integer, intent(in) :: nuc + + !> maximum angular momentum + integer, intent(in) :: max_l + + !> number of occupied shells + integer, intent(in) :: occ_shells(0:) + + !> maximum number of SCF calculations + integer, intent(in) :: maxiter + + !> scf tolerance, i.e. convergence criteria + real(dp), intent(in) :: scftol + + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) + + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) + + !> basis exponents + real(dp), intent(in) :: alpha(0:,:) + + !> confinement radii + real(dp), intent(in) :: conf_r0(0:) + + !> power of confinement + real(dp), intent(in) :: conf_power(0:) + + !> occupation numbers + real(dp), intent(in) :: occ(:,0:,:) + + !> maximal occupied shell + integer, intent(in) :: num_occ + + !> maximum number of coefficients + integer, intent(in) :: num_power + + !> maximum number of exponents + integer, intent(in) :: num_alphas + + !> identifier of exchange-correlation type + integer, intent(in) :: xcnr + + !> true, if zero-order regular approximation for relativistic effects is desired + logical, intent(in) :: tZora + + !> number of numerical integration points + integer, intent(in) :: num_mesh_points + + !> exchange parameter for X-Alpha exchange + real(dp), intent(in) :: xalpha_const + + !> auxiliary variables + integer :: ii, jj + + write(*, '(A)') ' ' + write(*, '(A)') '--------------' + write(*, '(A)') 'INPUT SUMMARY ' + write(*, '(A)') '--------------' + + if (tZora) write(*, '(A)') 'SCALAR RELATIVISTIC ZORA CALCULATION' + if (.not. tZora) write(*, '(A)') 'NON-RELATIVISTIC CALCULATION' + write(*, '(A)') ' ' + + write(*, '(A,I3)') 'Nuclear Charge: ', nuc + + if (xcnr == xcFunctional%HF_Exchange) write(*, '(A)') 'Hartree-Fock exchange' + if (xcnr == xcFunctional%X_Alpha) write(*, '(A,F12.8)') 'X-Alpha, alpha= ', xalpha_const + if (xcnr == xcFunctional%LDA_PW91) write(*, '(A)') 'LDA, Perdew-Wang Parametrization' + if (xcnr == xcFunctional%GGA_PBE96) write(*, '(A)') 'PBE96' + if (xcnr == xcFunctional%GGA_BLYP) write(*, '(A)') 'BLYP' + if (xcnr == xcFunctional%LCY_PBE96) write(*, '(A)') 'Range-separated: LCY-PBE96' + if (xcnr == xcFunctional%LCY_BNL) write(*, '(A)') 'Range-separated: BNL,& + & LCY-LDA for exchange + PBE correlation' + if (xcnr == xcFunctional%HYB_PBE0) write(*, '(A)') 'Global hybrid: PBE0' + if (xcnr == xcFunctional%HYB_B3LYP) write(*, '(A)') 'Global hybrid: B3LYP' + if (xcnr == xcFunctional%CAMY_B3LYP) write(*, '(A)') 'CAM: CAMY-B3LYP' + if (xcnr == xcFunctional%CAMY_PBEh) write(*, '(A)') 'CAM: CAMY-PBEh' + + write(*, '(A,I6)') 'Max. number of SCF iterations: ', maxiter + write(*, '(A,ES9.2E2)') 'SCF tolerance [a.u.]: ', scftol + + write(*, '(A,I1)') 'Max. angular momentum: ', max_l + write(*, '(A,I5)') 'Number of points for numerical radial integration: ', num_mesh_points + + write(*, '(A)') ' ' + do ii = 0, max_l + write(*, '(A,I1,A,I2)') 'Occupied Shells for l=', ii, ': ', occ_shells(ii) + end do + + write(*, '(A)') ' ' + do ii = 0, max_l + write(*, '(A,I1,A,I2)') 'Number of Polynomial Coeff. for l=', ii, ': ', poly_order(ii) end do - write(*,'(A)') ' ' - do ii=0,max_l - write(*,'(A,I1,A,I2)') 'Number of Polynomial Coeff. for l=',ii,': ',poly_order(ii) + do ii = 1, max_l + if ((poly_order(ii) /= poly_order(0)) .and. (xcFunctional%isLongRangeCorrected(xcnr))) then + write(*,*) 'LC functionals: polynomial orders need to be same for all shells.' + stop + end if end do - write(*,'(A)') ' ' - do ii=0,max_l - write(*,'(A,I1)') 'Exponents for l=',ii - do jj=1,num_alpha(ii) - write(*,'(F12.8)') alpha(ii,jj) + write(*, '(A)') ' ' + do ii = 0, max_l + write(*, '(A,I1)') 'Exponents for l=', ii + do jj = 1, num_alpha(ii) + write(*, '(F12.8)') alpha(ii, jj) end do end do - write(*,'(A)') ' ' - write(*,'(A)') 'Occupation Numbers UP/DWN' - do ii=0,max_l - do jj=1,occ_shells(ii) - write(*,'(A,I1,A,I2,A,2F12.8)') 'Angular Momentum ',ii,' Shell ',jj,& - &': ',occ(1,ii,jj),occ(2,ii,jj) + write(*, '(A)') ' ' + write(*, '(A)') 'Occupation Numbers UP/DWN' + do ii = 0, max_l + do jj = 1, occ_shells(ii) + write(*, '(A,I1,A,I2,A,2F12.8)') 'Angular Momentum ', ii, ' Shell ', jj, ': ',& + & occ(1, ii, jj), occ(2, ii, jj) end do end do - ! - ! write(*,'(A)') ' ' - ! write(*,'(A)') 'Occupation Numbers DWN' - ! do ii=0,max_l - ! do jj=1,occ_shells(ii) - ! write(*,'(A,I1,A,I2,A,F12.8)') 'Angular Momentum ',ii,' Shell ',jj,& - ! &': ',occ(2,ii,jj) - ! end do - ! end do - - write(*,'(A)') ' ' - ! write(*,'(A,F12.8,A,I1)') 'Confining Radius is ',conf_r0,' a.u. with power of ',conf_power - do ii=0,max_l - if (conf_power(ii)/=0) then - write(*,'(A,I3,A,E15.7,A,I3)') 'l= ',ii,', r0= ',conf_r0(ii),' power= ',& - conf_power(ii) + + write(*, '(A)') ' ' + do ii = 0, max_l + if (conf_power(ii) > 1.0e-06_dp) then + write(*, '(A,I3,A,E15.7,A,E15.7)') 'l= ', ii, ', r0= ', conf_r0(ii), ' power= ',& + & conf_power(ii) else - write(*,'(A,I3,A)') 'l= ',ii,' no confinement ' + write(*, '(A,I3,A)') 'l= ', ii, ' no confinement ' end if end do - write(*,'(A)') ' ' - write(*,'(A,I2,A)') 'There are at maximum ',num_occ,' occ. shells for one l' - write(*,'(A,I2,A)') 'There are at maximum ',num_power,' coefficients for one& - & exponent' - write(*,'(A,I2,A)') 'There are at maximum ',num_alphas,' exponents' + write(*, '(A)') ' ' + write(*, '(A,I2,A)') 'There are at maximum ', num_occ, ' occ. shells for one l' + write(*, '(A,I2,A)') 'There are at maximum ', num_power, ' coefficients for one exponent' + write(*, '(A,I2,A)') 'There are at maximum ', num_alphas, ' exponents' - write(*,'(A)') ' ' - write(*,'(A)') '------------------' - write(*,'(A)') 'END INPUT SUMMARY ' - write(*,'(A)') '------------------' - write(*,'(A)') ' ' + write(*, '(A)') ' ' + write(*, '(A)') '------------------' + write(*, '(A)') 'END INPUT SUMMARY ' + write(*, '(A)') '------------------' + write(*, '(A)') ' ' end subroutine echo_input - subroutine gen_alphas(min_alpha,max_alpha,num_alpha,alpha) -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! - ! Generate alpha coefficients for Slater expansion - ! - ! min_alpha : smallest alpha - ! max_alpha : largest alpha - ! num_alpha : number of alphas - ! alpha : output, generated alphas - ! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - implicit none + !> Generates alpha coefficients for Slater expansion. + subroutine gen_alphas(min_alpha, max_alpha, num_alpha, alpha) + + !> smallest exponent if automatically generate alphas, i.e. tAutoAlphas = .true. + real(dp), intent(in) :: min_alpha + + !> largest exponent if automatically generate alphas, i.e. tAutoAlphas = .true. + real(dp), intent(in) :: max_alpha + + !> number of exponents in each shell + integer, intent(in) :: num_alpha + + !> generated basis exponents + real(dp), intent(out) :: alpha(10) + + !> auxiliary variables + real(dp) :: beta(10), ff + + !> auxiliary variable integer :: ii - real(dp), intent(in) :: min_alpha,max_alpha - real(dp) :: alpha(10) - integer :: num_alpha - real(dp) :: beta(10),f - do ii=1,10 - alpha(ii)=0.0_dp - end do - alpha(1)=min_alpha - if (num_alpha==1) return - f=(max_alpha/alpha(1))**(1.0d0/FLOAT((num_alpha-1))) - do ii=1,(num_alpha-1) - alpha(1+ii)=alpha(ii)*f + + alpha(:) = 0.0_dp + alpha(1) = min_alpha + + if (num_alpha == 1) return + + ff = (max_alpha / alpha(1))**(1.0_dp / real(num_alpha - 1, dp)) + + do ii = 1, num_alpha - 1 + alpha(1 + ii) = alpha(ii) * ff end do - do ii=1,num_alpha - beta(num_alpha+1-ii)=alpha(ii) + + do ii = 1, num_alpha + beta(num_alpha + 1 - ii) = alpha(ii) end do - do ii=1,num_alpha - alpha(ii)=beta(ii) + + do ii = 1, num_alpha + alpha(ii) = beta(ii) end do - return + end subroutine gen_alphas end module input diff --git a/slateratom/lib/integration.f90 b/slateratom/lib/integration.f90 index 45a51e5b..541079ee 100644 --- a/slateratom/lib/integration.f90 +++ b/slateratom/lib/integration.f90 @@ -1,8 +1,10 @@ +!> Module that provides numerical integration routines. module integration use common_accuracy, only : dp - use common_constants - use utilities + use common_constants, only : pi + use utilities, only : fak + implicit none private @@ -10,237 +12,307 @@ module integration public :: get_abcissas, get_abcissas_z_1st, get_abcissas_z_2nd public :: reverse_abcissas, reverse_abcissas_1st, reverse_abcissas_2nd public :: exp_int - + + contains - - subroutine gauss_chebyshev_becke_mesh(N,nuc,w,r, dzdr, d2zdr2, dz) - ! Generate Beckes Gauss-Chebyschev mesh, e.g. radial points and weights. + !> Generate Beckes Gauss-Chebyschev mesh, e.g. radial points and weights. + !! Becke mapping: r \in [-1, 1] --> [0, inf) + pure subroutine gauss_chebyshev_becke_mesh(num_mesh_points, nuc, weight, abcissa, dzdr, d2zdr2,& + & dz) + + !> number of numerical integration points + integer, intent(in) :: num_mesh_points + + !> nuclear charge, i.e. atomic number + integer, intent(in) :: nuc + + !> numerical integration weight factors of mesh + real(dp), intent(out) :: weight(:) + + !> numerical integration abcissas (radii), Becke mapping + real(dp), intent(out) :: abcissa(:) - integer, intent(in) :: N ! number of mesh points - integer, intent(in) :: nuc ! nuclear charge - real(dp), intent(out) :: w(:) ! weight factors of mesh - real(dp), intent(out) :: r(:) ! radii of abcissas, Becke mapping ! - real(dp), intent(out) :: dzdr(:) ! dz/dr - real(dp), intent(out) :: d2zdr2(:) ! d^2 z / dr^2 + !> dz/dr + real(dp), intent(out) :: dzdr(:) + + !> d2z/dr2 + real(dp), intent(out) :: d2zdr2(:) + + !> step width in linear coordinates real(dp), intent(out) :: dz - real(dp), allocatable :: fak(:) ! determinental factor of mapping - real(dp), allocatable :: x(:) - real(dp) :: temp + !> determinental factor of mapping + real(dp), allocatable :: fak(:) + + !> gauss-chebyshev abcissas + real(dp), allocatable :: xx(:) + + !> auxiliary variables integer :: ii - real(dp) :: zz, cosz, cosz2, sinz - ! - allocate(x(N)) - allocate(fak(N)) - ! - temp=pi/real(N+1,dp) + real(dp) :: temp, zz, cosz, cosz2, sinz + + allocate(xx(num_mesh_points)) + allocate(fak(num_mesh_points)) + + temp = pi / real(num_mesh_points + 1, dp) dz = temp - ! - do ii=1,N + + do ii = 1, num_mesh_points zz = dz * real(ii, dp) cosz = cos(zz) cosz2 = cosz * cosz sinz = sqrt(1.0_dp - cosz2) - ! NOTE prefactor - x(ii)=(-1.0_dp) * cosz ! gauss-chebyshev abcissas - r(ii)= (1.0_dp + x(ii)) / (1.0_dp - x(ii)) * bragg(nuc) - !dzdr(ii) = (1.0_dp + 2.0_dp * cos(zz) + cos(zz)**2) & - ! &/ (2.0_dp * bragg(nuc) * sin(zz)) + ! NOTE prefactor + xx(ii) = (-1.0_dp) * cosz ! gauss-chebyshev abcissas + abcissa(ii) = (1.0_dp + xx(ii)) / (1.0_dp - xx(ii)) * bragg(nuc) + !dzdr(ii) = (1.0_dp + 2.0_dp * cos(zz) + cos(zz)**2) / (2.0_dp * bragg(nuc) * sin(zz)) dzdr(ii) = (1.0_dp + cosz)**2 / (2.0_dp * bragg(nuc) * sinz) - d2zdr2(ii) = ((2.0_dp + cosz - cosz2) * (1.0_dp + cosz)**2) & - &/ (4.0_dp * bragg(nuc)**2 * (-1.0_dp + cosz) * sinz) + d2zdr2(ii) = ((2.0_dp + cosz - cosz2) * (1.0_dp + cosz)**2) / (4.0_dp * bragg(nuc)**2& + & * (-1.0_dp + cosz) * sinz) ! r**2 times first derivative of x -> r mapping function - w(ii)=temp*(sin(real(ii,dp)*temp)) - ! fak(ii)=2.0_dp*r(ii)**2*bragg(nuc)/(1.0_dp-x(ii))**2 - fak(ii)=2.0_dp*bragg(nuc)/(1.0_dp-x(ii))**2 + weight(ii) = temp * (sin(real(ii, dp) * temp)) + ! fak(ii)=2.0_dp*abcissa(ii)**2*bragg(nuc)/(1.0_dp-xx(ii))**2 + fak(ii) = 2.0_dp * bragg(nuc) / (1.0_dp - xx(ii))**2 ! put fak into weight - w(ii)=w(ii)*fak(ii) + weight(ii) = weight(ii) * fak(ii) end do - deallocate(x) - deallocate(fak) - end subroutine gauss_chebyshev_becke_mesh - subroutine get_abcissas(N,nuc,r,step) + + pure subroutine get_abcissas(num_mesh_points, nuc, rr, step) ! r(x)=bragg*(1-x)/(1+x) ! x(z)=cos(pi*z) - ! r(x(z))=bragg*(1-cos(pi*z))/(1+cos(pi*z)), z=ii/(N+1) + ! r(x(z))=bragg*(1-cos(pi*z))/(1+cos(pi*z)), z=ii/(num_mesh_points+1) - integer, intent(in) :: N ! number of mesh points - integer, intent(in) :: nuc ! nuclear charge - real(dp), intent(out) :: r(:) ! radii of abcissas, Becke mapping ! - integer, intent(out) :: step ! generator step size - real(dp), allocatable :: x(:) - integer :: ii + !> number of numerical integration points + integer, intent(in) :: num_mesh_points - allocate(x(N)) + !> nuclear charge, i.e. atomic number + integer, intent(in) :: nuc - step=pi/real(N+1,dp) + !> numerical integration abcissas (radii), Becke mapping + real(dp), intent(out) :: rr(:) - do ii=1,N + !> generator step size + integer, intent(out) :: step - ! NOTE prefactor - x(ii)=(-1.0_dp)*cos(step*real(ii,dp)) ! gauss-chebyshev abcissas - r(ii)=(1.0_dp+x(ii))/(1.0_dp-x(ii))*bragg(nuc) + !> gauss-chebyshev abcissas + real(dp), allocatable :: xx(:) - end do + !> auxiliary variable + integer :: ii + + allocate(xx(num_mesh_points)) - deallocate(x) + step = int(pi / real(num_mesh_points + 1, dp)) + + do ii = 1, num_mesh_points + ! NOTE prefactor + xx(ii) = (-1.0_dp) * cos(step * real(ii, dp)) + rr(ii) = (1.0_dp + xx(ii)) / (1.0_dp - xx(ii)) * bragg(nuc) + end do end subroutine get_abcissas - subroutine get_abcissas_z_1st(N,nuc,dr,step) - ! 1st derivative of r(x(z)) with respect to z, see - ! grid_differentiation_sign_2.txt - integer, intent(in) :: N ! number of mesh points - integer, intent(in) :: nuc ! nuclear charge - real(dp), intent(out) :: dr(:) ! 1st dderiv. of abcissas, Becke mapping ! - integer, intent(out) :: step ! generator step size - integer :: ii + !> 1st derivative of r(x(z)) with respect to z, see grid_differentiation_sign_2.txt + pure subroutine get_abcissas_z_1st(num_mesh_points, nuc, dr, step) + + !> number of numerical integration points + integer, intent(in) :: num_mesh_points - step=pi/real(N+1,dp) + !> nuclear charge, i.e. atomic number + integer, intent(in) :: nuc - do ii=1,N + !> 1st dderiv. of abcissas, Becke mapping + real(dp), intent(out) :: dr(:) + + !> generator step size + integer, intent(out) :: step + + !> auxiliary variable + integer :: ii - dr(ii)=2.0d0*bragg(nuc)*pi*sin(step*real(ii,dp))/& - &(1.0d0+2.0d0*cos(step*real(ii,dp))+cos(step*real(ii,dp))**2) + step = int(pi / real(num_mesh_points + 1, dp)) + do ii = 1, num_mesh_points + dr(ii) = 2.0_dp * bragg(nuc) * pi * sin(step * real(ii, dp))& + & / (1.0_dp + 2.0_dp * cos(step * real(ii, dp)) + cos(step * real(ii, dp))**2) end do end subroutine get_abcissas_z_1st - subroutine get_abcissas_z_2nd(N,nuc,ddr,step) - ! 2nd derivative of r(x) with respect to x, see - ! grid_differentiation_sign_2.txt - integer, intent(in) :: N ! number of mesh points - integer, intent(in) :: nuc ! nuclear charge - real(dp), intent(out) :: ddr(:) ! 2nd deriv. of abcissas, Becke mapping ! - integer, intent(out) :: step ! generator step size - integer :: ii + !> 2nd derivative of r(x) with respect to x, see grid_differentiation_sign_2.txt + pure subroutine get_abcissas_z_2nd(num_mesh_points, nuc, ddr, step) + + !> number of numerical integration points + integer, intent(in) :: num_mesh_points - step=pi/real(N+1,dp) + !> nuclear charge, i.e. atomic number + integer, intent(in) :: nuc - do ii=1,N + !> 2nd deriv. of abcissas, Becke mapping + real(dp), intent(out) :: ddr(:) - ddr(ii)=(-2.0d0*bragg(nuc)*pi**2)*(cos(step*real(ii,dp))-2.0d0)/& - &(1.0d0+2.0d0*cos(step*real(ii,dp))+cos(step*real(ii,dp))**2) + !> generator step size + integer, intent(out) :: step + + !> auxiliary variable + integer :: ii + step = int(pi / real(num_mesh_points + 1, dp)) + + do ii = 1, num_mesh_points + ddr(ii) = (- 2.0_dp * bragg(nuc) * pi**2) * (cos(step * real(ii, dp)) - 2.0_dp)& + & / (1.0_dp + 2.0_dp * cos(step * real(ii, dp)) + cos(step * real(ii, dp))**2) end do end subroutine get_abcissas_z_2nd - function reverse_abcissas(nuc,r) - ! z(x(r)) reverse mapping function, see - ! grid_differentiation_sign_2.txt - ! - ! z=1/pi*arccos((a-r)/(a+r)) - integer, intent(in) :: nuc ! nuclear charge - real(dp), intent(in) :: r ! radii of abcissas, Becke mapping ! + !> z(x(r)) reverse mapping function, see grid_differentiation_sign_2.txt + !! + !! z=1/pi*arccos((a-r)/(a+r)) + pure function reverse_abcissas(nuc, rr) + + !> nuclear charge, i.e. atomic number + integer, intent(in) :: nuc + + !> numerical integration abcissa (radius), Becke mapping + real(dp), intent(in) :: rr + + !> reverse mapping real(dp) :: reverse_abcissas - reverse_abcissas=1.0d0/pi*acos((bragg(nuc)-r)/(bragg(nuc)+r)) + reverse_abcissas = 1.0_dp / pi * acos((bragg(nuc) - rr) / (bragg(nuc) + rr)) end function reverse_abcissas - function reverse_abcissas_1st(nuc,r) - ! 1st derivative of z(x(r)) reverse mapping function with resp. to r, see - ! grid_differentiation_sign_2.txt - ! - ! be careful: can easily overflow - integer, intent(in) :: nuc ! nuclear charge - real(dp), intent(in) :: r ! radii of abcissas, Becke mapping ! + !> 1st derivative of z(x(r)) reverse mapping function w.r.t. r, + !! see grid_differentiation_sign_2.txt + !! + !! be careful: can easily overflow + pure function reverse_abcissas_1st(nuc, rr) + + !> nuclear charge, i.e. atomic number + integer, intent(in) :: nuc + + !> numerical integration abcissa (radius), Becke mapping + real(dp), intent(in) :: rr + + !> 1st derivative of reverse mapping real(dp) :: reverse_abcissas_1st - reverse_abcissas_1st=1.0d0/pi*sqrt(bragg(nuc)/r)/(r+bragg(nuc)) + reverse_abcissas_1st = 1.0_dp / pi * sqrt(bragg(nuc) / rr) / (rr + bragg(nuc)) end function reverse_abcissas_1st - function reverse_abcissas_2nd(nuc,r) - ! 2nd derivative of z(x(r)) reverse mapping function with resp. to r, see - ! grid_differentiation_sign_2.txt - ! - ! be careful: can easily overflow - integer, intent(in) :: nuc ! nuclear charge - real(dp), intent(in) :: r ! radii of abcissas, Becke mapping ! + !> 2nd derivative of z(x(r)) reverse mapping function w.r.t. r, see + !! grid_differentiation_sign_2.txt + !! + !! be careful: can easily overflow + pure function reverse_abcissas_2nd(nuc, rr) + + !> nuclear charge, i.e. atomic number + integer, intent(in) :: nuc + + !> numerical integration abcissa (radius), Becke mapping + real(dp), intent(in) :: rr + + !> 2nd derivative of reverse mapping real(dp) :: reverse_abcissas_2nd - reverse_abcissas_2nd=-1.0d0/(2.0d0*pi)*sqrt(bragg(nuc)/r)/r*& - &(bragg(nuc)+3.0d0*r)/(bragg(nuc)+r)**2 + reverse_abcissas_2nd = - 1.0_dp / (2.0_dp * pi) * sqrt(bragg(nuc) / rr) / rr& + & * (bragg(nuc) + 3.0_dp * rr) / (bragg(nuc) + rr)**2 end function reverse_abcissas_2nd - FUNCTION bragg(nuc) - - INTEGER :: nuc - REAL(dp) :: bragg,braggd(110) - DATA braggd/& - &1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,& - &1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,& - &1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,& - &1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,& - &1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,& - &1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,& - &1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,& - &1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,& - &1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,& - &1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,& - &1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,& - &1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,1.0_dp,& - &1.0_dp,1.0_dp/ - bragg=braggd(nuc) - RETURN - END FUNCTION bragg - - function exp_int(alpha,power,r) - ! evaluate \int x**power*exp(alpha*x) dx at point r - ! for formula see Bronstein - ! assumes alpha<0 and power=>0 ! - ! WATCH OUT FOR SIGN OF alpha ! - - real(dp), intent(in) :: alpha,r + + pure function bragg(nuc) + + !> nuclear charge, i.e. atomic number + integer, intent(in) :: nuc + + !> prefactor corresponding to the requested element + real(dp) :: bragg + + !> element-resolved Becke prefactors + real(dp), parameter :: braggd(110) = [& + & 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp,& + & 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp,& + & 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp,& + & 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp,& + & 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp,& + & 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp,& + & 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp,& + & 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp,& + & 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp,& + & 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp,& + & 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp,& + & 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp, 1.0_dp,& + & 1.0_dp, 1.0_dp] + + bragg = braggd(nuc) + + end function bragg + + + !> evaluate \int x**power*exp(alpha*x) dx at point r, for formula see Bronstein + !! (assumes alpha<0 and power=>0, WATCH OUT FOR SIGN OF alpha) + function exp_int(alpha, power, rr) + + !> exponential coefficient + real(dp), intent(in) :: alpha + + !> power coefficient integer, intent(in) :: power + + !> evaluation point + real(dp), intent(in) :: rr + + !> integral value real(dp) :: exp_int + + !> auxiliary variable integer :: ii - exp_int=0.0d0 + exp_int = 0.0_dp ! catch power<0 - if (power<0) then + if (power < 0) then write(*,*) 'NEGATIVE POWERS NOT IMPLEMENTED !' - STOP + stop end if ! catch alpha>0 - if (alpha>0.0d0) then + if (alpha > 0.0_dp) then write(*,*) 'POSITIVE ALPHAS NOT IMPLEMENTED !' - STOP + stop end if ! catch r=0 - if (r==0.0d0) then - exp_int=fak(power)/(alpha**(power+1))*(-1.0d0)**(power) + if (rr == 0.0_dp) then + exp_int = fak(power) / (alpha**(power + 1)) * (- 1.0_dp)**power return end if ! catch r=infty and alpha<0 (should always be !) - if (abs(alpha*r)>75.0d0) then - exp_int=0.0d0 + if (abs(alpha * rr) > 75.0_dp) then + exp_int = 0.0_dp return end if - exp_int=1.0d0/alpha*exp(alpha*r) + exp_int = 1.0_dp / alpha * exp(alpha * rr) - do ii=1,power - exp_int=1.0d0/alpha*r**ii*exp(alpha*r)-real(ii,dp)/alpha*exp_int + do ii = 1, power + exp_int = 1.0_dp / alpha * rr**ii * exp(alpha * rr) - real(ii, dp) / alpha * exp_int end do end function exp_int diff --git a/slateratom/lib/numerical_differentiation.f90 b/slateratom/lib/numerical_differentiation.f90 index 7abec733..4cc93bec 100644 --- a/slateratom/lib/numerical_differentiation.f90 +++ b/slateratom/lib/numerical_differentiation.f90 @@ -1,61 +1,79 @@ +!> Module that provides routines for numerical differentiation. module numerical_differentiation use common_accuracy, only : dp - use common_constants - use utilities - use integration + use utilities, only : fak + use integration, only : reverse_abcissas_1st implicit none private public :: numerical_1st_derivative, six_point - - + + contains - subroutine numerical_1st_derivative(num_mesh_points,abcissa,nuc,step,& - &input,output) + !> Calculates numerical 1st derivative of Beckes Gauss-Chebyschev mesh values. + pure subroutine numerical_1st_derivative(num_mesh_points, abcissa, nuc, step, input, output) + + !> number of numerical integration points + integer, intent(in) :: num_mesh_points + + !> numerical integration abcissas + real(dp), intent(in) :: abcissa(:) + + !> nuclear charge, i.e. atomic number + integer, intent(in) :: nuc + + !> differentiation stepwidth + real(dp), intent(in) :: step - integer, intent(in) :: num_mesh_points,nuc - real(dp), intent(in) :: input(:),step,abcissa(:) + !> input on a grid + real(dp), intent(in) :: input(:) + + !> numerical 1st derivative real(dp), intent(out) :: output(:) + + !> contains the six function values for 6-point differentiation real(dp) :: stencil(6) + + !> auxiliary variable integer :: ii - output=0.0d0 - stencil=0.0d0 + output(:) = 0.0_dp + stencil(:) = 0.0_dp ! handle lower mesh bound - do ii=1,6 - stencil(ii)=input(ii) + do ii = 1, 6 + stencil(ii) = input(ii) end do - output(1)=six_point(stencil,1,0,step) - output(2)=six_point(stencil,1,1,step) + output(1) = six_point(stencil, 1, 0, step) + output(2) = six_point(stencil, 1, 1, step) ! handle upper mesh bound - do ii=1,6 - stencil(ii)=input(num_mesh_points-6+ii) + do ii = 1, 6 + stencil(ii) = input(num_mesh_points - 6 + ii) end do - output(num_mesh_points-2)=six_point(stencil,1,3,step) - output(num_mesh_points-1)=six_point(stencil,1,4,step) - output(num_mesh_points)=six_point(stencil,1,5,step) + output(num_mesh_points - 2) = six_point(stencil, 1, 3, step) + output(num_mesh_points - 1) = six_point(stencil, 1, 4, step) + output(num_mesh_points) = six_point(stencil, 1, 5, step) ! handle rest of mesh - do ii=3,num_mesh_points-3 + do ii = 3, num_mesh_points - 3 - stencil(1)=input(ii-2) - stencil(2)=input(ii-1) - stencil(3)=input(ii) - stencil(4)=input(ii+1) - stencil(5)=input(ii+2) - stencil(6)=input(ii+3) + stencil(1) = input(ii - 2) + stencil(2) = input(ii - 1) + stencil(3) = input(ii) + stencil(4) = input(ii + 1) + stencil(5) = input(ii + 2) + stencil(6) = input(ii + 3) - output(ii)=six_point(stencil,1,2,step) + output(ii) = six_point(stencil, 1, 2, step) end do @@ -63,101 +81,113 @@ subroutine numerical_1st_derivative(num_mesh_points,abcissa,nuc,step,& ! not equally spaced and z is the generating variable of the Becke mesh ! which is equally spaced; so multiply by dz/dx - do ii=1,num_mesh_points - - output(ii)=output(ii)*reverse_abcissas_1st(nuc,abcissa(ii)) - + do ii = 1, num_mesh_points + output(ii) = output(ii) * reverse_abcissas_1st(nuc, abcissa(ii)) end do end subroutine numerical_1st_derivative - function six_point(points,k,offset,h) - !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC - ! - ! Numerical k-th derivative of tabulated function from six point - ! formula; Bickley, Math. Gaz. vol. 25 (1941) 19-27 - ! Abramowitz, Stegun, Handbook of Mathematical functions - ! The function is assumed to be tabulated on equally spaced abcissas - ! - ! INPUT: points contains the six function values - ! k order of derivative, 0 Numerical k-th derivative of tabulated function from six point + !! formula; Bickley, Math. Gaz. vol. 25 (1941) 19-27 + !! Abramowitz, Stegun, Handbook of Mathematical functions + !! The function is assumed to be tabulated on equally spaced abcissas. + !! + !! INPUT: points contains the six function values + !! kk order of derivative, 0 contains the six function values for 6-point differentiation + real(dp), intent(in) :: points(6) + + !> order of derivative, 0 determines on which point the point f(x) is where the derivative is taken, 0<=offset<=5 + integer, intent(in) :: offset + + !> stepwidth + real(dp), intent(in) :: hh + + !> coefficients of differentiation formula + !! first 36 are first derivative, second 36 are second derivative and + !! third 36 are third derivative + real(dp), parameter :: coeff(108) = [& + & -274.0_dp, 600.0_dp, -600.0_dp, 400.0_dp, -150.0_dp, 24.0_dp,& + & -24.0_dp, -130.0_dp, 240.0_dp, -120.0_dp, 40.0_dp, -6.0_dp,& + & 6.0_dp, -60.0_dp, -40.0_dp, 120.0_dp, -30.0_dp, 4.0_dp,& + & -4.0_dp, 30.0_dp, -120.0_dp, 40.0_dp, 60.0_dp, -6.0_dp,& + & 6.0_dp, -40.0_dp, 120.0_dp, -240.0_dp, 130.0_dp, 24.0_dp,& + & -24.0_dp, 150.0_dp, -400.0_dp, 600.0_dp, -600.0_dp, 274.0_dp,& + & 225.0_dp, -770.0_dp, 1070.0_dp, -780.0_dp, 305.0_dp, -50.0_dp,& + & 50.0_dp, -75.0_dp, -20.0_dp, 70.0_dp, -30.0_dp, 5.0_dp,& + & -5.0_dp, 80.0_dp, -150.0_dp, 80.0_dp, -5.0_dp, 0.0_dp,& + & 0.0_dp, -5.0_dp, 80.0_dp, -150.0_dp, 80.0_dp, -5.0_dp,& + & 5.0_dp, -30.0_dp, 70.0_dp, -20.0_dp, -75.0_dp, 50.0_dp,& + & -50.0_dp, 305.0_dp, -780.0_dp, 1070.0_dp, -770.0_dp, 225.0_dp,& + & -85.0_dp, 355.0_dp, -590.0_dp, 490.0_dp, -205.0_dp, 35.0_dp,& + & -35.0_dp, 125.0_dp, -170.0_dp, 110.0_dp, -35.0_dp, 5.0_dp,& + & -5.0_dp, -5.0_dp, 50.0_dp, -70.0_dp, 35.0_dp, -5.0_dp,& + & 5.0_dp, -35.0_dp, 70.0_dp, -50.0_dp, 5.0_dp, 5.0_dp,& + & -5.0_dp, 35.0_dp, -110.0_dp, 170.0_dp, -125.0_dp, 35.0_dp,& + & -35.0_dp, 205.0_dp, -490.0_dp, 590.0_dp, -355.0_dp, 85.0_dp] + + !> pre-factor + real(dp) :: pp + + !> numerical k-th derivative of tabulated function from six point formula + real(dp) :: six_point ! get prefactor of sum formula k!/(m!*h^k), m=5 for six-point formula - p=fak(k)/(120*(h**k)) - - six_point=p*(coeff((k-1)*36+offset*6+1)*points(1)+& - & coeff((k-1)*36+offset*6+2)*points(2)+& - & coeff((k-1)*36+offset*6+3)*points(3)+& - & coeff((k-1)*36+offset*6+4)*points(4)+& - & coeff((k-1)*36+offset*6+5)*points(5)+& - & coeff((k-1)*36+offset*6+6)*points(6)) + pp = fak(kk) / (real(120, dp) * (hh**kk)) + + six_point = pp * (coeff((kk - 1) * 36 + offset * 6 + 1) * points(1)& + & + coeff((kk - 1) * 36 + offset * 6 + 2) * points(2)& + & + coeff((kk - 1) * 36 + offset * 6 + 3) * points(3)& + & + coeff((kk - 1) * 36 + offset * 6 + 4) * points(4)& + & + coeff((kk - 1) * 36 + offset * 6 + 5) * points(5)& + & + coeff((kk - 1) * 36 + offset * 6 + 6) * points(6)) end function six_point diff --git a/slateratom/lib/output.f90 b/slateratom/lib/output.f90 index f0cb7a2d..e05c5360 100644 --- a/slateratom/lib/output.f90 +++ b/slateratom/lib/output.f90 @@ -1,10 +1,12 @@ +!> Module that provides basic routines to write out various results. module output use common_accuracy, only : dp use common_constants, only : pi - use core_overlap - use density - use coulomb_potential + use core_overlap, only : moments + use density, only : wavefunction, wavefunction_1st, wavefunction_2nd, density_at_point,& + & density_at_point_1st + use coulomb_potential, only : cou_pot use common_taggedout, only : TTaggedwriter, TTaggedwriter_init, writetag use utilities, only : fak @@ -16,39 +18,42 @@ module output public :: write_waves_file_standard, cusp_values, write_energies_tagged public :: write_wave_coeffs_file - character(1), parameter :: orbnames(0:4) = ["s", "p", "d", "f", "g"] + character(len=1), parameter :: orbnames(0:4) = ["s", "p", "d", "f", "g"] contains - subroutine write_energies(kinetic_energy,nuclear_energy,coulomb_energy,& - &exchange_energy,conf_energy,total_ene,zora) + subroutine write_energies(kinetic_energy, nuclear_energy, coulomb_energy, exchange_energy,& + & xc_energy, conf_energy, total_ene, tZora) - real(dp), intent(in) :: kinetic_energy,nuclear_energy,coulomb_energy - real(dp), intent(in) :: exchange_energy,total_ene,conf_energy - logical, intent(in) :: zora + real(dp), intent(in) :: kinetic_energy, nuclear_energy, coulomb_energy + real(dp), intent(in) :: exchange_energy, xc_energy, total_ene, conf_energy + + !> true, if zero-order regular approximation for relativistic effects is desired + logical, intent(in) :: tZora - write(*,'(A)') 'FINAL ENERGIES : ' - write(*,'(A)') '-----------------------------------' - write(*,'(A)') ' ' - write(*,'(A,F22.6,A)') 'KINETIC ENERGY ',kinetic_energy,' Hartree' - write(*,'(A,F22.6,A)') 'NUC. ATTR. ENERGY ',nuclear_energy,' Hartree' - write(*,'(A,F22.6,A)') 'COULOMB ENERGY ',0.5d0*coulomb_energy,' Hartree' - write(*,'(A,F22.6,A)') 'XC ENERGY ',exchange_energy,' Hartree' - write(*,'(A,F22.6,A)') 'CONFINEMENT ENERGY ',conf_energy,' Hartree' + write(*, '(A)') 'FINAL ENERGIES : ' + write(*, '(A)') '-----------------------------------' + write(*, '(A)') ' ' + write(*, '(A,F22.6,A)') 'KINETIC ENERGY ', kinetic_energy, ' Hartree' + write(*, '(A,F22.6,A)') 'NUC. ATTR. ENERGY ', nuclear_energy, ' Hartree' + write(*, '(A,F22.6,A)') 'COULOMB ENERGY ', 0.5_dp * coulomb_energy, ' Hartree' + write(*, '(A,F22.6,A)') 'HF X ENERGY ', 0.5_dp * exchange_energy, ' Hartree' + write(*, '(A,F22.6,A)') 'DFT XC ENERGY ', xc_energy, ' Hartree' + write(*, '(A,F22.6,A)') 'CONFINEMENT ENERGY ', conf_energy, ' Hartree' write(*,*) ' ' - if (.not.zora) then - write(*,'(A,F22.6,A)') 'TOTAL ENERGY ',total_ene,' Hartree' - write(*,'(A)') 'Remark: For HF use 0.5*XC Energy' - write(*,'(A)') ' ' - write(*,'(A,F22.6)') 'DFT VIRIAL ',(nuclear_energy+0.5d0*coulomb_energy+& - &exchange_energy+conf_energy)/kinetic_energy + + if (.not. tZora) then + write(*, '(A,F22.6,A)') 'TOTAL ENERGY ', total_ene, ' Hartree' + write(*, '(A)') ' ' + write(*, '(A,F22.6)') 'DFT VIRIAL ', (nuclear_energy + 0.5_dp * coulomb_energy& + & + 0.5_dp * exchange_energy + xc_energy + conf_energy) / kinetic_energy else - write(*,'(A,F22.6,A)') 'TOTAL ENERGY ',& - &kinetic_energy+nuclear_energy+0.5d0*coulomb_energy+exchange_energy+& - &conf_energy,' Hartree' + write(*, '(A,F22.6,A)') 'TOTAL ENERGY ',& + & kinetic_energy + nuclear_energy + 0.5_dp * coulomb_energy + exchange_energy& + & + conf_energy, ' Hartree' end if - write(*,'(A)') ' ' + write(*, '(A)') ' ' ! ! NOTE: For DFT @@ -56,87 +61,88 @@ subroutine write_energies(kinetic_energy,nuclear_energy,coulomb_energy,& ! (Sum of Eigenvalues)-0.5*(Coulomb Energy)+(XC Energy)-(\int v_xc^up \rho^up + ! \int v_xc^dwn+rho^dwn)=Total Energy ! - ! The integrals (\int v_xc^up \rho^up) and (\int v_xc^dwn+rho^dwn) are + ! The integrals (\int v_xc^up \rho^up) and (\int v_xc^dwn+rho^dwn) are ! computed and printed later ("V_xc integrals from pot.dat, Up/Dwn:") ! end subroutine write_energies - subroutine write_eigval(max_l,num_alpha,poly_order,eigval) + subroutine write_eigval(max_l, num_alpha, poly_order, eigval) - implicit none + implicit none - integer, intent(in) :: max_l,num_alpha(0:),poly_order(0:) - real(dp), intent(in) :: eigval(:,0:,:) - integer :: ii,jj,kk,full,rest + integer, intent(in) :: max_l, num_alpha(0:), poly_order(0:) + real(dp), intent(in) :: eigval(:,0:,:) + integer :: ii, jj, full, rest - write(*,'(A)') ' ' - write(*,'(A)') 'EIGENVALUES UP/ Hartree' - do ii=0,max_l + write(*, '(A)') ' ' + write(*, '(A)') 'EIGENVALUES UP/ Hartree' + do ii = 0, max_l - full=num_alpha(ii)*poly_order(ii)/5 - rest=num_alpha(ii)*poly_order(ii)-full*5 + full = num_alpha(ii) * poly_order(ii) / 5 + rest = num_alpha(ii) * poly_order(ii) - full * 5 - write(*,'(A,I3)') 'l=',ii - do jj=1,full - write(*,'(5F15.6)') eigval(1,ii,jj*5-4),eigval(1,ii,jj*5-3),& - &eigval(1,ii,jj*5-2),eigval(1,ii,jj*5-1),eigval(1,ii,jj*5) - write(*,'(A)') ' ' + write(*, '(A,I3)') 'l=', ii + do jj = 1, full + write(*, '(5F15.6)') eigval(1, ii, jj * 5 - 4), eigval(1, ii, jj * 5 - 3),& + &eigval(1, ii, jj * 5 - 2), eigval(1, ii, jj * 5 - 1), eigval(1, ii, jj * 5) + write(*, '(A)') ' ' end do - if (rest==4) then - write(*,'(4F15.6)') eigval(1,ii,5*full+1),eigval(1,ii,5*full+2),& - &eigval(1,ii,5*full+3),eigval(1,ii,5*full+4) - else if (rest==3) then - write(*,'(3F15.6)') eigval(1,ii,5*full+1),eigval(1,ii,5*full+2),& - &eigval(1,ii,5*full+3) - else if (rest==2) then - write(*,'(2F15.6)') eigval(1,ii,5*full+1),eigval(1,ii,5*full+2) - else if (rest==1) then - write(*,'(1F15.6)') eigval(1,ii,5*full+1) + if (rest == 4) then + write(*, '(4F15.6)') eigval(1, ii, 5 * full + 1), eigval(1, ii, 5 * full + 2),& + &eigval(1, ii, 5 * full + 3), eigval(1, ii, 5 * full + 4) + else if (rest == 3) then + write(*, '(3F15.6)') eigval(1, ii, 5 * full + 1), eigval(1, ii, 5 * full + 2),& + &eigval(1, ii, 5 * full + 3) + else if (rest == 2) then + write(*, '(2F15.6)') eigval(1, ii, 5 * full + 1), eigval(1, ii, 5 * full + 2) + else if (rest == 1) then + write(*, '(1F15.6)') eigval(1, ii, 5 * full + 1) end if - write(*,'(A)') ' ' + write(*, '(A)') ' ' end do - write(*,'(A)') ' ' - write(*,'(A)') 'EIGENVALUES DWN/ Hartree' - do ii=0,max_l - - full=num_alpha(ii)*poly_order(ii)/5 - rest=num_alpha(ii)*poly_order(ii)-full*5 - - write(*,'(A,I3)') 'l=',ii - do jj=1,full - write(*,'(5F15.6)') eigval(2,ii,jj*5-4),eigval(2,ii,jj*5-3),& - &eigval(2,ii,jj*5-2),eigval(2,ii,jj*5-1),eigval(2,ii,jj*5) - write(*,'(A)') ' ' + write(*, '(A)') ' ' + write(*, '(A)') 'EIGENVALUES DWN/ Hartree' + do ii = 0, max_l + + full = num_alpha(ii) * poly_order(ii) / 5 + rest = num_alpha(ii) * poly_order(ii) - full * 5 + + write(*, '(A,I3)') 'l=', ii + do jj = 1, full + write(*, '(5F15.6)') eigval(2, ii, jj * 5 - 4), eigval(2, ii, jj * 5 - 3),& + &eigval(2, ii, jj * 5 - 2), eigval(2, ii, jj * 5 - 1), eigval(2, ii, jj * 5) + write(*, '(A)') ' ' end do - if (rest==4) then - write(*,'(4F15.6)') eigval(2,ii,5*full+1),eigval(2,ii,5*full+2),& - &eigval(2,ii,5*full+3),eigval(2,ii,5*full+4) - else if (rest==3) then - write(*,'(3F15.6)') eigval(2,ii,5*full+1),eigval(2,ii,5*full+2),& - &eigval(2,ii,5*full+3) - else if (rest==2) then - write(*,'(2F15.6)') eigval(2,ii,5*full+1),eigval(2,ii,5*full+2) - else if (rest==1) then - write(*,'(1F15.6)') eigval(2,ii,5*full+1) + if (rest == 4) then + write(*, '(4F15.6)') eigval(2, ii, 5 * full + 1), eigval(2, ii, 5 * full + 2),& + &eigval(2, ii, 5 * full + 3), eigval(2, ii, 5 * full + 4) + else if (rest == 3) then + write(*, '(3F15.6)') eigval(2, ii, 5 * full + 1), eigval(2, ii, 5 * full + 2),& + &eigval(2, ii, 5 * full + 3) + else if (rest == 2) then + write(*, '(2F15.6)') eigval(2, ii, 5 * full + 1), eigval(2, ii, 5 * full + 2) + else if (rest == 1) then + write(*, '(1F15.6)') eigval(2, ii, 5 * full + 1) end if - write(*,'(A)') ' ' - write(*,'(A)') ' ' + write(*, '(A)') ' ' + write(*, '(A)') ' ' end do - write(*,'(A)') ' ' + write(*, '(A)') ' ' end subroutine write_eigval - + subroutine write_eigvec(max_l, num_alpha, alpha, poly_order, eigval, cof) + integer, intent(in) :: max_l, num_alpha(0:) real(dp), intent(in) :: alpha(0:,:) integer, intent(in) :: poly_order(0:) - real(dp), intent(in) :: eigval(:,0:,:), cof(:,0:,:,:) + real(dp), intent(in) :: eigval(:,0:,:), cof(:,0:,:,:) integer :: ispin, ii, jj, kk, ll, nn - character(4), parameter :: spinname(2) = (/ "UP ", "DOWN" /) + character(4), parameter :: spinname(2) = ["UP ", "DOWN"] write(*,*) write(*, "(A)") "EIGENVALUES:" @@ -144,15 +150,15 @@ subroutine write_eigvec(max_l, num_alpha, alpha, poly_order, eigval, cof) do ispin = 1, 2 do jj = 0, max_l do ii = 1, num_alpha(jj) * poly_order(jj) - write(*, "(A,A,A,I1,A,I4,A,F20.8)") "Spin ", trim(spinname(ispin)), & - &", l = ", jj, & - &", eigenvalue", ii, ":", eigval(ispin, jj, ii) - write(*,'(A20,1X,A3,1X,A20)') "Alpha", "Pwr", "Coefficient" + write(*, "(A,A,A,I1,A,I4,A,F20.8)") "Spin ", trim(spinname(ispin)),& + & ", l = ", jj, & + & ", eigenvalue", ii, ":", eigval(ispin, jj, ii) + write(*, '(A20,1X,A3,1X,A20)') "Alpha", "Pwr", "Coefficient" nn = 0 do kk = 1, num_alpha(jj) do ll = 1, poly_order(jj) nn = nn + 1 - write(*,"(F20.8,1X,I3,1X,F20.8)") alpha(jj,kk), ll + jj - 1, & + write(*, "(F20.8,1X,I3,1X,F20.8)") alpha(jj, kk), ll + jj - 1, & &cof(ispin, jj, nn, ii) end do end do @@ -160,216 +166,193 @@ subroutine write_eigvec(max_l, num_alpha, alpha, poly_order, eigval, cof) end do end do end do - - end subroutine write_eigvec + end subroutine write_eigvec - subroutine write_moments(max_l,num_alpha,alpha,poly_order,problemsize,cof) + subroutine write_moments(max_l, num_alpha, alpha, poly_order, problemsize, cof) - integer, intent(in) :: max_l,problemsize + integer, intent(in) :: max_l, problemsize integer, intent(in) :: num_alpha(0:) integer, intent(in) :: poly_order(0:) - real(dp), intent(in) :: alpha(0:,:),cof(:,0:,:,:) + real(dp), intent(in) :: alpha(0:,:), cof(:,0:,:,:) real(dp), allocatable :: moment(:,:,:,:) - integer :: exponents(5) - integer :: ii,jj,kk + integer, parameter :: exponents(5) = [-3, -1, 0, 1, 2] + integer :: ii, jj, kk - DATA exponents/-3,-1,0,1,2/ - - allocate(moment(2,0:max_l,5,problemsize)) - moment=0.0d0 + allocate(moment(2, 0:max_l, 5, problemsize)) + moment(:,:,:,:) = 0.0_dp ! get expectation values , , <1>, , - call moments(moment(:,:,1,:),max_l,num_alpha,alpha,poly_order,problemsize,& - &cof,-3) - call moments(moment(:,:,2,:),max_l,num_alpha,alpha,poly_order,problemsize,& - &cof,-1) - ! call moments(moment(:,:,3,:),max_l,num_alpha,alpha,poly_order,problemsize,& - ! &cof,0) - call moments(moment(:,:,4,:),max_l,num_alpha,alpha,poly_order,problemsize,& - &cof,1) - call moments(moment(:,:,5,:),max_l,num_alpha,alpha,poly_order,problemsize,& - &cof,2) - - write(*,'(A)') 'WAVEFUNCTION EXPECTATION VALUES' - write(*,'(A)') '-------------------------------' - write(*,'(A)') ' ' + call moments(moment(:,:, 1, :), max_l, num_alpha, alpha, poly_order, cof, -3) + call moments(moment(:,:, 2, :), max_l, num_alpha, alpha, poly_order, cof, -1) + ! call moments(moment(:,: ,3, :), max_l, num_alpha, alpha, poly_order, cof, 0) + call moments(moment(:,:, 4, :), max_l, num_alpha, alpha, poly_order, cof, 1) + call moments(moment(:,:, 5, :), max_l, num_alpha, alpha, poly_order, cof, 2) + + write(*, '(A)') 'WAVEFUNCTION EXPECTATION VALUES' + write(*, '(A)') '-------------------------------' + write(*, '(A)') ' ' write(*,*) 'UP Electrons' - write(*,'(A)') ' ' - do ii=1,5 - if (ii/=3) then - write(*,'(A,I2,A)') ', ' - do jj=0,max_l - write(*,'(A,I3)') 'l= ',jj - do kk=1,num_alpha(jj)*poly_order(jj) - write(*,'(F12.4)') moment(1,jj,ii,kk) + write(*, '(A)') ' ' + do ii = 1, 5 + if (ii /= 3) then + write(*, '(A,I2,A)') ', ' + do jj = 0, max_l + write(*, '(A,I3)') 'l= ', jj + do kk = 1, num_alpha(jj) * poly_order(jj) + write(*, '(F12.4)') moment(1, jj, ii, kk) end do - write(*,'(A)') ' ' - write(*,'(A)') ' ' + write(*, '(A)') ' ' + write(*, '(A)') ' ' end do - write(*,'(A)') ' ' + write(*, '(A)') ' ' end if end do - write(*,'(A)') ' ' - write(*,'(A)') ' ' + write(*, '(A)') ' ' + write(*, '(A)') ' ' write(*,*) 'DOWN Electrons' - write(*,'(A)') ' ' - do ii=1,5 - if (ii/=3) then - write(*,'(A,I2,A)') ', ' - do jj=0,max_l - write(*,'(A,I3)') 'l= ',jj - do kk=1,num_alpha(jj)*poly_order(jj) - write(*,'(F12.4)') moment(2,jj,ii,kk) + write(*, '(A)') ' ' + do ii = 1, 5 + if (ii /= 3) then + write(*, '(A,I2,A)') ', ' + do jj = 0, max_l + write(*, '(A,I3)') 'l= ', jj + do kk = 1, num_alpha(jj) * poly_order(jj) + write(*, '(F12.4)') moment(2, jj, ii, kk) end do - write(*,'(A)') ' ' - write(*,'(A)') ' ' + write(*, '(A)') ' ' + write(*, '(A)') ' ' end do - write(*,'(A)') ' ' + write(*, '(A)') ' ' end if end do - deallocate(moment) - end subroutine write_moments - subroutine write_potentials_file_standard(num_mesh_points,abcissa,weight,& - &vxc,rho,nuc,p,max_l,num_alpha,poly_order,alpha,problemsize) + subroutine write_potentials_file_standard(num_mesh_points, abcissa, weight,& + &vxc, rho, nuc, p, max_l, num_alpha, poly_order, alpha, problemsize) ! write potentials and mesh info to file on standard (internal) integration mesh ! in principle one could read in the points from another file to have ! other meshes ! - - real(dp), intent(in) :: abcissa(:),weight(:),vxc(:,:),p(:,0:,:,:),alpha(0:,:) + real(dp), intent(in) :: abcissa(:), weight(:), vxc(:,:), p(:,0:,:,:), alpha(0:,:) real(dp), intent(in) :: rho(:,:) - integer, intent(in) :: num_mesh_points,nuc,max_l,num_alpha(0:) - integer, intent(in) :: poly_order(0:),problemsize - real(dp), allocatable :: cpot(:),ptot(:,:,:),rhotot(:) - real(dp) :: ecou,enuc,vxcint(2) + integer, intent(in) :: num_mesh_points, nuc, max_l, num_alpha(0:) + integer, intent(in) :: poly_order(0:), problemsize + real(dp), allocatable :: cpot(:), ptot(:,:,:), rhotot(:) + real(dp) :: ecou, enuc, vxcint(2) integer :: ii allocate(cpot(num_mesh_points)) - allocate(ptot(0:max_l,problemsize,problemsize)) + allocate(ptot(0:max_l, problemsize, problemsize)) allocate(rhotot(num_mesh_points)) - cpot=0.0d0 - ptot=0.0d0 - rhotot=0.0d0 - ecou=0.0d0 - enuc=0.0d0 - vxcint=0.0d0 + cpot(:) = 0.0_dp + ptot(:,:,:) = 0.0_dp + rhotot(:) = 0.0_dp + ecou = 0.0_dp + enuc = 0.0_dp + vxcint(:) = 0.0_dp - ptot(:,:,:)=p(1,:,:,:)+p(2,:,:,:) - rhotot(:)=rho(:,1)+rho(:,2) + ptot(:,:,:) = p(1, :,:,:) + p(2, :,:,:) + rhotot(:) = rho(:, 1) + rho(:, 2) - call cou_pot(ptot(:,:,:),max_l,num_alpha,poly_order,alpha,problemsize,& - &num_mesh_points,abcissa,cpot) + call cou_pot(ptot, max_l, num_alpha, poly_order, alpha, problemsize, num_mesh_points, abcissa,& + & cpot) - open(95,FILE='pot.dat',FORM='formatted',STATUS='unknown') - write(95,'(A)') '# 1st line: number of mesh points' - write(95,'(A)') '# abcissa weight nuclear coulomb dft-vxc_up dft-vxc_down' - write(95,'(I0)') num_mesh_points + open(95, FILE='pot.dat', FORM='formatted', STATUS='unknown') + write(95, '(A)') '# 1st line: number of mesh points' + write(95, '(A)') '# abcissa weight nuclear coulomb dft-vxc_up dft-vxc_down' + write(95, '(I0)') num_mesh_points - do ii=1,num_mesh_points - write(95,'(6ES21.12E3)') abcissa(ii), weight(ii), & - &real(-nuc,dp) / abcissa(ii), cpot(ii), vxc(ii,1), vxc(ii,2) + do ii = 1, num_mesh_points + write(95, '(6ES21.12E3)') abcissa(ii), weight(ii), real(- nuc, dp) / abcissa(ii), cpot(ii),& + & vxc(ii, 1), vxc(ii, 2) end do close(95) - do ii=1,num_mesh_points - ecou=ecou+weight(ii)*rhotot(ii)*cpot(ii)*abcissa(ii)**2 - enuc=enuc-weight(ii)*rhotot(ii)*real(nuc,dp)*abcissa(ii) - vxcint(1)=vxcint(1)+weight(ii)*rho(ii,1)*vxc(ii,1)*abcissa(ii)**2 - vxcint(2)=vxcint(2)+weight(ii)*rho(ii,2)*vxc(ii,2)*abcissa(ii)**2 + do ii = 1, num_mesh_points + ecou = ecou + weight(ii) * rhotot(ii) * cpot(ii) * abcissa(ii)**2 + enuc = enuc - weight(ii) * rhotot(ii) * real(nuc, dp) * abcissa(ii) + vxcint(1) = vxcint(1) + weight(ii) * rho(ii, 1) * vxc(ii, 1) * abcissa(ii)**2 + vxcint(2) = vxcint(2) + weight(ii) * rho(ii, 2) * vxc(ii, 2) * abcissa(ii)**2 end do - write(*,'(A,F18.6)') 'Nuc. attr. energy from potential in pot.dat: ',& - &enuc - write(*,'(A,F18.6)') 'Coulomb energy from potential in pot.dat: ',& - &0.5d0*ecou - write(*,'(A,2F18.6)') 'V_xc integrals from pot.dat, Up/Dwn: ',& - &vxcint(1),vxcint(2) - - deallocate(cpot) - deallocate(ptot) - deallocate(rhotot) + write(*, '(A,F18.6)') 'Nuc. attr. energy from potential in pot.dat: ', enuc + write(*, '(A,F18.6)') 'Coulomb energy from potential in pot.dat: ', 0.5_dp * ecou + write(*, '(A,2F18.6)') 'V_xc integrals from pot.dat, Up/Dwn: ', vxcint(1), vxcint(2) end subroutine write_potentials_file_standard - - subroutine write_densities_file_standard(num_mesh_points,abcissa,weight,& - &rho,drho,ddrho) - ! write potentials and mesh info to file on standard (internal) integration mesh - ! in principle one could read in the points from another file to have - ! other meshes ! + !> Writes potentials and mesh info to file on standard (internal) integration mesh; + !! in principle one could read in the points from another file to have other meshes! + subroutine write_densities_file_standard(num_mesh_points, abcissa, weight, rho, drho, ddrho) - real(dp), intent(in) :: abcissa(:),weight(:) - real(dp), intent(in) :: rho(:,:),drho(:,:),ddrho(:,:) + real(dp), intent(in) :: abcissa(:), weight(:) + real(dp), intent(in) :: rho(:,:), drho(:,:), ddrho(:,:) integer, intent(in) :: num_mesh_points - real(dp) :: enumber,zeta,r_seitz + real(dp) :: enumber, zeta, r_seitz integer :: ii - open(95,FILE='dens.dat',FORM='formatted',STATUS='unknown') - write(95,'(A)') '# 1st line: number of mesh points' - write(95,'(A)') '# rho and r_seitz are calculated from total density' - write(95,'(A)') '# zeta and r_seitz only correct of rho > 1d-12' - write(95,'(A)') '' - write(95,'(A)') '# abcissa weight rho drho ddrho zeta r_seitz' - write(95,'(I0)') num_mesh_points + open(95, file='dens.dat', form='formatted', status='unknown') + write(95, '(A)') '# 1st line: number of mesh points' + write(95, '(A)') '# rho and r_seitz are calculated from total density' + write(95, '(A)') '# zeta and r_seitz only correct of rho > 1d-12' + write(95, '(A)') '' + write(95, '(A)') '# abcissa weight rho drho ddrho zeta r_seitz' + write(95, '(I0)') num_mesh_points - enumber=0.0d0 + enumber = 0.0_dp ! note division of total density by 4*pi in calculation of r_seitz ! commonly r_seitz=((4*pi*rho)/3)**(-1/3) but our rho is from the ! radial part only and the angular part must be taken into account ! explicitely; during integration this happens implicitely, see enumber - do ii=1,num_mesh_points + do ii = 1, num_mesh_points - if ((rho(ii,1)+rho(ii,2))>1.0d-12) then - zeta=(rho(ii,1)-rho(ii,2))/(rho(ii,1)+rho(ii,2)) - r_seitz=(4.0d0*pi/3.0d0*((rho(ii,1)+rho(ii,2))/4.0d0/pi))**(-1.0d0/3.0d0) + if ((rho(ii, 1) + rho(ii, 2)) > 1.0d-12) then + zeta = (rho(ii, 1) - rho(ii, 2)) / (rho(ii, 1) + rho(ii, 2)) + r_seitz = (4.0_dp * pi / 3.0_dp& + & * ((rho(ii, 1) + rho(ii, 2)) / 4.0_dp / pi))**(-1.0_dp / 3.0_dp) else - zeta=0.0d0 - r_seitz=0.0d0 + zeta = 0.0_dp + r_seitz = 0.0_dp end if - write(95,'(7ES21.12E3)') abcissa(ii), weight(ii), rho(ii,1)+rho(ii,2), & - &drho(ii,1)+drho(ii,2), ddrho(ii,1)+ddrho(ii,2), zeta, r_seitz - enumber=enumber+weight(ii) * (rho(ii,1)+rho(ii,2)) * abcissa(ii)**2 + write(95, '(7ES21.12E3)') abcissa(ii), weight(ii), rho(ii, 1) + rho(ii, 2),& + & drho(ii, 1) + drho(ii, 2), ddrho(ii, 1) + ddrho(ii, 2), zeta, r_seitz + enumber = enumber + weight(ii) * (rho(ii, 1) + rho(ii, 2)) * abcissa(ii)**2 end do close(95) - write(*,'(A,F18.6)') 'Total number of electrons from dens.dat : ',enumber + write(*, '(A,F18.6)') 'Total number of electrons from dens.dat : ', enumber end subroutine write_densities_file_standard + !> Writes potentials and mesh info to file on standard (internal) integration mesh; + !! in principle one could read in the points from another file to have other meshes! + subroutine write_waves_file_standard(num_mesh_points, abcissa, weight, alpha, num_alpha,& + & poly_order, max_l, problemsize, occ, qnvalorbs, cof) - subroutine write_waves_file_standard(num_mesh_points,abcissa,weight,& - &alpha,num_alpha,poly_order,max_l,problemsize,occ, qnvalorbs, cof) - ! write potentials and mesh info to file on standard (internal) integration mesh - ! in principle one could read in the points from another file to have - ! other meshes ! - - - real(dp), intent(in) :: abcissa(:),weight(:), alpha(0:,:) + real(dp), intent(in) :: abcissa(:), weight(:), alpha(0:,:) real(dp), intent(in) :: occ(:,0:,:) - integer, intent(in) :: num_mesh_points,num_alpha(0:),poly_order(0:),max_l + integer, intent(in) :: num_mesh_points, num_alpha(0:), poly_order(0:), max_l integer, intent(in) :: problemsize integer, intent(in) :: qnvalorbs(:,0:) real(dp), intent(inout) :: cof(:,0:,:,:) real(dp), allocatable :: coftot(:) - real(dp) :: xx, val - integer :: ii,jj,kk,ll,mm, ispin, imax - character(20) :: fname + real(dp) :: xx + integer :: ii, jj, kk, ll, mm, ispin, imax + character(len=20) :: fname real(dp), allocatable :: wavedata(:) allocate(wavedata(num_mesh_points)) @@ -385,44 +368,36 @@ subroutine write_waves_file_standard(num_mesh_points,abcissa,weight,& end if do ispin = 1, 2 if (ispin == 1) then - write(fname, "(A,I2.2,A,A)") "wave_", mm + jj, orbnames(jj), & - & "_up.dat" + write(fname, "(A,I2.2,A,A)") "wave_", mm + jj, orbnames(jj), "_up.dat" else - write(fname, "(A,I2.2,A,A)") "wave_", mm + jj, orbnames(jj), & - & "_dn.dat" + write(fname, "(A,I2.2,A,A)") "wave_", mm + jj, orbnames(jj), "_dn.dat" end if open(95, file=fname, form='formatted', status='unknown') - write(95,'(A)') '# 1st line: number of mesh points' - write(95,'(A)') '# abcissa weight wavefunction wavefunction_1st& - & wavefunction_2nd' - write(95,'(I0)') num_mesh_points - write(95,'(A,I3,A,I3,A,F8.4)') '# Principal QN= ', mm, ' , l= ', & - &jj,' , Occupation= ', occ(1,jj,mm) + occ(2,jj,mm) + write(95, '(A)') '# 1st line: number of mesh points' + write(95, '(A)') '# abcissa weight wavefunction wavefunction_1st wavefunction_2nd' + write(95, '(I0)') num_mesh_points + write(95, '(A,I3,A,I3,A,F8.4)') '# Principal QN= ', mm, ' , l= ', jj,& + & ' , Occupation= ', occ(1, jj, mm) + occ(2, jj, mm) - coftot(:) = cof(ispin,jj,:,mm) + coftot(:) = cof(ispin, jj, :, mm) do ii = 1, num_mesh_points xx = abcissa(ii) - wavedata(ii) = wavefunction(coftot, alpha, num_alpha, & - & poly_order, jj, xx) + wavedata(ii) = wavefunction(coftot, alpha, num_alpha, poly_order, jj, xx) end do imax = maxloc(abs(abcissa * wavedata), dim=1) if (wavedata(imax) < 0.0_dp) then coftot = -coftot - cof(1,jj,:,mm) = coftot - write(*, "(A,I3,A,I3)") "Changing wavefunction sign: n =", & - & mm + jj, ", l =", jj + cof(1, jj, :, mm) = coftot + write(*, "(A,I3,A,I3)") "Changing wavefunction sign: n =", mm + jj, ", l =", jj end if do ii = 1, num_mesh_points xx = abcissa(ii) - write(95,'(5ES21.12E3)') xx, weight(ii), & - & wavefunction( & - & coftot, alpha, num_alpha, poly_order, jj, xx), & - & wavefunction_1st( & - & coftot, alpha, num_alpha, poly_order, jj, xx), & - & wavefunction_2nd( & - & coftot, alpha, num_alpha, poly_order, jj, xx) + write(95, '(5ES21.12E3)') xx, weight(ii),& + & wavefunction(coftot, alpha, num_alpha, poly_order, jj, xx),& + & wavefunction_1st(coftot, alpha, num_alpha, poly_order, jj, xx),& + & wavefunction_2nd(coftot, alpha, num_alpha, poly_order, jj, xx) end do close(95) end do @@ -430,47 +405,41 @@ subroutine write_waves_file_standard(num_mesh_points,abcissa,weight,& end do end do - deallocate(coftot) - deallocate(wavedata) - end subroutine write_waves_file_standard + subroutine cusp_values(max_l, cof, p, alpha, num_alpha, poly_order) - subroutine cusp_values(max_l,occ,cof,p,alpha,num_alpha,poly_order,nuc) - - - integer, intent(in) :: max_l,num_alpha(0:),poly_order(0:),nuc - real(dp), intent(in) :: cof(:,0:,:,:),alpha(0:,:),occ(:,0:,:),p(:,0:,:,:) + integer, intent(in) :: max_l, num_alpha(0:), poly_order(0:) + real(dp), intent(in) :: cof(:,0:,:,:), alpha(0:,:), p(:,0:,:,:) integer :: ii - write(*,'(A)') 'Cusp Values ' - write(*,'(A)') '------------' + write(*, '(A)') 'Cusp Values ' + write(*, '(A)') '------------' - ii=0 + ii = 0 - write(*,'(A,F14.6)') '1s, UP ',& - &-wavefunction_1st(cof(1,ii,:,1),alpha,num_alpha,poly_order,ii,0.0d0)/& - &wavefunction(cof(1,ii,:,1),alpha,num_alpha,poly_order,ii,0.0d0) - write(*,'(A,F14.6)') '1s, DWN ',& - &-wavefunction_1st(cof(2,ii,:,1),alpha,num_alpha,poly_order,ii,0.0d0)/& - &wavefunction(cof(2,ii,:,1),alpha,num_alpha,poly_order,ii,0.0d0) + write(*, '(A,F14.6)') '1s, UP ',& + & - wavefunction_1st(cof(1, ii, :, 1), alpha, num_alpha, poly_order, ii, 0.0_dp)& + & / wavefunction(cof(1, ii, :, 1), alpha, num_alpha, poly_order, ii, 0.0_dp) + write(*, '(A,F14.6)') '1s, DWN ',& + & - wavefunction_1st(cof(2, ii, :, 1), alpha, num_alpha, poly_order, ii, 0.0_dp)& + & / wavefunction(cof(2, ii, :, 1), alpha, num_alpha, poly_order, ii, 0.0_dp) - write(*,'(A,F14.6)') 'Total density UP ',& - &-density_at_point_1st(p(1,:,:,:),max_l,num_alpha,poly_order,alpha,0.0d0)& - &/density_at_point(p(1,:,:,:),max_l,num_alpha,poly_order,alpha,0.0d0)/2.0d0 - write(*,'(A,F14.6)') 'Total density DWN ',& - &-density_at_point_1st(p(2,:,:,:),max_l,num_alpha,poly_order,alpha,0.0d0)& - &/density_at_point(p(2,:,:,:),max_l,num_alpha,poly_order,alpha,0.0d0)/2.0d0 + write(*, '(A,F14.6)') 'Total density UP ',& + & - density_at_point_1st(p(1, :, :, :), max_l, num_alpha, poly_order, alpha, 0.0_dp)& + & / density_at_point(p(1, :, :, :), max_l, num_alpha, poly_order, alpha, 0.0_dp) / 2.0_dp + write(*, '(A,F14.6)') 'Total density DWN ',& + & - density_at_point_1st(p(2, :, :, :), max_l, num_alpha, poly_order, alpha, 0.0_dp)& + & / density_at_point(p(2, :, :, :), max_l, num_alpha, poly_order, alpha, 0.0_dp) / 2.0_dp - write(*,'(A)') ' ' + write(*, '(A)') ' ' end subroutine cusp_values - - subroutine write_energies_tagged(ekin, enuc, ecoul, exc, econf, etot, zora,& - & eigvals, occ) + subroutine write_energies_tagged(ekin, enuc, ecoul, exc, econf, etot, zora, eigvals, occ) + real(dp), intent(in) :: ekin, enuc, ecoul, exc, etot, econf logical, intent(in) :: zora real(dp), intent(in) :: eigvals(:,0:,:), occ(:,0:,:) @@ -484,36 +453,35 @@ subroutine write_energies_tagged(ekin, enuc, ecoul, exc, econf, etot, zora,& call writetag(twriter, fp, "zora", zora) call writetag(twriter, fp, "kinetic_energy", ekin) call writetag(twriter, fp, "nuclear_energy", enuc) - call writetag(twriter, fp, "coulomb_energy", 0.5d0*ecoul) + call writetag(twriter, fp, "coulomb_energy", 0.5_dp * ecoul) call writetag(twriter, fp, "xc_energy", exc) call writetag(twriter, fp, "confinement_energy", econf) call writetag(twriter, fp, "total_energy", etot) !! Transposing eigenvalues to appear in a more convinient order - call writetag(twriter, fp, "eigenlevels_up", transpose(eigvals(1,:,:))) - call writetag(twriter, fp, "eigenlevels_dn", transpose(eigvals(2,:,:))) - call writetag(twriter, fp, "occupations_up", transpose(occ(1,:,:))) - call writetag(twriter, fp, "occupations_dn", transpose(occ(2,:,:))) + call writetag(twriter, fp, "eigenlevels_up", transpose(eigvals(1, :, :))) + call writetag(twriter, fp, "eigenlevels_dn", transpose(eigvals(2, :, :))) + call writetag(twriter, fp, "occupations_up", transpose(occ(1, :, :))) + call writetag(twriter, fp, "occupations_dn", transpose(occ(2, :, :))) close(fp) end subroutine write_energies_tagged - subroutine write_wave_coeffs_file(max_l, num_alpha, poly_order, cof, & - &alpha, occ, qnvalorbs) + subroutine write_wave_coeffs_file(max_l, num_alpha, poly_order, cof, alpha, occ, qnvalorbs) + integer, intent(in) :: max_l integer, intent(in) :: num_alpha(0:), poly_order(0:) real(dp), intent(in) :: cof(:,0:,:,:), alpha(0:,:), occ(:,0:,:) integer, intent(in) :: qnvalorbs(:,0:) - integer :: fp, ii, ll, ncoeff + integer :: fp, ii, ll type(TTaggedwriter) :: twriter - character(20) :: fname + character(len=20) :: fname real(dp), allocatable :: coeffs(:,:) call TTaggedwriter_init(twriter) fp = 95 do ll = 0, max_l - ncoeff = poly_order(ll) * num_alpha(ll) allocate(coeffs(poly_order(ll), num_alpha(ll))) do ii = 1, num_alpha(ll) * poly_order(ll) if (ii < qnvalorbs(1, ll) .or. ii > qnvalorbs(2, ll)) then @@ -521,8 +489,8 @@ subroutine write_wave_coeffs_file(max_l, num_alpha, poly_order, cof, & end if write(fname, "(A,I2.2,A,A)") "coeffs_", ii + ll, orbnames(ll), ".tag" open(fp, file=fname, status="replace", action="write") - call writetag(twriter, fp, "exponents", alpha(ll,:num_alpha(ll))) - call convcoeffs(cof(1,ll,:,ii), alpha(ll,:num_alpha(ll)), ll, coeffs) + call writetag(twriter, fp, "exponents", alpha(ll, :num_alpha(ll))) + call convcoeffs(cof(1, ll, :, ii), alpha(ll, :num_alpha(ll)), ll, coeffs) call writetag(twriter, fp, "coefficients", coeffs) call writetag(twriter, fp, "occupation", sum(occ(:, ll, ii))) close(fp) @@ -533,6 +501,7 @@ subroutine write_wave_coeffs_file(max_l, num_alpha, poly_order, cof, & contains subroutine convcoeffs(cof, alpha, angmom, normcoeffs) + real(dp), intent(in) :: cof(:), alpha(:) integer, intent(in) :: angmom real(dp), intent(out) :: normcoeffs(:,:) @@ -542,20 +511,18 @@ subroutine convcoeffs(cof, alpha, angmom, normcoeffs) npow = size(normcoeffs, dim=1) nalpha = size(normcoeffs, dim=2) - normcoeffs = reshape(cof, [ npow, nalpha ]) + normcoeffs = reshape(cof, [npow, nalpha]) do ialpha = 1, nalpha aa = alpha(ialpha) do ipow = 1, npow - normfac = (2.0_dp * aa)**(ipow + angmom) * sqrt(2.0_dp * aa) & - &/ sqrt(fak(2 * (ipow + angmom))) + normfac = (2.0_dp * aa)**(ipow + angmom) * sqrt(2.0_dp * aa)& + & / sqrt(fak(2 * (ipow + angmom))) normcoeffs(ipow, ialpha) = normfac * normcoeffs(ipow, ialpha) end do end do end subroutine convcoeffs - end subroutine write_wave_coeffs_file - end module output diff --git a/slateratom/lib/total_energy.f90 b/slateratom/lib/total_energy.f90 index 3481f97c..6e44f7e7 100644 --- a/slateratom/lib/total_energy.f90 +++ b/slateratom/lib/total_energy.f90 @@ -1,197 +1,452 @@ +!> Module that provides routines for calculating the total energy of a system. module totalenergy use common_accuracy, only : dp - use common_constants - use dft + use dft, only : dft_exc_energy, dft_vxc_energy + use xcfunctionals, only : xcFunctional implicit none private - public :: total_energy, zora_total_energy - + public :: getTotalEnergy, getTotalEnergyZora + + contains - subroutine total_energy(t,u,nuc,vconf,j,k,p,max_l,num_alpha,poly_order,& - &problemsize,xcnr,num_mesh_points,weight,abcissa,rho,exc,& - &kinetic,nuclear,coulomb,exchange,confinement,etot) + !> Calculates total energy for non-ZORA calculations. + subroutine getTotalEnergy(tt, uu, nuc, vconf, jj, kk, kk_lr, pp, max_l, num_alpha, poly_order,& + & xcnr, num_mesh_points, weight, abcissa, rho, exc, camAlpha, camBeta, kinetic, nuclear,& + & coulomb, hf_x_energy, dft_xc_energy, confinement, total_energy) + + !> kinetic supervector + real(dp), intent(in) :: tt(0:,:,:) + + !> nucleus-electron supervector + real(dp), intent(in) :: uu(0:,:,:) + + !> nuclear charge, i.e. atomic number + integer, intent(in) :: nuc + + !> confinement supervector + real(dp), intent(in) :: vconf(0:,:,:) + + !> coulomb supermatrix + real(dp), intent(in) :: jj(0:,:,:,0:,:,:) + + !> (hf) exchange supermatrix + real(dp), intent(in) :: kk(0:,:,:,0:,:,:) + + !> (hf) exchange supermatrix (long-range, range-separated version) + real(dp), intent(in) :: kk_lr(0:,:,:,0:,:,:) + + !> density matrix supervector + real(dp), intent(in) :: pp(:,0:,:,:) - ! Calculate total energy for non-ZORA calculations + !> maximum angular momentum + integer, intent(in) :: max_l - real(dp), intent(in) :: t(0:,:,:),u(0:,:,:),j(0:,:,:,0:,:,:),k(0:,:,:,0:,:,:) - real(dp), intent(in) :: vconf(0:,:,:),abcissa(:) - real(dp), intent(in) :: p(:,0:,:,:),weight(:),rho(:,:),exc(:) - integer, intent(in) :: max_l,num_alpha(0:),poly_order(0:),problemsize,nuc,xcnr + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) + + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) + + !> identifier of exchange-correlation type + integer, intent(in) :: xcnr + + !> number of numerical integration points integer, intent(in) :: num_mesh_points - real(dp), intent(out) :: etot,kinetic,nuclear,coulomb,exchange,confinement - real(dp) :: dummy1,dummy2,dummy3 - integer :: ii,jj,kk,ll,mm,nn,oo,pp,qq,rr,ss,tt,uu,vv,ww - real(dp), allocatable :: p_total(:,:,:) - allocate(p_total(0:max_l,problemsize,problemsize)) - p_total=0.0d0 - - etot=0.0d0 - kinetic=0.0d0 - nuclear=0.0d0 - confinement=0.0d0 - coulomb=0.0d0 - exchange=0.0d0 - dummy1=0.0d0 - dummy2=0.0d0 - - ! Build total density matrix - do ii=0,max_l - do jj=1,problemsize - do kk=1,problemsize - p_total(ii,jj,kk)=p(1,ii,jj,kk)+p(2,ii,jj,kk) - end do - end do - end do + !> numerical integration weights + real(dp), intent(in) :: weight(:) - ! get total energy + !> numerical integration abcissas + real(dp), intent(in) :: abcissa(:) + + !> density on grid + real(dp), intent(in) :: rho(:,:) - call core_hamiltonian_energies(t,u,vconf,p_total,max_l,num_alpha,& - &poly_order,nuc,kinetic,nuclear,confinement) + !> exc energy density on grid + real(dp), intent(in) :: exc(:) - dummy1=nuclear+kinetic+confinement + !> CAM alpha parameter + real(dp), intent(in) :: camAlpha - call coulomb_hf_ex_energy(j,k,p_total,max_l,num_alpha,poly_order,xcnr,& - &coulomb,exchange) + !> CAM beta parameter + real(dp), intent(in) :: camBeta - if (xcnr>0) then + !> resulting energy portions + real(dp), intent(out) :: kinetic, nuclear, coulomb, hf_x_energy, dft_xc_energy, confinement - exchange=0.0d0 - call dft_exc_energy(num_mesh_points,rho,exc,weight,abcissa,& - &xcnr,exchange) + !> resulting total energy + real(dp), intent(out) :: total_energy + !! exchange energy contribution of long-range Hartree-Fock exchange matrix + real(dp) :: hf_x_energy_lr + + !! density matrix supervector (spins summed up) + real(dp), allocatable :: p_total(:,:,:) + + !! auxiliary variable, i.e. (nuclear + kinetic + confinement) + real(dp) :: dummy1 + + total_energy = 0.0_dp + kinetic = 0.0_dp + nuclear = 0.0_dp + dft_xc_energy = 0.0_dp + confinement = 0.0_dp + coulomb = 0.0_dp + hf_x_energy = 0.0_dp + hf_x_energy_lr = 0.0_dp + + ! build total density matrix + p_total = pp(1, :,:,:) + pp(2, :,:,:) + + ! get total energy + call core_hamiltonian_energies(tt, uu, vconf, p_total, max_l, num_alpha, poly_order, nuc,& + & kinetic, nuclear, confinement) + + dummy1 = nuclear + kinetic + confinement + + ! get Coulomb and HF exchange contributions + coulomb = coulomb_energy(jj, p_total, max_l, num_alpha, poly_order) + if (xcnr == xcFunctional%HF_Exchange) then + hf_x_energy = hf_ex_energy(kk, pp, max_l, num_alpha, poly_order) + elseif (xcFunctional%isLongRangeCorrected(xcnr)) then + hf_x_energy = hf_ex_energy(kk_lr, pp, max_l, num_alpha, poly_order) + elseif (xcnr == xcFunctional%HYB_B3LYP) then + hf_x_energy = hf_ex_energy(kk, pp, max_l, num_alpha, poly_order) + ! B3LYP requires 0.20 * HF exchange + hf_x_energy = 0.20_dp * hf_x_energy + elseif (xcnr == xcFunctional%HYB_PBE0) then + hf_x_energy = hf_ex_energy(kk, pp, max_l, num_alpha, poly_order) + ! PBE0 with camAlpha * HFX + hf_x_energy = camAlpha * hf_x_energy + elseif (xcFunctional%isCAMY(xcnr)) then + hf_x_energy = hf_ex_energy(kk, pp, max_l, num_alpha, poly_order) + hf_x_energy_lr = hf_ex_energy(kk_lr, pp, max_l, num_alpha, poly_order) + if (xcnr == xcFunctional%CAMY_B3LYP) then + ! CAMY-B3LYP parameters a=0.20, b=0.72, c=0.81 (libXC defaults) + hf_x_energy = camAlpha * hf_x_energy + hf_x_energy_lr = camBeta * hf_x_energy_lr + hf_x_energy = hf_x_energy + hf_x_energy_lr + elseif (xcnr == xcFunctional%CAMY_PBEh) then + ! CAMY-PBEh + hf_x_energy = camAlpha * hf_x_energy + hf_x_energy_lr = camBeta * hf_x_energy_lr + hf_x_energy = hf_x_energy + hf_x_energy_lr + end if end if - ! make sure total energy breakdown agrees with total energy + ! pure HF: + ! coulomb = P^Tot J P^Tot. The Coulomb energy is half of that. + ! exchange = -P^up K P^up - -P^dn K P^dn. The exchange energy is half of that. - if (xcnr==0) then - etot=dummy1+0.5d0*coulomb+0.5d0*exchange + ! DFT exchange-correlation energy + if (.not. (xcnr == xcFunctional%HF_Exchange)) then + call dft_exc_energy(num_mesh_points, rho, exc, weight, abcissa, dft_xc_energy) + end if + + ! pure HF + if (xcnr == xcFunctional%HF_Exchange) then + total_energy = dummy1 + 0.5_dp * coulomb + 0.5_dp * hf_x_energy + ! (semi-)local functionals + elseif ((xcnr == xcFunctional%X_Alpha) .or. xcFunctional%isLDA(xcnr)& + & .or. xcFunctional%isGGA(xcnr)) then + total_energy = dummy1 + 0.5_dp * coulomb + dft_xc_energy + ! global hybrids, LC, CAM functionals else - etot=dummy1+0.5d0*coulomb+exchange + total_energy = dummy1 + 0.5_dp * coulomb + dft_xc_energy + 0.5_dp * hf_x_energy end if - ! write(*,*) 'TOTAL ENERGY',hf_total_energy + end subroutine getTotalEnergy - end subroutine total_energy - subroutine zora_total_energy(t,u,nuc,vconf,j,k,p,max_l,num_alpha,poly_order,& - &problemsize,xcnr,num_mesh_points,weight,abcissa,rho,exc,vxc,& - &eigval_scaled,occ,kinetic,nuclear,coulomb,exchange,confinement,etot) + !> Calculates total energy for ZORA, note that the total energy is not well defined here. + subroutine getTotalEnergyZora(tt, uu, nuc, vconf, jj, kk, kk_lr, pp, max_l, num_alpha,& + & poly_order, problemsize, xcnr, num_mesh_points, weight, abcissa, rho, exc, vxc,& + & eigval_scaled, occ, camAlpha, camBeta, kinetic, nuclear, coulomb, hf_x_energy,& + & dft_xc_energy, confinement, total_energy) - ! Calculate total energy for ZORA, note that total energy is not well defined - ! here ... + !> kinetic supervector + real(dp), intent(in) :: tt(0:,:,:) - real(dp), intent(in) :: t(0:,:,:),u(0:,:,:),j(0:,:,:,0:,:,:),k(0:,:,:,0:,:,:) - real(dp), intent(in) :: vconf(0:,:,:),abcissa(:),eigval_scaled(:,0:,:) - real(dp), intent(in) :: occ(:,0:,:) - real(dp), intent(in) :: p(:,0:,:,:),weight(:),rho(:,:),exc(:),vxc(:,:) - integer, intent(in) :: max_l,num_alpha(0:),poly_order(0:),problemsize,nuc,xcnr + !> nucleus-electron supervector + real(dp), intent(in) :: uu(0:,:,:) + + !> nuclear charge, i.e. atomic number + integer, intent(in) :: nuc + + !> confinement supervector + real(dp), intent(in) :: vconf(0:,:,:) + + !> coulomb supermatrix + real(dp), intent(in) :: jj(0:,:,:,0:,:,:) + + !> (hf) exchange supermatrix + real(dp), intent(in) :: kk(0:,:,:,0:,:,:) + + !> (hf) exchange supermatrix (long-range, range-separated version) + real(dp), intent(in) :: kk_lr(0:,:,:,0:,:,:) + + !> density matrix supervector + real(dp), intent(in) :: pp(:,0:,:,:) + + !> maximum angular momentum + integer, intent(in) :: max_l + + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) + + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) + + !> maximum size of the eigenproblem + integer, intent(in) :: problemsize + + !> identifier of exchange-correlation type + integer, intent(in) :: xcnr + + !> number of numerical integration points integer, intent(in) :: num_mesh_points - real(dp), intent(out) :: etot,kinetic,nuclear,coulomb,exchange,confinement - real(dp) :: dummy1,dummy2,dummy3(2),eigsum - integer :: ii,jj,kk,ll,mm,nn,oo,pp,qq,rr,ss,tt,uu,vv,ww + + !> numerical integration weights + real(dp), intent(in) :: weight(:) + + !> numerical integration abcissas + real(dp), intent(in) :: abcissa(:) + + !> density on grid + real(dp), intent(in) :: rho(:,:) + + !> exc energy density on grid + real(dp), intent(in) :: exc(:) + + !> xc potential on grid + real(dp), intent(in) :: vxc(:,:) + + !> zora scaled eigenvalues + real(dp), intent(in) :: eigval_scaled(:,0:,:) + + !> occupation numbers + real(dp), intent(in) :: occ(:,0:,:) + + !> CAM alpha parameter + real(dp), intent(in) :: camAlpha + + !> CAM beta parameter + real(dp), intent(in) :: camBeta + + !> resulting energy portions + real(dp), intent(out) :: kinetic, nuclear, coulomb, hf_x_energy, dft_xc_energy, confinement + + !> resulting total energy + real(dp), intent(out) :: total_energy + + !! exchange contribution of long-range Hartree-Fock exchange matrix + real(dp) :: hf_x_energy_lr + + !! density matrix supervector (spins summed up) real(dp), allocatable :: p_total(:,:,:) - allocate(p_total(0:max_l,problemsize,problemsize)) - p_total=0.0d0 - - etot=0.0d0 - kinetic=0.0d0 - nuclear=0.0d0 - confinement=0.0d0 - coulomb=0.0d0 - exchange=0.0d0 - dummy1=0.0d0 - dummy2=0.0d0 - eigsum=0.0d0 - - ! Build total density matrix - do ii=0,max_l - do jj=1,problemsize - do kk=1,problemsize - p_total(ii,jj,kk)=p(1,ii,jj,kk)+p(2,ii,jj,kk) + !> auxiliary variables + integer :: mm, nn, oo + real(dp) :: xc_pot, dummy(2), eigsum + + total_energy = 0.0_dp + kinetic = 0.0_dp + nuclear = 0.0_dp + confinement = 0.0_dp + coulomb = 0.0_dp + hf_x_energy = 0.0_dp + hf_x_energy_lr = 0.0_dp + dft_xc_energy = 0.0_dp + eigsum = 0.0_dp + + ! build total density matrix + p_total = pp(1, :,:,:) + pp(2, :,:,:) + + ! get total energy + call core_hamiltonian_energies(tt, uu, vconf, p_total, max_l, num_alpha, poly_order, nuc,& + & kinetic, nuclear, confinement) + + ! sum of occupied (scaled) eigenvalues + do mm = 1, 2 + do nn = 0, max_l + do oo = 1, problemsize + eigsum = eigsum + eigval_scaled(mm, nn, oo) * occ(mm, nn, oo) end do end do end do - ! get total energy + kinetic = eigsum + + ! get Coulomb and HF exchange contributions + coulomb = coulomb_energy(jj, p_total, max_l, num_alpha, poly_order) + if (xcnr == xcFunctional%HF_Exchange) then + hf_x_energy = hf_ex_energy(kk, pp, max_l, num_alpha, poly_order) + elseif (xcFunctional%isLongRangeCorrected(xcnr)) then + hf_x_energy = hf_ex_energy(kk_lr, pp, max_l, num_alpha, poly_order) + elseif (xcnr == xcFunctional%HYB_B3LYP) then + hf_x_energy = hf_ex_energy(kk, pp, max_l, num_alpha, poly_order) + ! B3LYP requires 0.20 * HF exchange + hf_x_energy = 0.20_dp * hf_x_energy + elseif (xcnr == xcFunctional%HYB_PBE0) then + hf_x_energy = hf_ex_energy(kk, pp, max_l, num_alpha, poly_order) + ! PBE0 with camAlpha * HFX + hf_x_energy = camAlpha * hf_x_energy + elseif (xcFunctional%isCAMY(xcnr)) then + hf_x_energy = hf_ex_energy(kk, pp, max_l, num_alpha, poly_order) + hf_x_energy_lr = hf_ex_energy(kk_lr, pp, max_l, num_alpha, poly_order) + if (xcnr == xcFunctional%CAMY_B3LYP) then + ! CAMY-B3LYP parameters a=0.20, b=0.72, c=0.81 (libXC defaults) + hf_x_energy = camAlpha * hf_x_energy + hf_x_energy_lr = camBeta * hf_x_energy_lr + hf_x_energy = hf_x_energy + hf_x_energy_lr + elseif (xcnr == xcFunctional%CAMY_PBEh) then + ! CAMY-PBEh + hf_x_energy = camAlpha * hf_x_energy + hf_x_energy_lr = camBeta * hf_x_energy_lr + hf_x_energy = hf_x_energy + hf_x_energy_lr + end if + end if + + call dft_exc_energy(num_mesh_points, rho, exc, weight, abcissa, dft_xc_energy) + call dft_vxc_energy(num_mesh_points, rho, vxc, weight, abcissa, dummy) + + ! sum up spin channels + xc_pot = dummy(1) + dummy(2) + + ! pure Hartree-Fock + if (xcnr == xcFunctional%HF_Exchange) then + total_energy = eigsum - 0.5_dp * coulomb - 0.5_dp * hf_x_energy + ! (semi-)local functionals + elseif (xcnr == xcFunctional%X_Alpha .or. xcFunctional%isLDA(xcnr)& + & .or. xcFunctional%isGGA(xcnr)) then + total_energy = eigsum - 0.5_dp * coulomb + dft_xc_energy - xc_pot + ! range-separated (long-range corrected) hybrid functionals + elseif (xcFunctional%isLongRangeCorrected(xcnr)) then + total_energy = eigsum - 0.5_dp * coulomb - 0.5_dp * hf_x_energy + dft_xc_energy - xc_pot + elseif (xcFunctional%isGlobalHybrid(xcnr)) then + total_energy = eigsum - 0.5_dp * coulomb - 0.5_dp * hf_x_energy + dft_xc_energy - xc_pot + elseif (xcFunctional%isCAMY(xcnr)) then + total_energy = eigsum - 0.5_dp * coulomb - 0.5_dp * hf_x_energy + dft_xc_energy - xc_pot + end if + + end subroutine getTotalEnergyZora + - call core_hamiltonian_energies(t,u,vconf,p_total,max_l,num_alpha,& - &poly_order,nuc,kinetic,nuclear,confinement) + !> Calculates Coulomb contribution to total energy by multiplying the jj supermatrix with the + !! density matrix supervector twice. + pure function coulomb_energy(jj, p_total, max_l, num_alpha, poly_order) result(coulomb) + + !> coulomb supermatrix + real(dp), intent(in) :: jj(0:,:,:,0:,:,:) + + !> density matrix supervector (spins summed up) + real(dp), intent(in) :: p_total(0:,:,:) - ! sum of occupied eigenvalues - do ii=1,2 - do jj=0,max_l - do kk=1,problemsize - eigsum=eigsum+eigval_scaled(ii,jj,kk)*occ(ii,jj,kk) + !> maximum angular momentum + integer, intent(in) :: max_l + + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) + + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) + + !> resulting Coulomb energy contribution + real(dp) :: coulomb + + !! auxiliary variables + integer :: ii, jjj, kkk, ll, mm, nn, oo, ppp, qq, rr, ss, tt, uu, vv + + coulomb = 0.0_dp + do ii = 0, max_l + ss = 0 + do jjj = 1, num_alpha(ii) + do kkk = 1, poly_order(ii) + ss = ss + 1 + tt = 0 + do ll = 1, num_alpha(ii) + do mm = 1, poly_order(ii) + tt = tt + 1 + do nn = 0, max_l + uu = 0 + do oo = 1, num_alpha(nn) + do ppp = 1, poly_order(nn) + uu = uu + 1 + vv = 0 + do qq = 1, num_alpha(nn) + do rr = 1, poly_order(nn) + vv = vv + 1 + + coulomb = coulomb + p_total(ii, ss, tt) * jj(ii, ss, tt, nn, uu, vv)& + & * p_total(nn, uu, vv) + + end do + end do + end do + end do + end do + end do + end do end do end do end do - kinetic=eigsum + end function coulomb_energy - call coulomb_hf_ex_energy(j,k,p_total,max_l,num_alpha,poly_order,xcnr,& - &coulomb,exchange) - exchange=0.0d0 - call dft_exc_energy(num_mesh_points,rho,exc,weight,abcissa,& - &xcnr,exchange) + !> Calculates Hartee-Fock exchange contribution to total energy by the kk supermatrices with the + !! density matrix supervector twice. + pure function hf_ex_energy(kk, pp, max_l, num_alpha, poly_order) result(exchange) - call dft_vxc_energy(num_mesh_points,rho,vxc,weight,abcissa,& - &xcnr,dummy3) + !> (hf) exchange supermatrix + real(dp), intent(in) :: kk(0:,:,:,0:,:,:) - dummy2=dummy3(1)+dummy3(2) + !> density matrix supervector + real(dp), intent(in) :: pp(:,0:,:,:) - etot=eigsum-0.5d0*coulomb+exchange-dummy2 + !> maximum angular momentum + integer, intent(in) :: max_l - ! write(*,*) 'ZORA TOTAL ENERGY' + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) - end subroutine zora_total_energy + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) - subroutine coulomb_hf_ex_energy(j,k,p_total,max_l,num_alpha,poly_order,xcnr,& - &coulomb,exchange) + !> resulting exchange energy contribution + real(dp) :: exchange - ! get Hartee-Fock exchange and Coulomb contributions to total energy - ! by multiplying j and k supermatrixes with the density matrix supervector - ! twice + !! auxiliary variables + integer :: ii, jj, kkk, ll, mm, nn, oo, ppp, qq, rr, ss, tt, uu, vv - real(dp), intent(in) :: j(0:,:,:,0:,:,:),k(0:,:,:,0:,:,:) - real(dp), intent(in) :: p_total(0:,:,:) - integer, intent(in) :: max_l,num_alpha(0:),poly_order(0:),xcnr - real(dp), intent(out) :: coulomb,exchange - integer :: ii,jj,kk,ll,mm,nn,oo,pp,qq,rr,ss,tt,uu,vv,ww - - - do ii=0,max_l - ss=0 - do jj=1,num_alpha(ii) - do kk=1,poly_order(ii) - ss=ss+1 - tt=0 - do ll=1,num_alpha(ii) - do mm=1,poly_order(ii) - tt=tt+1 - do nn=0,max_l - uu=0 - do oo=1,num_alpha(nn) - do pp=1,poly_order(nn) - uu=uu+1 - vv=0 - do qq=1,num_alpha(nn) - do rr=1,poly_order(nn) - vv=vv+1 - - coulomb=coulomb+p_total(ii,ss,tt)*j(ii,ss,tt,nn,uu,vv)*& - &p_total(nn,uu,vv) - - if (xcnr==0) then - exchange=exchange-0.5d0*p_total(ii,ss,tt)*& - &k(ii,ss,tt,nn,uu,vv)*p_total(nn,uu,vv) - end if + exchange = 0.0_dp + + do ii = 0, max_l + ss = 0 + do jj = 1, num_alpha(ii) + do kkk = 1, poly_order(ii) + ss = ss + 1 + tt = 0 + do ll = 1, num_alpha(ii) + do mm = 1, poly_order(ii) + tt = tt + 1 + do nn = 0, max_l + uu = 0 + do oo = 1, num_alpha(nn) + do ppp = 1, poly_order(nn) + uu = uu + 1 + vv = 0 + do qq = 1, num_alpha(nn) + do rr = 1, poly_order(nn) + vv = vv + 1 + + exchange = exchange - kk(ii, ss, tt, nn, uu, vv)& + & * (pp(1, ii, ss, tt) * pp(1, nn, uu, vv)& + & + pp(2, ii, ss, tt) * pp(2, nn, uu, vv)) end do end do @@ -204,33 +459,59 @@ subroutine coulomb_hf_ex_energy(j,k,p_total,max_l,num_alpha,poly_order,xcnr,& end do end do - end subroutine coulomb_hf_ex_energy + end function hf_ex_energy + + + !> Core Hamiltonian contributions to total energy by multiplying the tt, uu, vconf supervectors + !! with the density matrix supervector once. + pure subroutine core_hamiltonian_energies(tt, uu, vconf, p_total, max_l, num_alpha, poly_order,& + & nuc, kinetic, nuclear, confinement) - subroutine core_hamiltonian_energies(t,u,vconf,p_total,max_l,num_alpha,& - &poly_order,nuc,kinetic,nuclear,confinement) + !> kinetic supervector + real(dp), intent(in) :: tt(0:,:,:) - ! Core Hamiltonian contributions to total energy by multiplying the - ! t,u,vconf supervectors with the density matrix supervector once + !> nucleus-electron supervector + real(dp), intent(in) :: uu(0:,:,:) - real(dp), intent(in) :: t(0:,:,:),u(0:,:,:) + !> confinement supervector real(dp), intent(in) :: vconf(0:,:,:) + + !> density matrix supervector (spins summed up) real(dp), intent(in) :: p_total(0:,:,:) - integer, intent(in) :: max_l,num_alpha(0:),poly_order(0:),nuc - real(dp), intent(out) :: kinetic,nuclear,confinement - integer :: ii,jj,kk,ll,mm,nn,oo,pp,qq,rr,ss,tt,uu,vv,ww - - do ii=0,max_l - ss=0 - do jj=1,num_alpha(ii) - do kk=1,poly_order(ii) - ss=ss+1 - tt=0 - do ll=1,num_alpha(ii) - do mm=1,poly_order(ii) - tt=tt+1 - kinetic=kinetic+t(ii,ss,tt)*p_total(ii,ss,tt) - nuclear=nuclear-real(nuc,dp)*u(ii,ss,tt)*p_total(ii,ss,tt) - confinement=confinement+vconf(ii,ss,tt)*p_total(ii,ss,tt) + + !> maximum angular momentum + integer, intent(in) :: max_l + + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) + + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) + + !> nuclear charge, i.e. atomic number + integer, intent(in) :: nuc + + !> resulting energy portions + real(dp), intent(out) :: kinetic, nuclear, confinement + + !> auxiliary variables + integer :: ii, jj, kk, ll, mm, ss, ttt + + kinetic = 0.0_dp + nuclear = 0.0_dp + confinement = 0.0_dp + do ii = 0, max_l + ss = 0 + do jj = 1, num_alpha(ii) + do kk = 1, poly_order(ii) + ss = ss + 1 + ttt = 0 + do ll = 1, num_alpha(ii) + do mm = 1, poly_order(ii) + ttt = ttt + 1 + kinetic = kinetic + tt(ii, ss, ttt) * p_total(ii, ss, ttt) + nuclear = nuclear - real(nuc, dp) * uu(ii, ss, ttt) * p_total(ii, ss, ttt) + confinement = confinement + vconf(ii, ss, ttt) * p_total(ii, ss, ttt) end do end do end do diff --git a/slateratom/lib/utilities.f90 b/slateratom/lib/utilities.f90 index 5cca3703..1b1f8a66 100644 --- a/slateratom/lib/utilities.f90 +++ b/slateratom/lib/utilities.f90 @@ -1,87 +1,144 @@ +!> Module that provides common utilities used by the slateratom program. module utilities use common_accuracy, only : dp - use common_constants implicit none private - public :: check_convergence, check_electron_number, vector_length - public :: fak, polcart, cartpol, dscalar - + public :: check_convergence, check_electron_number + public :: vector_length, fak, zeroOutCpotOfEmptyDensitySpinChannels + + contains - subroutine check_convergence(pot_old,pot_new,max_l,problemsize,iter,& - &change_max,final) + pure subroutine zeroOutCpotOfEmptyDensitySpinChannels(rho, vc) + + !> density on grid + real(dp), intent(in) :: rho(:,:) + + !> correlation potential on grid, shape: (nSpin, nGridPoints) + real(dp), intent(inout) :: vc(:,:) + + !! maximum density in up/down channels + real(dp) :: maxSpinUp, maxSpinDn + + maxSpinUp = maxval(abs(rho(:, 1))) + maxSpinDn = maxval(abs(rho(:, 2))) + + if (maxSpinUp < 1e-16_dp) vc(1, :) = 0.0_dp + if (maxSpinDn < 1e-16_dp) vc(2, :) = 0.0_dp + + end subroutine zeroOutCpotOfEmptyDensitySpinChannels + + + !> Checks SCF convergence by comparing new and old potential. + pure subroutine check_convergence(pot_old, pot_new, max_l, problemsize, scftol, iScf, change_max,& + & tConverged) - ! check SCF convergence + !> old and new potential to compare + real(dp), intent(in) :: pot_old(:,0:,:,:), pot_new(:,0:,:,:) + !> maximum angular momentum + integer, intent(in) :: max_l + + !> size of the problem at hand + integer, intent(in) :: problemsize + + !> scf tolerance, i.e. convergence criteria + real(dp), intent(in) :: scftol + + !> current SCF step + integer, intent(in) :: iScf + + !> obtained maximum change in potential real(dp), intent(out) :: change_max - real(dp), intent(in) :: pot_old(:,0:,:,:),pot_new(:,0:,:,:) - integer, intent(in) :: max_l,problemsize,iter - logical, intent(out) :: final - integer ii,jj,kk,ll - - change_max=0.0d0 - if (iter<3) then - final=.false. + + !> true, if SCF converged + logical, intent(out) :: tConverged + + !> auxiliary variables + integer ii, jj, kk, ll + + change_max = 0.0_dp + + if (iScf < 3) then + tConverged = .false. end if - do ii=1,2 - do jj=0,max_l - do kk=1,problemsize - do ll=1,problemsize - change_max=max(change_max,& - &abs(pot_old(ii,jj,kk,ll)-pot_new(ii,jj,kk,ll))) + do ii = 1, 2 + do jj = 0, max_l + do kk = 1, problemsize + do ll = 1, problemsize + change_max = max(change_max, abs(pot_old(ii, jj, kk, ll) - pot_new(ii, jj, kk, ll))) end do end do end do end do - if (change_max<1.0d-8) then - final=.true. + if (change_max < scftol) then + tConverged = .true. + else + tConverged = .false. end if end subroutine check_convergence - subroutine check_electron_number(cof,s,occ,max_l,num_alpha,poly_order,& - &problemsize) - ! check conservation of electron number during SCF - ! if this fluctuates you are in deep trouble + !> Checks conservation of electron number during SCF. If this fluctuates you are in deep trouble. + subroutine check_electron_number(cof, ss, occ, max_l, num_alpha, poly_order, problemsize) + + !> wavefunction coefficients + real(dp), intent(in) :: cof(:,0:,:,:) + + !> overlap supervector + real(dp), intent(in) :: ss(0:,:,:) - real(dp) :: cof(:,0:,:,:) - real(dp), intent(in) :: s(0:,:,:),occ(:,0:,:) - integer, intent(in) :: max_l,num_alpha(0:),poly_order(0:),problemsize - integer :: ii,jj,kk,ll,mm,nn,oo,pp,qq + !> occupation numbers + real(dp), intent(in) :: occ(:,0:,:) + + !> maximum angular momentum + integer, intent(in) :: max_l + + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) + + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) + + !> size of the problem at hand + integer, intent(in) :: problemsize + + !> actual number of electrons during SCF real(dp) :: electron_number - real(dp) :: scaling + + !> auxiliary variables + integer :: ii, jj, kk, ll, mm, nn, oo, pp, qq ! get actual number per shell by multiplying dens matrix and overlap - do mm=1,2 - do ii=0,max_l - do qq=1,problemsize - electron_number=0.0d0 - ll=0 - do jj=1,num_alpha(ii) - do kk=1,poly_order(ii) - ll=ll+1 - pp=0 - do nn=1,num_alpha(ii) - do oo=1,poly_order(ii) - pp=pp+1 - - electron_number=electron_number+& - &occ(mm,ii,qq)*cof(mm,ii,ll,qq)*cof(mm,ii,pp,qq)*s(ii,ll,pp) + do mm = 1, 2 + do ii = 0, max_l + do qq = 1, problemsize + electron_number = 0.0_dp + ll = 0 + do jj = 1, num_alpha(ii) + do kk = 1, poly_order(ii) + ll = ll + 1 + pp = 0 + do nn = 1, num_alpha(ii) + do oo = 1, poly_order(ii) + pp = pp + 1 + + electron_number = electron_number + occ(mm, ii, qq)& + & * cof(mm, ii, ll, qq) * cof(mm, ii, pp, qq) * ss(ii, ll, pp) end do end do end do end do - if (abs(occ(mm,ii,qq)-electron_number)>1.0d-8) then - write(*,*) 'Electron number fluctuation',& - &occ(mm,ii,qq)-electron_number + if (abs(occ(mm, ii, qq) - electron_number) > 1.0e-08_dp) then + write(*,*) 'Electron number fluctuation', occ(mm, ii, qq) - electron_number end if end do @@ -90,68 +147,39 @@ subroutine check_electron_number(cof,s,occ,max_l,num_alpha,poly_order,& end subroutine check_electron_number - function vector_length(vector,size) - real(dp) :: vector_length - real(dp), intent(in) :: vector(:) - integer, intent(in) :: size - integer :: ii + !> Calculates the Euclidean vector norm. + pure function vector_length(vector) result(norm) - vector_length=0.0d0 + !> vector to calculate the Euclidean norm for + real(dp), intent(in) :: vector(:) - do ii=1,size - vector_length=vector_length+vector(ii)*vector(ii) - end do + !> norm of vector + real(dp) :: norm - vector_length=sqrt(vector_length) + norm = norm2(vector) end function vector_length - FUNCTION fak(n) - REAL(dp) :: fak - INTEGER :: n - INTEGER :: h + + !> Calculates the factorial of nn. + pure function fak(nn) + + !> integer argument to calculate factorial for + integer, intent(in) :: nn + + !> resulting factorial + real(dp) :: fak + + !> auxiliary variable + integer :: ii + fak = 1.0_dp - DO h = 1,n - fak = fak*dble(h) - END DO - RETURN - END function fak - ! - SUBROUTINE polcart(r,zeta,phi,vec) - ! zeta=cos(theta) - REAL(dp) :: vec(3),r,zeta,phi,s_teta - s_teta=SQRT(1.0_dp-zeta*zeta) - vec(3)=r*zeta - vec(2)=r*s_teta*SIN(phi) - vec(1)=r*s_teta*COS(phi) - RETURN - END subroutine polcart - ! - SUBROUTINE cartpol(vec1,vec2,vec3,r,zeta,phi) - REAL(dp) :: eps, tol - PARAMETER ( eps=1.d-8 ) - PARAMETER ( tol=1.d-8 ) - REAL(dp) :: vec(3), r, zeta, phi,vec1,vec2,vec3 - !c external dscalar - vec(1)=vec1 - vec(2)=vec2 - vec(3)=vec3 - r = SQRT(dscalar(vec,vec)) - IF(((ABS(vec(1)).LT.eps).AND.(ABS(vec(2)).LT.eps))) & - & phi = 0.0_dp - IF(.NOT.((ABS(vec(1)).LT.eps).AND.(ABS(vec(2)).LT.eps))) & - & phi = ATAN2(vec(2),vec(1)) - IF((ABS(r).LT.eps)) zeta = 0.0_dp - IF(.NOT.(ABS(r).LT.eps)) zeta = vec(3)/r - RETURN - END subroutine cartpol - ! - FUNCTION dscalar(r1,r2) - REAL(dp) :: r1(3), r2(3), dscalar - dscalar = r1(1)*r2(1)+r1(2)*r2(2)+r1(3)*r2(3) - RETURN - END function dscalar -end module utilities + do ii = 1, nn + fak = fak * real(ii, dp) + end do + end function fak + +end module utilities diff --git a/slateratom/lib/xcfunctionals.f90 b/slateratom/lib/xcfunctionals.f90 new file mode 100644 index 00000000..62fb287a --- /dev/null +++ b/slateratom/lib/xcfunctionals.f90 @@ -0,0 +1,1239 @@ +!> Module related to supported xc-functionals of the slateratom code. +module xcfunctionals + + use, intrinsic :: iso_c_binding, only : c_size_t + use common_accuracy, only : dp + use common_constants, only : rec4pi + use utilities, only : zeroOutCpotOfEmptyDensitySpinChannels + use xc_f03_lib_m, only : xc_f03_func_t, xc_f03_func_init, xc_f03_func_end, xc_f03_lda_exc_vxc,& + & xc_f03_gga_exc_vxc, xc_f03_func_set_ext_params, XC_LDA_X, XC_LDA_X_YUKAWA, XC_LDA_C_PW,& + & XC_GGA_X_PBE, XC_GGA_X_B88, XC_GGA_X_SFAT_PBE, XC_HYB_GGA_XC_B3LYP,& + & XC_HYB_GGA_XC_CAMY_B3LYP, XC_GGA_C_PBE, XC_GGA_C_LYP, XC_POLARIZED + + implicit none + private + + public :: xcFunctional, radial_divergence + public :: getExcVxc_LDA_PW91 + public :: getExcVxc_GGA_PBE96, getExcVxc_GGA_BLYP + public :: getExcVxc_LCY_PBE96, getExcVxc_LCY_BNL + public :: getExcVxc_HYB_B3LYP, getExcVxc_HYB_PBE0 + public :: getExcVxc_CAMY_B3LYP, getExcVxc_CAMY_PBEh + + + interface libxcVxcToInternalVxc + module procedure :: libxcVxcToInternalVxc_joined + module procedure :: libxcVxcToInternalVxc_separate + end interface libxcVxcToInternalVxc + + + !> Enumerates available xc-functionals. + type :: TXcFunctionalsEnum + + !> Hartree-Fock exchange (for spherically symmetric problems) + !! Strictly speaking not an xc-functional but nevertheless listed here. + integer :: HF_Exchange = 0 + + !> X-Alpha + integer :: X_Alpha = 1 + + !> LDA-PW91 + integer :: LDA_PW91 = 2 + + !> GGA-PBE96 + integer :: GGA_PBE96 = 3 + + !> GGA-BLYP + integer :: GGA_BLYP = 4 + + !> LCY-PBE96 + integer :: LCY_PBE96 = 5 + + !> LCY-BNL + integer :: LCY_BNL = 6 + + !> HYB-PBE0 + integer :: HYB_PBE0 = 7 + + !> HYB-B3LYP + integer :: HYB_B3LYP = 8 + + !> CAMY-B3LYP + integer :: CAMY_B3LYP = 9 + + !> CAMY-PBEh + integer :: CAMY_PBEh = 10 + + contains + + procedure :: isLDA => TXcFunctionalsEnum_isLDA + procedure :: isGGA => TXcFunctionalsEnum_isGGA + procedure :: isGlobalHybrid => TXcFunctionalsEnum_isGlobalHybrid + procedure :: isLongRangeCorrected => TXcFunctionalsEnum_isLongRangeCorrected + procedure :: isCAMY => TXcFunctionalsEnum_isCAMY + procedure :: isNotImplemented => TXcFunctionalsEnum_isNotImplemented + + end type TXcFunctionalsEnum + + + !> Container for enumerated xc-functional types. + type(TXcFunctionalsEnum), parameter :: xcFunctional = TXcFunctionalsEnum() + + +contains + + pure function TXcFunctionalsEnum_isLDA(this, xcnr) result(isLDA) + + !> Class instance + class(TXcFunctionalsEnum), intent(in) :: this + + !> identifier of exchange-correlation type + integer, intent(in) :: xcnr + + !> True, if xc-functional index corresponds to an LDA functional + logical :: isLDA + + isLDA = .false. + + if (xcnr == this%LDA_PW91) isLDA = .true. + + end function TXcFunctionalsEnum_isLDA + + + pure function TXcFunctionalsEnum_isGGA(this, xcnr) result(isGGA) + + !> Class instance + class(TXcFunctionalsEnum), intent(in) :: this + + !> identifier of exchange-correlation type + integer, intent(in) :: xcnr + + !> True, if xc-functional index corresponds to a GGA functional + logical :: isGGA + + isGGA = .false. + + if (xcnr == this%GGA_PBE96 .or. xcnr == this%GGA_BLYP) isGGA = .true. + + end function TXcFunctionalsEnum_isGGA + + + pure function TXcFunctionalsEnum_isLongRangeCorrected(this, xcnr) result(isLongRangeCorrected) + + !> Class instance + class(TXcFunctionalsEnum), intent(in) :: this + + !> identifier of exchange-correlation type + integer, intent(in) :: xcnr + + !> True, if xc-functional index corresponds to a long-range corrected functional + logical :: isLongRangeCorrected + + isLongRangeCorrected = .false. + + if (xcnr == this%LCY_PBE96 .or. xcnr == this%LCY_BNL) then + isLongRangeCorrected = .true. + end if + + end function TXcFunctionalsEnum_isLongRangeCorrected + + + pure function TXcFunctionalsEnum_isGlobalHybrid(this, xcnr) result(isGlobalHybrid) + + !> Class instance + class(TXcFunctionalsEnum), intent(in) :: this + + !> identifier of exchange-correlation type + integer, intent(in) :: xcnr + + !> True, if xc-functional index corresponds to a global hybrid functional + logical :: isGlobalHybrid + + isGlobalHybrid = .false. + + if (xcnr == this%HYB_PBE0 .or. xcnr == this%HYB_B3LYP) then + isGlobalHybrid = .true. + end if + + end function TXcFunctionalsEnum_isGlobalHybrid + + + pure function TXcFunctionalsEnum_isCAMY(this, xcnr) result(isCamy) + + !> Class instance + class(TXcFunctionalsEnum), intent(in) :: this + + !> identifier of exchange-correlation type + integer, intent(in) :: xcnr + + !> True, if xc-functional index corresponds to a general CAM functional + logical :: isCamy + + isCamy = .false. + + if (xcnr == this%CAMY_B3LYP .or. xcnr == this%CAMY_PBEh) then + isCamy = .true. + end if + + end function TXcFunctionalsEnum_isCAMY + + + pure function TXcFunctionalsEnum_isNotImplemented(this, xcnr) result(isNotImplemented) + + !> Class instance + class(TXcFunctionalsEnum), intent(in) :: this + + !> identifier of exchange-correlation type + integer, intent(in) :: xcnr + + !> True, if xc-functional index is not in the expected range + logical :: isNotImplemented + + isNotImplemented = .false. + + if (xcnr < 0 .or. xcnr > 10) then + isNotImplemented = .true. + end if + + end function TXcFunctionalsEnum_isNotImplemented + + + !> Calculates exc and vxc for the LDA-PW91 xc-functional. + subroutine getExcVxc_LDA_PW91(rho, exc, vxc) + + !> density on grid + real(dp), intent(in) :: rho(:,:) + + !> exc energy density on grid + real(dp), intent(out) :: exc(:) + + !> xc potential on grid + real(dp), intent(out) :: vxc(:,:) + + !! density in libxc compatible format, i.e. rho/(4pi) + real(dp), allocatable :: rhor(:,:) + + !! libxc related objects + type(xc_f03_func_t) :: xcfunc_x, xcfunc_c + + !! number of density grid points + integer(c_size_t) :: nn + + !! exchange and correlation energy on grid + real(dp), allocatable :: ex(:), ec(:) + + !! exchange and correlation potential on grid + real(dp), allocatable :: vx(:,:), vc(:,:) + + nn = size(rho, dim=1) + ! divide by 4*pi to catch different normalization of spherical harmonics + rhor = transpose(rho) * rec4pi + + allocate(ex(nn)) + allocate(ec(nn)) + allocate(vx(2, nn)) + allocate(vc(2, nn)) + + call xc_f03_func_init(xcfunc_x, XC_LDA_X, XC_POLARIZED) + call xc_f03_func_init(xcfunc_c, XC_LDA_C_PW, XC_POLARIZED) + + ! exchange + call xc_f03_lda_exc_vxc(xcfunc_x, nn, rhor(1, 1), ex(1), vx(1, 1)) + + ! correlation + call xc_f03_lda_exc_vxc(xcfunc_c, nn, rhor(1, 1), ec(1), vc(1, 1)) + call zeroOutCpotOfEmptyDensitySpinChannels(rho, vc) + + exc(:) = ex + ec + vxc(:,:) = transpose(vx + vc) + + ! finalize libxc objects + call xc_f03_func_end(xcfunc_x) + call xc_f03_func_end(xcfunc_c) + + end subroutine getExcVxc_LDA_PW91 + + + !> Calculates exc and vxc for the GGA-PBE96 xc-functional. + subroutine getExcVxc_GGA_PBE96(abcissa, dz, dzdr, rho, drho, sigma, exc, vxc) + + !> numerical integration abcissas + real(dp), intent(in) :: abcissa(:) + + !> step width in linear coordinates + real(dp), intent(in) :: dz + + !> dz/dr + real(dp), intent(in) :: dzdr(:) + + !> density on grid + real(dp), intent(in) :: rho(:,:) + + !> 1st deriv. of density on grid + real(dp), intent(in) :: drho(:,:) + + !> contracted gradients of the density + real(dp), intent(in), allocatable :: sigma(:,:) + + !> exc energy density on grid + real(dp), intent(out) :: exc(:) + + !> xc potential on grid + real(dp), intent(out) :: vxc(:,:) + + !! density in libxc compatible format, i.e. rho/(4pi) + real(dp), allocatable :: rhor(:,:) + + !! libxc related objects + type(xc_f03_func_t) :: xcfunc_x, xcfunc_c + + !! number of density grid points + integer(c_size_t) :: nn + + !! exchange and correlation energy on grid + real(dp), allocatable :: ex(:), ec(:) + + !! exchange and correlation potential on grid + real(dp), allocatable :: vx(:,:), vc(:,:) + + !! first partial derivative of the energy per unit volume in terms of sigma (exchange) + real(dp), allocatable :: vxsigma(:,:) + + !! first partial derivative of the energy per unit volume in terms of sigma (correlation) + real(dp), allocatable :: vcsigma(:,:) + + nn = size(rho, dim=1) + ! divide by 4*pi to catch different normalization of spherical harmonics + allocate(rhor(2, nn)) + rhor(:,:) = transpose(rho) * rec4pi + + allocate(ex(nn)) + ex(:) = 0.0_dp + allocate(ec(nn)) + ec(:) = 0.0_dp + allocate(vx(2, nn)) + vx(:,:) = 0.0_dp + allocate(vc(2, nn)) + vc(:,:) = 0.0_dp + + allocate(vxsigma(3, nn)) + vxsigma(:,:) = 0.0_dp + allocate(vcsigma(3, nn)) + vcsigma(:,:) = 0.0_dp + + call xc_f03_func_init(xcfunc_x, XC_GGA_X_PBE, XC_POLARIZED) + call xc_f03_func_init(xcfunc_c, XC_GGA_C_PBE, XC_POLARIZED) + + ! exchange + call xc_f03_gga_exc_vxc(xcfunc_x, nn, rhor(1, 1), sigma(1, 1), ex(1), vx(1, 1), vxsigma(1, 1)) + + ! correlation + call xc_f03_gga_exc_vxc(xcfunc_c, nn, rhor(1, 1), sigma(1, 1), ec(1), vc(1, 1), vcsigma(1, 1)) + call zeroOutCpotOfEmptyDensitySpinChannels(rho, vc) + + exc(:) = ex + ec + vxc(:,:) = transpose(vx + vc) + + call libxcVxcToInternalVxc(abcissa, dz, dzdr, drho, vxsigma, vcsigma, vxc) + + ! finalize libxc objects + call xc_f03_func_end(xcfunc_x) + call xc_f03_func_end(xcfunc_c) + + end subroutine getExcVxc_GGA_PBE96 + + + !> Calculates exc and vxc for the GGA-BLYP xc-functional. + subroutine getExcVxc_GGA_BLYP(abcissa, dz, dzdr, rho, drho, sigma, exc, vxc) + + !> numerical integration abcissas + real(dp), intent(in) :: abcissa(:) + + !> step width in linear coordinates + real(dp), intent(in) :: dz + + !> dz/dr + real(dp), intent(in) :: dzdr(:) + + !> density on grid + real(dp), intent(in) :: rho(:,:) + + !> 1st deriv. of density on grid + real(dp), intent(in) :: drho(:,:) + + !> contracted gradients of the density + real(dp), intent(in), allocatable :: sigma(:,:) + + !> exc energy density on grid + real(dp), intent(out) :: exc(:) + + !> xc potential on grid + real(dp), intent(out) :: vxc(:,:) + + !! density in libxc compatible format, i.e. rho/(4pi) + real(dp), allocatable :: rhor(:,:) + + !! libxc related objects + type(xc_f03_func_t) :: xcfunc_x, xcfunc_c + + !! number of density grid points + integer(c_size_t) :: nn + + !! exchange and correlation energy on grid + real(dp), allocatable :: ex(:), ec(:) + + !! exchange and correlation potential on grid + real(dp), allocatable :: vx(:,:), vc(:,:) + + !! first partial derivative of the energy per unit volume in terms of sigma (exchange) + real(dp), allocatable :: vxsigma(:,:) + + !! first partial derivative of the energy per unit volume in terms of sigma (correlation) + real(dp), allocatable :: vcsigma(:,:) + + nn = size(rho, dim=1) + ! divide by 4*pi to catch different normalization of spherical harmonics + allocate(rhor(2, nn)) + rhor(:,:) = transpose(rho) * rec4pi + + allocate(ex(nn)) + ex(:) = 0.0_dp + allocate(ec(nn)) + ec(:) = 0.0_dp + allocate(vx(2, nn)) + vx(:,:) = 0.0_dp + allocate(vc(2, nn)) + vc(:,:) = 0.0_dp + + allocate(vxsigma(3, nn)) + vxsigma(:,:) = 0.0_dp + allocate(vcsigma(3, nn)) + vcsigma(:,:) = 0.0_dp + + call xc_f03_func_init(xcfunc_x, XC_GGA_X_B88, XC_POLARIZED) + call xc_f03_func_init(xcfunc_c, XC_GGA_C_LYP, XC_POLARIZED) + + ! exchange + call xc_f03_gga_exc_vxc(xcfunc_x, nn, rhor(1, 1), sigma(1, 1), ex(1), vx(1, 1), vxsigma(1, 1)) + + ! correlation + call xc_f03_gga_exc_vxc(xcfunc_c, nn, rhor(1, 1), sigma(1, 1), ec(1), vc(1, 1), vcsigma(1, 1)) + call zeroOutCpotOfEmptyDensitySpinChannels(rho, vc) + + exc(:) = ex + ec + vxc(:,:) = transpose(vx + vc) + + call libxcVxcToInternalVxc(abcissa, dz, dzdr, drho, vxsigma, vcsigma, vxc) + + ! finalize libxc objects + call xc_f03_func_end(xcfunc_x) + call xc_f03_func_end(xcfunc_c) + + end subroutine getExcVxc_GGA_BLYP + + + !> Calculates exc and vxc for the LCY-PBE96 xc-functional. + subroutine getExcVxc_LCY_PBE96(abcissa, dz, dzdr, rho, drho, sigma, omega, exc, vxc) + + !> numerical integration abcissas + real(dp), intent(in) :: abcissa(:) + + !> step width in linear coordinates + real(dp), intent(in) :: dz + + !> dz/dr + real(dp), intent(in) :: dzdr(:) + + !> density on grid + real(dp), intent(in) :: rho(:,:) + + !> 1st deriv. of density on grid + real(dp), intent(in) :: drho(:,:) + + !> contracted gradients of the density + real(dp), intent(in), allocatable :: sigma(:,:) + + !> range-separation parameter + real(dp), intent(in) :: omega + + !> exc energy density on grid + real(dp), intent(out) :: exc(:) + + !> xc potential on grid + real(dp), intent(out) :: vxc(:,:) + + !! density in libxc compatible format, i.e. rho/(4pi) + real(dp), allocatable :: rhor(:,:) + + !! libxc related objects + type(xc_f03_func_t) :: xcfunc_x, xcfunc_c + + !! number of density grid points + integer(c_size_t) :: nn + + !! exchange and correlation energy on grid + real(dp), allocatable :: ex(:), ec(:) + + !! exchange and correlation potential on grid + real(dp), allocatable :: vx(:,:), vc(:,:) + + !! first partial derivative of the energy per unit volume in terms of sigma (exchange) + real(dp), allocatable :: vxsigma(:,:) + + !! first partial derivative of the energy per unit volume in terms of sigma (correlation) + real(dp), allocatable :: vcsigma(:,:) + + nn = size(rho, dim=1) + ! divide by 4*pi to catch different normalization of spherical harmonics + allocate(rhor(2, nn)) + rhor(:,:) = transpose(rho) * rec4pi + + allocate(ex(nn)) + ex(:) = 0.0_dp + allocate(ec(nn)) + ec(:) = 0.0_dp + allocate(vx(2, nn)) + vx(:,:) = 0.0_dp + allocate(vc(2, nn)) + vc(:,:) = 0.0_dp + + allocate(vxsigma(3, nn)) + vxsigma(:,:) = 0.0_dp + allocate(vcsigma(3, nn)) + vcsigma(:,:) = 0.0_dp + + call xc_f03_func_init(xcfunc_x, XC_GGA_X_SFAT_PBE, XC_POLARIZED) + call xc_f03_func_set_ext_params(xcfunc_x, [omega]) + call xc_f03_func_init(xcfunc_c, XC_GGA_C_PBE, XC_POLARIZED) + + ! exchange + call xc_f03_gga_exc_vxc(xcfunc_x, nn, rhor(1, 1), sigma(1, 1), ex(1), vx(1, 1), vxsigma(1, 1)) + + ! correlation + call xc_f03_gga_exc_vxc(xcfunc_c, nn, rhor(1, 1), sigma(1, 1), ec(1), vc(1, 1), vcsigma(1, 1)) + call zeroOutCpotOfEmptyDensitySpinChannels(rho, vc) + + exc(:) = ex + ec + vxc(:,:) = transpose(vx + vc) + + call libxcVxcToInternalVxc(abcissa, dz, dzdr, drho, vxsigma, vcsigma, vxc) + + ! finalize libxc objects + call xc_f03_func_end(xcfunc_x) + call xc_f03_func_end(xcfunc_c) + + end subroutine getExcVxc_LCY_PBE96 + + + !> Calculates exc and vxc for the LCY-BNL xc-functional. + subroutine getExcVxc_LCY_BNL(abcissa, dz, dzdr, rho, drho, sigma, omega, exc, vxc) + + !> numerical integration abcissas + real(dp), intent(in) :: abcissa(:) + + !> step width in linear coordinates + real(dp), intent(in) :: dz + + !> dz/dr + real(dp), intent(in) :: dzdr(:) + + !> density on grid + real(dp), intent(in) :: rho(:,:) + + !> 1st deriv. of density on grid + real(dp), intent(in) :: drho(:,:) + + !> contracted gradients of the density + real(dp), intent(in), allocatable :: sigma(:,:) + + !> range-separation parameter + real(dp), intent(in) :: omega + + !> exc energy density on grid + real(dp), intent(out) :: exc(:) + + !> xc potential on grid + real(dp), intent(out) :: vxc(:,:) + + !! density in libxc compatible format, i.e. rho/(4pi) + real(dp), allocatable :: rhor(:,:) + + !! libxc related objects + type(xc_f03_func_t) :: xcfunc_x, xcfunc_c + + !! number of density grid points + integer(c_size_t) :: nn + + !! exchange and correlation energy on grid + real(dp), allocatable :: ex(:), ec(:) + + !! exchange and correlation potential on grid + real(dp), allocatable :: vx(:,:), vc(:,:) + + !! first partial derivative of the energy per unit volume in terms of sigma (correlation) + real(dp), allocatable :: vcsigma(:,:) + + nn = size(rho, dim=1) + ! divide by 4*pi to catch different normalization of spherical harmonics + allocate(rhor(2, nn)) + rhor(:,:) = transpose(rho) * rec4pi + + allocate(ex(nn)) + ex(:) = 0.0_dp + allocate(ec(nn)) + ec(:) = 0.0_dp + allocate(vx(2, nn)) + vx(:,:) = 0.0_dp + allocate(vc(2, nn)) + vc(:,:) = 0.0_dp + + allocate(vcsigma(3, nn)) + vcsigma(:,:) = 0.0_dp + + call xc_f03_func_init(xcfunc_x, XC_LDA_X_YUKAWA, XC_POLARIZED) + call xc_f03_func_set_ext_params(xcfunc_x, [omega]) + call xc_f03_func_init(xcfunc_c, XC_GGA_C_PBE, XC_POLARIZED) + + ! exchange + call xc_f03_lda_exc_vxc(xcfunc_x, nn, rhor(1, 1), ex(1), vx(1, 1)) + + ! correlation + call xc_f03_gga_exc_vxc(xcfunc_c, nn, rhor(1, 1), sigma(1, 1), ec(1), vc(1, 1), vcsigma(1, 1)) + call zeroOutCpotOfEmptyDensitySpinChannels(rho, vc) + + exc(:) = ex + ec + vxc(:,:) = transpose(vx + vc) + + call libxcVxcToInternalVxc(abcissa, dz, dzdr, drho, vcsigma, vxc) + + ! finalize libxc objects + call xc_f03_func_end(xcfunc_x) + call xc_f03_func_end(xcfunc_c) + + end subroutine getExcVxc_LCY_BNL + + + !> Calculates exc and vxc for the HYB-PBE0 xc-functional. + subroutine getExcVxc_HYB_PBE0(abcissa, dz, dzdr, rho, drho, sigma, camAlpha, exc, vxc) + + !> numerical integration abcissas + real(dp), intent(in) :: abcissa(:) + + !> step width in linear coordinates + real(dp), intent(in) :: dz + + !> dz/dr + real(dp), intent(in) :: dzdr(:) + + !> density on grid + real(dp), intent(in) :: rho(:,:) + + !> 1st deriv. of density on grid + real(dp), intent(in) :: drho(:,:) + + !> contracted gradients of the density + real(dp), intent(in), allocatable :: sigma(:,:) + + !> CAM alpha parameter + real(dp), intent(in) :: camAlpha + + !> exc energy density on grid + real(dp), intent(out) :: exc(:) + + !> xc potential on grid + real(dp), intent(out) :: vxc(:,:) + + !! density in libxc compatible format, i.e. rho/(4pi) + real(dp), allocatable :: rhor(:,:) + + !! libxc related objects + type(xc_f03_func_t) :: xcfunc_x, xcfunc_c + + !! number of density grid points + integer(c_size_t) :: nn + + !! exchange and correlation energy on grid + real(dp), allocatable :: ex(:), ec(:) + + !! exchange and correlation potential on grid + real(dp), allocatable :: vx(:,:), vc(:,:) + + !! first partial derivative of the energy per unit volume in terms of sigma (exchange) + real(dp), allocatable :: vxsigma(:,:) + + !! first partial derivative of the energy per unit volume in terms of sigma (correlation) + real(dp), allocatable :: vcsigma(:,:) + + !! first partial derivative of the energy per unit volume in terms of sigma (x+c) + real(dp), allocatable :: vxcsigma(:,:) + + nn = size(rho, dim=1) + ! divide by 4*pi to catch different normalization of spherical harmonics + allocate(rhor(2, nn)) + rhor(:,:) = transpose(rho) * rec4pi + + allocate(ex(nn)) + ex(:) = 0.0_dp + allocate(ec(nn)) + ec(:) = 0.0_dp + allocate(vx(2, nn)) + vx(:,:) = 0.0_dp + allocate(vc(2, nn)) + vc(:,:) = 0.0_dp + + allocate(vxsigma(3, nn)) + vxsigma(:,:) = 0.0_dp + allocate(vcsigma(3, nn)) + vcsigma(:,:) = 0.0_dp + allocate(vxcsigma(3, nn)) + vxcsigma(:,:) = 0.0_dp + + call xc_f03_func_init(xcfunc_x, XC_GGA_X_PBE, XC_POLARIZED) + call xc_f03_func_init(xcfunc_c, XC_GGA_C_PBE, XC_POLARIZED) + + ! exchange + call xc_f03_gga_exc_vxc(xcfunc_x, nn, rhor(1, 1), sigma(1, 1), ex(1), vx(1, 1), vxsigma(1, 1)) + + ! correlation + call xc_f03_gga_exc_vxc(xcfunc_c, nn, rhor(1, 1), sigma(1, 1), ec(1), vc(1, 1), vcsigma(1, 1)) + call zeroOutCpotOfEmptyDensitySpinChannels(rho, vc) + + ! build PBE0 functional + vxcsigma(:,:) = (1.0_dp - camAlpha) * vxsigma + vcsigma + vxc(:,:) = transpose((1.0_dp - camAlpha) * vx + vc) + exc(:) = (1.0_dp - camAlpha) * ex + ec + + call libxcVxcToInternalVxc(abcissa, dz, dzdr, drho, vxcsigma, vxc) + + ! finalize libxc objects + call xc_f03_func_end(xcfunc_x) + call xc_f03_func_end(xcfunc_c) + + end subroutine getExcVxc_HYB_PBE0 + + + !> Calculates exc and vxc for the HYB-B3LYP xc-functional. + subroutine getExcVxc_HYB_B3LYP(abcissa, dz, dzdr, rho, drho, sigma, exc, vxc) + + !> numerical integration abcissas + real(dp), intent(in) :: abcissa(:) + + !> step width in linear coordinates + real(dp), intent(in) :: dz + + !> dz/dr + real(dp), intent(in) :: dzdr(:) + + !> density on grid + real(dp), intent(in) :: rho(:,:) + + !> 1st deriv. of density on grid + real(dp), intent(in) :: drho(:,:) + + !> contracted gradients of the density + real(dp), intent(in), allocatable :: sigma(:,:) + + !> exc energy density on grid + real(dp), intent(out) :: exc(:) + + !> xc potential on grid + real(dp), intent(out) :: vxc(:,:) + + !! density in libxc compatible format, i.e. rho/(4pi) + real(dp), allocatable :: rhor(:,:) + + !! libxc related objects + type(xc_f03_func_t) :: xcfunc_xc + + !! number of density grid points + integer(c_size_t) :: nn + + !! exc energy density on grid + real(dp), allocatable :: exc_tmp(:) + + !! exchange and correlation potential on grid + real(dp), allocatable :: vxc_tmp(:,:) + + !! first partial derivative of the energy per unit volume in terms of sigma (x+c) + real(dp), allocatable :: vxcsigma(:,:) + + nn = size(rho, dim=1) + ! divide by 4*pi to catch different normalization of spherical harmonics + allocate(rhor(2, nn)) + rhor(:,:) = transpose(rho) * rec4pi + + allocate(exc_tmp(nn)) + exc_tmp(:) = 0.0_dp + + allocate(vxc_tmp(2, nn)) + vxc_tmp(:,:) = 0.0_dp + + allocate(vxcsigma(3, nn)) + vxcsigma(:,:) = 0.0_dp + + call xc_f03_func_init(xcfunc_xc, XC_HYB_GGA_XC_B3LYP, XC_POLARIZED) + call xc_f03_func_set_ext_params(xcfunc_xc, [0.20_dp, 0.72_dp, 0.81_dp]) + + ! exchange + correlation + call xc_f03_gga_exc_vxc(xcfunc_xc, nn, rhor(1, 1), sigma(1, 1), exc_tmp(1), vxc_tmp(1, 1),& + & vxcsigma(1, 1)) + exc(:) = exc_tmp + vxc(:,:) = transpose(vxc_tmp) + + call libxcVxcToInternalVxc(abcissa, dz, dzdr, drho, vxcsigma, vxc) + + ! finalize libxc objects + call xc_f03_func_end(xcfunc_xc) + + end subroutine getExcVxc_HYB_B3LYP + + + !> Calculates exc and vxc for the CAMY-B3LYP xc-functional. + subroutine getExcVxc_CAMY_B3LYP(abcissa, dz, dzdr, rho, drho, sigma, omega, camAlpha, camBeta,& + & exc, vxc) + + !> numerical integration abcissas + real(dp), intent(in) :: abcissa(:) + + !> step width in linear coordinates + real(dp), intent(in) :: dz + + !> dz/dr + real(dp), intent(in) :: dzdr(:) + + !> density on grid + real(dp), intent(in) :: rho(:,:) + + !> 1st deriv. of density on grid + real(dp), intent(in) :: drho(:,:) + + !> contracted gradients of the density + real(dp), intent(in), allocatable :: sigma(:,:) + + !> range-separation parameter + real(dp), intent(in) :: omega + + !> CAM alpha parameter + real(dp), intent(in) :: camAlpha + + !> CAM beta parameter + real(dp), intent(in) :: camBeta + + !> exc energy density on grid + real(dp), intent(out) :: exc(:) + + !> xc potential on grid + real(dp), intent(out) :: vxc(:,:) + + !! density in libxc compatible format, i.e. rho/(4pi) + real(dp), allocatable :: rhor(:,:) + + !! exc energy density on grid + real(dp), allocatable :: exc_tmp(:) + + !! libxc related objects + type(xc_f03_func_t) :: xcfunc_xc + + !! number of density grid points + integer(c_size_t) :: nn + + !! exchange and correlation potential on grid + real(dp), allocatable :: vxc_tmp(:,:) + + !! first partial derivative of the energy per unit volume in terms of sigma (x+c) + real(dp), allocatable :: vxcsigma(:,:) + + nn = size(rho, dim=1) + ! divide by 4*pi to catch different normalization of spherical harmonics + allocate(rhor(2, nn)) + rhor(:,:) = transpose(rho) * rec4pi + + allocate(exc_tmp(nn)) + exc_tmp(:) = 0.0_dp + + allocate(vxc_tmp(2, nn)) + vxc_tmp(:,:) = 0.0_dp + + allocate(vxcsigma(3, nn)) + vxcsigma(:,:) = 0.0_dp + + call xc_f03_func_init(xcfunc_xc, XC_HYB_GGA_XC_CAMY_B3LYP, XC_POLARIZED) + call xc_f03_func_set_ext_params(xcfunc_xc, [0.81_dp, camAlpha + camBeta, -camBeta, omega]) + + ! exchange + correlation + call xc_f03_gga_exc_vxc(xcfunc_xc, nn, rhor(1, 1), sigma(1, 1), exc_tmp(1), vxc_tmp(1, 1),& + & vxcsigma(1, 1)) + exc(:) = exc_tmp + vxc(:,:) = transpose(vxc_tmp) + + call libxcVxcToInternalVxc(abcissa, dz, dzdr, drho, vxcsigma, vxc) + + ! finalize libxc objects + call xc_f03_func_end(xcfunc_xc) + + end subroutine getExcVxc_CAMY_B3LYP + + + !> Calculates exc and vxc for the CAMY-PBEh xc-functional. + subroutine getExcVxc_CAMY_PBEh(abcissa, dz, dzdr, rho, drho, sigma, omega, camAlpha, camBeta,& + & exc, vxc) + + !> numerical integration abcissas + real(dp), intent(in) :: abcissa(:) + + !> step width in linear coordinates + real(dp), intent(in) :: dz + + !> dz/dr + real(dp), intent(in) :: dzdr(:) + + !> density on grid + real(dp), intent(in) :: rho(:,:) + + !> 1st deriv. of density on grid + real(dp), intent(in) :: drho(:,:) + + !> contracted gradients of the density + real(dp), intent(in), allocatable :: sigma(:,:) + + !> range-separation parameter + real(dp), intent(in) :: omega + + !> CAM alpha parameter + real(dp), intent(in) :: camAlpha + + !> CAM beta parameter + real(dp), intent(in) :: camBeta + + !> exc energy density on grid + real(dp), intent(out) :: exc(:) + + !> xc potential on grid + real(dp), intent(out) :: vxc(:,:) + + !! density in libxc compatible format, i.e. rho/(4pi) + real(dp), allocatable :: rhor(:,:) + + !! libxc related objects + type(xc_f03_func_t) :: xcfunc_x, xcfunc_xsr, xcfunc_c + + !! number of density grid points + integer(c_size_t) :: nn + + !! exchange and correlation energy on grid + real(dp), allocatable :: ex(:), ex_sr(:), ec(:) + + !! exchange and correlation potential on grid + real(dp), allocatable :: vx(:,:), vx_sr(:,:), vc(:,:) + + !! first partial derivative of the energy per unit volume in terms of sigma (exchange) + real(dp), allocatable :: vxsigma(:,:), vxsigma_sr(:,:) + + !! first partial derivative of the energy per unit volume in terms of sigma (correlation) + real(dp), allocatable :: vcsigma(:,:) + + !! first partial derivative of the energy per unit volume in terms of sigma (x+c) + real(dp), allocatable :: vxcsigma(:,:) + + nn = size(rho, dim=1) + ! divide by 4*pi to catch different normalization of spherical harmonics + allocate(rhor(2, nn)) + rhor(:,:) = transpose(rho) * rec4pi + + allocate(ex(nn)) + ex(:) = 0.0_dp + allocate(ex_sr(nn)) + ex_sr(:) = 0.0_dp + allocate(ec(nn)) + ec(:) = 0.0_dp + + allocate(vx(2, nn)) + vx(:,:) = 0.0_dp + allocate(vx_sr(2, nn)) + vx_sr(:,:) = 0.0_dp + allocate(vc(2, nn)) + vc(:,:) = 0.0_dp + + allocate(vxsigma(3, nn)) + vxsigma(:,:) = 0.0_dp + allocate(vxsigma_sr(3, nn)) + vxsigma_sr(:,:) = 0.0_dp + allocate(vcsigma(3, nn)) + vcsigma(:,:) = 0.0_dp + allocate(vxcsigma(3, nn)) + vxcsigma(:,:) = 0.0_dp + + ! short-range exchange + call xc_f03_func_init(xcfunc_xsr, XC_GGA_X_SFAT_PBE, XC_POLARIZED) + call xc_f03_func_set_ext_params(xcfunc_xsr, [omega]) + + ! full-range exchange + call xc_f03_func_init(xcfunc_x, XC_GGA_X_PBE, XC_POLARIZED) + + ! correlation + call xc_f03_func_init(xcfunc_c, XC_GGA_C_PBE, XC_POLARIZED) + + ! short-range exchange + call xc_f03_gga_exc_vxc(xcfunc_xsr, nn, rhor(1, 1), sigma(1, 1), ex_sr(1), vx_sr(1, 1),& + & vxsigma_sr(1, 1)) + ! full-range exchange + call xc_f03_gga_exc_vxc(xcfunc_x, nn, rhor(1, 1), sigma(1, 1), ex(1), vx(1, 1),& + & vxsigma(1, 1)) + ! correlation + call xc_f03_gga_exc_vxc(xcfunc_c, nn, rhor(1, 1), sigma(1, 1), ec(1), vc(1, 1), vcsigma(1, 1)) + call zeroOutCpotOfEmptyDensitySpinChannels(rho, vc) + + ! build CAMY-PBEh functional + vxcsigma(:,:) = camBeta * vxsigma_sr + (1.0_dp - (camAlpha + camBeta)) * vxsigma + vcsigma + vxc(:,:) = transpose(camBeta * vx_sr + (1.0_dp - (camAlpha + camBeta)) * vx + vc) + exc(:) = camBeta * ex_sr + (1.0_dp - (camAlpha + camBeta)) * ex + ec + + call libxcVxcToInternalVxc(abcissa, dz, dzdr, drho, vxcsigma, vxc) + + ! finalize libxc objects + call xc_f03_func_end(xcfunc_x) + call xc_f03_func_end(xcfunc_xsr) + call xc_f03_func_end(xcfunc_c) + + end subroutine getExcVxc_CAMY_PBEh + + + !> Converts libXC vxc to our internal representation. + subroutine libxcVxcToInternalVxc_joined(abcissa, dz, dzdr, drho, vxcsigma, vxc) + + !> numerical integration abcissas + real(dp), intent(in) :: abcissa(:) + + !> step width in linear coordinates + real(dp), intent(in) :: dz + + !> dz/dr + real(dp), intent(in) :: dzdr(:) + + !> 1st deriv. of density on grid + real(dp), intent(in) :: drho(:,:) + + !> first partial derivative of the energy per unit volume in terms of sigma (xc) + real(dp), intent(in) :: vxcsigma(:,:) + + !> xc potential on grid + real(dp), intent(inout) :: vxc(:,:) + + !! temporary storage + real(dp), allocatable :: tmpv1(:), tmpv2(:) + + !! auxiliary variables + integer :: iSpin, iSpin2, iSigma + + allocate(tmpv1(size(drho, dim=1))) + allocate(tmpv2(size(drho, dim=1))) + + ! derivative of E vs. grad n + do iSpin = 1, 2 + ! the other spin + iSpin2 = 3 - iSpin + ! 1 for spin up, 3 for spin down + iSigma = 2 * iSpin - 1 + tmpv1(:) = vxcsigma(iSigma, :) * drho(:, iSpin) * rec4pi + call radial_divergence(tmpv1, abcissa, dz, tmpv2, dzdr) + vxc(:, iSpin) = vxc(:, iSpin) - 2.0_dp * tmpv2 + tmpv1(:) = vxcsigma(2, :) * drho(:, iSpin2) * rec4pi + call radial_divergence(tmpv1, abcissa, dz, tmpv2, dzdr) + vxc(:, iSpin) = vxc(:, iSpin) - tmpv2 + end do + + end subroutine libxcVxcToInternalVxc_joined + + + !> Converts libXC vxc to our internal representation. + subroutine libxcVxcToInternalVxc_separate(abcissa, dz, dzdr, drho, vxsigma, vcsigma, vxc) + + !> numerical integration abcissas + real(dp), intent(in) :: abcissa(:) + + !> step width in linear coordinates + real(dp), intent(in) :: dz + + !> dz/dr + real(dp), intent(in) :: dzdr(:) + + !> 1st deriv. of density on grid + real(dp), intent(in) :: drho(:,:) + + !> first partial derivative of the energy per unit volume in terms of sigma (exchange) + real(dp), intent(in) :: vxsigma(:,:) + + !> first partial derivative of the energy per unit volume in terms of sigma (correlation) + real(dp), intent(in) :: vcsigma(:,:) + + !> xc potential on grid + real(dp), intent(inout) :: vxc(:,:) + + !! temporary storage + real(dp), allocatable :: tmpv1(:), tmpv2(:) + + !! auxiliary variables + integer :: iSpin, iSpin2, iSigma + + allocate(tmpv1(size(drho, dim=1))) + allocate(tmpv2(size(drho, dim=1))) + + ! derivative of E vs. grad n + do iSpin = 1, 2 + ! the other spin + iSpin2 = 3 - iSpin + ! 1 for spin up, 3 for spin down + iSigma = 2 * iSpin - 1 + tmpv1(:) = (vxsigma(iSigma, :) + vcsigma(iSigma, :)) * drho(:, iSpin) * rec4pi + call radial_divergence(tmpv1, abcissa, dz, tmpv2, dzdr) + vxc(:, iSpin) = vxc(:, iSpin) - 2.0_dp * tmpv2 + tmpv1(:) = (vxsigma(2, :) + vcsigma(2, :)) * drho(:, iSpin2) * rec4pi + call radial_divergence(tmpv1, abcissa, dz, tmpv2, dzdr) + vxc(:, iSpin) = vxc(:, iSpin) - tmpv2 + end do + + end subroutine libxcVxcToInternalVxc_separate + + + !> + pure subroutine radial_divergence(ff, rr, dr, rdiv, jacobi) + real(dp), intent(in) :: ff(:) + real(dp), intent(in) :: rr(:) + real(dp), intent(in) :: dr + real(dp), intent(out) :: rdiv(:) + real(dp), intent(in), optional :: jacobi(:) + + call derive1_5(ff, dr, rdiv, jacobi) + rdiv(:) = rdiv + 2.0_dp / rr * ff + + end subroutine radial_divergence + + + !> + pure subroutine derive(ff, dx, jacobi) + real(dp), intent(inout) :: ff(:) + real(dp), intent(in) :: dx + real(dp), intent(in), optional :: jacobi(:) + + real(dp), allocatable :: tmp1(:) + integer :: nn + + nn = size(ff) + allocate(tmp1(nn)) + tmp1(:) = ff + ff(2:nn - 1) = (ff(3:nn) - ff(1:nn - 2)) / (2.0 * dx) + ff(1) = (tmp1(2) - tmp1(1)) / dx + ff(nn) = (tmp1(nn) - tmp1(nn - 1)) / dx + if (present(jacobi)) then + ff = ff * jacobi + end if + + end subroutine derive + + + !> + pure subroutine derive1_5(ff, dx, dfdx, dudx) + real(dp), intent(in) :: ff(:) + real(dp), intent(in) :: dx + real(dp), intent(out) :: dfdx(:) + real(dp), intent(in), optional :: dudx(:) + + integer, parameter :: np = 5 + integer, parameter :: nleft = np / 2 + integer, parameter :: nright = nleft + integer, parameter :: imiddle = nleft + 1 + real(dp), parameter :: dxprefac = 12.0_dp + real(dp), parameter :: coeffs(np, np) =& + reshape([& + & -25.0_dp, 48.0_dp, -36.0_dp, 16.0_dp, -3.0_dp,& + & -3.0_dp, -10.0_dp, 18.0_dp, -6.0_dp, 1.0_dp,& + & 1.0_dp, -8.0_dp, 0.0_dp, 8.0_dp, -1.0_dp,& + & -1.0_dp, 6.0_dp, -18.0_dp, 10.0_dp, 3.0_dp,& + & 3.0_dp, -16.0_dp, 36.0_dp, -48.0_dp, 25.0_dp], [np, np]) + + integer :: ngrid + integer :: ii + + ngrid = size(ff) + do ii = 1, nleft + dfdx(ii) = dot_product(coeffs(:, ii), ff(1:np)) + end do + do ii = nleft + 1, ngrid - nright + dfdx(ii) = dot_product(coeffs(:, imiddle), ff(ii - nleft:ii + nright)) + end do + do ii = ngrid - nright + 1, ngrid + dfdx(ii) = dot_product(coeffs(:, np - (ngrid - ii)), ff(ngrid - np + 1:ngrid)) + end do + + if (present(dudx)) then + dfdx = dfdx * (dudx / (dxprefac * dx)) + else + dfdx = dfdx / (dxprefac * dx) + end if + + end subroutine derive1_5 + + + !> + pure subroutine derive2_5(ff, dx, d2fdx2, dudx, d2udx2, dfdx) + real(dp), intent(in) :: ff(:) + real(dp), intent(in) :: dx + real(dp), intent(out) :: d2fdx2(:) + real(dp), intent(in), optional :: dudx(:), d2udx2(:) + real(dp), intent(out), target, optional :: dfdx(:) + + integer, parameter :: np = 5 + integer, parameter :: nleft = np / 2 + integer, parameter :: nright = nleft + integer, parameter :: imiddle = nleft + 1 + real(dp), parameter :: dxprefac = 12.0_dp + real(dp), parameter :: coeffs(np, np) = & + reshape([ & + & 35.0_dp, -104.0_dp, 114.0_dp, -56.0_dp, 11.0_dp, & + & 11.0_dp, -20.0_dp, 6.0_dp, 4.0_dp, -1.0_dp, & + & -1.0_dp, 16.0_dp, -30.0_dp, 16.0_dp, -1.0_dp, & + & -1.0_dp, 4.0_dp, 6.0_dp, -20.0_dp, 11.0_dp, & + & 11.0_dp, -56.0_dp, 114.0_dp, -104.0_dp, 35.0_dp], [np, np]) + + integer :: ngrid + integer :: ii + real(dp), allocatable, target :: dfdxlocal(:) + real(dp), pointer :: pdfdx(:) + + ngrid = size(ff) + if (present(dfdx)) then + pdfdx => dfdx + elseif (present(d2udx2)) then + allocate(dfdxlocal(ngrid)) + pdfdx => dfdxlocal + end if + + do ii = 1, nleft + d2fdx2(ii) = dot_product(coeffs(:, ii), ff(1:np)) + end do + do ii = nleft + 1, ngrid - nright + d2fdx2(ii) = dot_product(coeffs(:, imiddle), ff(ii - nleft:ii + nright)) + end do + do ii = ngrid - nright + 1, ngrid + d2fdx2(ii) = dot_product(coeffs(:, np - (ngrid - ii)), ff(ngrid - np + 1:ngrid)) + end do + + if (present(dudx)) then + d2fdx2 = d2fdx2 * (dudx * dudx / (dxprefac * dx * dx)) + else + d2fdx2 = d2fdx2 / (dxprefac * dx * dx) + end if + + if (present(d2udx2) .or. present(dfdx)) then + call derive1_5(ff, dx, pdfdx) + if (present(d2udx2)) then + d2fdx2 = d2fdx2 + pdfdx * d2udx2 + end if + if (present(dfdx) .and. present(dudx)) then + dfdx = dfdx * dudx + end if + end if + + end subroutine derive2_5 + +end module xcfunctionals diff --git a/slateratom/lib/zora_routines.f90 b/slateratom/lib/zora_routines.f90 index 3033bfbf..f81810ed 100644 --- a/slateratom/lib/zora_routines.f90 +++ b/slateratom/lib/zora_routines.f90 @@ -1,99 +1,130 @@ +!> Module for zero-order regular approximation for relativistic effects (ZORA) related routines. module zora_routines use common_accuracy, only : dp - use common_constants - use coulomb_potential - use density + use common_constants, only : cc + use coulomb_potential, only : cou_pot + use density, only : basis_times_basis, basis_1st_times_basis_1st_times_r2 implicit none private - public :: zora_t_correction,scaled_zora + public :: zora_t_correction, scaled_zora + contains - subroutine zora_t_correction(mode,t,max_l,num_alpha,alpha,poly_order,& - &num_mesh_points,weight,abcissa,vxc,rho,nuc,p,problemsize) + !> Evaluates ZORA relativistic correction to kinetic energy matrix elements. + !! mode=1: correction to kinetic energy matrix elements + !! mode=2: additional terms for scaling matrix elements + subroutine zora_t_correction(mode, tt, max_l, num_alpha, alpha, poly_order, num_mesh_points,& + & weight, abcissa, vxc, nuc, pp, problemsize) + + !> determines correction mode, see above + integer, intent(in) :: mode + + !> kinetic supervector + real(dp), intent(out) :: tt(:,0:,:,:) + + !> maximum angular momentum + integer, intent(in) :: max_l + + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) - ! ZORA relativistic correction to kinetic energy matrix elements - ! mode=1: correction to kinetic energy matrix elements - ! mode=2: additional terms for scaling matrix elements + !> basis exponents + real(dp), intent(in) :: alpha(0:,:) - real(dp), intent(out) :: t(:,0:,:,:) - integer, intent(in) :: max_l,num_mesh_points,mode - integer, intent(in) :: num_alpha(0:),nuc,problemsize + !> highest polynomial order + l in each shell integer, intent(in) :: poly_order(0:) - real(dp), intent(in) :: alpha(0:,:),weight(:),abcissa(:),vxc(:,:),rho(:,:) - real(dp), intent(in) :: p(:,0:,:,:) - real(dp), allocatable :: kappa(:,:),kappa2(:,:),vtot(:,:) - integer :: ii,jj,kk,ll,mm,nn,oo,pp,start - allocate(kappa(2,num_mesh_points)) - allocate(kappa2(2,num_mesh_points)) - allocate(vtot(2,num_mesh_points)) + !> number of numerical integration points + integer, intent(in) :: num_mesh_points + + !> numerical integration weights + real(dp), intent(in) :: weight(:) + + !> numerical integration abcissas + real(dp), intent(in) :: abcissa(:) + + !> xc potential on grid + real(dp), intent(in) :: vxc(:,:) + + !> nuclear charge, i.e. atomic number + integer, intent(in) :: nuc - t=0.0d0 + !> density matrix supervector + real(dp), intent(in) :: pp(:,0:,:,:) - call potential_to_mesh(num_mesh_points,abcissa,& - &vxc,rho,nuc,p,max_l,num_alpha,poly_order,alpha,problemsize,vtot) + !> maximum size of the eigenproblem + integer, intent(in) :: problemsize - call kappa_to_mesh(num_mesh_points,vtot,kappa,kappa2) + !> auxiliary variables + integer :: ii, jj, kk, ll, mm, nn, oo, start + real(dp), allocatable :: kappa(:,:), kappa2(:,:), vtot(:,:) - do ii=0,max_l - nn=0 - do jj=1,num_alpha(ii) - do ll=1,poly_order(ii) - nn=nn+1 + allocate(kappa(2, num_mesh_points)) + allocate(kappa2(2, num_mesh_points)) + allocate(vtot(2, num_mesh_points)) - oo=nn-1 - do kk=jj,num_alpha(ii) + tt(:,:,:,:) = 0.0_dp - start=1 - if (kk==jj) start=ll + call potential_to_mesh(num_mesh_points, abcissa, vxc, nuc, pp, max_l, num_alpha, poly_order,& + & alpha, problemsize, vtot) - do mm=start,poly_order(ii) - oo=oo+1 + call kappa_to_mesh(num_mesh_points, vtot, kappa, kappa2) - ! kinetic energy correction depends on spin via potential + do ii = 0, max_l + nn = 0 + do jj = 1, num_alpha(ii) + do ll = 1, poly_order(ii) + nn = nn + 1 - if (mode==1) then + oo = nn - 1 + do kk = jj, num_alpha(ii) - t(1,ii,nn,oo)=kinetic_part_1(num_mesh_points,weight,abcissa,& - &kappa(1,:),alpha(ii,jj),ll,alpha(ii,kk),& - &mm,ii)+kinetic_part_2(num_mesh_points,weight,abcissa,& - &kappa(1,:),alpha(ii,jj),ll,alpha(ii,kk),& - &mm,ii)*real(ii*(ii+1),dp) + start = 1 + if (kk == jj) start = ll - t(2,ii,nn,oo)=kinetic_part_1(num_mesh_points,weight,abcissa,& - &kappa(2,:),alpha(ii,jj),ll,alpha(ii,kk),& - &mm,ii)+kinetic_part_2(num_mesh_points,weight,abcissa,& - &kappa(2,:),alpha(ii,jj),ll,alpha(ii,kk),& - &mm,ii)*real(ii*(ii+1),dp) + do mm = start, poly_order(ii) + oo = oo + 1 + + ! kinetic energy correction depends on spin via potential + + if (mode == 1) then + + tt(1, ii, nn, oo) = kinetic_part_1(num_mesh_points, weight, abcissa,& + & kappa(1, :), alpha(ii, jj), ll, alpha(ii, kk),& + & mm, ii) + kinetic_part_2(num_mesh_points, weight, abcissa,& + & kappa(1, :), alpha(ii, jj), ll, alpha(ii, kk),& + & mm, ii) * real(ii * (ii + 1), dp) + + tt(2, ii, nn, oo) = kinetic_part_1(num_mesh_points, weight, abcissa, kappa(2, :),& + & alpha(ii, jj), ll, alpha(ii, kk), mm, ii)& + & + kinetic_part_2(num_mesh_points, weight, abcissa, kappa(2, :),& + & alpha(ii, jj), ll, alpha(ii, kk), mm, ii) * real(ii * (ii + 1), dp) end if - if (mode==2) then + if (mode == 2) then - ! calculate matrix elements needed for scaled ZORA - ! prefactor 1/2 is included as the same subroutines as for t are - ! used + ! calculate matrix elements needed for scaled ZORA + ! prefactor 1/2 is included as the same subroutines as for t are used - t(1,ii,nn,oo)=kinetic_part_1(num_mesh_points,weight,abcissa,& - &kappa2(1,:),alpha(ii,jj),ll,alpha(ii,kk),& - &mm,ii)+kinetic_part_2(num_mesh_points,weight,abcissa,& - &kappa2(1,:),alpha(ii,jj),ll,alpha(ii,kk),& - &mm,ii)*real(ii*(ii+1),dp) + tt(1, ii, nn, oo) = kinetic_part_1(num_mesh_points, weight, abcissa, kappa2(1, :),& + & alpha(ii, jj), ll, alpha(ii, kk), mm, ii)& + & + kinetic_part_2(num_mesh_points, weight, abcissa, kappa2(1, :),& + & alpha(ii, jj), ll, alpha(ii, kk), mm, ii) * real(ii * (ii + 1), dp) - t(2,ii,nn,oo)=kinetic_part_1(num_mesh_points,weight,abcissa,& - &kappa2(2,:),alpha(ii,jj),ll,alpha(ii,kk),& - &mm,ii)+kinetic_part_2(num_mesh_points,weight,abcissa,& - &kappa2(2,:),alpha(ii,jj),ll,alpha(ii,kk),& - &mm,ii)*real(ii*(ii+1),dp) + tt(2, ii, nn, oo) = kinetic_part_1(num_mesh_points, weight, abcissa, kappa2(2, :),& + & alpha(ii, jj), ll, alpha(ii, kk), mm, ii)& + & + kinetic_part_2(num_mesh_points, weight, abcissa, kappa2(2, :),& + & alpha(ii, jj), ll, alpha(ii, kk), mm, ii) * real(ii * (ii + 1), dp) end if - t(1,ii,oo,nn)=t(1,ii,nn,oo) - t(2,ii,oo,nn)=t(2,ii,nn,oo) + tt(1, ii, oo, nn) = tt(1, ii, nn, oo) + tt(2, ii, oo, nn) = tt(2, ii, nn, oo) end do end do @@ -101,238 +132,362 @@ subroutine zora_t_correction(mode,t,max_l,num_alpha,alpha,poly_order,& end do end do -! write(*,'(A)') 'SR-ZORA KINETIC ENERGY CORRECTION' + end subroutine zora_t_correction - deallocate(kappa) - deallocate(kappa2) - deallocate(vtot) - end subroutine zora_t_correction + !> + subroutine scaled_zora(eigval, max_l, num_alpha, alpha, poly_order, problemsize, num_mesh_points,& + & weight, abcissa, vxc, nuc, pp, tt, cof, occ, eigval_scaled, zora_ekin) + + !> eigenvalues + real(dp), intent(in) :: eigval(:,0:,:) + + !> maximum angular momentum + integer, intent(in) :: max_l + + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) - subroutine scaled_zora(eigval,max_l,num_alpha,alpha,& - &poly_order,problemsize,num_mesh_points,weight,abcissa,& - &vxc,rho,nuc,p,t,cof,occ,eigval_scaled,zora_ekin) - - integer, intent(in) :: max_l,num_alpha(0:),poly_order(0:),problemsize - real(dp), intent(in) :: eigval(:,0:,:),alpha(0:,:),cof(:,0:,:,:) - real(dp), intent(in) :: occ(:,0:,:),t(0:,:,:) - integer, intent(in) :: num_mesh_points,nuc - real(dp), intent(in) :: weight(:),abcissa(:),vxc(:,:),rho(:,:),p(:,0:,:,:) - real(dp), intent(out) :: eigval_scaled(:,0:,:),zora_ekin - real(dp), allocatable :: zscale(:,:,:,:),zscale2(:,:,:,:) - real(dp) :: dummy1,dummy2,tsol2,zora_ekin1,zora_ekin2 - integer :: ii,jj,kk,ll,mm,nn,oo,pp,qq,rr,ss,tt,uu,vv,ww - - allocate(zscale(2,0:max_l,problemsize,problemsize)) - allocate(zscale2(2,0:max_l,problemsize,problemsize)) - zscale=0.0d0 - zscale2=0.0d0 - eigval_scaled=0.0d0 - zora_ekin=0.0d0 - zora_ekin1=0.0d0 - zora_ekin2=0.0d0 - tsol2=1.0_dp/cc**2 - - call zora_t_correction(1,zscale,max_l,num_alpha,alpha,poly_order,& - &num_mesh_points,weight,abcissa,vxc,rho,nuc,p,problemsize) - call zora_t_correction(2,zscale2,max_l,num_alpha,alpha,poly_order,& - &num_mesh_points,weight,abcissa,vxc,rho,nuc,p,problemsize) - -! First get scaled eigenvalues - -! Sum over all angular momenta - do ii=0,max_l -! Sum over all eigenvectors - do jj=1,num_alpha(ii)*poly_order(ii) - oo=0 - dummy1=0.0d0 - dummy2=0.0d0 -! sum over all basis functions in alpha and polynomial, i.e. prim. Slaters - do kk=1,num_alpha(ii) - do ll=1,poly_order(ii) - oo=oo+1 - pp=0 -! other sum over all basis functions in alpha and polynomial, i.e. prim. Slaters - do mm=1,num_alpha(ii) - do nn=1,poly_order(ii) - pp=pp+1 -! occupation numbers do not enter here - dummy1=dummy1+cof(1,ii,pp,jj)*cof(1,ii,oo,jj)*& - &tsol2*(zscale(1,ii,oo,pp)+& - &0.5d0*(zscale2(1,ii,oo,pp)+t(ii,oo,pp))) - dummy2=dummy2+cof(2,ii,pp,jj)*cof(2,ii,oo,jj)*& - &tsol2*(zscale(2,ii,oo,pp)+& - &0.5d0*(zscale2(2,ii,oo,pp)+t(ii,oo,pp))) + !> basis exponents + real(dp), intent(in) :: alpha(0:,:) + + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) + + !> maximum size of the eigenproblem + integer, intent(in) :: problemsize + + !> number of numerical integration points + integer, intent(in) :: num_mesh_points + + !> numerical integration weights + real(dp), intent(in) :: weight(:) + + !> numerical integration abcissas + real(dp), intent(in) :: abcissa(:) + + !> xc potential on grid + real(dp), intent(in) :: vxc(:,:) + + !> nuclear charge, i.e. atomic number + integer, intent(in) :: nuc + + !> density matrix supervector + real(dp), intent(in) :: pp(:,0:,:,:) + + !> kinetic supervector + real(dp), intent(in) :: tt(0:,:,:) + + !> wavefunction coefficients + real(dp), intent(in) :: cof(:,0:,:,:) + + !> occupation numbers + real(dp), intent(in) :: occ(:,0:,:) + + !> zora scaled eigenvalues + real(dp), intent(out) :: eigval_scaled(:,0:,:) + + !> zora kinetic energy contribution to total energy + real(dp), intent(out) :: zora_ekin + + !> auxiliary variables + integer :: ii, jj, kk, ll, mm, nn, oo, ppp + real(dp), allocatable :: zscale(:,:,:,:), zscale2(:,:,:,:) + real(dp) :: dummy1, dummy2, tsol2, zora_ekin1, zora_ekin2 + + allocate(zscale(2, 0:max_l, problemsize, problemsize)) + allocate(zscale2(2, 0:max_l, problemsize, problemsize)) + zscale(:,:,:,:) = 0.0_dp + zscale2(:,:,:,:) = 0.0_dp + eigval_scaled(:,:,:) = 0.0_dp + zora_ekin = 0.0_dp + zora_ekin1 = 0.0_dp + zora_ekin2 = 0.0_dp + tsol2 = 1.0_dp / cc**2 + + call zora_t_correction(1, zscale, max_l, num_alpha, alpha, poly_order, num_mesh_points, weight,& + & abcissa, vxc, nuc, pp, problemsize) + call zora_t_correction(2, zscale2, max_l, num_alpha, alpha, poly_order, num_mesh_points,& + & weight, abcissa, vxc, nuc, pp, problemsize) + + ! first get scaled eigenvalues + + ! sum over all angular momenta + do ii = 0, max_l + ! sum over all eigenvectors + do jj = 1, num_alpha(ii) * poly_order(ii) + oo = 0 + dummy1 = 0.0_dp + dummy2 = 0.0_dp + ! sum over all basis functions in alpha and polynomial, i.e. prim. Slaters + do kk = 1, num_alpha(ii) + do ll = 1, poly_order(ii) + oo = oo + 1 + ppp = 0 + ! other sum over all basis functions in alpha and polynomial, i.e. prim. Slaters + do mm = 1, num_alpha(ii) + do nn = 1, poly_order(ii) + ppp = ppp + 1 + ! occupation numbers do not enter here + dummy1 = dummy1 + cof(1, ii, ppp, jj) * cof(1, ii, oo, jj) * tsol2& + & * (zscale(1, ii, oo, ppp) + 0.5_dp * (zscale2(1, ii, oo, ppp)& + & + tt(ii, oo, ppp))) + dummy2 = dummy2 + cof(2, ii, ppp, jj) * cof(2, ii, oo, jj) * tsol2& + & * (zscale(2, ii, oo, ppp) + 0.5_dp * (zscale2(2, ii, oo, ppp)& + & + tt(ii, oo, ppp))) + end do end do end do end do - end do - - - eigval_scaled(1,ii,jj)=eigval(1,ii,jj)/(1.0d0+dummy1) - eigval_scaled(2,ii,jj)=eigval(2,ii,jj)/(1.0d0+dummy2) - end do + eigval_scaled(1, ii, jj) = eigval(1, ii, jj) / (1.0_dp + dummy1) + eigval_scaled(2, ii, jj) = eigval(2, ii, jj) / (1.0_dp + dummy2) + end do end do -! Now ZORA kinetic energy - - dummy1=0.0d0 - dummy2=0.0d0 -! Sum over all angular momenta - do ii=0,max_l -! Sum over all eigenvectors - do jj=1,num_alpha(ii)*poly_order(ii) - oo=0 -! sum over all basis functions in alpha and polynomial, i.e. prim. Slaters - do kk=1,num_alpha(ii) - do ll=1,poly_order(ii) - oo=oo+1 - pp=0 -! other sum over all basis functions in alpha and polynomial, i.e. prim. Slaters - do mm=1,num_alpha(ii) - do nn=1,poly_order(ii) - pp=pp+1 -! dummy contains the non-relativistic kinetic energy operator applied -! to the relativistic ZORA wavefunction, debug only -! dummy1=dummy1+occ(1,ii,jj)*cof(1,ii,pp,jj)*cof(1,ii,oo,jj)*t(ii,oo,pp) -! dummy2=dummy2+occ(2,ii,jj)*cof(2,ii,pp,jj)*cof(2,ii,oo,jj)*t(ii,oo,pp) - zora_ekin1=zora_ekin1+& - &occ(1,ii,jj)*cof(1,ii,pp,jj)*cof(1,ii,oo,jj)*& - &(t(ii,oo,pp)+zscale(1,ii,oo,pp)-& - &eigval_scaled(1,ii,jj)*tsol2*(0.5d0*(& - &zscale2(1,ii,oo,pp)+t(ii,oo,pp))+zscale(1,ii,oo,pp))) - zora_ekin2=zora_ekin2+& - &occ(2,ii,jj)*cof(2,ii,pp,jj)*cof(2,ii,oo,jj)*& - &(t(ii,oo,pp)+zscale(2,ii,oo,pp)-& - &eigval_scaled(2,ii,jj)*tsol2*(0.5d0*(& - &zscale2(2,ii,oo,pp)+t(ii,oo,pp))+zscale(2,ii,oo,pp))) + ! now, ZORA kinetic energy + + dummy1 = 0.0_dp + dummy2 = 0.0_dp + ! sum over all angular momenta + do ii = 0, max_l + ! sum over all eigenvectors + do jj = 1, num_alpha(ii) * poly_order(ii) + oo = 0 + ! sum over all basis functions in alpha and polynomial, i.e. prim. Slaters + do kk = 1, num_alpha(ii) + do ll = 1, poly_order(ii) + oo = oo + 1 + ppp = 0 + ! other sum over all basis functions in alpha and polynomial, i.e. prim. Slaters + do mm = 1, num_alpha(ii) + do nn = 1, poly_order(ii) + ppp = ppp + 1 + ! dummy contains the non-relativistic kinetic energy operator applied to the + ! relativistic ZORA wavefunction, debug only + ! dummy1 = dummy1 + occ(1, ii, jj) * cof(1, ii, ppp, jj) * cof(1, ii, oo, jj)& + ! & * tt(ii, oo, ppp) + ! dummy2 = dummy2 + occ(2, ii, jj) * cof(2, ii, ppp, jj) * cof(2, ii, oo, jj)& + ! & * tt(ii, oo, ppp) + zora_ekin1 = zora_ekin1& + & + occ(1, ii, jj) * cof(1, ii, ppp, jj) * cof(1, ii, oo, jj)& + & * (tt(ii, oo, ppp) + zscale(1, ii, oo, ppp)& + & - eigval_scaled(1, ii, jj) * tsol2 * (0.5_dp * (& + & zscale2(1, ii, oo, ppp) + tt(ii, oo, ppp)) + zscale(1, ii, oo, ppp))) + zora_ekin2 = zora_ekin2& + & + occ(2, ii, jj) * cof(2, ii, ppp, jj) * cof(2, ii, oo, jj)& + & * (tt(ii, oo, ppp) + zscale(2, ii, oo, ppp)& + & - eigval_scaled(2, ii, jj) * tsol2 * (0.5_dp * (& + & zscale2(2, ii, oo, ppp) + tt(ii, oo, ppp)) + zscale(2, ii, oo, ppp))) + end do end do end do end do end do - end do end do -! write(*,*) 'SCAL2 ',dummy1,dummy2,zora_ekin1,zora_ekin2 - - zora_ekin=zora_ekin1+zora_ekin2 - deallocate(zscale) - deallocate(zscale2) + zora_ekin = zora_ekin1 + zora_ekin2 end subroutine scaled_zora - function kinetic_part_1(num_mesh_points,weight,abcissa,kappa,& - &alpha1,poly1,alpha2,poly2,l) - ! get 0.5*\int_0^\inf r^2 kappa (d/dr R_A) (d/dr R_B) dr - ! pass either up or down total potential as kappa + !> Calculates 0.5*\int_0^\inf r^2 kappa (d/dr R_A) (d/dr R_B) dr + !! Pass either up or down total potential as kappa. + pure function kinetic_part_1(num_mesh_points, weight, abcissa, kappa, alpha1, poly1, alpha2,& + & poly2, ll) - real(dp), intent(in) :: weight(:),abcissa(:),kappa(:) - real(dp), intent(in) :: alpha1,alpha2 + !> number of numerical integration points integer, intent(in) :: num_mesh_points - integer, intent(in) :: poly1,poly2,l - integer :: ii,jj,kk,ll,mm,nn,oo + + !> numerical integration weight factors of mesh + real(dp), intent(in) :: weight(:) + + !> numerical integration abcissas (radii), Becke mapping + real(dp), intent(in) :: abcissa(:) + + !> either up or down total potential + real(dp), intent(in) :: kappa(:) + + !> !> basis exponent of 1st basis derivative + real(dp), intent(in) :: alpha1 + + !> highest polynomial order in 1st basis shell + integer, intent(in) :: poly1 + + !> basis exponent of 2nd basis derivative + real(dp), intent(in) :: alpha2 + + !> highest polynomial order in 2nd basis shell + integer, intent(in) :: poly2 + + !> angular momentum + integer, intent(in) :: ll + + !> result real(dp) :: kinetic_part_1 - kinetic_part_1=0.0d0 + !> auxiliary variable + integer :: ii - do ii=1,num_mesh_points + kinetic_part_1 = 0.0_dp - kinetic_part_1=kinetic_part_1+weight(ii)*kappa(ii)*& - &basis_1st_times_basis_1st_times_r2(alpha1,poly1,alpha2,poly2,l,abcissa(ii)) + do ii = 1, num_mesh_points + + kinetic_part_1 = kinetic_part_1 + weight(ii) * kappa(ii)& + & * basis_1st_times_basis_1st_times_r2(alpha1, poly1, alpha2, poly2, ll, abcissa(ii)) end do - kinetic_part_1=kinetic_part_1*0.5d0 + kinetic_part_1 = kinetic_part_1 * 0.5_dp end function kinetic_part_1 - function kinetic_part_2(num_mesh_points,weight,abcissa,kappa,alpha1,& - &poly1,alpha2,poly2,l) - ! get \int_0^\inf R_B R_A kappa dr; multiply by l(l+1) in calling routine - ! pass either up or down total potential as kappa + !> Calculates \int_0^\inf R_B R_A kappa dr; multiply by l(l+1) in calling routine. + !! Pass either up or down total potential as kappa. + pure function kinetic_part_2(num_mesh_points, weight, abcissa, kappa, alpha1, poly1, alpha2,& + & poly2, ll) - real(dp), intent(in) :: weight(:),abcissa(:),kappa(:) - real(dp), intent(in) :: alpha1,alpha2 + !> number of numerical integration points integer, intent(in) :: num_mesh_points - integer, intent(in) :: poly1,poly2,l - integer :: ii,jj,kk,ll,mm,nn,oo + + !> numerical integration weight factors of mesh + real(dp), intent(in) :: weight(:) + + !> numerical integration abcissas (radii), Becke mapping + real(dp), intent(in) :: abcissa(:) + + !> either up or down total potential + real(dp), intent(in) :: kappa(:) + + !> basis exponent of 1st basis + real(dp), intent(in) :: alpha1 + + !> highest polynomial order in 1st basis shell + integer, intent(in) :: poly1 + + !> basis exponent of 2nd basis + real(dp), intent(in) :: alpha2 + + !> highest polynomial order in 2nd basis shell + integer, intent(in) :: poly2 + + !> angular momentum + integer, intent(in) :: ll + + !> result real(dp) :: kinetic_part_2 - kinetic_part_2=0.0d0 + !> auxiliary variable + integer :: ii + + kinetic_part_2 = 0.0_dp - do ii=1,num_mesh_points + do ii = 1, num_mesh_points - kinetic_part_2=kinetic_part_2+weight(ii)*kappa(ii)*& - &basis_times_basis(alpha1,poly1,alpha2,poly2,l,abcissa(ii)) + kinetic_part_2 = kinetic_part_2 + weight(ii) * kappa(ii)& + & * basis_times_basis(alpha1, poly1, alpha2, poly2, ll, abcissa(ii)) end do - kinetic_part_2=kinetic_part_2*0.5d0 + kinetic_part_2 = kinetic_part_2 * 0.5_dp end function kinetic_part_2 - subroutine kappa_to_mesh(num_mesh_points,vtot,kappa,kappa2) - ! kappa=V/(2*c^2-V), V total potential, c speed of light - ! kappa2=kappa^2, i.e. square of kappa - + !> kappa=V/(2*c^2-V), V total potential, c speed of light + !! kappa2=kappa^2, i.e. square of kappa + pure subroutine kappa_to_mesh(num_mesh_points, vtot, kappa, kappa2) + + !> number of numerical integration points integer, intent(in) :: num_mesh_points + + !> total, spinpolarized potential on mesh real(dp), intent(in) :: vtot(:,:) - real(dp), intent(out) :: kappa(:,:),kappa2(:,:) - integer :: ii - real(dp), parameter :: tsol2 =2.0_dp*cc**2 + !> kappa and kappa^2 + real(dp), intent(out) :: kappa(:,:), kappa2(:,:) - do ii=1,num_mesh_points + !> auxiliary variables + integer :: ii + real(dp), parameter :: tsol2 = 2.0_dp * cc**2 - kappa(1,ii)=vtot(1,ii)/(tsol2-vtot(1,ii)) - kappa(2,ii)=vtot(2,ii)/(tsol2-vtot(2,ii)) + do ii = 1, num_mesh_points - kappa2(1,ii)=kappa(1,ii)**2 - kappa2(2,ii)=kappa(2,ii)**2 + kappa(1, ii) = vtot(1, ii) / (tsol2 - vtot(1, ii)) + kappa(2, ii) = vtot(2, ii) / (tsol2 - vtot(2, ii)) + + kappa2(1, ii) = kappa(1, ii)**2 + kappa2(2, ii) = kappa(2, ii)**2 end do end subroutine kappa_to_mesh - subroutine potential_to_mesh(num_mesh_points,abcissa,& - &vxc,rho,nuc,p,max_l,num_alpha,poly_order,alpha,problemsize,vtot) - ! get total potential on mesh, spinpolarized + !> Calculates total, spinpolarized potential on mesh. + subroutine potential_to_mesh(num_mesh_points, abcissa, vxc, nuc, pp, max_l, num_alpha,& + & poly_order, alpha, problemsize, vtot) + + !> number of numerical integration points + integer, intent(in) :: num_mesh_points + + !> numerical integration abcissas (radii), Becke mapping + real(dp), intent(in) :: abcissa(:) + + !> xc potential on grid + real(dp), intent(in) :: vxc(:,:) + + !> nuclear charge, i.e. atomic number + integer, intent(in) :: nuc + + !> density matrix supervector + real(dp), intent(in) :: pp(:,0:,:,:) + + !> maximum angular momentum + integer, intent(in) :: max_l + + !> number of exponents in each shell + integer, intent(in) :: num_alpha(0:) - real(dp), intent(in) :: abcissa(:),vxc(:,:),p(:,0:,:,:),alpha(0:,:) - real(dp), intent(in) :: rho(:,:) - integer, intent(in) :: num_mesh_points,nuc,max_l,num_alpha(0:) - integer, intent(in) :: poly_order(0:),problemsize + !> highest polynomial order + l in each shell + integer, intent(in) :: poly_order(0:) + + !> basis exponents + real(dp), intent(in) :: alpha(0:,:) + + !> maximum size of the eigenproblem + integer, intent(in) :: problemsize + + !> total, spinpolarized potential on mesh real(dp), intent(out) :: vtot(:,:) - real(dp), allocatable :: cpot(:),ptot(:,:,:) + + !> total density matrix supervector (spins summed up) + real(dp), allocatable :: ptot(:,:,:) + + !> coulomb potential on mesh + real(dp), allocatable :: cpot(:) + + !> auxiliary variable integer :: ii allocate(cpot(num_mesh_points)) - allocate(ptot(0:max_l,problemsize,problemsize)) - cpot=0.0d0 - ptot=0.0d0 - vtot=0.0d0 + cpot(:) = 0.0_dp + vtot(:,:) = 0.0_dp - ptot(:,:,:)=p(1,:,:,:)+p(2,:,:,:) + ptot = pp(1, :,:,:) + pp(2, :,:,:) - call cou_pot(ptot(:,:,:),max_l,num_alpha,poly_order,alpha,problemsize,& - &num_mesh_points,abcissa,cpot) + call cou_pot(ptot, max_l, num_alpha, poly_order, alpha, problemsize, num_mesh_points, abcissa,& + & cpot) - do ii=1,num_mesh_points + do ii = 1, num_mesh_points - vtot(1,ii)=-real(nuc,dp)/abcissa(ii)+cpot(ii)+vxc(ii,1) - vtot(2,ii)=-real(nuc,dp)/abcissa(ii)+cpot(ii)+vxc(ii,2) + vtot(1, ii) = - real(nuc, dp) / abcissa(ii) + cpot(ii) + vxc(ii, 1) + vtot(2, ii) = - real(nuc, dp) / abcissa(ii) + cpot(ii) + vxc(ii, 2) end do - deallocate(cpot) - deallocate(ptot) - end subroutine potential_to_mesh -! + end module zora_routines diff --git a/slateratom/prog/cmdargs.f90 b/slateratom/prog/cmdargs.f90 index 0907d440..53d4aba1 100644 --- a/slateratom/prog/cmdargs.f90 +++ b/slateratom/prog/cmdargs.f90 @@ -1,17 +1,23 @@ +!> Module that handles command line argument parsing. module cmdargs implicit none - character(*), parameter :: programName = 'slateratom' - character(*), parameter :: programVersion = '22.1' + private + public :: parse_command_arguments + character(*), parameter :: programName = 'slateratom' + character(*), parameter :: programVersion = '0.2' contains subroutine parse_command_arguments() - + + !> number of command line arguments and length buffer integer :: nArgs, argLen - character(:), allocatable :: arg - + + !> string representation of a single command line argument + character(len=:), allocatable :: arg + nArgs = command_argument_count() if (nArgs > 0) then call get_command_argument(1, length=argLen) @@ -28,5 +34,5 @@ subroutine parse_command_arguments() end if end subroutine parse_command_arguments - + end module cmdargs diff --git a/slateratom/prog/main.f90 b/slateratom/prog/main.f90 index 03caf227..8a19b087 100644 --- a/slateratom/prog/main.f90 +++ b/slateratom/prog/main.f90 @@ -1,214 +1,230 @@ program HFAtom use common_accuracy, only : dp + use common_message, only : error + use integration, only : gauss_chebyshev_becke_mesh + use input, only : read_input_1, read_input_2, echo_input + use core_overlap, only : overlap, nuclear, kinetic, confinement + use coulomb_hfex, only : coulomb, hfex, hfex_lr + use densitymatrix, only : densmatrix + use hamiltonian, only : build_hamiltonian + use diagonalizations, only : diagonalize, diagonalize_overlap + use output, only : write_eigvec, write_eigval, write_moments, write_energies,& + & write_energies_tagged, write_potentials_file_standard, write_densities_file_standard,& + & write_waves_file_standard, write_wave_coeffs_file, cusp_values + use totalenergy, only : getTotalEnergy, getTotalEnergyZora + use dft, only : check_accuracy, dft_start_pot, density_grid + use utilities, only : check_electron_number, check_convergence + use zora_routines, only : scaled_zora + use cmdargs, only : parse_command_arguments + use common_poisson, only : TBeckeGridParams + use xcfunctionals, only : xcFunctional use globals - use integration - use input - use core_overlap - use coulomb_hfex - use densitymatrix - use hamiltonian - use diagonalizations - use output - use totalenergy - use density - use dft - use utilities - use zora_routines - use cmdargs + implicit none - integer :: iter + + !! current SCF step + integer :: iScf + + !! quantum numbers of wavefunctions to be written integer, allocatable :: qnvalorbs(:,:) - call parse_command_arguments() - call read_input_1(nuc,max_l,occ_shells,maxiter,poly_order,& - &min_alpha,max_alpha,num_alpha,generate_alpha,alpha,& - &conf_r0,conf_power,num_occ,num_power,num_alphas,xcnr,& - &eigprint,zora,broyden,mixing_factor,xalpha_const) + !! + real(dp) :: x_en_2 - problemsize=num_power*num_alphas + !! range-separation parameter + real(dp) :: omega -! first index reserved for spin - allocate(occ(2,0:max_l,problemsize)) - allocate(qnvalorbs(2, 0:max_l)) + !! CAM alpha parameter + real(dp) :: camAlpha + + !! CAM beta parameter + real(dp) :: camBeta - call read_input_2(occ,max_l,occ_shells, qnvalorbs) + !! holds parameters, defining a Becke integration grid + type(TBeckeGridParams) :: grid_params -! fix number of mesh points depending on nuclear charge - num_mesh_points=500 - if (nuc>10) num_mesh_points=750 - if (nuc>18) num_mesh_points=1000 - if (nuc>36) num_mesh_points=1250 - if (nuc>54) num_mesh_points=1500 + call parse_command_arguments() + call read_input_1(nuc, max_l, occ_shells, maxiter, scftol, poly_order, min_alpha, max_alpha,& + & num_alpha, tAutoAlphas, alpha, conf_r0, conf_power, num_occ, num_power, num_alphas, xcnr,& + & tPrintEigvecs, tZora, tBroyden, mixing_factor, xalpha_const, omega, camAlpha, camBeta,& + & grid_params) - call echo_input(nuc,max_l,occ_shells,maxiter,poly_order,num_alpha,alpha,& - &conf_r0,conf_power,occ,num_occ,num_power,num_alphas,xcnr,zora,& - &num_mesh_points,xalpha_const) + problemsize = num_power * num_alphas -! allocate global stuff and zero out - call allocate_globals + ! first index reserved for spin + allocate(occ(2, 0:max_l, problemsize)) + allocate(qnvalorbs(2, 0:max_l)) -! generate radial integration mesh - call gauss_chebyshev_becke_mesh(num_mesh_points,nuc,weight,abcissa, dzdr, & - &d2zdr2, dz) + call read_input_2(occ, max_l, occ_shells, qnvalorbs) + + ! fix number of mesh points depending on nuclear charge + num_mesh_points = 500 + if (nuc > 10) num_mesh_points = 750 + if (nuc > 18) num_mesh_points = 1000 + if (nuc > 36) num_mesh_points = 1250 + if (nuc > 54) num_mesh_points = 1500 + + call echo_input(nuc, max_l, occ_shells, maxiter, scftol, poly_order, num_alpha, alpha, conf_r0,& + & conf_power, occ, num_occ, num_power, num_alphas, xcnr, tZora, num_mesh_points, xalpha_const) + + ! allocate global stuff and zero out + call allocate_globals() + + ! generate radial integration mesh + call gauss_chebyshev_becke_mesh(num_mesh_points, nuc, weight, abcissa, dzdr, d2zdr2, dz) + + ! check mesh accuracy + call check_accuracy(weight, abcissa, num_mesh_points, max_l, num_alpha, alpha, poly_order) + + ! build supervectors + write(*, '(A)') 'Startup: Building Supervectors' + call overlap(ss, max_l, num_alpha, alpha, poly_order) + call nuclear(uu, max_l, num_alpha, alpha, poly_order) + call kinetic(tt, max_l, num_alpha, alpha, poly_order) + call confinement(vconf, max_l, num_alpha, alpha, poly_order, conf_r0, conf_power) + + ! test for linear dependency + call diagonalize_overlap(max_l, num_alpha, poly_order, ss) + + ! build supermatrices + write(*, '(A)') 'Startup: Building Supermatrices' + call coulomb(jj, max_l, num_alpha, alpha, poly_order, uu, ss) + if (xcnr == xcFunctional%HF_Exchange) then + call hfex(kk, max_l, num_alpha, alpha, poly_order, problemsize) + elseif (xcFunctional%isLongRangeCorrected(xcnr)) then + call hfex_lr(kk_lr, max_l, num_alpha, alpha, poly_order, problemsize, omega, grid_params) + elseif (xcFunctional%isGlobalHybrid(xcnr)) then + call hfex(kk, max_l, num_alpha, alpha, poly_order, problemsize) + elseif (xcFunctional%isCAMY(xcnr)) then + call hfex(kk, max_l, num_alpha, alpha, poly_order, problemsize) + call hfex_lr(kk_lr, max_l, num_alpha, alpha, poly_order, problemsize, omega, grid_params) + end if -! check mesh accuracy - call check_accuracy(weight,abcissa,num_mesh_points,max_l,& - &num_alpha,alpha,poly_order) + ! convergence flag + tConverged = .false. - if (xcnr >= 2) then - write (*, "(A,/)") "LDA/PBE ROUTINES: LIBXC IMPLEMENTATION" + ! DFT start potential + if (.not. (xcnr == xcFunctional%HF_Exchange)) then + call dft_start_pot(abcissa, num_mesh_points, nuc, vxc) end if -!!! OLD hand-coded xc implementation -! if (xcnr == 2) then -! write (*, "(A,/)") "LDA ROUTINES: BURKE IMPLEMENTATION" -! end if -! if (xcnr == 3) then -! write (*, "(A,/)") "PBE ROUTINES: BURKE IMPLEMENTATION" -! end if -! if (xcnr > 3) then -! write (*, "(A,/)") "STOP: Only xcnr <=3 supported without libxc" -! end if -!!! - - -! Build supervectors - - write(*,'(A)') 'Startup: Building Supervectors' - call overlap(s,max_l,num_alpha,alpha,poly_order) - call nuclear(u,max_l,num_alpha,alpha,poly_order) - call kinetic(t,max_l,num_alpha,alpha,poly_order) - call confinement(vconf,max_l,num_alpha,alpha,poly_order,conf_r0,conf_power) - -! test for linear dependency - call diagonalize_overlap(max_l,num_alpha,poly_order,s) - -! Build supermatrices - - write(*,'(A)') 'Startup: Building Supermatrices' - call coulomb(j,max_l,num_alpha,alpha,poly_order,u,s) - if (xcnr==0) call hfex(k,max_l,num_alpha,alpha,poly_order,problemsize) - -! convergence flag - final=.false. - -! dft start potential - if (xcnr>0) call dft_start_pot(abcissa,num_mesh_points,nuc,vxc) - -! build initial fock matrix, core hamiltonian only - write(*,'(A)') 'Startup: Building Initial Fock Matrix' - write(*,'(A)') ' ' - -! do not confuse mixer - pot_old=0.0d0 - -! kinetic energy, nuclear-electron, and confinement matrix elements -! which are constant during SCF - call build_fock(0,t,u,nuc,vconf,j,k,p,max_l,num_alpha,poly_order,problemsize,& - &xcnr,num_mesh_points,weight,abcissa,rho,vxc,alpha,pot_old,pot_new,& - &zora,broyden,mixing_factor,f) - - do iter=1,maxiter - - write(*,'(A,I5)') 'Iteration :',iter - - pot_old=pot_new - -! diagonalize - call diagonalize(max_l,num_alpha,poly_order,f,s,cof,eigval) - - -! build density matrix - call densmatrix(problemsize,max_l,occ,cof,p) - -! get electron density and derivatives and exc related potentials and -! energy densities - - call density_grid(p,max_l,num_alpha,poly_order,alpha,num_mesh_points,& - &abcissa, dzdr, d2zdr2, dz, xcnr,rho,drho,ddrho,vxc,exc,xalpha_const) - -! Build Fock matrix and get total energy during SCF - call build_fock(iter,t,u,nuc,vconf,j,k,p,max_l,num_alpha,poly_order,& - &problemsize,xcnr,num_mesh_points,weight,abcissa,rho,vxc,alpha,& - &pot_old,pot_new,zora,broyden,mixing_factor,f) - - call total_energy(t,u,nuc,vconf,j,k,p,max_l,num_alpha,poly_order,& - &problemsize,xcnr,num_mesh_points,weight,abcissa,rho,exc,& - &kinetic_energy,nuclear_energy,coulomb_energy,exchange_energy,& - &conf_energy,total_ene) - - if (.not.zora) then -! non-rel. total energy during SCF meaningless for ZORA -! but energy contributions needed once SCF converged, so surpress output - write(*,'(A,F18.6,A)') 'TOTAL ENERGY',total_ene,' Hartree' + + ! build initial fock matrix, core hamiltonian only + write(*, '(A)') 'Startup: Building Initial Fock Matrix' + write(*, '(A)') ' ' + + ! do not confuse mixer + pot_old(:,:,:,:) = 0.0_dp + + ! kinetic energy, nuclear-electron, and confinement matrix elements which are constant during SCF + call build_hamiltonian(0, tt, uu, nuc, vconf, jj, kk, kk_lr, pp, max_l, num_alpha, poly_order,& + & problemsize, xcnr, num_mesh_points, weight, abcissa, vxc, alpha, pot_old, pot_new, tZora,& + & tBroyden, mixing_factor, ff, camAlpha, camBeta) + + ! self-consistency cycles + write(*,*) 'Energies in Hartree' + write(*,*) + write(*,*) ' Iter | Total energy | HF-X energy | XC energy | Change in pot' + write(*,*) '--------------------------------------------------------------------------' + lpScf: do iScf = 1, maxiter + + pot_old(:,:,:,:) = pot_new + + ! diagonalize + call diagonalize(max_l, num_alpha, poly_order, ff, ss, cof, eigval) + + ! build density matrix + call densmatrix(problemsize, max_l, occ, cof, pp) + + ! get electron density, derivatives, exc related potentials and energy densities + call density_grid(pp, max_l, num_alpha, poly_order, alpha, num_mesh_points, abcissa, dzdr,& + & dz, xcnr, omega, camAlpha, camBeta, rho, drho, ddrho, vxc, exc, xalpha_const) + + ! build Fock matrix and get total energy during SCF + call build_hamiltonian(iScf, tt, uu, nuc, vconf, jj, kk, kk_lr, pp, max_l, num_alpha,& + & poly_order, problemsize, xcnr, num_mesh_points, weight, abcissa, vxc, alpha, pot_old,& + & pot_new, tZora, tBroyden, mixing_factor, ff, camAlpha, camBeta) + + if (tZora) then + call getTotalEnergyZora(tt, uu, nuc, vconf, jj, kk, kk_lr, pp, max_l, num_alpha, poly_order,& + & problemsize, xcnr, num_mesh_points, weight, abcissa, rho, exc, vxc, eigval_scaled, occ,& + & camAlpha, camBeta, kinetic_energy, nuclear_energy, coulomb_energy, exchange_energy,& + & x_en_2, conf_energy, total_ene) + else + call getTotalEnergy(tt, uu, nuc, vconf, jj, kk, kk_lr, pp, max_l, num_alpha, poly_order,& + & xcnr, num_mesh_points, weight, abcissa, rho, exc, camAlpha, camBeta, kinetic_energy,& + & nuclear_energy, coulomb_energy, exchange_energy, x_en_2, conf_energy, total_ene) end if - call check_convergence(pot_old,pot_new,max_l,problemsize,iter,& - &change_max,final) + call check_convergence(pot_old, pot_new, max_l, problemsize, scftol, iScf, change_max,& + & tConverged) - write(*,'(A,E20.12)') 'CHANGE in potential matrix', change_max + write(*, '(I4,2X,3(1X,F16.9),3X,E16.9)') iScf, total_ene, exchange_energy, x_en_2, change_max -! converged, nuke - if (final) exit + ! if self-consistency is reached, exit loop + if (tConverged) exit lpScf -! check conservation of number of electrons during SCF - call check_electron_number(cof,s,occ,max_l,num_alpha,& - &poly_order,problemsize) + ! check conservation of number of electrons during SCF + call check_electron_number(cof, ss, occ, max_l, num_alpha, poly_order, problemsize) write(*,*) ' ' - end do + end do lpScf -! output + ! handle non-converged calculations + if (.not. tConverged) then + call error('SCF is NOT converged, maximal SCF iterations exceeded.') + end if - if (eigprint) then - call write_eigvec(max_l,num_alpha,alpha,poly_order,& - &eigval,cof) - call write_moments(max_l,num_alpha,alpha,poly_order,problemsize,cof) - call cusp_values(max_l,occ,cof,p,alpha,num_alpha,poly_order,nuc) + ! handle output of requested data + + if (tPrintEigvecs) then + call write_eigvec(max_l, num_alpha, alpha, poly_order, eigval, cof) + call write_moments(max_l, num_alpha, alpha, poly_order, problemsize, cof) + call cusp_values(max_l, cof, pp, alpha, num_alpha, poly_order) end if + call write_eigval(max_l, num_alpha, poly_order, eigval) + call write_energies(kinetic_energy, nuclear_energy, coulomb_energy, exchange_energy, x_en_2,& + & conf_energy, total_ene, tZora) - call write_eigval(max_l,num_alpha,poly_order,eigval) - call write_energies(kinetic_energy,nuclear_energy,coulomb_energy,& - &exchange_energy,conf_energy,total_ene,.false.) + if (tZora) then + call scaled_zora(eigval, max_l, num_alpha, alpha, poly_order, problemsize, num_mesh_points,& + & weight, abcissa, vxc, nuc, pp, tt, cof, occ, eigval_scaled, zora_ekin) - if (zora) then - call scaled_zora(eigval,max_l,num_alpha,alpha,& - &poly_order,problemsize,num_mesh_points,weight,abcissa,& - &vxc,rho,nuc,p,t,cof,occ,eigval_scaled,zora_ekin) + write(*, '(A)') 'Scaled Scalar-Relativistic ZORA EIGENVALUES and ENERGY' + write(*, '(A)') '------------------------------------------------------' + call write_eigval(max_l, num_alpha, poly_order, eigval_scaled) + end if - write(*,'(A)') 'Scaled Scalar-Relativistic ZORA EIGENVALUES and ENERGY' - write(*,'(A)') '------------------------------------------------------' - call write_eigval(max_l,num_alpha,poly_order,eigval_scaled) - call write_energies(zora_ekin,nuclear_energy,coulomb_energy,& - &exchange_energy,conf_energy,total_ene,.true.) + if (tZora) then + call getTotalEnergyZora(tt, uu, nuc, vconf, jj, kk, kk_lr, pp, max_l, num_alpha, poly_order,& + & problemsize, xcnr, num_mesh_points, weight, abcissa, rho, exc, vxc, eigval_scaled, occ,& + & camAlpha, camBeta, zora_ekin, nuclear_energy, coulomb_energy, exchange_energy, x_en_2,& + & conf_energy, total_ene) end if -! - write(*,'(A,E20.12)') 'Potential Matrix Elements converged to ', change_max - write(*,'(A)') ' ' - if (zora) then - call write_energies_tagged(zora_ekin,nuclear_energy,coulomb_energy,& - &exchange_energy,conf_energy,0.0d0,zora, eigval_scaled, occ) + write(*, '(A,E20.12)') 'Potential Matrix Elements converged to ', change_max + write(*, '(A)') ' ' + + if (tZora) then + call write_energies_tagged(zora_ekin, nuclear_energy, coulomb_energy, exchange_energy,& + & conf_energy, 0.0_dp, tZora, eigval_scaled, occ) else - call write_energies_tagged(kinetic_energy,nuclear_energy,coulomb_energy,& - &exchange_energy,conf_energy,total_ene,zora, eigval, occ) + call write_energies_tagged(kinetic_energy, nuclear_energy, coulomb_energy, x_en_2, conf_energy,& + & total_ene, tZora, eigval, occ) end if - call write_potentials_file_standard(num_mesh_points,abcissa,weight,& - &vxc,rho,nuc,p,max_l,num_alpha,poly_order,alpha,problemsize) + call write_potentials_file_standard(num_mesh_points, abcissa, weight, vxc, rho, nuc, pp, max_l,& + & num_alpha, poly_order, alpha, problemsize) - call write_densities_file_standard(num_mesh_points,abcissa,weight,& - &rho,drho,ddrho) + call write_densities_file_standard(num_mesh_points, abcissa, weight, rho, drho, ddrho) - ! Write wave functions and eventually invert to have positive starting - ! gradient - call write_waves_file_standard(num_mesh_points, abcissa, weight,& - &alpha, num_alpha, poly_order,max_l, problemsize, occ, qnvalorbs, cof) + ! write wave functions and eventually invert to have positive starting gradient + call write_waves_file_standard(num_mesh_points, abcissa, weight, alpha, num_alpha, poly_order,& + & max_l, problemsize, occ, qnvalorbs, cof) - call write_wave_coeffs_file(max_l, num_alpha, poly_order, cof, alpha, & - &occ, qnvalorbs) + call write_wave_coeffs_file(max_l, num_alpha, poly_order, cof, alpha, occ, qnvalorbs) end program HFAtom diff --git a/sys/generic.cmake b/sys/generic.cmake new file mode 100644 index 00000000..c6fde8ce --- /dev/null +++ b/sys/generic.cmake @@ -0,0 +1,53 @@ +# +# Toolchain file for +# +# Generic build environment +# +# This is a generic template which probably will not work on your system out of the box. You should +# either modify it or override the variables via command line options to make it to +# work. Alternatively, have a look at the specialized toolchain files in this folder as they may +# give you a better starting point for your build environment. +# +# Notes: +# +# * CMake format: Command line options (e.g. compiler flags) space separated, other kind +# of lists semicolon separated. +# +# * Variables containing library search paths are empty by default. The CMAKE_PREFIX_PATH +# environment variable should be set up correctly, so that CMake can find those libraries +# automatically. If that is not the case, override those variables to add search paths +# manually + + +# +# Fortran compiler settings +# +set(Fortran_FLAGS "${CMAKE_Fortran_FLAGS}" + CACHE STRING "Build type independent Fortran compiler flags") + +set(Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE}" + CACHE STRING "Fortran compiler flags for Release build") + +set(Fortran_FLAGS_RELWITHDEBINFO "${Fortran_FLAGS_RELWITHDEBINFO}" + CACHE STRING "Fortran compiler flags for Release build") + +set(Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG}" + CACHE STRING "Fortran compiler flags for Debug build") + +# Use intrinsic Fortran 2008 erf/erfc functions +set(INTERNAL_ERFC CACHE BOOL 0) + + +# +# External libraries +# + +# NOTE: Libraries with CMake export files (e.g. ELSI and if the HYBRID_CONFIG_METHODS variable +# contains the "Find" method also libNEGF, libMBD, ScalapackFx and MpiFx) are included by searching +# for the CMake export file in the paths defined in the CMAKE_PREFIX_PATH **environment** +# variable. Make sure your CMAKE_PREFIX_PATH variable is set up accordingly. + +# LAPACK and BLAS +#set(LAPACK_LIBRARY "lapack;blas" CACHE STRING "LAPACK and BLAS libraries to link") +#set(LAPACK_LIBRARY_DIR "" CACHE STRING +# "Directories where LAPACK and BLAS libraries can be found") diff --git a/sys/gnu.cmake b/sys/gnu.cmake new file mode 100644 index 00000000..6d688a91 --- /dev/null +++ b/sys/gnu.cmake @@ -0,0 +1,57 @@ +# +# Toolchain file for +# +# GNU compiler +# +# Notes: +# +# * Settings here should work out of the box on Ubuntu (tested on 18.4). Other build environments +# may need some fine tuning. +# +# * CMake format: Command line options (e.g. compiler flags) space separated, other kind +# of lists semicolon separated. +# +# * Variables containing library search paths are empty by default. The CMAKE_PREFIX_PATH +# environment variable should be set up correctly, so that CMake can find those libraries +# automatically. If that is not the case, override those variables to add search paths +# manually +# + + +# +# Fortran compiler settings +# +set(Fortran_FLAGS "${CMAKE_Fortran_FLAGS}" + CACHE STRING "Build type independent Fortran compiler flags") + +set(Fortran_FLAGS_RELEASE "-O2 -funroll-all-loops" + CACHE STRING "Fortran compiler flags for Release build") + +set(Fortran_FLAGS_RELWITHDEBINFO "-g ${Fortran_FLAGS_RELEASE}" + CACHE STRING "Fortran compiler flags for Release build") + +set(Fortran_FLAGS_DEBUG + "-g -Wall -pedantic -std=f2018 -fcheck=all -ffpe-trap=invalid,zero -finit-real=nan -finit-integer='huge(1)'" + CACHE STRING "Fortran compiler flags for Debug build") + +set(Fortran_FLAGS_COVERAGE "-O0 -g --coverage") + +# Use intrinsic Fortran 2008 erf/erfc functions +set(INTERNAL_ERFC CACHE BOOL 0) + + +# +# External libraries +# + +# NOTE: Libraries with CMake export files (e.g. ELSI and if the HYBRID_CONFIG_METHODS variable +# contains the "Find" method also libNEGF, libMBD, ScalapackFx and MpiFx) are included by searching +# for the export file in the paths defined in the CMAKE_PREFIX_PATH **environment** variable. Make +# sure your CMAKE_PREFIX_PATH variable is set up accordingly. + +# LAPACK and BLAS +# (if the BLAS library contains the LAPACK functions, set LAPACK_LIBRARY to "NONE") +#set(BLAS_LIBRARY "openblas" CACHE STRING "BLAS libraries to link") +#set(BLAS_LIBRARY_DIR "" CACHE STRING "Directories where BLAS libraries can be found") +#set(LAPACK_LIBRARY "NONE" CACHE STRING "LAPACK libraries to link") +#set(LAPACK_LIBRARY_DIR "" CACHE STRING "Directories where LAPACK libraries can be found") diff --git a/sys/intel.cmake b/sys/intel.cmake new file mode 100644 index 00000000..98c32ddc --- /dev/null +++ b/sys/intel.cmake @@ -0,0 +1,52 @@ +# +# Toolchain file for +# +# Intel compiler, MKL library +# +# Notes: +# +# * CMake format: Command line options (e.g. compiler flags) space separated, other kind +# of lists semicolon separated. +# +# * Variables containing library search paths are empty by default. The CMAKE_PREFIX_PATH +# environment variable should be set up correctly, so that CMake can find those libraries +# automatically. If that is not the case, override those variables to add search paths +# manually +# + + +# +# Fortran compiler settings +# +set(Fortran_FLAGS_RELEASE "-O2 -ip" + CACHE STRING "Fortran compiler flags for Release build") + +set(Fortran_FLAGS_RELWITHDEBINFO "-g ${Fortran_FLAGS_RELEASE}" + CACHE STRING "Fortran compiler flags for Release build") + +set(Fortran_FLAGS_DEBUG "-g -warn all -stand f08 -check -diag-error-limit 1 -traceback" + CACHE STRING "Fortran compiler flags for Debug build") + +# Use intrinsic Fortran 2008 erf/erfc functions +set(INTERNAL_ERFC CACHE BOOL 0) + + +# +# External libraries +# + +# NOTE: Libraries with CMake export files (e.g. ELSI and if the HYBRID_CONFIG_METHODS variable +# contains the "Find" method also libNEGF, libMBD, ScalapackFx and MpiFx) are included by searching +# for the export file in the paths defined in the CMAKE_PREFIX_PATH **environment** variable. Make +# sure your CMAKE_PREFIX_PATH variable is set up accordingly. + +# LAPACK and BLAS +# (if the BLAS library contains the LAPACK functions, set LAPACK_LIBRARY to "NONE") + +# set(BLAS_LIBRARY "mkl_intel_lp64;mkl_sequential;mkl_core" CACHE STRING "BLAS libraries to link") +# set(BLAS_LIBRARY_DIR "$ENV{MKLROOT}/lib/intel64" CACHE STRING +# "Directories where BLAS libraries can be found") +# set(LAPACK_LIBRARY "mkl_intel_lp64;mkl_sequential;mkl_core" CACHE STRING "LAPACK libraries to link") +# set(LAPACK_LIBRARY_DIR "$ENV{MKLROOT}/lib/intel64" CACHE STRING +# "Directories where LAPACK libraries can be found") +# set(BLA_VENDOR Intel10_64lp) diff --git a/sys/nag.cmake b/sys/nag.cmake new file mode 100644 index 00000000..56415d99 --- /dev/null +++ b/sys/nag.cmake @@ -0,0 +1,50 @@ +# +# Toolchain file for +# +# NAG Fortran compiler, GNU C compiler +# +# Notes: +# +# * CMake format: Command line options (e.g. compiler flags) space separated, other kind +# of lists semicolon separated. +# +# * Variables containing library search paths are empty by default. The CMAKE_PREFIX_PATH +# environment variable should be set up correctly, so that CMake can find those libraries +# automatically. If that is not the case, override those variables to add search paths +# manually + + +# +# Fortran compiler settings +# +set(Fortran_FLAGS "-ieee=full -maxcontin=512 ${CMAKE_Fortran_FLAGS}" + CACHE STRING "Build type independent Fortran compiler flags") + +set(Fortran_FLAGS_RELEASE "-O2" + CACHE STRING "Fortran compiler flags for Release build") + +set(Fortran_FLAGS_RELWITHDEBINFO "-g ${Fortran_FLAGS_RELEASE}" + CACHE STRING "Fortran compiler flags for Release build") + +set(Fortran_FLAGS_DEBUG "-g -f2008 -nan -C=all" + CACHE STRING "Fortran compiler flags for Debug build") + +# Use intrinsic Fortran 2008 erf/erfc functions +set(INTERNAL_ERFC CACHE BOOL 0) + + +# +# External libraries +# + +# NOTE: Libraries with CMake export files (e.g. ELSI and if the HYBRID_CONFIG_METHODS variable +# contains the "Find" method also libNEGF, libMBD, ScalapackFx and MpiFx) are included by searching +# for the export file in the paths defined in the CMAKE_PREFIX_PATH **environment** variable. Make +# sure your CMAKE_PREFIX_PATH variable is set up accordingly. + +# LAPACK and BLAS +# (if the BLAS library contains the LAPACK functions, set LAPACK_LIBRARY to "NONE") +#set(BLAS_LIBRARY "openblas" CACHE STRING "BLAS libraries to link") +#set(BLAS_LIBRARY_DIR "" CACHE STRING "Directories where BLAS libraries can be found") +#set(LAPACK_LIBRARY "NONE" CACHE STRING "LAPACK libraries to link") +#set(LAPACK_LIBRARY_DIR "" CACHE STRING "Directories where LAPACK libraries can be found") diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 00000000..a9d6311d --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(prog/sktable) diff --git a/test/prog/sktable/CAMY-B3LYP/Non-Relativistic/_C-C.skf b/test/prog/sktable/CAMY-B3LYP/Non-Relativistic/_C-C.skf new file mode 100644 index 00000000..49e23489 --- /dev/null +++ b/test/prog/sktable/CAMY-B3LYP/Non-Relativistic/_C-C.skf @@ -0,0 +1,94 @@ +0.020000 69 + 0.000000000000E+00 -1.779678016623E-01 -6.208094120453E-01 -1.015309218651E-01 0.000000000000E+00 3.518180000262E-01 3.518180000262E-01 0.000000000000E+00 2.000000000000E+00 2.000000000000E+00 + 1.201000000000E+01 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.292939659295E-01 -1.192030942778E+00 0.000000000000E+00 -9.658459391075E-02 -1.114810130462E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.747688611577E-01 8.839942161014E-01 0.000000000000E+00 -2.077884161508E-01 8.636726885421E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.907980935083E-01 -1.173123983280E+00 0.000000000000E+00 -7.347177767297E-02 -1.093547192585E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.563493046908E-01 8.769485297652E-01 0.000000000000E+00 -2.162535695962E-01 8.580636483043E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.529965703442E-01 -1.154207266119E+00 0.000000000000E+00 -5.017765534356E-02 -1.074266909718E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.377159398244E-01 8.697641821266E-01 0.000000000000E+00 -2.247242662396E-01 8.524954766091E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.159346204625E-01 -1.135303619722E+00 0.000000000000E+00 -2.679690116473E-02 -1.056815551714E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.188934158928E-01 8.624476743871E-01 0.000000000000E+00 -2.331887916023E-01 8.469681355851E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.796516444037E-01 -1.116434401889E+00 0.000000000000E+00 -3.416692658758E-03 -1.041045253637E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.999058940979E-01 8.550054607728E-01 0.000000000000E+00 -2.416355580453E-01 8.414809729943E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.441815658501E-01 -1.097619549156E+00 0.000000000000E+00 1.988301448560E-02 -1.026814442579E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.807770207024E-01 8.474439409074E-01 0.000000000000E+00 -2.500531456694E-01 8.360328009677E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.095531747276E-01 -1.078877627660E+00 0.000000000000E+00 4.302919310676E-02 -1.013988133182E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.615299032979E-01 8.397694527564E-01 0.000000000000E+00 -2.584303390385E-01 8.306219693716E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.757904647136E-01 -1.060225885084E+00 0.000000000000E+00 6.595543793693E-02 -1.002438112586E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.421870899631E-01 8.319882661117E-01 0.000000000000E+00 -2.667561599854E-01 8.252464339032E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.429129633415E-01 -1.041680303309E+00 0.000000000000E+00 8.860165006262E-02 -9.920430326240E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.227705511397E-01 8.241065765944E-01 0.000000000000E+00 -2.750198967452E-01 8.199038190586E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.109360531291E-01 -1.023255651440E+00 0.000000000000E+00 1.109137163150E-01 -9.826884246486E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.033016640588E-01 8.161305001471E-01 0.000000000000E+00 -2.832111296561E-01 8.145914761413E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.798712823973E-01 -1.004965538889E+00 0.000000000000E+00 1.328431869108E-01 -9.742666502296E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.838011995632E-01 8.080660679941E-01 0.000000000000E+00 -2.913197536544E-01 8.093065365061E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.497266646772E-01 -9.868224682578E-01 0.000000000000E+00 1.543469542065E-01 -9.666767991935E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.642893111725E-01 7.999192220453E-01 0.000000000000E+00 -2.993359977796E-01 8.040459602462E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.205069658269E-01 -9.688378877618E-01 0.000000000000E+00 1.753869350120E-01 -9.598245449024E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.447855262509E-01 7.916958107214E-01 0.000000000000E+00 -3.072504418977E-01 7.988065805418E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.922139782083E-01 -9.510222429802E-01 0.000000000000E+00 1.959297585347E-01 -9.536219653259E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.253087391407E-01 7.834015851796E-01 0.000000000000E+00 -3.150540308354E-01 7.935851438976E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.648467814900E-01 -9.333850277459E-01 0.000000000000E+00 2.159464616752E-01 -9.479873372846E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.058772061307E-01 7.750421959184E-01 0.000000000000E+00 -3.227380861130E-01 7.883783464939E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.384019898450E-01 -9.159348340010E-01 0.000000000000E+00 2.354121930753E-01 -9.428449102101E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.865085421358E-01 7.666231897437E-01 0.000000000000E+00 -3.302943154488E-01 7.831828668813E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.128739855031E-01 -8.986794004747E-01 0.000000000000E+00 2.543059270237E-01 -9.381246648610E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.672197189703E-01 7.581500070748E-01 0.000000000000E+00 -3.377148202031E-01 7.779953952429E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.825513878659E-02 -8.816256600581E-01 0.000000000000E+00 2.726101880548E-01 -9.337620616306E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.480270650997E-01 7.496279795740E-01 0.000000000000E+00 -3.449921009167E-01 7.728126594434E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.453601493729E-02 -8.647797857687E-01 0.000000000000E+00 2.903107868238E-01 -9.296977823755E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.289462667635E-01 7.410623280819E-01 0.000000000000E+00 -3.521190610921E-01 7.676314480820E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.170556820468E-02 -8.481472352147E-01 0.000000000000E+00 3.073965676027E-01 -9.258774690562E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.099923703673E-01 7.324581608413E-01 0.000000000000E+00 -3.590890093586E-01 7.624486307549E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.975132373645E-02 -8.317327934840E-01 0.000000000000E+00 3.238591675550E-01 -9.222514619295E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.911797860429E-01 7.238204719942E-01 0.000000000000E+00 -3.658956601509E-01 7.572611757284E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.340452288404E-03 -8.155406144008E-01 0.000000000000E+00 3.396927878244E-01 -9.187745395551E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.725222922849E-01 7.151541403357E-01 0.000000000000E+00 -3.725331330272E-01 7.520661652147E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.158459397518E-02 -7.995742601026E-01 0.000000000000E+00 3.548939764214E-01 -9.154056624881E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.540330415737E-01 7.064639283111E-01 0.000000000000E+00 -3.789959507438E-01 7.468608084332E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.099688806892E-02 -7.838367389052E-01 0.000000000000E+00 3.694614227884E-01 -9.121077221808E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.357245668991E-01 6.977544812406E-01 0.000000000000E+00 -3.852790361966E-01 7.416424526314E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.959393661800E-02 -7.683305414337E-01 0.000000000000E+00 3.833957637490E-01 -9.088472962733E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.176087891059E-01 6.890303267589E-01 0.000000000000E+00 -3.913777083336E-01 7.364085922326E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.739302933817E-02 -7.530576750152E-01 0.000000000000E+00 3.966994005041E-01 -9.055944111855E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.996970249829E-01 6.802958744570E-01 0.000000000000E+00 -3.972876771370E-01 7.311568762642E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 9.441202583486E-02 -7.380196963448E-01 0.000000000000E+00 4.093763265770E-01 -9.023223128055E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.819999960251E-01 6.715554157116E-01 0.000000000000E+00 -4.030050377663E-01 7.258851142168E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.106692479332E-01 -7.232177424499E-01 0.000000000000E+00 4.214319666908E-01 -8.990072459555E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.645278377981E-01 6.628131236929E-01 0.000000000000E+00 -4.085262639504E-01 7.205912804715E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.261833814431E-01 -7.086525599829E-01 0.000000000000E+00 4.328730262232E-01 -8.956282430636E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.472901098438E-01 6.540730535371E-01 0.000000000000E+00 -4.138482007093E-01 7.152735174272E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.409733865269E-01 -6.943245328901E-01 0.000000000000E+00 4.437073507654E-01 -8.921669222706E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.302958060634E-01 6.453391426735E-01 0.000000000000E+00 -4.189680564813E-01 7.099301374482E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.550584168461E-01 -6.802337085204E-01 0.000000000000E+00 4.539437956773E-01 -8.886072952423E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.135533655233E-01 6.366152112956E-01 0.000000000000E+00 -4.238833947293E-01 7.045596237487E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.684577474934E-01 -6.663798222400E-01 0.000000000000E+00 4.635921055138E-01 -8.849355848866E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 9.707068362830E-02 6.279049629658E-01 0.000000000000E+00 -4.285921250909E-01 6.991606303197E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.811907106876E-01 -6.527623206216E-01 0.000000000000E+00 4.726628027494E-01 -8.811400529083E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.085512361468E-02 6.192119853452E-01 0.000000000000E+00 -4.330924941361E-01 6.937319809971E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.932766385154E-01 -6.393803832834E-01 0.000000000000E+00 4.811670852939E-01 -8.772108370699E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.491352831401E-02 6.105397510375E-01 0.000000000000E+00 -4.373830757917E-01 6.882726677647E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.047348124301E-01 -6.262329434569E-01 0.000000000000E+00 4.891167324672E-01 -8.731397980429E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.925223214609E-02 6.018916185404E-01 0.000000000000E+00 -4.414627614847E-01 6.827818483774E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.155844187185E-01 -6.133187073566E-01 0.000000000000E+00 4.965240188640E-01 -8.689203755804E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.387707329976E-02 5.932708332945E-01 0.000000000000E+00 -4.453307500578E-01 6.772588433829E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.258445091174E-01 -6.006361724227E-01 0.000000000000E+00 5.034016354943E-01 -8.645474536613E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.879340606440E-02 5.846805288227E-01 0.000000000000E+00 -4.489865375020E-01 6.717031326169E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.355339660052E-01 -5.881836445085E-01 0.000000000000E+00 5.097626176729E-01 -8.600172342492E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.006113277430E-03 5.761237279530E-01 0.000000000000E+00 -4.524299065508E-01 6.661143512391E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.446714715406E-01 -5.759592540756E-01 0.000000000000E+00 5.156202790974E-01 -8.553271192639E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.048038114407E-02 5.676033441166E-01 0.000000000000E+00 -4.556609161756E-01 6.604922853716E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.532754801809E-01 -5.639609714592E-01 0.000000000000E+00 5.209881515736E-01 -8.504756003368E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.466209961726E-02 5.591221827154E-01 0.000000000000E+00 -4.586798910206E-01 6.548368673984E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + +RangeSep +CAM 0.300000 0.200000 0.460000 diff --git a/test/prog/sktable/CAMY-B3LYP/Non-Relativistic/_C-N.skf b/test/prog/sktable/CAMY-B3LYP/Non-Relativistic/_C-N.skf new file mode 100644 index 00000000..3048c1b3 --- /dev/null +++ b/test/prog/sktable/CAMY-B3LYP/Non-Relativistic/_C-N.skf @@ -0,0 +1,93 @@ +0.020000 69 + 0.000000000000E+00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.745583934761E-01 -1.436737387604E+00 0.000000000000E+00 -2.327209877465E-01 -1.264416825808E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.212766154625E-01 8.543847519860E-01 0.000000000000E+00 -1.592080819649E-01 8.354634236655E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.249932322472E-01 -1.411209859789E+00 0.000000000000E+00 -2.008309570590E-01 -1.244475758337E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.012534817312E-01 8.465426669682E-01 0.000000000000E+00 -1.672525905475E-01 8.298824250000E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.765869037172E-01 -1.385748108567E+00 0.000000000000E+00 -1.688089007269E-01 -1.226700810472E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.810642305882E-01 8.385623174713E-01 0.000000000000E+00 -1.753469130431E-01 8.243487881202E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.293872391771E-01 -1.360382159629E+00 0.000000000000E+00 -1.367920066550E-01 -1.210883971523E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.607377646518E-01 8.304516790231E-01 0.000000000000E+00 -1.834752921457E-01 8.188600754055E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.834337945008E-01 -1.335139754872E+00 0.000000000000E+00 -1.049049088561E-01 -1.196828545043E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.403021916383E-01 8.222186273081E-01 0.000000000000E+00 -1.916222120233E-01 8.134133070735E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.387584710109E-01 -1.310046452999E+00 0.000000000000E+00 -7.326029064514E-02 -1.184349334595E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.197847994421E-01 8.138709293521E-01 0.000000000000E+00 -1.997724539150E-01 8.080050577713E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.953861158323E-01 -1.285125730578E+00 0.000000000000E+00 -4.195950583289E-02 -1.173272671723E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.992120354822E-01 8.054162355454E-01 0.000000000000E+00 -2.079111452320E-01 8.026315448375E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.533350991485E-01 -1.260399082862E+00 0.000000000000E+00 -1.109320907053E-02 -1.163436315581E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.786094900062E-01 7.968620724538E-01 0.000000000000E+00 -2.160238025977E-01 7.972887085789E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.126178663803E-01 -1.235886123793E+00 0.000000000000E+00 1.925801219134E-02 -1.154689249322E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.580018830597E-01 7.882158363755E-01 0.000000000000E+00 -2.240963692405E-01 7.919722849385E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.732414638674E-01 -1.211604684647E+00 0.000000000000E+00 4.902301048108E-02 -1.146891394645E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.374130548446E-01 7.794847875984E-01 0.000000000000E+00 -2.321152471412E-01 7.866778709556E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.352080371361E-01 -1.187570910892E+00 0.000000000000E+00 7.813946109547E-02 -1.139913262665E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.168659592073E-01 7.706760453177E-01 0.000000000000E+00 -2.400673243129E-01 7.814009834285E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.985153012999E-01 -1.163799356851E+00 0.000000000000E+00 1.065532592005E-01 -1.133635556540E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.963826600081E-01 7.617965831740E-01 0.000000000000E+00 -2.479399975785E-01 7.761371112017E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.631569835637E-01 -1.140303077852E+00 0.000000000000E+00 1.342179346690E-01 -1.127948738878E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.759843301392E-01 7.528532253743E-01 0.000000000000E+00 -2.557211911890E-01 7.708817614901E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.291232381642E-01 -1.117093719576E+00 0.000000000000E+00 1.610940873002E-01 -1.122752574878E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.556912529721E-01 7.438526433603E-01 0.000000000000E+00 -2.633993716114E-01 7.656305006545E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.640103435467E-02 -1.094181604381E+00 0.000000000000E+00 1.871488443829E-01 -1.117955660329E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.355228260239E-01 7.348013529891E-01 0.000000000000E+00 -2.709635587965E-01 7.603789898294E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.497451822660E-02 -1.071575814407E+00 0.000000000000E+00 2.123553419798E-01 -1.113474942063E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.154975666482E-01 7.257057121947E-01 0.000000000000E+00 -2.784033342193E-01 7.551230157904E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.482534928093E-02 -1.049284271324E+00 0.000000000000E+00 2.366922308137E-01 -1.109235237075E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.956331195626E-01 7.165719190980E-01 0.000000000000E+00 -2.857088459712E-01 7.498585174381E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.933012733550E-03 -1.027313812610E+00 0.000000000000E+00 2.601432072287E-01 -1.105168755382E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.759462660399E-01 7.074060105366E-01 0.000000000000E+00 -2.928708111649E-01 7.445816082547E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.172489144886E-02 -1.005670264300E+00 0.000000000000E+00 2.826965693794E-01 -1.101214630717E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.564529345965E-01 6.982138609853E-01 0.000000000000E+00 -2.998805159007E-01 7.392885950751E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.817238187977E-02 -9.843585101599E-01 0.000000000000E+00 3.043447985993E-01 -1.097318462305E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.371682130243E-01 6.890011818415E-01 0.000000000000E+00 -3.067298130241E-01 7.339759934953E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.343485068088E-02 -9.633825573114E-01 0.000000000000E+00 3.250841657713E-01 -1.093431870339E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.181063616195E-01 6.797735210487E-01 0.000000000000E+00 -3.134111178959E-01 7.286405402233E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 9.753883926090E-02 -9.427455983276E-01 0.000000000000E+00 3.449143623842E-01 -1.089512067149E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.992808274735E-01 6.705362630345E-01 0.000000000000E+00 -3.199174023779E-01 7.232792026581E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.205118341059E-01 -9.224500698827E-01 0.000000000000E+00 3.638381558070E-01 -1.085521445624E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.807042596962E-01 6.612946289396E-01 0.000000000000E+00 -3.262421872266E-01 7.178891859671E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.423820816610E-01 -9.024977080492E-01 0.000000000000E+00 3.818610682040E-01 -1.081427185982E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.623885254543E-01 6.520536771163E-01 0.000000000000E+00 -3.323795330747E-01 7.124679379106E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.631784213417E-01 -8.828896003670E-01 0.000000000000E+00 3.989910784434E-01 -1.077200881647E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.443447267134E-01 6.428183038749E-01 0.000000000000E+00 -3.383240301671E-01 7.070131516491E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.829301356079E-01 -8.636262348238E-01 0.000000000000E+00 4.152383462262E-01 -1.072818184692E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.265832175795E-01 6.335932444589E-01 0.000000000000E+00 -3.440707870078E-01 7.015227667488E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.016668158977E-01 -8.447075458982E-01 0.000000000000E+00 4.306149575042E-01 -1.068258470993E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.091136221460E-01 6.243830742300E-01 0.000000000000E+00 -3.496154180621E-01 6.959949685881E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.194182430916E-01 -8.261329578238E-01 0.000000000000E+00 4.451346901342E-01 -1.063504524994E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 9.194485275632E-02 6.151922100453E-01 0.000000000000E+00 -3.549540306485E-01 6.904281863484E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.362142810798E-01 -8.079014252334E-01 0.000000000000E+00 4.588127986185E-01 -1.058542243773E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.508512860091E-02 6.060249118097E-01 0.000000000000E+00 -3.600832111446E-01 6.848210897632E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.520847820146E-01 -7.900114713401E-01 0.000000000000E+00 4.716658167091E-01 -1.053360359885E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.854199457404E-02 5.968852841883E-01 0.000000000000E+00 -3.650000106212E-01 6.791725847808E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.670595019187E-01 -7.724612238067E-01 0.000000000000E+00 4.837113766213E-01 -1.047950182358E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.232234032053E-02 5.877772784628E-01 0.000000000000E+00 -3.697019300102E-01 6.734818082868E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.811680253798E-01 -7.552484484470E-01 0.000000000000E+00 4.949680436036E-01 -1.042305355077E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.643241941012E-02 5.787046945199E-01 0.000000000000E+00 -3.741869049032E-01 6.677481220168E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.944396981902E-01 -7.383705808938E-01 0.000000000000E+00 5.054551646440E-01 -1.036421631741E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.087786858153E-02 5.696711829558E-01 0.000000000000E+00 -3.784532900694E-01 6.619711057816E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.069035669714E-01 -7.218247563593E-01 0.000000000000E+00 5.151927301676E-01 -1.030296666547E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.336272995751E-03 5.606802472866E-01 0.000000000000E+00 -3.824998437730E-01 6.561505501148E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.185883249721E-01 -7.056078376028E-01 0.000000000000E+00 5.242012476657E-01 -1.023929819732E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.920554448951E-02 5.517352462527E-01 0.000000000000E+00 -3.863257119641E-01 6.502864484412E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.295222633912E-01 -6.897164412109E-01 0.000000000000E+00 5.325016262917E-01 -1.017321977138E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.372604424520E-02 5.428393962050E-01 0.000000000000E+00 -3.899304124099E-01 6.443789888590E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.397332277172E-01 -6.741469622881E-01 0.000000000000E+00 5.401150715623E-01 -1.010475382984E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.789441073711E-02 5.339957735641E-01 0.000000000000E+00 -3.933138188252E-01 6.384285456158E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.492485786927E-01 -6.588955976444E-01 0.000000000000E+00 5.470629893982E-01 -1.003393485057E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.170780366476E-02 5.252073173426E-01 0.000000000000E+00 -3.964761450580E-01 6.324356703533E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.580951576062E-01 -6.439583675604E-01 0.000000000000E+00 5.533668988233E-01 -9.960807916077E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.516388522492E-02 5.164768317215E-01 0.000000000000E+00 -3.994179293767E-01 6.264010831872E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.662992556801E-01 -6.293311362028E-01 0.000000000000E+00 5.590483527222E-01 -9.885427392333E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.826080158657E-02 5.078069886726E-01 0.000000000000E+00 -4.021400189038E-01 6.203256636812E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + +RangeSep +CAM 0.300000 0.200000 0.460000 diff --git a/test/prog/sktable/CAMY-B3LYP/Non-Relativistic/_N-C.skf b/test/prog/sktable/CAMY-B3LYP/Non-Relativistic/_N-C.skf new file mode 100644 index 00000000..15686193 --- /dev/null +++ b/test/prog/sktable/CAMY-B3LYP/Non-Relativistic/_N-C.skf @@ -0,0 +1,93 @@ +0.020000 69 + 0.000000000000E+00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.745583934761E-01 -1.436737387604E+00 0.000000000000E+00 1.813536250785E-01 -1.264416825808E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.212766154625E-01 8.543847519860E-01 0.000000000000E+00 -2.885026056921E-01 8.354634236655E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.249932322472E-01 -1.411209859789E+00 0.000000000000E+00 2.117796961599E-01 -1.244475758337E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.012534817312E-01 8.465426669682E-01 0.000000000000E+00 -2.985711027872E-01 8.298824250000E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.765869037172E-01 -1.385748108567E+00 0.000000000000E+00 2.418693816743E-01 -1.226700810472E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.810642305882E-01 8.385623174713E-01 0.000000000000E+00 -3.085393908779E-01 8.243487881202E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.293872391771E-01 -1.360382159629E+00 0.000000000000E+00 2.715271166306E-01 -1.210883971523E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.607377646518E-01 8.304516790231E-01 0.000000000000E+00 -3.183944263799E-01 8.188600754055E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.834337945008E-01 -1.335139754872E+00 0.000000000000E+00 3.006676085183E-01 -1.196828545043E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.403021916383E-01 8.222186273081E-01 0.000000000000E+00 -3.281235804518E-01 8.134133070735E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.387584710109E-01 -1.310046452999E+00 0.000000000000E+00 3.292152550031E-01 -1.184349334595E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.197847994421E-01 8.138709293521E-01 0.000000000000E+00 -3.377146734136E-01 8.080050577713E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.953861158323E-01 -1.285125730578E+00 0.000000000000E+00 3.571035594345E-01 -1.173272671723E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.992120354822E-01 8.054162355454E-01 0.000000000000E+00 -3.471560038829E-01 8.026315448375E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.533350991485E-01 -1.260399082862E+00 0.000000000000E+00 3.842745504027E-01 -1.163436315581E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.786094900062E-01 7.968620724538E-01 0.000000000000E+00 -3.564363730549E-01 7.972887085789E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.126178663803E-01 -1.235886123793E+00 0.000000000000E+00 4.106782104962E-01 -1.154689249322E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.580018830597E-01 7.882158363755E-01 0.000000000000E+00 -3.655451045285E-01 7.919722849385E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.732414638674E-01 -1.211604684647E+00 0.000000000000E+00 4.362719184386E-01 -1.146891394645E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.374130548446E-01 7.794847875984E-01 0.000000000000E+00 -3.744720600557E-01 7.866778709556E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.352080371361E-01 -1.187570910892E+00 0.000000000000E+00 4.610199079448E-01 -1.139913262665E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.168659592073E-01 7.706760453177E-01 0.000000000000E+00 -3.832076515684E-01 7.814009834285E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.985153012999E-01 -1.163799356851E+00 0.000000000000E+00 4.848927458794E-01 -1.133635556540E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.963826600081E-01 7.617965831740E-01 0.000000000000E+00 -3.917428498153E-01 7.761371112017E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.631569835637E-01 -1.140303077852E+00 0.000000000000E+00 5.078668316392E-01 -1.127948738878E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.759843301392E-01 7.528532253743E-01 0.000000000000E+00 -4.000691899159E-01 7.708817614901E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.291232381642E-01 -1.117093719576E+00 0.000000000000E+00 5.299239190850E-01 -1.122752574878E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.556912529721E-01 7.438526433603E-01 0.000000000000E+00 -4.081787741207E-01 7.656305006545E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.640103435467E-02 -1.094181604381E+00 0.000000000000E+00 5.510506618447E-01 -1.117955660329E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.355228260239E-01 7.348013529891E-01 0.000000000000E+00 -4.160642720437E-01 7.603789898294E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.497451822660E-02 -1.071575814407E+00 0.000000000000E+00 5.712381823904E-01 -1.113474942063E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.154975666482E-01 7.257057121947E-01 0.000000000000E+00 -4.237189186166E-01 7.551230157904E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.482534928093E-02 -1.049284271324E+00 0.000000000000E+00 5.904816649578E-01 -1.109235237075E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.956331195626E-01 7.165719190980E-01 0.000000000000E+00 -4.311365099944E-01 7.498585174381E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.933012733550E-03 -1.027313812610E+00 0.000000000000E+00 6.087799721247E-01 -1.105168755382E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.759462660399E-01 7.074060105366E-01 0.000000000000E+00 -4.383113976262E-01 7.445816082547E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.172489144886E-02 -1.005670264300E+00 0.000000000000E+00 6.261352846701E-01 -1.101214630717E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.564529345965E-01 6.982138609853E-01 0.000000000000E+00 -4.452384806886E-01 7.392885950751E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.817238187977E-02 -9.843585101599E-01 0.000000000000E+00 6.425527642162E-01 -1.097318462305E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.371682130243E-01 6.890011818415E-01 0.000000000000E+00 -4.519131970657E-01 7.339759934953E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.343485068088E-02 -9.633825573114E-01 0.000000000000E+00 6.580402381016E-01 -1.093431870339E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.181063616195E-01 6.797735210487E-01 0.000000000000E+00 -4.583315130447E-01 7.286405402233E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 9.753883926090E-02 -9.427455983276E-01 0.000000000000E+00 6.726079059116E-01 -1.089512067149E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.992808274735E-01 6.705362630345E-01 0.000000000000E+00 -4.644899118830E-01 7.232792026581E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.205118341059E-01 -9.224500698827E-01 0.000000000000E+00 6.862680670345E-01 -1.085521445624E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.807042596962E-01 6.612946289396E-01 0.000000000000E+00 -4.703853813938E-01 7.178891859671E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.423820816610E-01 -9.024977080492E-01 0.000000000000E+00 6.990348685407E-01 -1.081427185982E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.623885254543E-01 6.520536771163E-01 0.000000000000E+00 -4.760154006814E-01 7.124679379106E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.631784213417E-01 -8.828896003670E-01 0.000000000000E+00 7.109240726032E-01 -1.077200881647E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.443447267134E-01 6.428183038749E-01 0.000000000000E+00 -4.813779261513E-01 7.070131516491E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.829301356079E-01 -8.636262348238E-01 0.000000000000E+00 7.219528426221E-01 -1.072818184692E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.265832175795E-01 6.335932444589E-01 0.000000000000E+00 -4.864713769088E-01 7.015227667488E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.016668158977E-01 -8.447075458982E-01 0.000000000000E+00 7.321395471462E-01 -1.068258470993E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.091136221460E-01 6.243830742300E-01 0.000000000000E+00 -4.912946196503E-01 6.959949685881E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.194182430916E-01 -8.261329578238E-01 0.000000000000E+00 7.415035805920E-01 -1.063504524994E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 9.194485275632E-02 6.151922100453E-01 0.000000000000E+00 -4.958469531435E-01 6.904281863484E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.362142810798E-01 -8.079014252334E-01 0.000000000000E+00 7.500651996484E-01 -1.058542243773E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.508512860091E-02 6.060249118097E-01 0.000000000000E+00 -5.001280923867E-01 6.848210897632E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.520847820146E-01 -7.900114713401E-01 0.000000000000E+00 7.578453742353E-01 -1.053360359885E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.854199457404E-02 5.968852841883E-01 0.000000000000E+00 -5.041381525265E-01 6.791725847808E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.670595019187E-01 -7.724612238067E-01 0.000000000000E+00 7.648656518972E-01 -1.047950182358E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.232234032053E-02 5.877772784628E-01 0.000000000000E+00 -5.078776326097E-01 6.734818082868E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.811680253798E-01 -7.552484484470E-01 0.000000000000E+00 7.711480345158E-01 -1.042305355077E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.643241941012E-02 5.787046945199E-01 0.000000000000E+00 -5.113473992366E-01 6.677481220168E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.944396981902E-01 -7.383705808938E-01 0.000000000000E+00 7.767148662736E-01 -1.036421631741E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.087786858153E-02 5.696711829558E-01 0.000000000000E+00 -5.145486701779E-01 6.619711057816E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.069035669714E-01 -7.218247563593E-01 0.000000000000E+00 7.815887318879E-01 -1.030296666547E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.336272995751E-03 5.606802472866E-01 0.000000000000E+00 -5.174829980126E-01 6.561505501148E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.185883249721E-01 -7.056078376028E-01 0.000000000000E+00 7.857923642184E-01 -1.023929819732E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.920554448951E-02 5.517352462527E-01 0.000000000000E+00 -5.201522538357E-01 6.502864484412E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.295222633912E-01 -6.897164412109E-01 0.000000000000E+00 7.893485604486E-01 -1.017321977138E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.372604424520E-02 5.428393962050E-01 0.000000000000E+00 -5.225586110847E-01 6.443789888590E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.397332277172E-01 -6.741469622881E-01 0.000000000000E+00 7.922801061383E-01 -1.010475382984E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.789441073711E-02 5.339957735641E-01 0.000000000000E+00 -5.247045295245E-01 6.384285456158E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.492485786927E-01 -6.588955976444E-01 0.000000000000E+00 7.946097065293E-01 -1.003393485057E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.170780366476E-02 5.252073173426E-01 0.000000000000E+00 -5.265927394288E-01 6.324356703533E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.580951576062E-01 -6.439583675604E-01 0.000000000000E+00 7.963599245687E-01 -9.960807916077E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.516388522492E-02 5.164768317215E-01 0.000000000000E+00 -5.282262259915E-01 6.264010831872E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.662992556801E-01 -6.293311362028E-01 0.000000000000E+00 7.975531251755E-01 -9.885427392333E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.826080158657E-02 5.078069886726E-01 0.000000000000E+00 -5.296082139971E-01 6.203256636812E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + +RangeSep +CAM 0.300000 0.200000 0.460000 diff --git a/test/prog/sktable/CAMY-B3LYP/Non-Relativistic/_N-N.skf b/test/prog/sktable/CAMY-B3LYP/Non-Relativistic/_N-N.skf new file mode 100644 index 00000000..635e4d22 --- /dev/null +++ b/test/prog/sktable/CAMY-B3LYP/Non-Relativistic/_N-N.skf @@ -0,0 +1,94 @@ +0.020000 69 + 0.000000000000E+00 -2.743523903637E-01 -6.400000000000E-01 -3.101135848175E-02 0.000000000000E+00 4.264775857525E-01 4.264775857525E-01 0.000000000000E+00 3.000000000000E+00 2.000000000000E+00 + 1.400700000000E+01 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.842326797470E-01 -1.719751726148E+00 0.000000000000E+00 8.243774817067E-02 -1.482543557811E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.795817906295E-01 8.463800376124E-01 0.000000000000E+00 -2.501072808788E-01 8.394775962845E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.206959646588E-01 -1.685170601004E+00 0.000000000000E+00 1.230219247165E-01 -1.462374441263E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.572942989846E-01 8.374144889884E-01 0.000000000000E+00 -2.599345750475E-01 8.333677677290E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.590457553409E-01 -1.650796369458E+00 0.000000000000E+00 1.630256545142E-01 -1.444536260754E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.349045105012E-01 8.283111137783E-01 0.000000000000E+00 -2.696857066117E-01 8.273044788382E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.993260437490E-01 -1.616668129944E+00 0.000000000000E+00 2.023132210347E-01 -1.428758514650E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.124467077923E-01 8.190798643036E-01 0.000000000000E+00 -2.793433840067E-01 8.212832097452E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.415691681249E-01 -1.582821460665E+00 0.000000000000E+00 2.407655698144E-01 -1.414789430636E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.899539336957E-01 8.097305121573E-01 0.000000000000E+00 -2.888909457103E-01 8.152990117522E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.857968750368E-01 -1.549288609130E+00 0.000000000000E+00 2.782791997079E-01 -1.402395705019E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.674579729169E-01 8.002726383231E-01 0.000000000000E+00 -2.983124049834E-01 8.093466213157E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.320213274401E-01 -1.516098679269E+00 0.000000000000E+00 3.147650682204E-01 -1.391362064578E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.449893395265E-01 7.907156245143E-01 0.000000000000E+00 -3.075924866143E-01 8.034205619881E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.802460565340E-01 -1.483277815047E+00 0.000000000000E+00 3.501475209688E-01 -1.381490691515E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.225772698078E-01 7.810686456526E-01 0.000000000000E+00 -3.167166563524E-01 7.975152350256E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.304668563312E-01 -1.450849379670E+00 0.000000000000E+00 3.843632532063E-01 -1.372600545506E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.002497199783E-01 7.713406634114E-01 0.000000000000E+00 -3.256711436820E-01 7.916249993901E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.826726208531E-01 -1.418834129637E+00 0.000000000000E+00 4.173603094744E-01 -1.364526611336E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.780333683372E-01 7.615404207513E-01 0.000000000000E+00 -3.344429585401E-01 7.857442418758E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.368461246761E-01 -1.387250382977E+00 0.000000000000E+00 4.490971258180E-01 -1.357119095756E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.559536214194E-01 7.516764373810E-01 0.000000000000E+00 -3.430199025511E-01 7.798674380887E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.296474816721E-02 -1.356114181187E+00 0.000000000000E+00 4.795416176096E-01 -1.350242593091E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.340346237605E-01 7.417570060758E-01 0.000000000000E+00 -3.513905753065E-01 7.739892049871E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.100114915638E-02 -1.325439444463E+00 0.000000000000E+00 5.086703148770E-01 -1.343775235582E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.122992709010E-01 7.317901897952E-01 0.000000000000E+00 -3.595443761888E-01 7.681043456740E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.092388301178E-02 -1.295238119927E+00 0.000000000000E+00 5.364675461153E-01 -1.337607841444E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.907692252840E-01 7.217838195385E-01 0.000000000000E+00 -3.674715021987E-01 7.622078871037E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.730202685109E-02 -1.265520322664E+00 0.000000000000E+00 5.629246708607E-01 -1.331643071065E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.694649347191E-01 7.117454928845E-01 0.000000000000E+00 -3.751629422176E-01 7.562951113349E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.371456601839E-02 -1.236294469477E+00 0.000000000000E+00 5.880393607953E-01 -1.325794599659E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.484056531105E-01 7.016825731614E-01 0.000000000000E+00 -3.826104681021E-01 7.503615809305E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 9.835425171822E-02 -1.207567405345E+00 0.000000000000E+00 6.118149287661E-01 -1.319986312898E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.276094631642E-01 6.916021891979E-01 0.000000000000E+00 -3.898066229821E-01 7.444031590716E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.312636990783E-01 -1.179344522684E+00 0.000000000000E+00 6.342597048148E-01 -1.314151530594E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.070933008113E-01 6.815112356081E-01 0.000000000000E+00 -3.967447071029E-01 7.384160249162E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.624872289524E-01 -1.151629873559E+00 0.000000000000E+00 6.553864580576E-01 -1.308232262233E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.868729811027E-01 6.714163735645E-01 0.000000000000E+00 -4.034187615293E-01 7.323966847014E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.920705151149E-01 -1.124426275079E+00 0.000000000000E+00 6.752118630158E-01 -1.302178497142E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.669632253485E-01 6.613240320193E-01 0.000000000000E+00 -4.098235500031E-01 7.263419790508E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.200602684028E-01 -1.097735408251E+00 0.000000000000E+00 6.937560087477E-01 -1.295947531140E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.473776892914E-01 6.512404093309E-01 0.000000000000E+00 -4.159545392214E-01 7.202490869177E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.465039551179E-01 -1.071557910606E+00 0.000000000000E+00 7.110419488686E-01 -1.289503330732E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.281289921241E-01 6.411714752616E-01 0.000000000000E+00 -4.218078777852E-01 7.141155265597E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.714495467638E-01 -1.045893462922E+00 0.000000000000E+00 7.270952902880E-01 -1.282815935218E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.092287461718E-01 6.311229733086E-01 0.000000000000E+00 -4.273803740434E-01 7.079391539115E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.949452980781E-01 -1.020740870395E+00 0.000000000000E+00 7.419438182983E-01 -1.275860896475E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 9.068758707847E-02 6.211004233362E-01 0.000000000000E+00 -4.326694730393E-01 7.017181586901E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.170395503435E-01 -9.960981385935E-01 0.000000000000E+00 7.556171555232E-01 -1.268618755718E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.251520435115E-02 6.111091244784E-01 0.000000000000E+00 -4.376732327502E-01 6.954510585404E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.377805570836E-01 -9.719625445068E-01 0.000000000000E+00 7.681464521874E-01 -1.261074556117E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.472037212701E-02 6.011541582821E-01 0.000000000000E+00 -4.423902997918E-01 6.891366914996E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.572163294637E-01 -9.483307030192E-01 0.000000000000E+00 7.795641051936E-01 -1.253217389920E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.731098004369E-02 5.912403920646E-01 0.000000000000E+00 -4.468198847433E-01 6.827742070376E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.753944990213E-01 -9.251986290820E-01 0.000000000000E+00 7.899035035953E-01 -1.245039978489E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.029406410404E-02 5.813724824584E-01 0.000000000000E+00 -4.509617372355E-01 6.763630559005E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.923621957024E-01 -9.025617958594E-01 0.000000000000E+00 7.991987982181E-01 -1.236538283597E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.675837438231E-03 5.715548791216E-01 0.000000000000E+00 -4.548161209298E-01 6.699029789689E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.081659395269E-01 -8.804151890940E-01 0.000000000000E+00 8.074846933724E-01 -1.227711148265E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.253827912297E-02 5.617918285905E-01 0.000000000000E+00 -4.583837885012E-01 6.633939953167E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.228515445256E-01 -8.587533579184E-01 0.000000000000E+00 8.147962588084E-01 -1.218559965457E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.834362674030E-02 5.520873782543E-01 0.000000000000E+00 -4.616659567296E-01 6.568363896396E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.364640338657E-01 -8.375704623211E-01 0.000000000000E+00 8.211687602636E-01 -1.209088372971E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.373627859052E-02 5.424453804331E-01 0.000000000000E+00 -4.646642817885E-01 6.502306992044E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.490475653005E-01 -8.168603174570E-01 0.000000000000E+00 8.266375071396E-01 -1.199301972950E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.871301028198E-02 5.328694965421E-01 0.000000000000E+00 -4.673808348143E-01 6.435777004523E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.606453662442E-01 -7.966164349764E-01 0.000000000000E+00 8.312377160051E-01 -1.189208074492E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.327127071190E-02 5.233632013244E-01 0.000000000000E+00 -4.698180778246E-01 6.368783953767E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.712996778811E-01 -7.768320615354E-01 0.000000000000E+00 8.350043887564E-01 -1.178815457926E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.740915340877E-02 5.139297871398E-01 0.000000000000E+00 -4.719788400486E-01 6.301339977801E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.810517077893E-01 -7.575002146370E-01 0.000000000000E+00 8.379722043772E-01 -1.168134159403E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.011253683966E-01 5.045723682933E-01 0.000000000000E+00 -4.738662947240E-01 6.233459195040E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.899415905966E-01 -7.386137159424E-01 0.000000000000E+00 8.401754233229E-01 -1.157175274483E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.144192146116E-01 4.952938853937E-01 0.000000000000E+00 -4.754839364043E-01 6.165157567109E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.980083561971E-01 -7.201652221854E-01 0.000000000000E+00 8.416478036255E-01 -1.145950779512E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.272905528974E-01 4.860971097279E-01 0.000000000000E+00 -4.768355588183E-01 6.096452762924E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.052899050616E-01 -7.021472538149E-01 0.000000000000E+00 8.424225278666E-01 -1.134473369591E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.397397795972E-01 4.769846476429E-01 0.000000000000E+00 -4.779252333111E-01 6.027364024615E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.118229901660E-01 -6.845522214844E-01 0.000000000000E+00 8.425321402106E-01 -1.122756312037E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.517678007608E-01 4.679589449247E-01 0.000000000000E+00 -4.787572878963E-01 5.957912035838E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + +RangeSep +CAM 0.300000 0.200000 0.460000 diff --git a/test/prog/sktable/CAMY-B3LYP/Non-Relativistic/config b/test/prog/sktable/CAMY-B3LYP/Non-Relativistic/config new file mode 100644 index 00000000..bfa360b6 --- /dev/null +++ b/test/prog/sktable/CAMY-B3LYP/Non-Relativistic/config @@ -0,0 +1 @@ +C,N C,N \ No newline at end of file diff --git a/test/prog/sktable/CAMY-B3LYP/Non-Relativistic/skdef.hsd b/test/prog/sktable/CAMY-B3LYP/Non-Relativistic/skdef.hsd new file mode 100644 index 00000000..efacb31b --- /dev/null +++ b/test/prog/sktable/CAMY-B3LYP/Non-Relativistic/skdef.hsd @@ -0,0 +1,116 @@ +SkdefVersion = 1 + +Globals { + Superposition = density + XCFunctional = CAMY-B3LYP { + alpha = 0.2 + beta = 0.46 + omega = 0.3 + } +} + +AtomParameters { + + C { + AtomConfig { + AtomicNumber = 6 + Mass = 12.01 + Occupations { + 1S = 1.0 1.0 + 2S = 1.0 1.0 + 2P = 2.0 0.0 + } + ValenceShells = 2s 2p + Relativistics = None + } + DftbAtom { + ShellResolved = No + DensityCompression = PowerCompression { Power = 2; Radius = 7.0 } + WaveCompressions = SingleAtomCompressions { + S = PowerCompression { Power = 2; Radius = 2.7 } + P = PowerCompression { Power = 2; Radius = 2.7 } + } + } + } + + N { + AtomConfig { + AtomicNumber = 7 + Mass = 14.007 + Occupations { + 1S = 1.0 1.0 + 2S = 1.0 1.0 + 2P = 2.0 1.0 + } + ValenceShells = 2s 2p + Relativistics = None + } + DftbAtom { + ShellResolved = No + DensityCompression = PowerCompression{ Power = 2; Radius = 11.0 } + WaveCompressions = SingleAtomCompressions { + S = PowerCompression { Power = 2; Radius = 2.2 } + P = PowerCompression { Power = 2; Radius = 2.2 } + } + CustomizedOnsites { + 2s = -0.64 + } + } + } + +} + + +OnecenterParameters { + + $StandardDeltaFilling { + DeltaFilling = 0.01 + } + + C { + $StandardDeltaFilling + Calculator = SlaterAtom { + Exponents { + S = 0.5 1.14 2.62 6.0 + P = 0.5 1.14 2.62 6.0 + } + MaxPowers { + S = 3 + P = 3 + } + } + } + + N { + $StandardDeltaFilling + Calculator = SlaterAtom { + Exponents { + S = 0.5 1.2 2.9 7.0 + P = 0.5 1.2 2.9 7.0 + } + MaxPowers { + S = 3 + P = 3 + } + } + } +} + +TwoCenterParameters { + + $EqGrid = EquidistantGrid { + GridStart = 0.6 + GridSeparation = 0.02 + Tolerance = 5e-5 + MaxDistance = -1.4 + } + + $SkTwocnt_300_150 = Sktwocnt { + IntegrationPoints = 300 150 + } + + C-C { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + C-N { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + N-N { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + +} diff --git a/test/prog/sktable/CAMY-PBEh/Non-Relativistic/_N-N.skf b/test/prog/sktable/CAMY-PBEh/Non-Relativistic/_N-N.skf new file mode 100644 index 00000000..fe4bb846 --- /dev/null +++ b/test/prog/sktable/CAMY-PBEh/Non-Relativistic/_N-N.skf @@ -0,0 +1,94 @@ +0.020000 69 + 0.000000000000E+00 -2.764708543885E-01 -6.400000000000E-01 -4.023094015600E-02 0.000000000000E+00 4.236038570743E-01 4.236038570743E-01 0.000000000000E+00 3.000000000000E+00 2.000000000000E+00 + 1.400700000000E+01 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.281766025414E-01 -1.768863112834E+00 0.000000000000E+00 1.209308102337E-01 -1.647257594987E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.829764501057E-01 8.478328115695E-01 0.000000000000E+00 -2.515297068502E-01 8.396301802266E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.638805832300E-01 -1.734279071033E+00 0.000000000000E+00 1.624155322266E-01 -1.625918791898E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.607807974520E-01 8.389314092925E-01 0.000000000000E+00 -2.613495208313E-01 8.334981737301E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.014131754497E-01 -1.699878725927E+00 0.000000000000E+00 2.033196336207E-01 -1.606912543358E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.384738888927E-01 8.298909021742E-01 0.000000000000E+00 -2.710924683679E-01 8.274113086313E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.408211065685E-01 -1.665701167174E+00 0.000000000000E+00 2.435068888646E-01 -1.589969103974E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.160896860038E-01 8.207210822500E-01 0.000000000000E+00 -2.807415241275E-01 8.213652038327E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.821396563473E-01 -1.631782059352E+00 0.000000000000E+00 2.828575216507E-01 -1.574837174933E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.936609654668E-01 8.114315710517E-01 0.000000000000E+00 -2.902802746503E-01 8.153550482121E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.253936844139E-01 -1.598153829722E+00 0.000000000000E+00 3.212671269636E-01 -1.561283682654E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.712192994060E-01 8.020318098159E-01 0.000000000000E+00 -2.996929622756E-01 8.093757136747E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.705986050007E-01 -1.564845853465E+00 0.000000000000E+00 3.586456066144E-01 -1.549093377788E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.487950413523E-01 7.925310508579E-01 0.000000000000E+00 -3.089645213186E-01 8.034218562796E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.177613074245E-01 -1.531884635064E+00 0.000000000000E+00 3.949161278047E-01 -1.538068294900E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.264173173569E-01 7.829383500352E-01 0.000000000000E+00 -3.180806071605E-01 7.974880061396E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.668810220299E-01 -1.499293984644E+00 0.000000000000E+00 4.300141119836E-01 -1.528027106633E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.041140218106E-01 7.732625602308E-01 0.000000000000E+00 -3.270276188827E-01 7.915686468079E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.179501322605E-01 -1.467095188188E+00 0.000000000000E+00 4.638862592735E-01 -1.518804400440E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.819118175481E-01 7.635123257863E-01 0.000000000000E+00 -3.357927160290E-01 7.856582848776E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.709549340753E-01 -1.435307170685E+00 0.000000000000E+00 4.964896121060E-01 -1.510249901118E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.598361398417E-01 7.536960778236E-01 0.000000000000E+00 -3.443638300470E-01 7.797515105115E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.258763440587E-01 -1.403946651424E+00 0.000000000000E+00 5.277906604789E-01 -1.502227658222E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.379112039133E-01 7.438220303914E-01 0.000000000000E+00 -3.527296709218E-01 7.738430496053E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.269055732289E-02 -1.373028290879E+00 0.000000000000E+00 5.577644904637E-01 -1.494615214036E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.161600156152E-01 7.338981773795E-01 0.000000000000E+00 -3.608797294787E-01 7.679278082700E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.136965582067E-02 -1.342564828891E+00 0.000000000000E+00 5.863939772217E-01 -1.487302765029E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.946043849507E-01 7.239322901458E-01 0.000000000000E+00 -3.688042758016E-01 7.620009102900E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.882167210126E-03 -1.312567214215E+00 0.000000000000E+00 6.136690237305E-01 -1.480192327595E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.732649421289E-01 7.139319158037E-01 0.000000000000E+00 -3.764943541801E-01 7.560577281867E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.580642578363E-02 -1.283044725862E+00 0.000000000000E+00 6.395858464698E-01 -1.473196917239E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.521611558626E-01 7.039043761199E-01 0.000000000000E+00 -3.839417749687E-01 7.500939084833E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.173322526264E-02 -1.254005086938E+00 0.000000000000E+00 6.641463092410E-01 -1.466239748969E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.313113536438E-01 6.938567669755E-01 0.000000000000E+00 -3.911391037159E-01 7.441053917348E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.059375062120E-01 -1.225454571907E+00 0.000000000000E+00 6.873573059117E-01 -1.459253465344E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.107327437436E-01 6.837959583467E-01 0.000000000000E+00 -3.980796478903E-01 7.380884278523E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.384603503739E-01 -1.197398108190E+00 0.000000000000E+00 7.092301921029E-01 -1.452179397337E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.904414387035E-01 6.737285947614E-01 0.000000000000E+00 -4.047574415108E-01 7.320395872147E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.693443222509E-01 -1.169839372882E+00 0.000000000000E+00 7.297802647787E-01 -1.444966861636E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.704524801032E-01 6.636610961931E-01 0.000000000000E+00 -4.111672279604E-01 7.259557680300E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.986331824541E-01 -1.142780885124E+00 0.000000000000E+00 7.490262875552E-01 -1.437572496563E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.507798644024E-01 6.535996593541E-01 0.000000000000E+00 -4.173044412436E-01 7.198342003704E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.263716330067E-01 -1.116224094412E+00 0.000000000000E+00 7.669900585561E-01 -1.429959637362E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.314365696744E-01 6.435502593517E-01 0.000000000000E+00 -4.231651859245E-01 7.136724472773E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.526050892063E-01 -1.090169464889E+00 0.000000000000E+00 7.836960169956E-01 -1.422097730430E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.124345830599E-01 6.335186516755E-01 0.000000000000E+00 -4.287462159661E-01 7.074684032970E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.773794731519E-01 -1.064616555582E+00 0.000000000000E+00 7.991708844286E-01 -1.413961785230E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 9.378492878682E-02 6.235103744822E-01 0.000000000000E+00 -4.340449126689E-01 7.012202907805E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.007410249037E-01 -1.039564096455E+00 0.000000000000E+00 8.134433367508E-01 -1.405531862107E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.549769661358E-02 6.135307511505E-01 0.000000000000E+00 -4.390592618933E-01 6.949266542513E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.227361282647E-01 -1.015010060240E+00 0.000000000000E+00 8.265437034480E-01 -1.396792593971E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.758207056693E-02 6.035848930770E-01 0.000000000000E+00 -4.437878307320E-01 6.885863531166E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.434111491859E-01 -9.909517300303E-01 0.000000000000E+00 8.385036911686E-01 -1.387732739904E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.004635785791E-02 5.936777026868E-01 0.000000000000E+00 -4.482297437828E-01 6.821985529764E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.628122856718E-01 -9.673857627091E-01 0.000000000000E+00 8.493561293050E-01 -1.378344768774E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.289801787021E-02 5.838138766366E-01 0.000000000000E+00 -4.523846591613E-01 6.757627157541E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.809854287434E-01 -9.443082483539E-01 0.000000000000E+00 8.591347358385E-01 -1.368624471287E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.143691126645E-03 5.739979091850E-01 0.000000000000E+00 -4.562527443749E-01 6.692785888574E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.979760344607E-01 -9.217147657791E-01 0.000000000000E+00 8.678739021632E-01 -1.358570599013E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.021077185061E-02 5.642340957105E-01 0.000000000000E+00 -4.598346521705E-01 6.627461935523E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.138290072307E-01 -8.996004344211E-01 0.000000000000E+00 8.756084959420E-01 -1.348184529163E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.616028186099E-02 5.545265363582E-01 0.000000000000E+00 -4.631314964560E-01 6.561658127162E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.285885946728E-01 -8.779599627577E-01 0.000000000000E+00 8.823736812581E-01 -1.337469954040E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.170048259363E-02 5.448791397944E-01 0.000000000000E+00 -4.661448283832E-01 6.495379781179E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.422982942112E-01 -8.567876934631E-01 0.000000000000E+00 8.882047554211E-01 -1.326432594117E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.682772250076E-02 5.352956270554E-01 0.000000000000E+00 -4.688766126726E-01 6.428634573567E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.550007713849E-01 -8.360776454827E-01 0.000000000000E+00 8.931370017964E-01 -1.315079933758E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.153902702659E-02 5.257795354730E-01 0.000000000000E+00 -4.713292042480E-01 6.361432405760E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.667377896475E-01 -8.158235532005E-01 0.000000000000E+00 8.972055579854E-01 -1.303420978584E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.583207123543E-02 5.163342226626E-01 0.000000000000E+00 -4.735053252423E-01 6.293785270556E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.775501512194E-01 -7.960189028627E-01 0.000000000000E+00 9.004452986104E-01 -1.291466033460E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.970515287605E-02 5.069628705612E-01 0.000000000000E+00 -4.754080424280E-01 6.225707117724E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.874776483757E-01 -7.766569664093E-01 0.000000000000E+00 9.028907318823E-01 -1.279226500002E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.131571659139E-01 4.976684895029E-01 0.000000000000E+00 -4.770407451169E-01 6.157213720093E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.965590244234E-01 -7.577308328567E-01 0.000000000000E+00 9.045759090690E-01 -1.266714692506E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.261875745571E-01 4.884539223209E-01 0.000000000000E+00 -4.784071235685E-01 6.088322540802E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.048319435446E-01 -7.392334373654E-01 0.000000000000E+00 9.055343459383E-01 -1.253943671186E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.387963877986E-01 4.793218484655E-01 0.000000000000E+00 -4.795111479391E-01 6.019052602317E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.123329686522E-01 -7.211575881225E-01 0.000000000000E+00 9.057989552369E-01 -1.240927091554E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.509841344901E-01 4.702747881293E-01 0.000000000000E+00 -4.803570478000E-01 5.949424357715E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + +RangeSep +CAM 0.330000 0.250000 0.750000 diff --git a/test/prog/sktable/CAMY-PBEh/Non-Relativistic/_N-O.skf b/test/prog/sktable/CAMY-PBEh/Non-Relativistic/_N-O.skf new file mode 100644 index 00000000..6252f741 --- /dev/null +++ b/test/prog/sktable/CAMY-PBEh/Non-Relativistic/_N-O.skf @@ -0,0 +1,93 @@ +0.020000 69 + 0.000000000000E+00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.953482761237E-01 -1.951273139717E+00 0.000000000000E+00 2.864223042693E-02 -1.793547483813E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.487667887207E-01 8.305641771395E-01 0.000000000000E+00 -2.236999828336E-01 8.261409969749E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.219817396503E-01 -1.909601651176E+00 0.000000000000E+00 7.967222434400E-02 -1.775067005910E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.257132108166E-01 8.211022802925E-01 0.000000000000E+00 -2.335516407034E-01 8.201194415646E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.511161651776E-01 -1.868282676517E+00 0.000000000000E+00 1.297658540663E-01 -1.758773961355E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.026136604138E-01 8.115105134057E-01 0.000000000000E+00 -2.433444487074E-01 8.141339963661E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.827801894478E-01 -1.827359972333E+00 0.000000000000E+00 1.787586390590E-01 -1.744354011523E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.795042052467E-01 8.017998401745E-01 0.000000000000E+00 -2.530575944663E-01 8.081779622337E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.169889435487E-01 -1.786872797986E+00 0.000000000000E+00 2.265091467829E-01 -1.731519456162E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.564193433868E-01 7.919809721981E-01 0.000000000000E+00 -2.626711371809E-01 8.022444365039E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.537455096755E-01 -1.746856208722E+00 0.000000000000E+00 2.728972027903E-01 -1.720008238289E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.333919995109E-01 7.820643600758E-01 0.000000000000E+00 -2.721660553712E-01 7.963264310223E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.930422797586E-01 -1.707341337802E+00 0.000000000000E+00 3.178221560780E-01 -1.709582792935E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.104535276806E-01 7.720601859759E-01 0.000000000000E+00 -2.815242841164E-01 7.904169748628E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.348622174472E-01 -1.668355665960E+00 0.000000000000E+00 3.612012102979E-01 -1.700028787737E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.876337199523E-01 7.619783575654E-01 0.000000000000E+00 -2.907287427971E-01 7.845092029097E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.791800252231E-01 -1.629923276981E+00 0.000000000000E+00 4.029678285349E-01 -1.691153794442E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.649608201825E-01 7.518285031937E-01 0.000000000000E+00 -2.997633542758E-01 7.785964314510E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.259632182173E-01 -1.592065098631E+00 0.000000000000E+00 4.430702173800E-01 -1.682785923149E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.424615424389E-01 7.416199682320E-01 0.000000000000E+00 -3.086130563910E-01 7.726722219069E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.517310598804E-02 -1.554799128819E+00 0.000000000000E+00 4.814698947597E-01 -1.674772445302E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.201610934672E-01 7.313618124740E-01 0.000000000000E+00 -3.172638065818E-01 7.667304337678E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.676568356062E-02 -1.518140647470E+00 0.000000000000E+00 5.181403451298E-01 -1.666978426819E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.980831987055E-01 7.210628085087E-01 0.000000000000E+00 -3.257025804022E-01 7.607652677735E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.930756623704E-02 -1.482102415117E+00 0.000000000000E+00 5.530657647628E-01 -1.659285388908E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.762501313736E-01 7.107314409833E-01 0.000000000000E+00 -3.339173646288E-01 7.547713003056E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.309895561179E-02 -1.446694859582E+00 0.000000000000E+00 5.862398986298E-01 -1.651590010734E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.546827442012E-01 7.003759066760E-01 0.000000000000E+00 -3.418971456143E-01 7.487435099102E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.046639543075E-01 -1.411926252114E+00 0.000000000000E+00 6.176649686531E-01 -1.643802884860E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.334005033915E-01 6.900041153068E-01 0.000000000000E+00 -3.496318934894E-01 7.426772968082E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.440606243302E-01 -1.377802874191E+00 0.000000000000E+00 6.473506910680E-01 -1.635847333140E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.124215244520E-01 6.796236910163E-01 0.000000000000E+00 -3.571125427672E-01 7.365684961897E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.813491181069E-01 -1.344329175792E+00 0.000000000000E+00 6.753133786147E-01 -1.627658287740E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.917626095507E-01 6.692419744474E-01 0.000000000000E+00 -3.643309698605E-01 7.304133860308E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.165912308589E-01 -1.311507925578E+00 0.000000000000E+00 7.015751216962E-01 -1.619181239227E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.714392860882E-01 6.588660253697E-01 0.000000000000E+00 -3.712799679788E-01 7.242086901130E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.498499985063E-01 -1.279340353153E+00 0.000000000000E+00 7.261630417437E-01 -1.610371251503E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.514658462033E-01 6.485026257895E-01 0.000000000000E+00 -3.779532198319E-01 7.179515768694E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.811893336713E-01 -1.247826283407E+00 0.000000000000E+00 7.491086098434E-01 -1.601192041901E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.318553869551E-01 6.381582834929E-01 0.000000000000E+00 -3.843452685304E-01 7.116396546272E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.106736940238E-01 -1.216964262952E+00 0.000000000000E+00 7.704470241429E-01 -1.591615123833E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.126198509492E-01 6.278392359719E-01 0.000000000000E+00 -3.904514870346E-01 7.052709637669E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.383677789356E-01 -1.186751678709E+00 0.000000000000E+00 7.902166403937E-01 -1.581619009033E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 9.377006720136E-02 6.175514546874E-01 0.000000000000E+00 -3.962680464731E-01 6.988439662679E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.643362519318E-01 -1.157184868831E+00 0.000000000000E+00 8.084584509878E-01 -1.571188466434E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.531579205058E-02 6.073006496281E-01 0.000000000000E+00 -4.017918836193E-01 6.923575330660E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.886434876042E-01 -1.128259226190E+00 0.000000000000E+00 8.252156088245E-01 -1.560313834854E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.726574995705E-02 5.970922741231E-01 0.000000000000E+00 -4.070206677847E-01 6.858109296062E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.113533423874E-01 -1.099969294787E+00 0.000000000000E+00 8.405329931300E-01 -1.548990386961E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.962767403785E-02 5.869315298741E-01 0.000000000000E+00 -4.119527673601E-01 6.792037999323E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.325289489546E-01 -1.072308859412E+00 0.000000000000E+00 8.544568149396E-01 -1.537217742146E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.240834621240E-02 5.768233721714E-01 0.000000000000E+00 -4.165872162133E-01 6.725361496205E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.522325339941E-01 -1.045271028951E+00 0.000000000000E+00 8.670342602521E-01 -1.524999326135E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.613636845654E-03 5.667725152644E-01 0.000000000000E+00 -4.209236801227E-01 6.658083278292E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.705252589257E-01 -1.018848313691E+00 0.000000000000E+00 8.783131689935E-01 -1.512341875183E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.075145620734E-02 5.567834378565E-01 0.000000000000E+00 -4.249624234108E-01 6.590210087056E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.874670827942E-01 -9.930326969702E-01 0.000000000000E+00 8.883417479072E-01 -1.499254982722E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.668276923769E-02 5.468603886997E-01 0.000000000000E+00 -4.287042759161E-01 6.521751723620E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.031166462427E-01 -9.678157015280E-01 0.000000000000E+00 8.971683153769E-01 -1.485750686252E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.217693506902E-02 5.370073922631E-01 0.000000000000E+00 -4.321506004267E-01 6.452720856065E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.175311751873E-01 -9.431884508422E-01 0.000000000000E+00 9.048410760895E-01 -1.471843092215E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.723134625139E-02 5.272282544561E-01 0.000000000000E+00 -4.353032606803E-01 6.383132825929E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.307664026248E-01 -9.191417257676E-01 0.000000000000E+00 9.114079233562E-01 -1.457548036521E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.184411910933E-02 5.175265683843E-01 0.000000000000E+00 -4.381645900208E-01 6.313005455287E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.428765069119E-01 -8.956660167494E-01 0.000000000000E+00 9.169162668854E-01 -1.442882778387E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.601405868110E-02 5.079057201212E-01 0.000000000000E+00 -4.407373607869E-01 6.242358855621E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.539140648460E-01 -8.727515718806E-01 0.000000000000E+00 9.214128838236E-01 -1.427865725121E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.974062457720E-02 4.983688944795E-01 0.000000000000E+00 -4.430247544943E-01 6.171215239532E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.639300179398E-01 -8.503884410570E-01 0.000000000000E+00 9.249437909559E-01 -1.412516185559E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.130238977788E-01 4.889190807678E-01 0.000000000000E+00 -4.450303328649E-01 6.099598736160E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.729736503797E-01 -8.285665164713E-01 0.000000000000E+00 9.275541360670E-01 -1.396854149928E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.258645483895E-01 4.795590785187E-01 0.000000000000E+00 -4.467580097418E-01 6.027535211042E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.810925772790E-01 -8.072755696778E-01 0.000000000000E+00 9.292881065919E-01 -1.380900093984E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.382638043474E-01 4.702915031783E-01 0.000000000000E+00 -4.482120239215E-01 5.955052091023E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.883327419686E-01 -7.865052854465E-01 0.000000000000E+00 9.301888538286E-01 -1.364674805417E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.502234211007E-01 4.611187917456E-01 0.000000000000E+00 -4.493969129279E-01 5.882178194712E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.947384211869E-01 -7.662452926171E-01 0.000000000000E+00 9.302984311206E-01 -1.348199230603E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.617456522429E-01 4.520432083528E-01 0.000000000000E+00 -4.503174877419E-01 5.808943568876E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.003522371492E-01 -7.464851921517E-01 0.000000000000E+00 9.296577445550E-01 -1.331494339924E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.728332211013E-01 4.430668497798E-01 0.000000000000E+00 -4.509788084958E-01 5.735379331074E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + +RangeSep +CAM 0.330000 0.250000 0.750000 diff --git a/test/prog/sktable/CAMY-PBEh/Non-Relativistic/_O-N.skf b/test/prog/sktable/CAMY-PBEh/Non-Relativistic/_O-N.skf new file mode 100644 index 00000000..d199b027 --- /dev/null +++ b/test/prog/sktable/CAMY-PBEh/Non-Relativistic/_O-N.skf @@ -0,0 +1,93 @@ +0.020000 69 + 0.000000000000E+00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.953482761237E-01 -1.951273139717E+00 0.000000000000E+00 4.767083066146E-01 -1.793547483813E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.487667887207E-01 8.305641771395E-01 0.000000000000E+00 -3.164206786165E-01 8.261409969749E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.219817396503E-01 -1.909601651176E+00 0.000000000000E+00 5.231466451123E-01 -1.775067005910E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.257132108166E-01 8.211022802925E-01 0.000000000000E+00 -3.270570501738E-01 8.201194415646E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.511161651776E-01 -1.868282676517E+00 0.000000000000E+00 5.682105991021E-01 -1.758773961355E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.026136604138E-01 8.115105134057E-01 0.000000000000E+00 -3.375021921083E-01 8.141339963661E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.827801894478E-01 -1.827359972333E+00 0.000000000000E+00 6.117893798873E-01 -1.744354011523E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.795042052467E-01 8.017998401745E-01 0.000000000000E+00 -3.477397406600E-01 8.081779622337E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.169889435487E-01 -1.786872797986E+00 0.000000000000E+00 6.537911544753E-01 -1.731519456162E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.564193433868E-01 7.919809721981E-01 0.000000000000E+00 -3.577542918089E-01 8.022444365039E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.537455096755E-01 -1.746856208722E+00 0.000000000000E+00 6.941414335799E-01 -1.720008238289E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.333919995109E-01 7.820643600758E-01 0.000000000000E+00 -3.675314237111E-01 7.963264310223E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.930422797586E-01 -1.707341337802E+00 0.000000000000E+00 7.327815268776E-01 -1.709582792935E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.104535276806E-01 7.720601859759E-01 0.000000000000E+00 -3.770577109155E-01 7.904169748628E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.348622174472E-01 -1.668355665960E+00 0.000000000000E+00 7.696670716647E-01 -1.700028787737E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.876337199523E-01 7.619783575654E-01 0.000000000000E+00 -3.863207312627E-01 7.845092029097E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.791800252231E-01 -1.629923276981E+00 0.000000000000E+00 8.047666389105E-01 -1.691153794442E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.649608201825E-01 7.518285031937E-01 0.000000000000E+00 -3.953090662928E-01 7.785964314510E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.259632182173E-01 -1.592065098631E+00 0.000000000000E+00 8.380604193724E-01 -1.682785923149E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.424615424389E-01 7.416199682320E-01 0.000000000000E+00 -4.040122959244E-01 7.726722219069E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.517310598804E-02 -1.554799128819E+00 0.000000000000E+00 8.695389917420E-01 -1.674772445302E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.201610934672E-01 7.313618124740E-01 0.000000000000E+00 -4.124209881017E-01 7.667304337678E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.676568356062E-02 -1.518140647470E+00 0.000000000000E+00 8.992021743985E-01 -1.666978426819E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.980831987055E-01 7.210628085087E-01 0.000000000000E+00 -4.205266840496E-01 7.607652677735E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.930756623704E-02 -1.482102415117E+00 0.000000000000E+00 9.270579618568E-01 -1.659285388908E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.762501313736E-01 7.107314409833E-01 0.000000000000E+00 -4.283218797197E-01 7.547713003056E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.309895561179E-02 -1.446694859582E+00 0.000000000000E+00 9.531215461017E-01 -1.651590010734E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.546827442012E-01 7.003759066760E-01 0.000000000000E+00 -4.358000039602E-01 7.487435099102E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.046639543075E-01 -1.411926252114E+00 0.000000000000E+00 9.774144215904E-01 -1.643802884860E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.334005033915E-01 6.900041153068E-01 0.000000000000E+00 -4.429553938948E-01 7.426772968082E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.440606243302E-01 -1.377802874191E+00 0.000000000000E+00 9.999635709590E-01 -1.635847333140E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.124215244520E-01 6.796236910163E-01 0.000000000000E+00 -4.497832679522E-01 7.365684961897E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.813491181069E-01 -1.344329175792E+00 0.000000000000E+00 1.020800726742E+00 -1.627658287740E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.917626095507E-01 6.692419744474E-01 0.000000000000E+00 -4.562796969463E-01 7.304133860308E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.165912308589E-01 -1.311507925578E+00 0.000000000000E+00 1.039961703086E+00 -1.619181239227E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.714392860882E-01 6.588660253697E-01 0.000000000000E+00 -4.624415735707E-01 7.242086901130E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.498499985063E-01 -1.279340353153E+00 0.000000000000E+00 1.057485790734E+00 -1.610371251503E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.514658462033E-01 6.485026257895E-01 0.000000000000E+00 -4.682665806357E-01 7.179515768694E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.811893336713E-01 -1.247826283407E+00 0.000000000000E+00 1.073415208543E+00 -1.601192041901E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.318553869551E-01 6.381582834929E-01 0.000000000000E+00 -4.737531583441E-01 7.116396546272E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.106736940238E-01 -1.216964262952E+00 0.000000000000E+00 1.087794605314E+00 -1.591615123833E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.126198509492E-01 6.278392359719E-01 0.000000000000E+00 -4.789004708733E-01 7.052709637669E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.383677789356E-01 -1.186751678709E+00 0.000000000000E+00 1.100670606561E+00 -1.581619009033E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 9.377006720136E-02 6.175514546874E-01 0.000000000000E+00 -4.837083725030E-01 6.988439662679E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.643362519318E-01 -1.157184868831E+00 0.000000000000E+00 1.112091401880E+00 -1.571188466434E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.531579205058E-02 6.073006496281E-01 0.000000000000E+00 -4.881773735014E-01 6.923575330660E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.886434876042E-01 -1.128259226190E+00 0.000000000000E+00 1.122106369438E+00 -1.560313834854E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.726574995705E-02 5.970922741231E-01 0.000000000000E+00 -4.923086059639E-01 6.858109296062E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.113533423874E-01 -1.099969294787E+00 0.000000000000E+00 1.130765734966E+00 -1.548990386961E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.962767403785E-02 5.869315298741E-01 0.000000000000E+00 -4.961037897709E-01 6.792037999323E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.325289489546E-01 -1.072308859412E+00 0.000000000000E+00 1.138120263127E+00 -1.537217742146E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.240834621240E-02 5.768233721714E-01 0.000000000000E+00 -4.995651988169E-01 6.725361496205E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.522325339941E-01 -1.045271028951E+00 0.000000000000E+00 1.144220979532E+00 -1.524999326135E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.613636845654E-03 5.667725152644E-01 0.000000000000E+00 -5.026956276405E-01 6.658083278292E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.705252589257E-01 -1.018848313691E+00 0.000000000000E+00 1.149118921814E+00 -1.512341875183E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.075145620734E-02 5.567834378565E-01 0.000000000000E+00 -5.054983585721E-01 6.590210087056E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.874670827942E-01 -9.930326969702E-01 0.000000000000E+00 1.152864918233E+00 -1.499254982722E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.668276923769E-02 5.468603886997E-01 0.000000000000E+00 -5.079771294976E-01 6.521751723620E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.031166462427E-01 -9.678157015280E-01 0.000000000000E+00 1.155509392209E+00 -1.485750686252E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.217693506902E-02 5.370073922631E-01 0.000000000000E+00 -5.101361023236E-01 6.452720856065E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.175311751873E-01 -9.431884508422E-01 0.000000000000E+00 1.157102191160E+00 -1.471843092215E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.723134625139E-02 5.272282544561E-01 0.000000000000E+00 -5.119798322173E-01 6.383132825929E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.307664026248E-01 -9.191417257676E-01 0.000000000000E+00 1.157692437918E+00 -1.457548036521E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.184411910933E-02 5.175265683843E-01 0.000000000000E+00 -5.135132376813E-01 6.313005455287E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.428765069119E-01 -8.956660167494E-01 0.000000000000E+00 1.157328402998E+00 -1.442882778387E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.601405868110E-02 5.079057201212E-01 0.000000000000E+00 -5.147415715129E-01 6.242358855621E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.539140648460E-01 -8.727515718806E-01 0.000000000000E+00 1.156057395967E+00 -1.427865725121E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.974062457720E-02 4.983688944795E-01 0.000000000000E+00 -5.156703926886E-01 6.171215239532E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.639300179398E-01 -8.503884410570E-01 0.000000000000E+00 1.153925674236E+00 -1.412516185559E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.130238977788E-01 4.889190807678E-01 0.000000000000E+00 -5.163055392056E-01 6.099598736160E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.729736503797E-01 -8.285665164713E-01 0.000000000000E+00 1.150978367618E+00 -1.396854149928E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.258645483895E-01 4.795590785187E-01 0.000000000000E+00 -5.166531019023E-01 6.027535211042E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.810925772790E-01 -8.072755696778E-01 0.000000000000E+00 1.147259417132E+00 -1.380900093984E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.382638043474E-01 4.702915031783E-01 0.000000000000E+00 -5.167193992747E-01 5.955052091023E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.883327419686E-01 -7.865052854465E-01 0.000000000000E+00 1.142811526578E+00 -1.364674805417E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.502234211007E-01 4.611187917456E-01 0.000000000000E+00 -5.165109532990E-01 5.882178194712E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.947384211869E-01 -7.662452926171E-01 0.000000000000E+00 1.137676125568E+00 -1.348199230603E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.617456522429E-01 4.520432083528E-01 0.000000000000E+00 -5.160344662629E-01 5.808943568876E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.003522371492E-01 -7.464851921517E-01 0.000000000000E+00 1.131893342745E+00 -1.331494339924E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.728332211013E-01 4.430668497798E-01 0.000000000000E+00 -5.152967986050E-01 5.735379331074E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + +RangeSep +CAM 0.330000 0.250000 0.750000 diff --git a/test/prog/sktable/CAMY-PBEh/Non-Relativistic/_O-O.skf b/test/prog/sktable/CAMY-PBEh/Non-Relativistic/_O-O.skf new file mode 100644 index 00000000..4d09f182 --- /dev/null +++ b/test/prog/sktable/CAMY-PBEh/Non-Relativistic/_O-O.skf @@ -0,0 +1,94 @@ +0.020000 69 + 0.000000000000E+00 -4.002097792612E-01 -1.101094064419E+00 0.000000000000E+00 0.000000000000E+00 4.985764178731E-01 4.985764178731E-01 0.000000000000E+00 4.000000000000E+00 2.000000000000E+00 + 1.601000000000E+01 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.303763420037E-01 -2.151852698735E+00 0.000000000000E+00 4.179558295900E-01 -1.995791303941E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.154971365514E-01 8.189307909566E-01 0.000000000000E+00 -2.930925762664E-01 8.264714405676E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.470444978511E-01 -2.101450639884E+00 0.000000000000E+00 4.740599809082E-01 -1.978245389345E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.913527640916E-01 8.087531423318E-01 0.000000000000E+00 -3.037660704388E-01 8.201650108152E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.671034705388E-01 -2.051648225550E+00 0.000000000000E+00 5.282550429713E-01 -1.962692216248E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.672433661212E-01 7.984575293142E-01 0.000000000000E+00 -3.142526648732E-01 8.138824435241E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.905496545516E-01 -2.002493222274E+00 0.000000000000E+00 5.804137061274E-01 -1.948775496499E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.432071804499E-01 7.880563203484E-01 0.000000000000E+00 -3.245325874781E-01 8.076152965975E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.173638308397E-01 -1.954027498112E+00 0.000000000000E+00 6.304346607944E-01 -1.936175071369E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.192803876518E-01 7.775615231142E-01 0.000000000000E+00 -3.345873555604E-01 8.013551808683E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.475132034341E-01 -1.906287461665E+00 0.000000000000E+00 6.782400607614E-01 -1.924604857263E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.954971319552E-01 7.669847775663E-01 0.000000000000E+00 -3.443997941220E-01 7.950938779294E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.809532645604E-01 -1.859304475996E+00 0.000000000000E+00 7.237731242059E-01 -1.913810688120E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.718895494778E-01 7.563373508185E-01 0.000000000000E+00 -3.539540433008E-01 7.888234391136E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.176294911101E-01 -1.813105246721E+00 0.000000000000E+00 7.669958801251E-01 -1.903568110428E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.484878028467E-01 7.456301337085E-01 0.000000000000E+00 -3.632355562622E-01 7.825362673863E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.747887568315E-02 -1.767712184839E+00 0.000000000000E+00 8.078870659217E-01 -1.893680176079E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.253201213187E-01 7.348736388908E-01 0.000000000000E+00 -3.722310887425E-01 7.762251838395E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.312969243617E-04 -1.723143745842E+00 0.000000000000E+00 8.464401800611E-01 -1.883975269691E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.024128455858E-01 7.240780003136E-01 0.000000000000E+00 -3.809286813392E-01 7.698834803866E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.358926324402E-02 -1.679414747393E+00 0.000000000000E+00 8.826616913161E-01 -1.874304999425E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.797904765172E-01 7.132529739445E-01 0.000000000000E+00 -3.893176355559E-01 7.635049601640E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.046636442965E-01 -1.636536667916E+00 0.000000000000E+00 9.165694028982E-01 -1.864542173357E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.574757271543E-01 7.024079396202E-01 0.000000000000E+00 -3.973884845154E-01 7.570839670446E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.528765591998E-01 -1.594517928081E+00 0.000000000000E+00 9.481909660979E-01 -1.854578876768E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.354895773328E-01 6.915519039023E-01 0.000000000000E+00 -4.051329591731E-01 7.506154055694E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.983157575202E-01 -1.553364156512E+00 0.000000000000E+00 9.775625346611E-01 -1.844324659513E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.138513303627E-01 6.806935038300E-01 0.000000000000E+00 -4.125439507873E-01 7.440947524985E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.410712830571E-01 -1.513078440377E+00 0.000000000000E+00 1.004727548724E+00 -1.833704837429E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.925786712530E-01 6.698410114674E-01 0.000000000000E+00 -4.196154703286E-01 7.375180610883E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.812348111245E-01 -1.473661561156E+00 0.000000000000E+00 1.029735636080E+00 -1.822658907670E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.716877260135E-01 6.590023391514E-01 0.000000000000E+00 -4.263426054446E-01 7.308819591030E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.188990533089E-01 -1.435112215663E+00 0.000000000000E+00 1.052641618805E+00 -1.811139075255E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.511931216197E-01 6.481850453521E-01 0.000000000000E+00 -4.327214755344E-01 7.241836414771E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.541572206152E-01 -1.397427222486E+00 0.000000000000E+00 1.073504614415E+00 -1.799108886571E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.311080462659E-01 6.373963410648E-01 0.000000000000E+00 -4.387491854285E-01 7.174208584597E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.871025387808E-01 -1.360601714181E+00 0.000000000000E+00 1.092387222381E+00 -1.786541964993E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.114443095770E-01 6.266430966583E-01 0.000000000000E+00 -4.444237781187E-01 7.105918999863E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.178278118325E-01 -1.324629315688E+00 0.000000000000E+00 1.109354788528E+00 -1.773420843691E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 9.221240248759E-02 6.159318491101E-01 0.000000000000E+00 -4.497441869295E-01 7.036955769500E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.464250315237E-01 -1.289502309605E+00 0.000000000000E+00 1.124474741281E+00 -1.759735890915E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.342155653422E-02 6.052688095659E-01 0.000000000000E+00 -4.547101874808E-01 6.967311999689E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.729850311283E-01 -1.255211789017E+00 0.000000000000E+00 1.137815994902E+00 -1.745484323272E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.507980233832E-02 5.946598711651E-01 0.000000000000E+00 -4.593223497482E-01 6.896985561816E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.975971823256E-01 -1.221747798611E+00 0.000000000000E+00 1.149448415543E+00 -1.730669302748E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.719402709216E-02 5.841106170776E-01 0.000000000000E+00 -4.635819904876E-01 6.825978845418E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.203491337450E-01 -1.189099464786E+00 0.000000000000E+00 1.159442346353E+00 -1.715299113299E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.977003088621E-02 5.736263287059E-01 0.000000000000E+00 -4.674911262563E-01 6.754298500244E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.413265892970E-01 -1.157255115451E+00 0.000000000000E+00 1.167868188025E+00 -1.699386412829E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.812581744025E-03 5.632119940067E-01 0.000000000000E+00 -4.710524272330E-01 6.681955171058E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.606131240586E-01 -1.126202390161E+00 0.000000000000E+00 1.174796031131E+00 -1.682947556366E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.367453074508E-02 5.528723158923E-01 0.000000000000E+00 -4.742691720030E-01 6.608963228334E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.782900349073E-01 -1.095928341214E+00 0.000000000000E+00 1.180295336540E+00 -1.666001986056E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.968844328376E-02 5.426117206771E-01 0.000000000000E+00 -4.771452034562E-01 6.535340497563E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.944362229583E-01 -1.066419526265E+00 0.000000000000E+00 1.184434660155E+00 -1.648571683618E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.522716828289E-02 5.324343665358E-01 0.000000000000E+00 -4.796848859143E-01 6.461107989524E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.091281046360E-01 -1.037662093037E+00 0.000000000000E+00 1.187281418176E+00 -1.630680680826E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.028954488677E-02 5.223441519450E-01 0.000000000000E+00 -4.818930635850E-01 6.386289633492E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.224395482419E-01 -1.009641856623E+00 0.000000000000E+00 1.188901689175E+00 -1.612354623613E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.487519164170E-02 5.123447240825E-01 0.000000000000E+00 -4.837750204209E-01 6.310912015078E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.344418329916E-01 -9.823443698882E-01 0.000000000000E+00 1.189360049387E+00 -1.593620385517E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.898446082869E-02 5.024394871618E-01 0.000000000000E+00 -4.853364414414E-01 6.235004120098E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.452036276843E-01 -9.557549874315E-01 0.000000000000E+00 1.188719437802E+00 -1.574505726302E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.026183944681E-01 4.926316106817E-01 0.000000000000E+00 -4.865833755615E-01 6.158597085633E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.547909864051E-01 -9.298589235634E-01 0.000000000000E+00 1.187041047867E+00 -1.555038991809E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.157786819935E-01 4.829240375734E-01 0.000000000000E+00 -4.875221999563E-01 6.081723959198E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.632673588992E-01 -9.046413047145E-01 0.000000000000E+00 1.184384242823E+00 -1.535248851277E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.284676195837E-01 4.733194922309E-01 0.000000000000E+00 -4.881595859784E-01 6.004419466783E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.706936135254E-01 -8.800872166822E-01 0.000000000000E+00 1.180806491984E+00 -1.515164068659E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.406880711309E-01 4.638204884107E-01 0.000000000000E+00 -4.885024666321E-01 5.926719790317E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.771280708967E-01 -8.561817470923E-01 0.000000000000E+00 1.176363325465E+00 -1.494813304640E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.524434308204E-01 4.544293369907E-01 0.000000000000E+00 -4.885580056023E-01 5.848662354986E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.826265465550E-01 -8.329100234361E-01 0.000000000000E+00 1.171108305117E+00 -1.474224946363E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.637375872887E-01 4.451481535782E-01 0.000000000000E+00 -4.883335678234E-01 5.770285626692E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.872424012020E-01 -8.102572470182E-01 0.000000000000E+00 1.165093009636E+00 -1.453426962067E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.745748893218E-01 4.359788659608E-01 0.000000000000E+00 -4.878366915703E-01 5.691628919822E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.910265971810E-01 -7.882087231368E-01 0.000000000000E+00 1.158367032014E+00 -1.432446778077E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.849601130556E-01 4.269232213924E-01 0.000000000000E+00 -4.870750620438E-01 5.612732215418E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.940277600538E-01 -7.667498877920E-01 0.000000000000E+00 1.150977987661E+00 -1.411311175795E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.948984306320E-01 4.179827937109E-01 0.000000000000E+00 -4.860564864202E-01 5.533635989729E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + +RangeSep +CAM 0.330000 0.250000 0.750000 diff --git a/test/prog/sktable/CAMY-PBEh/Non-Relativistic/config b/test/prog/sktable/CAMY-PBEh/Non-Relativistic/config new file mode 100644 index 00000000..57bc8b62 --- /dev/null +++ b/test/prog/sktable/CAMY-PBEh/Non-Relativistic/config @@ -0,0 +1 @@ +O,N O,N \ No newline at end of file diff --git a/test/prog/sktable/CAMY-PBEh/Non-Relativistic/skdef.hsd b/test/prog/sktable/CAMY-PBEh/Non-Relativistic/skdef.hsd new file mode 100644 index 00000000..96c30f39 --- /dev/null +++ b/test/prog/sktable/CAMY-PBEh/Non-Relativistic/skdef.hsd @@ -0,0 +1,120 @@ +SkdefVersion = 1 + +Globals { + Superposition = density + XCFunctional = CAMY-PBEh { + alpha = 0.25 + beta = 0.75 + omega = 0.33 + } +} + +AtomParameters { + + + + N { + AtomConfig { + AtomicNumber = 7 + Mass = 14.007 + Occupations { + 1S = 1.0 1.0 + 2S = 1.0 1.0 + 2P = 2.0 1.0 + } + ValenceShells = 2s 2p + Relativistics = None + } + DftbAtom { + ShellResolved = No + DensityCompression = PowerCompression{ Power = 2; Radius = 11.0 } + WaveCompressions = SingleAtomCompressions { + S = PowerCompression { Power = 2; Radius = 2.2 } + P = PowerCompression { Power = 2; Radius = 2.2 } + } + CustomizedOnsites { + 2s = -0.64 + } + } + } + + O { + AtomConfig { + AtomicNumber = 8 + Mass = 16.01 + Occupations { + 1S = 1.0 1.0 + 2S = 1.0 1.0 + 2P = 2.0 2.0 + } + ValenceShells = 2s 2p + Relativistics = None + } + DftbAtom { + ShellResolved = No + DensityCompression = PowerCompression{ Power = 2; Radius = 9.0 } + WaveCompressions = SingleAtomCompressions { + S = PowerCompression { Power = 2; Radius = 2.3 } + P = PowerCompression { Power = 2; Radius = 2.3 } + } + } + } + +} + + +OnecenterParameters { + + $StandardDeltaFilling { + DeltaFilling = 0.01 + } + + + + N { + $StandardDeltaFilling + Calculator = SlaterAtom { + Exponents { + S = 0.5 1.2 2.9 7.0 + P = 0.5 1.2 2.9 7.0 + } + MaxPowers { + S = 3 + P = 3 + } + } + } + + O { + $StandardDeltaFilling + Calculator = SlaterAtom { + Exponents { + S = 0.5 1.26 3.17 8.0 + P = 0.5 1.26 3.17 8.0 + } + MaxPowers { + S = 3 + P = 3 + } + } + } +} + +TwoCenterParameters { + + $EqGrid = EquidistantGrid { + GridStart = 0.6 + GridSeparation = 0.02 + Tolerance = 5e-5 + MaxDistance = -1.4 + } + + $SkTwocnt_300_150 = Sktwocnt { + IntegrationPoints = 300 150 + } + + N-N { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + N-O { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + O-O { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + +} diff --git a/test/prog/sktable/CMakeLists.txt b/test/prog/sktable/CMakeLists.txt new file mode 100644 index 00000000..936d4a15 --- /dev/null +++ b/test/prog/sktable/CMakeLists.txt @@ -0,0 +1,35 @@ +set(builddir ${CMAKE_CURRENT_BINARY_DIR}) +set(srcdir ${CMAKE_CURRENT_SOURCE_DIR}) +file(TO_NATIVE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../../" projectdir) + +# execute_process is verbatim, therefore ";" must be replaced with " " +string(REGEX REPLACE ";" " " releasename "${RELEASE}") + + +execute_process( + COMMAND ${projectdir}/utils/test/testlist_to_fypp + INPUT_FILE ${srcdir}/tests + OUTPUT_FILE ${builddir}/_sktable_tests.fypp) + +set(fypp_flags ${FYPP_CONFIG_FLAGS}) +list(APPEND fypp_flags -I${projectdir}/common/include -DRELEASE="'${releasename}'") + +execute_process( + COMMAND ${FYPP} ${fypp_flags} + INPUT_FILE ${builddir}/_sktable_tests.fypp + OUTPUT_FILE ${builddir}/_sktable_tests) + +file(STRINGS ${builddir}/_sktable_tests sktable_tests_raw) +foreach(line IN LISTS sktable_tests_raw) + string(STRIP "${line}" testname) + if(NOT "${testname}" STREQUAL "") + list(APPEND tests ${testname}) + endif() +endforeach() + +foreach(test IN LISTS tests) + add_test( + NAME sktable_${test} + COMMAND ${PYTHON_INTERPRETER} ${srcdir}/bin/testwithworkdir ${test} ${builddir} + -r ${srcdir}) +endforeach() diff --git a/test/prog/sktable/GGA-PBE96/Non-Relativistic/_N-N.skf b/test/prog/sktable/GGA-PBE96/Non-Relativistic/_N-N.skf new file mode 100644 index 00000000..03e6e957 --- /dev/null +++ b/test/prog/sktable/GGA-PBE96/Non-Relativistic/_N-N.skf @@ -0,0 +1,92 @@ +0.020000 69 + 0.000000000000E+00 -2.606903244064E-01 -6.400000000000E-01 -1.273233142848E-02 0.000000000000E+00 4.308373884950E-01 4.308373884950E-01 0.000000000000E+00 3.000000000000E+00 2.000000000000E+00 + 1.400700000000E+01 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.927789166906E-01 -1.599255142161E+00 0.000000000000E+00 1.050368788155E-02 -1.143145228116E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.750531022336E-01 8.446750327440E-01 0.000000000000E+00 -2.471774112415E-01 8.395109142420E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.321075208045E-01 -1.565722774046E+00 0.000000000000E+00 4.834865770744E-02 -1.125429715274E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.525338360947E-01 8.356146648592E-01 0.000000000000E+00 -2.569221364901E-01 8.333867218272E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.733597246381E-01 -1.532422970937E+00 0.000000000000E+00 8.562860151187E-02 -1.110003146647E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.299103508205E-01 8.264151227400E-01 0.000000000000E+00 -2.665906861108E-01 8.273102443405E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.165721704908E-01 -1.499393106054E+00 0.000000000000E+00 1.222136981725E-01 -1.096600726816E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.072172897822E-01 8.170864282864E-01 0.000000000000E+00 -2.761659909767E-01 8.212773652248E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.617701058187E-01 -1.466667009831E+00 0.000000000000E+00 1.579907664180E-01 -1.084976209294E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.844881181829E-01 8.076384259897E-01 0.000000000000E+00 -2.856316405829E-01 8.152835129545E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.089684958068E-01 -1.434275181338E+00 0.000000000000E+00 1.928620852138E-01 -1.074901598954E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.617551083381E-01 7.980807743937E-01 0.000000000000E+00 -2.949719202893E-01 8.093237696449E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.581730702120E-01 -1.402244995717E+00 0.000000000000E+00 2.267442367772E-01 -1.066166686237E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.390493291300E-01 7.884229386294E-01 0.000000000000E+00 -3.041718406987E-01 8.033929686763E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.093813039975E-01 -1.370600906079E+00 0.000000000000E+00 2.595669825709E-01 -1.058578452217E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.164006391693E-01 7.786741839265E-01 0.000000000000E+00 -3.132171600304E-01 7.974857820186E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.625833327104E-01 -1.339364638498E+00 0.000000000000E+00 2.912721798183E-01 -1.051960377113E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.938376832638E-01 7.688435700135E-01 0.000000000000E+00 -3.220944002774E-01 7.915967979353E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.177628043880E-01 -1.308555378906E+00 0.000000000000E+00 3.218127436597E-01 -1.046151679299E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.713878918499E-01 7.589399463276E-01 0.000000000000E+00 -3.307908578659E-01 7.857205897394E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.489767030951E-02 -1.278189950892E+00 0.000000000000E+00 3.511516581472E-01 -1.041006507051E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.490774830923E-01 7.489719479630E-01 0.000000000000E+00 -3.392946094665E-01 7.798517762518E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.396091688027E-02 -1.248282983666E+00 0.000000000000E+00 3.792610379204E-01 -1.036393101211E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.269314674002E-01 7.389479922926E-01 0.000000000000E+00 -3.475945135446E-01 7.739850745907E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.078759487354E-03 -1.218847069694E+00 0.000000000000E+00 4.061212416038E-01 -1.032192943626E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.049736541426E-01 7.288762762075E-01 0.000000000000E+00 -3.556802081774E-01 7.681153458939E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.225633323119E-02 -1.189892911905E+00 0.000000000000E+00 4.317200376830E-01 -1.028299903665E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.832266603802E-01 7.187647739205E-01 0.000000000000E+00 -3.635421056094E-01 7.622376345474E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.760988618958E-02 -1.161429460756E+00 0.000000000000E+00 4.560518235760E-01 -1.024619393142E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.617119214508E-01 7.086212352897E-01 0.000000000000E+00 -3.711713839707E-01 7.563472014622E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.111801000578E-01 -1.133464041719E+00 0.000000000000E+00 4.791168986949E-01 -1.021067538477E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.404497032701E-01 6.984531846201E-01 0.000000000000E+00 -3.785599765323E-01 7.504395519122E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.430098033103E-01 -1.106002474174E+00 0.000000000000E+00 5.009207923045E-01 -1.017570377495E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.194591162256E-01 6.882679199059E-01 0.000000000000E+00 -3.857005588353E-01 7.445104584153E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.731435711120E-01 -1.079049182644E+00 0.000000000000E+00 5.214736464156E-01 -1.014063087041E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.987581305522E-01 6.780725124815E-01 0.000000000000E+00 -3.925865339917E-01 7.385559791095E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.016273758127E-01 -1.052607301475E+00 0.000000000000E+00 5.407896530112E-01 -1.010489246320E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.783635930921E-01 6.678738070513E-01 0.000000000000E+00 -3.992120164207E-01 7.325724720467E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.285082829707E-01 -1.026678773683E+00 0.000000000000E+00 5.588865438485E-01 -1.006800139252E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.582912453468E-01 6.576784220705E-01 0.000000000000E+00 -4.055718142565E-01 7.265566058000E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.538341869352E-01 -1.001264444616E+00 0.000000000000E+00 5.757851298644E-01 -1.002954097587E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.385557427358E-01 6.474927504542E-01 0.000000000000E+00 -4.116614106343E-01 7.205053667513E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.776535799203E-01 -9.763641507651E-01 0.000000000000E+00 5.915088861570E-01 -9.989158852351E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.191706749812E-01 6.373229605912E-01 0.000000000000E+00 -4.174769440421E-01 7.144160634019E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.000153482264E-01 -9.519768038338E-01 0.000000000000E+00 6.060835779274E-01 -9.946561230069E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.001485875406E-01 6.271749976436E-01 0.000000000000E+00 -4.230151879000E-01 7.082863280228E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.209685898091E-01 -9.281004701981E-01 0.000000000000E+00 6.195369225915E-01 -9.901507521435E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.150100401090E-02 6.170545851126E-01 0.000000000000E+00 -4.282735295148E-01 7.021141159402E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.405624486444E-01 -9.047324457399E-01 0.000000000000E+00 6.318982834420E-01 -9.853805345622E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.323844943082E-02 6.069672266537E-01 0.000000000000E+00 -4.332499485398E-01 6.958977027264E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.588459623645E-01 -8.818693261284E-01 0.000000000000E+00 6.431983907724E-01 -9.803305875248E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.537047440602E-02 5.969182081254E-01 0.000000000000E+00 -4.379429950554E-01 6.896356795497E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.758679206043E-01 -8.595070726798E-01 0.000000000000E+00 6.534690870832E-01 -9.749899504028E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.790567998539E-02 5.869125998556E-01 0.000000000000E+00 -4.423517673743E-01 6.833269469129E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.916767327820E-01 -8.376410739624E-01 0.000000000000E+00 6.627430936679E-01 -9.693511814574E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.085174321497E-02 5.769552591122E-01 0.000000000000E+00 -4.464758896637E-01 6.769707069954E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.063203049903E-01 -8.162662033551E-01 0.000000000000E+00 6.710537965110E-01 -9.634099828536E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.784556702768E-03 5.670508327639E-01 0.000000000000E+00 -4.503154894689E-01 6.705664547939E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.198459259984E-01 -7.953768727709E-01 0.000000000000E+00 6.784350500229E-01 -9.571648523210E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.199731171629E-02 5.572037601187E-01 0.000000000000E+00 -4.538711752108E-01 6.641139682418E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.323001626078E-01 -7.749670827920E-01 0.000000000000E+00 6.849209975688E-01 -9.506167600766E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.778145777079E-02 5.474182759267E-01 0.000000000000E+00 -4.571440137265E-01 6.576132974724E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.437287648333E-01 -7.550304694384E-01 0.000000000000E+00 6.905459079908E-01 -9.437688498383E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.313274726319E-02 5.376984135368E-01 0.000000000000E+00 -4.601355079128E-01 6.510647533757E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.541765813035E-01 -7.355603477808E-01 0.000000000000E+00 6.953440274785E-01 -9.366261628738E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.804772117662E-02 5.280480081944E-01 0.000000000000E+00 -4.628475745262E-01 6.444688955864E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.636874850927E-01 -7.165497525525E-01 0.000000000000E+00 6.993494461881E-01 -9.291953840759E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.252368096332E-02 5.184707004693E-01 0.000000000000E+00 -4.652825221912E-01 6.378265200266E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.723043099342E-01 -6.979914759648E-01 0.000000000000E+00 7.025959790150E-01 -9.214846090630E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.655866024382E-02 5.089699398038E-01 0.000000000000E+00 -4.674430296586E-01 6.311386461191E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.800687965850E-01 -6.798781028592E-01 0.000000000000E+00 7.051170598587E-01 -9.135031312960E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.101513963885E-01 4.995489881686E-01 0.000000000000E+00 -4.693321243570E-01 6.244065037700E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.870215488941E-01 -6.622020433760E-01 0.000000000000E+00 7.069456486718E-01 -9.052612481736E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.233013020459E-01 4.902109238184E-01 0.000000000000E+00 -4.709531612715E-01 6.176315202155E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.932019990133E-01 -6.449555632343E-01 0.000000000000E+00 7.081141505143E-01 -8.967700850456E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.360084366805E-01 4.809586451356E-01 0.000000000000E+00 -4.723098021841E-01 6.108153068157E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.986483810703E-01 -6.281308117522E-01 0.000000000000E+00 7.086543458017E-01 -8.880414360643E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.482734781800E-01 4.717948745528E-01 0.000000000000E+00 -4.734059953050E-01 6.039596458677E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.033977125750E-01 -6.117198477513E-01 0.000000000000E+00 7.085973309146E-01 -8.790876207833E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.600976945898E-01 4.627221625459E-01 0.000000000000E+00 -4.742459553209E-01 5.970664775062E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + diff --git a/test/prog/sktable/GGA-PBE96/Non-Relativistic/_N-O.skf b/test/prog/sktable/GGA-PBE96/Non-Relativistic/_N-O.skf new file mode 100644 index 00000000..4487272e --- /dev/null +++ b/test/prog/sktable/GGA-PBE96/Non-Relativistic/_N-O.skf @@ -0,0 +1,91 @@ +0.020000 69 + 0.000000000000E+00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.304585211201E-01 -1.725853306462E+00 0.000000000000E+00 -8.373006657699E-02 -1.269146591425E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.422009897967E-01 8.281126770784E-01 0.000000000000E+00 -2.203400068914E-01 8.262644876339E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.628362932752E-01 -1.686118591579E+00 0.000000000000E+00 -3.717557555888E-02 -1.254522842659E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.188824626888E-01 8.185137687008E-01 0.000000000000E+00 -2.301437362074E-01 8.202517876218E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.977935041919E-01 -1.646795428803E+00 0.000000000000E+00 8.456234159669E-03 -1.242041519751E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.955252549506E-01 8.087853862915E-01 0.000000000000E+00 -2.398906323486E-01 8.142768864190E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.353438909929E-01 -1.607924303433E+00 0.000000000000E+00 5.301210930673E-02 -1.231395731380E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.721660142112E-01 7.989386872472E-01 0.000000000000E+00 -2.495599916021E-01 8.083333401562E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.754881815308E-01 -1.569541147669E+00 0.000000000000E+00 9.636162899038E-02 -1.222305171043E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.488398408738E-01 7.889845714533E-01 0.000000000000E+00 -2.591319960385E-01 8.024144828472E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.182156318915E-01 -1.531677662525E+00 0.000000000000E+00 1.383953045604E-01 -1.214515025575E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.255802883062E-01 7.789336738562E-01 0.000000000000E+00 -2.685877532736E-01 7.965135395513E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.635054483110E-01 -1.494361625453E+00 0.000000000000E+00 1.790227519970E-01 -1.207794743367E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.024193676883E-01 7.687963583440E-01 0.000000000000E+00 -2.779093264833E-01 7.906237251884E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.113280966820E-01 -1.457617181989E+00 0.000000000000E+00 2.181709466077E-01 -1.201936708668E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.793875569231E-01 7.585827128071E-01 0.000000000000E+00 -2.870797557941E-01 7.847383301671E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.164650284801E-02 -1.421465120233E+00 0.000000000000E+00 2.557825667293E-01 -1.196754859576E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.565138130985E-01 7.483025452615E-01 0.000000000000E+00 -2.960830720604E-01 7.788507939425E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.441714637042E-02 -1.385923127649E+00 0.000000000000E+00 2.918144311178E-01 -1.192083280241E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.338255880621E-01 7.379653809277E-01 0.000000000000E+00 -3.049043039410E-01 7.729547675661E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.040895005538E-02 -1.351006030308E+00 0.000000000000E+00 3.262360335001E-01 -1.187774792140E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.113488467338E-01 7.275804601731E-01 0.000000000000E+00 -3.135294790957E-01 7.670441662391E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.288533331768E-02 -1.316726015388E+00 0.000000000000E+00 3.590281769372E-01 -1.183699564855E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.891080878334E-01 7.171567372317E-01 0.000000000000E+00 -3.219456202359E-01 7.611132128161E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.130693315924E-01 -1.283092838246E+00 0.000000000000E+00 3.901817097174E-01 -1.179743763037E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.671263667465E-01 7.067028796260E-01 0.000000000000E+00 -3.301407366860E-01 7.551564731468E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.510213600865E-01 -1.250114015644E+00 0.000000000000E+00 4.196963631340E-01 -1.175808242855E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.454253202892E-01 6.962272682249E-01 0.000000000000E+00 -3.381038120437E-01 7.491688840843E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.868043136111E-01 -1.217795006714E+00 0.000000000000E+00 4.475796896092E-01 -1.171807307979E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.240251931628E-01 6.857379978744E-01 0.000000000000E+00 -3.458247884625E-01 7.431457749248E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.204830366664E-01 -1.186139382977E+00 0.000000000000E+00 4.738460974487E-01 -1.167667531862E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.029448659165E-01 6.752428785509E-01 0.000000000000E+00 -3.532945480250E-01 7.370828829913E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.521238603551E-01 -1.155148988375E+00 0.000000000000E+00 4.985159764385E-01 -1.163326650027E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.822018842554E-01 6.647494369854E-01 0.000000000000E+00 -3.605048916234E-01 7.309763640133E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.817941951313E-01 -1.124824089933E+00 0.000000000000E+00 5.216149069344E-01 -1.158732523372E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.618124895486E-01 6.542649187183E-01 0.000000000000E+00 -3.674485157197E-01 7.248227979044E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.095621691486E-01 -1.095163519396E+00 0.000000000000E+00 5.431729442912E-01 -1.153842171403E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.417916504061E-01 6.437962905430E-01 0.000000000000E+00 -3.741189873186E-01 7.186191904912E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.354963035326E-01 -1.066164806081E+00 0.000000000000E+00 5.632239704578E-01 -1.148620872849E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.221530952029E-01 6.333502433054E-01 0.000000000000E+00 -3.805107174498E-01 7.123629716956E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.596652178891E-01 -1.037824301172E+00 0.000000000000E+00 5.818051051900E-01 -1.143041330375E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.029093454382E-01 6.229331950263E-01 0.000000000000E+00 -3.866189334243E-01 7.060519906346E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.821373614099E-01 -1.010137293723E+00 0.000000000000E+00 5.989561703663E-01 -1.137082895764E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.407174982325E-02 6.125512943177E-01 0.000000000000E+00 -3.924396501045E-01 6.996845080544E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.029807667447E-01 -9.830981187145E-01 0.000000000000E+00 6.147192020828E-01 -1.130730852076E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.565051899776E-02 6.022104240669E-01 0.000000000000E+00 -3.979696403988E-01 6.932591864828E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.222628252067E-01 -9.567002575547E-01 0.000000000000E+00 6.291380063482E-01 -1.123975749538E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.765476077913E-02 5.919162053634E-01 0.000000000000E+00 -4.032064051726E-01 6.867750784458E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.400500827907E-01 -9.309364314540E-01 0.000000000000E+00 6.422577551481E-01 -1.116812792242E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.009251585137E-02 5.816740016467E-01 0.000000000000E+00 -4.081481427474E-01 6.802316130608E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.564080569378E-01 -9.057986880964E-01 0.000000000000E+00 6.541246203449E-01 -1.109241273052E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.297079380490E-02 5.714889230541E-01 0.000000000000E+00 -4.127937181404E-01 6.736285812914E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.714010740646E-01 -8.812784820264E-01 0.000000000000E+00 6.647854433078E-01 -1.101264054323E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.704390559390E-03 5.613658309478E-01 0.000000000000E+00 -4.171426321845E-01 6.669661201176E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.850921277030E-01 -8.573667491413E-01 0.000000000000E+00 6.742874383786E-01 -1.092887092175E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.992798074585E-02 5.513093426051E-01 0.000000000000E+00 -4.211949906507E-01 6.602446958513E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.975427567955E-01 -8.340539756523E-01 0.000000000000E+00 6.826779283262E-01 -1.084119002101E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.569584198080E-02 5.413238360529E-01 0.000000000000E+00 -4.249514734864E-01 6.534650868033E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.088129433574E-01 -8.113302618484E-01 0.000000000000E+00 6.900041099080E-01 -1.074970663708E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.100472460926E-02 5.314134550310E-01 0.000000000000E+00 -4.284133042674E-01 6.466283654841E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.189610284243E-01 -7.891853809761E-01 0.000000000000E+00 6.963128475870E-01 -1.065454862335E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.585222754787E-02 5.215821140684E-01 0.000000000000E+00 -4.315822199547E-01 6.397358805046E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.280436449890E-01 -7.676088335218E-01 0.000000000000E+00 7.016504933971E-01 -1.055585965281E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.023676186746E-02 5.118335036594E-01 0.000000000000E+00 -4.344604410357E-01 6.327892383192E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.361156665061E-01 -7.465898971716E-01 0.000000000000E+00 7.060627309312E-01 -1.045379630362E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.415751457615E-02 5.021710955236E-01 0.000000000000E+00 -4.370506421201E-01 6.257902849427E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.432301694975E-01 -7.261176727036E-01 0.000000000000E+00 7.095944414429E-01 -1.034852544529E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.076144126704E-01 4.925981479381E-01 0.000000000000E+00 -4.393559230563E-01 6.187410877521E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.494384088119E-01 -7.061811260601E-01 0.000000000000E+00 7.122895901161E-01 -1.024022190320E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.206080875189E-01 4.831177111297E-01 0.000000000000E+00 -4.413797806215E-01 6.116439174733E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.547898041522E-01 -6.867691268321E-01 0.000000000000E+00 7.141911306403E-01 -1.012906637995E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.331398396398E-01 4.737326327132E-01 0.000000000000E+00 -4.431260808369E-01 6.045012304384E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.593319365754E-01 -6.678704833805E-01 0.000000000000E+00 7.153409263406E-01 -1.001524361279E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.452116039303E-01 4.644455631662E-01 0.000000000000E+00 -4.445990319513E-01 5.973156511888E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.631105537681E-01 -6.494739748043E-01 0.000000000000E+00 7.157796862246E-01 -9.898940747502E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.568259154017E-01 4.552589613293E-01 0.000000000000E+00 -4.458031581280E-01 5.900899554876E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.661695830064E-01 -6.315683799617E-01 0.000000000000E+00 7.155469144287E-01 -9.780345910022E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.679858754715E-01 4.461750999199E-01 0.000000000000E+00 -4.467432738709E-01 5.828270537944E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.685511508060E-01 -6.141425037387E-01 0.000000000000E+00 7.146808716651E-01 -9.659646958511E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.786951188591E-01 4.371960710518E-01 0.000000000000E+00 -4.474244592125E-01 5.755299752503E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + diff --git a/test/prog/sktable/GGA-PBE96/Non-Relativistic/_O-N.skf b/test/prog/sktable/GGA-PBE96/Non-Relativistic/_O-N.skf new file mode 100644 index 00000000..70d5bc22 --- /dev/null +++ b/test/prog/sktable/GGA-PBE96/Non-Relativistic/_O-N.skf @@ -0,0 +1,91 @@ +0.020000 69 + 0.000000000000E+00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.304585211201E-01 -1.725853306462E+00 0.000000000000E+00 3.276993478468E-01 -1.269146591425E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.422009897967E-01 8.281126770784E-01 0.000000000000E+00 -3.129524011487E-01 8.262644876339E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.628362932752E-01 -1.686118591579E+00 0.000000000000E+00 3.696580123175E-01 -1.254522842659E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.188824626888E-01 8.185137687008E-01 0.000000000000E+00 -3.235147908574E-01 8.202517876218E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.977935041919E-01 -1.646795428803E+00 0.000000000000E+00 4.103061610957E-01 -1.242041519751E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.955252549506E-01 8.087853862915E-01 0.000000000000E+00 -3.338842861124E-01 8.142768864190E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.353438909929E-01 -1.607924303433E+00 0.000000000000E+00 4.495412703070E-01 -1.231395731380E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.721660142112E-01 7.989386872472E-01 0.000000000000E+00 -3.440445884989E-01 8.083333401562E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.754881815308E-01 -1.569541147669E+00 0.000000000000E+00 4.872797326504E-01 -1.222305171043E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.488398408738E-01 7.889845714533E-01 0.000000000000E+00 -3.539804194030E-01 8.024144828472E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.182156318915E-01 -1.531677662525E+00 0.000000000000E+00 5.234551243605E-01 -1.214515025575E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.255802883062E-01 7.789336738562E-01 0.000000000000E+00 -3.636775331636E-01 7.965135395513E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.635054483110E-01 -1.494361625453E+00 0.000000000000E+00 5.580165546039E-01 -1.207794743367E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.024193676883E-01 7.687963583440E-01 0.000000000000E+00 -3.731227219828E-01 7.906237251884E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.113280966820E-01 -1.457617181989E+00 0.000000000000E+00 5.909271035631E-01 -1.201936708668E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.793875569231E-01 7.585827128071E-01 0.000000000000E+00 -3.823038137333E-01 7.847383301671E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.164650284801E-02 -1.421465120233E+00 0.000000000000E+00 6.221623529841E-01 -1.196754859576E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.565138130985E-01 7.483025452615E-01 0.000000000000E+00 -3.912096636868E-01 7.788507939425E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.441714637042E-02 -1.385923127649E+00 0.000000000000E+00 6.517090114716E-01 -1.192083280241E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.338255880621E-01 7.379653809277E-01 0.000000000000E+00 -3.998301410759E-01 7.729547675661E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.040895005538E-02 -1.351006030308E+00 0.000000000000E+00 6.795636360287E-01 -1.187774792140E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.113488467338E-01 7.275804601731E-01 0.000000000000E+00 -4.081561113074E-01 7.670441662391E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.288533331768E-02 -1.316726015388E+00 0.000000000000E+00 7.057314508251E-01 -1.183699564855E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.891080878334E-01 7.171567372317E-01 0.000000000000E+00 -4.161794145439E-01 7.611132128161E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.130693315924E-01 -1.283092838246E+00 0.000000000000E+00 7.302252634998E-01 -1.179743763037E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.671263667465E-01 7.067028796260E-01 0.000000000000E+00 -4.238928412906E-01 7.551564731468E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.510213600865E-01 -1.250114015644E+00 0.000000000000E+00 7.530644781421E-01 -1.175808242855E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.454253202892E-01 6.962272682249E-01 0.000000000000E+00 -4.312901055422E-01 7.491688840843E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.868043136111E-01 -1.217795006714E+00 0.000000000000E+00 7.742742024127E-01 -1.171807307979E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.240251931628E-01 6.857379978744E-01 0.000000000000E+00 -4.383658159768E-01 7.431457749248E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.204830366664E-01 -1.186139382977E+00 0.000000000000E+00 7.938844443140E-01 -1.167667531862E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.029448659165E-01 6.752428785509E-01 0.000000000000E+00 -4.451154456173E-01 7.370828829913E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.521238603551E-01 -1.155148988375E+00 0.000000000000E+00 8.119293922771E-01 -1.163326650027E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.822018842554E-01 6.647494369854E-01 0.000000000000E+00 -4.515353003289E-01 7.309763640133E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.817941951313E-01 -1.124824089933E+00 0.000000000000E+00 8.284467709135E-01 -1.158732523372E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.618124895486E-01 6.542649187183E-01 0.000000000000E+00 -4.576224864663E-01 7.248227979044E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.095621691486E-01 -1.095163519396E+00 0.000000000000E+00 8.434772641692E-01 -1.153842171403E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.417916504061E-01 6.437962905430E-01 0.000000000000E+00 -4.633748779438E-01 7.186191904912E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.354963035326E-01 -1.066164806081E+00 0.000000000000E+00 8.570639977511E-01 -1.148620872849E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.221530952029E-01 6.333502433054E-01 0.000000000000E+00 -4.687910829603E-01 7.123629716956E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.596652178891E-01 -1.037824301172E+00 0.000000000000E+00 8.692520734129E-01 -1.143041330375E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.029093454382E-01 6.229331950263E-01 0.000000000000E+00 -4.738704105795E-01 7.060519906346E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.821373614099E-01 -1.010137293723E+00 0.000000000000E+00 8.800881487523E-01 -1.137082895764E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.407174982325E-02 6.125512943177E-01 0.000000000000E+00 -4.786128373338E-01 6.996845080544E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.029807667447E-01 -9.830981187145E-01 0.000000000000E+00 8.896200573694E-01 -1.130730852076E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.565051899776E-02 6.022104240669E-01 0.000000000000E+00 -4.830189739966E-01 6.932591864828E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.222628252067E-01 -9.567002575547E-01 0.000000000000E+00 8.978964653592E-01 -1.123975749538E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.765476077913E-02 5.919162053634E-01 0.000000000000E+00 -4.870900326450E-01 6.867750784458E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.400500827907E-01 -9.309364314540E-01 0.000000000000E+00 9.049665610577E-01 -1.116812792242E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.009251585137E-02 5.816740016467E-01 0.000000000000E+00 -4.908277941152E-01 6.802316130608E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.564080569378E-01 -9.057986880964E-01 0.000000000000E+00 9.108797756640E-01 -1.109241273052E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.297079380490E-02 5.714889230541E-01 0.000000000000E+00 -4.942345759375E-01 6.736285812914E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.714010740646E-01 -8.812784820264E-01 0.000000000000E+00 9.156855328246E-01 -1.101264054323E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.704390559390E-03 5.613658309478E-01 0.000000000000E+00 -4.973132008231E-01 6.669661201176E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.850921277030E-01 -8.573667491413E-01 0.000000000000E+00 9.194330255245E-01 -1.092887092175E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.992798074585E-02 5.513093426051E-01 0.000000000000E+00 -5.000669657632E-01 6.602446958513E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.975427567955E-01 -8.340539756523E-01 0.000000000000E+00 9.221710187366E-01 -1.084119002101E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.569584198080E-02 5.413238360529E-01 0.000000000000E+00 -5.024996117910E-01 6.534650868033E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.088129433574E-01 -8.113302618484E-01 0.000000000000E+00 9.239476762944E-01 -1.074970663708E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.100472460926E-02 5.314134550310E-01 0.000000000000E+00 -5.046152944456E-01 6.466283654841E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.189610284243E-01 -7.891853809761E-01 0.000000000000E+00 9.248104104225E-01 -1.065454862335E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.585222754787E-02 5.215821140684E-01 0.000000000000E+00 -5.064185549757E-01 6.397358805046E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.280436449890E-01 -7.676088335218E-01 0.000000000000E+00 9.248057523207E-01 -1.055585965281E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.023676186746E-02 5.118335036594E-01 0.000000000000E+00 -5.079142923054E-01 6.327892383192E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.361156665061E-01 -7.465898971716E-01 0.000000000000E+00 9.239792421780E-01 -1.045379630362E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.415751457615E-02 5.021710955236E-01 0.000000000000E+00 -5.091077357886E-01 6.257902849427E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.432301694975E-01 -7.261176727036E-01 0.000000000000E+00 9.223753369944E-01 -1.034852544529E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.076144126704E-01 4.925981479381E-01 0.000000000000E+00 -5.100044187656E-01 6.187410877521E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.494384088119E-01 -7.061811260601E-01 0.000000000000E+00 9.200373346226E-01 -1.024022190320E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.206080875189E-01 4.831177111297E-01 0.000000000000E+00 -5.106101529373E-01 6.116439174733E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.547898041522E-01 -6.867691268321E-01 0.000000000000E+00 9.170073124997E-01 -1.012906637995E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.331398396398E-01 4.737326327132E-01 0.000000000000E+00 -5.109310035642E-01 6.045012304384E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.593319365754E-01 -6.678704833805E-01 0.000000000000E+00 9.133260796097E-01 -1.001524361279E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.452116039303E-01 4.644455631662E-01 0.000000000000E+00 -5.109732654998E-01 5.973156511888E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.631105537681E-01 -6.494739748043E-01 0.000000000000E+00 9.090331403101E-01 -9.898940747502E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.568259154017E-01 4.552589613293E-01 0.000000000000E+00 -5.107434400583E-01 5.900899554876E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.661695830064E-01 -6.315683799617E-01 0.000000000000E+00 9.041666687446E-01 -9.780345910022E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.679858754715E-01 4.461750999199E-01 0.000000000000E+00 -5.102482127217E-01 5.828270537944E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.685511508060E-01 -6.141425037387E-01 0.000000000000E+00 8.987634926630E-01 -9.659646958511E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.786951188591E-01 4.371960710518E-01 0.000000000000E+00 -5.094944316828E-01 5.755299752503E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + diff --git a/test/prog/sktable/GGA-PBE96/Non-Relativistic/_O-O.skf b/test/prog/sktable/GGA-PBE96/Non-Relativistic/_O-O.skf new file mode 100644 index 00000000..1a29905c --- /dev/null +++ b/test/prog/sktable/GGA-PBE96/Non-Relativistic/_O-O.skf @@ -0,0 +1,92 @@ +0.020000 69 + 0.000000000000E+00 -3.320479883565E-01 -8.787221136524E-01 0.000000000000E+00 0.000000000000E+00 4.953759676584E-01 4.953759676584E-01 0.000000000000E+00 4.000000000000E+00 2.000000000000E+00 + 1.601000000000E+01 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.405053762270E-01 -1.867893058517E+00 0.000000000000E+00 2.587262677912E-01 -1.439337659948E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.098112390425E-01 8.165404215378E-01 0.000000000000E+00 -2.900785382475E-01 8.267408376886E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.654105347282E-01 -1.820549087957E+00 0.000000000000E+00 3.094078066071E-01 -1.426193679449E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.854688043920E-01 8.062532526451E-01 0.000000000000E+00 -3.006905134662E-01 8.204495874131E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.937432633271E-01 -1.773870564336E+00 0.000000000000E+00 3.582642518440E-01 -1.414999794558E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.611684332292E-01 7.958488843311E-01 0.000000000000E+00 -3.111159207843E-01 8.141831441280E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.254800192659E-01 -1.727899994813E+00 0.000000000000E+00 4.051814102357E-01 -1.405409533969E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.369489114595E-01 7.853398385028E-01 0.000000000000E+00 -3.213352600214E-01 8.079333054366E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.605827909547E-01 -1.682674042867E+00 0.000000000000E+00 4.500704735725E-01 -1.397112269812E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.128470152322E-01 7.747382750625E-01 0.000000000000E+00 -3.313303430675E-01 8.016919096785E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.900118731218E-02 -1.638223997844E+00 0.000000000000E+00 4.928653634254E-01 -1.389831050064E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.888975325333E-01 7.640559864962E-01 0.000000000000E+00 -3.410843012605E-01 7.954509483653E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.067433173665E-02 -1.594576214106E+00 0.000000000000E+00 5.335202389699E-01 -1.383320349260E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.651332898363E-01 7.533043940365E-01 0.000000000000E+00 -3.505815829030E-01 7.892026607494E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.446743440912E-02 -1.551752519557E+00 0.000000000000E+00 5.720071744548E-01 -1.377363791676E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.415851830666E-01 7.424945452275E-01 0.000000000000E+00 -3.598079423719E-01 7.829396122875E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.650103359200E-02 -1.509770594605E+00 0.000000000000E+00 6.083140107316E-01 -1.371771890669E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.182822122457E-01 7.316371127390E-01 0.000000000000E+00 -3.687504221076E-01 7.766547586505E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.155093121123E-01 -1.468644323685E+00 0.000000000000E+00 6.424423831320E-01 -1.366379839218E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.952515192723E-01 7.207423942921E-01 0.000000000000E+00 -3.773973286258E-01 7.703414968292E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.615798678561E-01 -1.428384122035E+00 0.000000000000E+00 6.744059251534E-01 -1.361045379137E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.725184283708E-01 7.098203135760E-01 0.000000000000E+00 -3.857382035523E-01 7.639937047656E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.048040312491E-01 -1.388997240457E+00 0.000000000000E+00 7.042286437461E-01 -1.355646769297E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.501064888077E-01 6.988804220441E-01 0.000000000000E+00 -3.937637905624E-01 7.576057708355E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.452759813558E-01 -1.350488050324E+00 0.000000000000E+00 7.319434579920E-01 -1.350080866317E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.280375195260E-01 6.879319014951E-01 0.000000000000E+00 -4.014659989942E-01 7.511726143943E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.830919772278E-01 -1.312858310456E+00 0.000000000000E+00 7.575908894369E-01 -1.344261325008E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.063316553961E-01 6.769835673510E-01 0.000000000000E+00 -4.088378648062E-01 7.446896984987E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.183496848908E-01 -1.276107416870E+00 0.000000000000E+00 7.812178900188E-01 -1.338116920554E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.850073948164E-01 6.660438725549E-01 0.000000000000E+00 -4.158735094637E-01 7.381530358128E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.511475825279E-01 -1.240232636069E+00 0.000000000000E+00 8.028767927358E-01 -1.331589990583E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.640816484290E-01 6.551209120196E-01 0.000000000000E+00 -4.225680972589E-01 7.315591886191E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.815844297839E-01 -1.205229322335E+00 0.000000000000E+00 8.226243707914E-01 -1.324634992736E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.435697887406E-01 6.442224275660E-01 0.000000000000E+00 -4.289177915034E-01 7.249052637624E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.097587908700E-01 -1.171091119583E+00 0.000000000000E+00 8.405209925381E-01 -1.317217172089E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.234857004596E-01 6.333558132936E-01 0.000000000000E+00 -4.349197099715E-01 7.181889032768E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.357686046313E-01 -1.137810148400E+00 0.000000000000E+00 8.566298615833E-01 -1.309311332383E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.038418313765E-01 6.225281213351E-01 0.000000000000E+00 -4.405718799202E-01 7.114082713689E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.597107975255E-01 -1.105377179031E+00 0.000000000000E+00 8.710163335084E-01 -1.300900705159E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.464924362988E-02 6.117460679488E-01 0.000000000000E+00 -4.458731929663E-01 7.045620383601E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.816809373675E-01 -1.073781791105E+00 0.000000000000E+00 8.837473024603E-01 -1.291975911321E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.591766521310E-02 6.010160399074E-01 0.000000000000E+00 -4.508233600625E-01 6.976493621291E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.017729267493E-01 -1.043012520950E+00 0.000000000000E+00 8.948906522655E-01 -1.282534010077E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.765554158365E-02 5.903441011475E-01 0.000000000000E+00 -4.554228667772E-01 6.906698675340E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.200787353888E-01 -1.013056997295E+00 0.000000000000E+00 9.045147676511E-01 -1.272577630566E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.987008724967E-02 5.797359996425E-01 0.000000000000E+00 -4.596729290556E-01 6.836236242427E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.366881705118E-01 -9.839020661317E-01 0.000000000000E+00 9.126881017012E-01 -1.262114181730E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.256733721353E-02 5.691971744715E-01 0.000000000000E+00 -4.635754496122E-01 6.765111233498E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.516886839462E-01 -9.555339054332E-01 0.000000000000E+00 9.194787959179E-01 -1.251155136045E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.247801839857E-03 5.587327630519E-01 0.000000000000E+00 -4.671329750810E-01 6.693332531132E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.651652140959E-01 -9.279381304047E-01 0.000000000000E+00 9.249543493264E-01 -1.239715382816E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.057150071556E-02 5.483476085112E-01 0.000000000000E+00 -4.703486540324E-01 6.620912741062E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.772000604932E-01 -9.010998898656E-01 0.000000000000E+00 9.291813330365E-01 -1.227812646637E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.640095734174E-02 5.380462671723E-01 0.000000000000E+00 -4.732261959471E-01 6.547867940392E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.878727882852E-01 -8.750039543378E-01 0.000000000000E+00 9.322251466497E-01 -1.215466966667E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.173434695686E-02 5.278330161300E-01 0.000000000000E+00 -4.757698312217E-01 6.474217424786E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.972601598188E-01 -8.496347963789E-01 0.000000000000E+00 9.341498129057E-01 -1.202700232321E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.657077293869E-02 5.177118608974E-01 0.000000000000E+00 -4.779842722691E-01 6.399983456543E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.054360904337E-01 -8.249766636658E-01 0.000000000000E+00 9.350178070233E-01 -1.189535771065E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.091021835698E-02 5.076865431011E-01 0.000000000000E+00 -4.798746757645E-01 6.325191015245E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.124716256412E-01 -8.010136453136E-01 0.000000000000E+00 9.348899173154E-01 -1.175997984102E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.475349832604E-02 4.977605482091E-01 0.000000000000E+00 -4.814466060771E-01 6.249867552409E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.184349370101E-01 -7.777297318891E-01 0.000000000000E+00 9.338251338200E-01 -1.162112025872E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.081022132275E-01 4.879371132713E-01 0.000000000000E+00 -4.827059999208E-01 6.174042751356E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.233913342760E-01 -7.551088695569E-01 0.000000000000E+00 9.318805618937E-01 -1.147903523485E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.209587028680E-01 4.782192346595E-01 0.000000000000E+00 -4.836591322456E-01 6.097748293311E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.274032914106E-01 -7.331350087742E-01 0.000000000000E+00 9.291113579332E-01 -1.133398332432E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.333260016306E-01 4.686096757884E-01 0.000000000000E+00 -4.843125833892E-01 6.021017630592E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.305304846046E-01 -7.117921479306E-01 0.000000000000E+00 9.255706846181E-01 -1.118622325127E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.452077946738E-01 4.591109748066E-01 0.000000000000E+00 -4.846732074983E-01 5.943885767557E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.328298403381E-01 -6.910643723078E-01 0.000000000000E+00 9.213096832919E-01 -1.103601209063E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.566083752241E-01 4.497254522428E-01 0.000000000000E+00 -4.847481022240E-01 5.866389049887E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.343555919060E-01 -6.709358887143E-01 0.000000000000E+00 9.163774613174E-01 -1.088360371645E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.675326030070E-01 4.404552185951E-01 0.000000000000E+00 -4.845445796945E-01 5.788564962600E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.351593429531E-01 -6.513910561293E-01 0.000000000000E+00 9.108210924442E-01 -1.072924748917E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.779858638503E-01 4.313021818531E-01 0.000000000000E+00 -4.840701387581E-01 5.710451937149E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.352901367356E-01 -6.324144126717E-01 0.000000000000E+00 9.046856284188E-01 -1.057318715697E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.879740304922E-01 4.222680549406E-01 0.000000000000E+00 -4.833324384902E-01 5.632089167795E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.347945299730E-01 -6.139906991911E-01 0.000000000000E+00 8.980141202432E-01 -1.041565994782E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.975034246209E-01 4.133543630713E-01 0.000000000000E+00 -4.823392729530E-01 5.553516437408E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + diff --git a/test/prog/sktable/GGA-PBE96/Non-Relativistic/config b/test/prog/sktable/GGA-PBE96/Non-Relativistic/config new file mode 100644 index 00000000..e5eac9cd --- /dev/null +++ b/test/prog/sktable/GGA-PBE96/Non-Relativistic/config @@ -0,0 +1 @@ +N,O N,O \ No newline at end of file diff --git a/test/prog/sktable/GGA-PBE96/Non-Relativistic/skdef.hsd b/test/prog/sktable/GGA-PBE96/Non-Relativistic/skdef.hsd new file mode 100644 index 00000000..b2084972 --- /dev/null +++ b/test/prog/sktable/GGA-PBE96/Non-Relativistic/skdef.hsd @@ -0,0 +1,112 @@ +SkdefVersion = 1 + +Globals { + Superposition = density + XCFunctional = pbe {} +} + +AtomParameters { + + N { + AtomConfig { + AtomicNumber = 7 + Mass = 14.007 + Occupations { + 1S = 1.0 1.0 + 2S = 1.0 1.0 + 2P = 2.0 1.0 + } + ValenceShells = 2s 2p + Relativistics = None + } + DftbAtom { + ShellResolved = No + DensityCompression = PowerCompression{ Power = 2; Radius = 11.0 } + WaveCompressions = SingleAtomCompressions { + S = PowerCompression { Power = 2; Radius = 2.2 } + P = PowerCompression { Power = 2; Radius = 2.2 } + } + CustomizedOnsites { + 2s = -0.64 + } + } + } + + O { + AtomConfig { + AtomicNumber = 8 + Mass = 16.01 + Occupations { + 1S = 1.0 1.0 + 2S = 1.0 1.0 + 2P = 2.0 2.0 + } + ValenceShells = 2s 2p + Relativistics = None + } + DftbAtom { + ShellResolved = No + DensityCompression = PowerCompression{ Power = 2; Radius = 9.0 } + WaveCompressions = SingleAtomCompressions { + S = PowerCompression { Power = 2; Radius = 2.3 } + P = PowerCompression { Power = 2; Radius = 2.3 } + } + } + } + +} + + +OnecenterParameters { + + $StandardDeltaFilling { + DeltaFilling = 0.01 + } + + N { + $StandardDeltaFilling + Calculator = SlaterAtom { + Exponents { + S = 0.5 1.2 2.9 7.0 + P = 0.5 1.2 2.9 7.0 + } + MaxPowers { + S = 2 + P = 2 + } + } + } + + O { + $StandardDeltaFilling + Calculator = SlaterAtom { + Exponents { + S = 0.5 1.26 3.17 8.0 + P = 0.5 1.26 3.17 8.0 + } + MaxPowers { + S = 2 + P = 2 + } + } + } +} + +TwoCenterParameters { + + $EqGrid = EquidistantGrid { + GridStart = 0.6 + GridSeparation = 0.02 + Tolerance = 5e-5 + MaxDistance = -1.4 + } + + $SkTwocnt_300_150 = Sktwocnt { + IntegrationPoints = 300 150 + } + + N-N { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + N-O { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + O-O { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + +} diff --git a/test/prog/sktable/HYB-B3LYP/Non-Relativistic/_C-C.skf b/test/prog/sktable/HYB-B3LYP/Non-Relativistic/_C-C.skf new file mode 100644 index 00000000..134f770f --- /dev/null +++ b/test/prog/sktable/HYB-B3LYP/Non-Relativistic/_C-C.skf @@ -0,0 +1,94 @@ +0.020000 69 + 0.000000000000E+00 -1.907858170122E-01 -5.666359870721E-01 -7.057168277460E-02 0.000000000000E+00 3.582851306620E-01 3.582851306620E-01 0.000000000000E+00 2.000000000000E+00 2.000000000000E+00 + 1.201000000000E+01 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.014660078063E+00 -1.730435726199E+00 0.000000000000E+00 1.083267126147E-02 -1.933834463299E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.730575293974E-01 8.833514209299E-01 0.000000000000E+00 -2.066130535735E-01 8.637212319443E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.635450298845E-01 -1.706374973300E+00 0.000000000000E+00 4.178710061361E-02 -1.904031482324E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.545519820831E-01 8.762698805200E-01 0.000000000000E+00 -2.150454730913E-01 8.581093738214E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.130454363524E-01 -1.682230479896E+00 0.000000000000E+00 7.296480046770E-02 -1.876544250523E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.358319705205E-01 8.690492221564E-01 0.000000000000E+00 -2.234826282269E-01 8.525386537950E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.632210014702E-01 -1.658029644630E+00 0.000000000000E+00 1.042536783951E-01 -1.851203595973E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.169221745275E-01 8.616959691211E-01 0.000000000000E+00 -2.319128077761E-01 8.470091878369E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.141253140431E-01 -1.633798279619E+00 0.000000000000E+00 1.355501493361E-01 -1.827845767665E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.978467961892E-01 8.542165961621E-01 0.000000000000E+00 -2.403244566820E-01 8.415204770493E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.658062128754E-01 -1.609560668144E+00 0.000000000000E+00 1.667588044733E-01 -1.806313036872E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.786295368592E-01 8.466175224429E-01 0.000000000000E+00 -2.487062150596E-01 8.360714839051E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.183061415054E-01 -1.585339622885E+00 0.000000000000E+00 1.977920619438E-01 -1.786454139731E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.592935768386E-01 8.389051050646E-01 0.000000000000E+00 -2.570469525959E-01 8.306607033117E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.716624912930E-01 -1.561156544280E+00 0.000000000000E+00 2.285698057992E-01 -1.768124585899E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.398615574923E-01 8.310856331235E-01 0.000000000000E+00 -2.653357986848E-01 8.252862286264E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.259079319724E-01 -1.537031478640E+00 0.000000000000E+00 2.590190185885E-01 -1.751186854673E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.203555655867E-01 8.231653222660E-01 0.000000000000E+00 -2.735621686364E-01 8.199458127835E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.810707291668E-01 -1.512983175838E+00 0.000000000000E+00 2.890734121052E-01 -1.735510496864E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.007971196524E-01 8.151503097055E-01 0.000000000000E+00 -2.817157862878E-01 8.146369247170E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.371750480813E-01 -1.489029146147E+00 0.000000000000E+00 3.186730599610E-01 -1.720972158287E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.812071582033E-01 8.070466496700E-01 0.000000000000E+00 -2.897867033223E-01 8.093568012766E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.942412431705E-01 -1.465185716207E+00 0.000000000000E+00 3.477640350809E-01 -1.707455538530E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.616060296542E-01 7.988603092489E-01 0.000000000000E+00 -2.977653155862E-01 8.041024948477E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.522861335562E-01 -1.441468083844E+00 0.000000000000E+00 3.762980546134E-01 -1.694851296611E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.420134838059E-01 7.905971646128E-01 0.000000000000E+00 -3.056423766739E-01 7.988709168880E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.113232642084E-01 -1.417890371570E+00 0.000000000000E+00 4.042321342588E-01 -1.683056913631E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.224486647754E-01 7.822629975788E-01 0.000000000000E+00 -3.134090090295E-01 7.936588775992E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.713631529744E-01 -1.394465678781E+00 0.000000000000E+00 4.315282535804E-01 -1.671976521076E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.029301052671E-01 7.738634924994E-01 0.000000000000E+00 -3.210567127987E-01 7.884631219482E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.324135236943E-01 -1.371206132390E+00 0.000000000000E+00 4.581530334667E-01 -1.661520702117E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.834757220934E-01 7.654042334536E-01 0.000000000000E+00 -3.285773726416E-01 7.832803622510E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.944795257454E-01 -1.348122935916E+00 0.000000000000E+00 4.840774265924E-01 -1.651606272282E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.641028128620E-01 7.568907017185E-01 0.000000000000E+00 -3.359632627046E-01 7.781073075267E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.575639404937E-01 -1.325226416970E+00 0.000000000000E+00 5.092764214225E-01 -1.642156044879E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.448280537589E-01 7.483282735057E-01 0.000000000000E+00 -3.432070499280E-01 7.729406898243E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.216673751691E-01 -1.302526073021E+00 0.000000000000E+00 5.337287600358E-01 -1.633098585676E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.256674983633E-01 7.397222179456E-01 0.000000000000E+00 -3.503017958541E-01 7.677772877178E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.867884448831E-01 -1.280030615467E+00 0.000000000000E+00 5.574166698236E-01 -1.624367960717E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.066365774385E-01 7.310776953040E-01 0.000000000000E+00 -3.572409570839E-01 7.626139471559E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.529239434284E-01 -1.257748011915E+00 0.000000000000E+00 5.803256089218E-01 -1.615903480425E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.877500996463E-01 7.223997554175E-01 0.000000000000E+00 -3.640183845176E-01 7.574475998488E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.200690034241E-01 -1.235685526766E+00 0.000000000000E+00 6.024440251481E-01 -1.607649442687E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.690222531415E-01 7.136933363364E-01 0.000000000000E+00 -3.706283215027E-01 7.522752793619E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.821724616650E-02 -1.213849759963E+00 0.000000000000E+00 6.237631281614E-01 -1.599554877077E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.504666080023E-01 7.049632631624E-01 0.000000000000E+00 -3.770654010002E-01 7.470941350823E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.736092163908E-02 -1.192246683950E+00 0.000000000000E+00 6.442766744853E-01 -1.591573292068E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.320961194590E-01 6.962142470719E-01 0.000000000000E+00 -3.833246418701E-01 7.419014442118E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.749103946315E-02 -1.170881678906E+00 0.000000000000E+00 6.639807648841E-01 -1.583662426676E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.139231318854E-01 6.874508845140E-01 0.000000000000E+00 -3.894014443691E-01 7.366946219368E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.402508621608E-03 -1.149759566192E+00 0.000000000000E+00 6.828736535516E-01 -1.575784007661E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.959593835164E-01 6.786776565756E-01 0.000000000000E+00 -3.952915849422E-01 7.314712299133E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.933083489059E-02 -1.128884640088E+00 0.000000000000E+00 7.009555688282E-01 -1.567903513272E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.782160118617E-01 6.698989285054E-01 0.000000000000E+00 -4.009912103842E-01 7.262289831995E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.630595056754E-02 -1.108260697868E+00 0.000000000000E+00 7.182285452447E-01 -1.559989944425E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.607035597815E-01 6.611189493879E-01 0.000000000000E+00 -4.064968314406E-01 7.209657557625E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.234066887015E-02 -1.087891068233E+00 0.000000000000E+00 7.346962663732E-01 -1.552015603854E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.434319821948E-01 6.523418519623E-01 0.000000000000E+00 -4.118053159083E-01 7.156795846746E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.074485153646E-01 -1.067778638183E+00 0.000000000000E+00 7.503639178793E-01 -1.543955883626E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.264106533890E-01 6.435716525784E-01 0.000000000000E+00 -4.169138812949E-01 7.103686731125E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.316436457694E-01 -1.047925878437E+00 0.000000000000E+00 7.652380505355E-01 -1.535789061423E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.096483749003E-01 6.348122512828E-01 0.000000000000E+00 -4.218200870870E-01 7.050313922625E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.549407711704E-01 -1.028334867449E+00 0.000000000000E+00 7.793264529299E-01 -1.527496105868E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 9.315338393588E-02 6.260674320317E-01 0.000000000000E+00 -4.265218266751E-01 6.996662822291E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.773550896725E-01 -1.009007314087E+00 0.000000000000E+00 7.926380332116E-01 -1.519060490921E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.693336230690E-02 6.173408630218E-01 0.000000000000E+00 -4.310173189789E-01 6.942720520413E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.989022238297E-01 -9.899445790859E-01 0.000000000000E+00 8.051827093029E-01 -1.510468019340E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.099544584226E-02 6.086360971359E-01 0.000000000000E+00 -4.353050998126E-01 6.888475788405E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.195981635802E-01 -9.711476953681E-01 0.000000000000E+00 8.169713071738E-01 -1.501706655135E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.534623425383E-02 5.999565724975E-01 0.000000000000E+00 -4.393840130259E-01 6.833919063321E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.394592139781E-01 -9.526173872866E-01 0.000000000000E+00 8.280154665789E-01 -1.492766364861E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.999180142234E-02 5.913056131289E-01 0.000000000000E+00 -4.432532014563E-01 6.779042425759E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.585019470186E-01 -9.343540888692E-01 0.000000000000E+00 8.383275536323E-01 -1.483638967439E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.493770607413E-02 5.826864297088E-01 0.000000000000E+00 -4.469120977219E-01 6.723839571869E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.767431570760E-01 -9.163579611498E-01 0.000000000000E+00 8.479205796979E-01 -1.474317992274E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.890028185773E-04 5.741021204234E-01 0.000000000000E+00 -4.503604148854E-01 6.668305780105E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.941998194418E-01 -8.986289086506E-01 0.000000000000E+00 8.568081260515E-01 -1.464798545307E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.424974648369E-02 5.655556719080E-01 0.000000000000E+00 -4.535981370146E-01 6.612437873357E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.108890515188E-01 -8.811665950631E-01 0.000000000000E+00 8.650042738051E-01 -1.455077182665E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.837446105178E-02 5.570499602733E-01 0.000000000000E+00 -4.566255096662E-01 6.556234177024E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + +GlobalHybrid +HF 0.200000 diff --git a/test/prog/sktable/HYB-B3LYP/Non-Relativistic/_C-N.skf b/test/prog/sktable/HYB-B3LYP/Non-Relativistic/_C-N.skf new file mode 100644 index 00000000..531b9f0d --- /dev/null +++ b/test/prog/sktable/HYB-B3LYP/Non-Relativistic/_C-N.skf @@ -0,0 +1,93 @@ +0.020000 69 + 0.000000000000E+00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.101706788670E+00 -2.069198895714E+00 0.000000000000E+00 -1.636063298629E-01 -2.160266691709E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.198877710650E-01 8.540221258752E-01 0.000000000000E+00 -1.581415787584E-01 8.356555452289E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.035604037164E+00 -2.036769166663E+00 0.000000000000E+00 -1.226921489858E-01 -2.131574442006E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.997812468949E-01 8.461455950426E-01 0.000000000000E+00 -1.661509452276E-01 8.300725581625E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.706079780336E-01 -2.004318457157E+00 0.000000000000E+00 -8.153899146338E-02 -2.105415198511E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.795074839176E-01 8.381303291264E-01 0.000000000000E+00 -1.742097893211E-01 8.245377470251E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.067874847378E-01 -1.971883433061E+00 0.000000000000E+00 -4.030853407517E-02 -2.081557842129E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.590953946863E-01 8.299843125438E-01 0.000000000000E+00 -1.823025801840E-01 8.190488712626E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.442026466260E-01 -1.939498306597E+00 0.000000000000E+00 8.512762740886E-04 -2.059782508249E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.385731237420E-01 8.217154294984E-01 0.000000000000E+00 -1.904140537824E-01 8.136031383811E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.829053979450E-01 -1.907194946685E+00 0.000000000000E+00 4.180554939420E-02 -2.039880956802E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.179680271387E-01 8.133314560523E-01 0.000000000000E+00 -1.985292621255E-01 8.081972974981E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.229401182989E-01 -1.875002988276E+00 0.000000000000E+00 8.243176706023E-02 -2.021656753635E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.973066554219E-01 8.048400529989E-01 0.000000000000E+00 -2.066336159603E-01 8.028277250052E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.643442037081E-01 -1.842949939918E+00 0.000000000000E+00 1.226190961265E-01 -2.004925297399E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.766147397098E-01 7.962487594750E-01 0.000000000000E+00 -2.147129215316E-01 7.974905026976E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.071486077453E-01 -1.811061289285E+00 0.000000000000E+00 1.622677072158E-01 -1.989513721130E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.559171805702E-01 7.875649872517E-01 0.000000000000E+00 -2.227534119615E-01 7.921814887481E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.513783525983E-01 -1.779360606278E+00 0.000000000000E+00 2.012881051359E-01 -1.975260693279E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.352380394179E-01 7.787960156523E-01 0.000000000000E+00 -2.307417737596E-01 7.868963819185E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.970530102772E-01 -1.747869643240E+00 0.000000000000E+00 2.396004758497E-01 -1.962016139145E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.146005321960E-01 7.699489870455E-01 0.000000000000E+00 -2.386651689345E-01 7.816307794010E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.441871545069E-01 -1.716608432041E+00 0.000000000000E+00 2.771340537261E-01 -1.949640900445E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.940270251297E-01 7.610309028704E-01 0.000000000000E+00 -2.465112531375E-01 7.763802286849E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.927907841194E-01 -1.685595377914E+00 0.000000000000E+00 3.138265118418E-01 -1.938006348021E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.735390323723E-01 7.520486201506E-01 0.000000000000E+00 -2.542681902297E-01 7.711402738348E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.428697189705E-01 -1.654847349867E+00 0.000000000000E+00 3.496233772629E-01 -1.926993960213E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.531572153805E-01 7.430088484609E-01 0.000000000000E+00 -2.619246636316E-01 7.659064965583E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.944259695495E-01 -1.624379767490E+00 0.000000000000E+00 3.844774725330E-01 -1.916494877419E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.329013838828E-01 7.339181473111E-01 0.000000000000E+00 -2.694698847749E-01 7.606745524286E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.474580815300E-01 -1.594206684073E+00 0.000000000000E+00 4.183483840520E-01 -1.906409441514E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.127904983165E-01 7.247829239176E-01 0.000000000000E+00 -2.768935989505E-01 7.554402026128E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.019614565234E-01 -1.564340865998E+00 0.000000000000E+00 4.512019575646E-01 -1.896646727373E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.928426736271E-01 7.156094313324E-01 0.000000000000E+00 -2.841860888160E-01 7.501993414432E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.579286502828E-01 -1.534793868420E+00 0.000000000000E+00 4.830098206152E-01 -1.887124072370E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.730751843347E-01 7.064037669067E-01 0.000000000000E+00 -2.913381757987E-01 7.449480201500E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.153496493831E-01 -1.505576107211E+00 0.000000000000E+00 5.137489316297E-01 -1.877766608665E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.535044707834E-01 6.971718710638E-01 0.000000000000E+00 -2.983412196096E-01 7.396824670622E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.421212753325E-02 -1.476696927167E+00 0.000000000000E+00 5.434011550113E-01 -1.868506802155E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.341461464973E-01 6.879195263612E-01 0.000000000000E+00 -3.051871160602E-01 7.343991045617E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.450168297205E-02 -1.448164666600E+00 0.000000000000E+00 5.719528615548E-01 -1.859284001246E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.150150065746E-01 6.786523568233E-01 0.000000000000E+00 -3.118682933561E-01 7.290945630637E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.797943117486E-03 -1.419986718341E+00 0.000000000000E+00 5.993945536251E-01 -1.850043997902E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.961250370568E-01 6.693758275266E-01 0.000000000000E+00 -3.183777070242E-01 7.237656922794E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.070466585334E-02 -1.392169587376E+00 0.000000000000E+00 6.257205142622E-01 -1.840738602949E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.774894252136E-01 6.600952444216E-01 0.000000000000E+00 -3.247088336155E-01 7.184095699993E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.623787258378E-02 -1.364718945139E+00 0.000000000000E+00 6.509284792731E-01 -1.831325237084E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.591205706885E-01 6.508157543776E-01 0.000000000000E+00 -3.308556633109E-01 7.130235086244E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.104182544628E-01 -1.337639680751E+00 0.000000000000E+00 6.750193314891E-01 -1.821766538712E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.410300974541E-01 6.415423454360E-01 0.000000000000E+00 -3.368126915474E-01 7.076050596556E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.432676526761E-01 -1.310935949231E+00 0.000000000000E+00 6.979968161365E-01 -1.812029989284E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.232288665238E-01 6.322798472609E-01 0.000000000000E+00 -3.425749097699E-01 7.021520163365E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.748089180800E-01 -1.284611216994E+00 0.000000000000E+00 7.198672763164E-01 -1.802087556599E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.057269893745E-01 6.230329317742E-01 0.000000000000E+00 -3.481377954055E-01 6.966624146366E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.050657830411E-01 -1.258668304726E+00 0.000000000000E+00 7.406394073837E-01 -1.791915356184E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.853384202950E-02 6.138061139657E-01 0.000000000000E+00 -3.534973011486E-01 6.911345327431E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.340627441576E-01 -1.233109427810E+00 0.000000000000E+00 7.603240290213E-01 -1.781493330645E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.165807975695E-02 6.046037528669E-01 0.000000000000E+00 -3.586498436375E-01 6.855668892221E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.618249545466E-01 -1.207936234600E+00 0.000000000000E+00 7.789338738370E-01 -1.770804946713E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.510765233715E-02 5.954300526809E-01 0.000000000000E+00 -3.635922915978E-01 6.799582399973E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.883781246208E-01 -1.183149842540E+00 0.000000000000E+00 7.964833911778E-01 -1.759836909514E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.888981985235E-02 5.862890640569E-01 0.000000000000E+00 -3.683219535213E-01 6.743075742827E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.137484302454E-01 -1.158750872332E+00 0.000000000000E+00 8.129885650081E-01 -1.748578893506E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.301116895474E-02 5.771846855033E-01 0.000000000000E+00 -3.728365649436E-01 6.686141095966E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.379624273348E-01 -1.134739480375E+00 0.000000000000E+00 8.284667447637E-01 -1.737023289459E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.477629567375E-03 5.681206649291E-01 0.000000000000E+00 -3.771342753806E-01 6.628772859753E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.610469721872E-01 -1.111115389457E+00 0.000000000000E+00 8.429364880824E-01 -1.725164966775E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.705508026197E-03 5.591006013071E-01 0.000000000000E+00 -3.812136349785E-01 6.570967594935E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.830291469310E-01 -1.087877917895E+00 0.000000000000E+00 8.564174145150E-01 -1.713001050444E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.253357574764E-02 5.501279464514E-01 0.000000000000E+00 -3.850735809285E-01 6.512723951928E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.039361896505E-01 -1.065026007159E+00 0.000000000000E+00 8.689300693731E-01 -1.700530711972E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.700250998808E-02 5.412060069005E-01 0.000000000000E+00 -3.887134236955E-01 6.454042595106E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.237954288748E-01 -1.042558248204E+00 0.000000000000E+00 8.804957970034E-01 -1.687754973595E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.110883361384E-02 5.323379459005E-01 0.000000000000E+00 -3.921328331034E-01 6.394926122924E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.426342221681E-01 -1.020472906398E+00 0.000000000000E+00 8.911366228308E-01 -1.674676525094E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.484963775560E-02 5.235267854812E-01 0.000000000000E+00 -3.953318243218E-01 6.335378984673E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.604798986576E-01 -9.987679452420E-01 0.000000000000E+00 9.008751436704E-01 -1.661299552608E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.822256342234E-02 5.147754086174E-01 0.000000000000E+00 -3.983107437920E-01 6.275407394557E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.773597054833E-01 -9.774410488615E-01 0.000000000000E+00 9.097344257530E-01 -1.647629578851E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.122578298032E-02 5.060865614705E-01 0.000000000000E+00 -4.010702551290E-01 6.215019243757E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + +GlobalHybrid +HF 0.200000 diff --git a/test/prog/sktable/HYB-B3LYP/Non-Relativistic/_N-C.skf b/test/prog/sktable/HYB-B3LYP/Non-Relativistic/_N-C.skf new file mode 100644 index 00000000..5530d5b4 --- /dev/null +++ b/test/prog/sktable/HYB-B3LYP/Non-Relativistic/_N-C.skf @@ -0,0 +1,93 @@ +0.020000 69 + 0.000000000000E+00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.101706788670E+00 -2.069198895714E+00 0.000000000000E+00 4.147329888337E-01 -2.160266691709E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.198877710650E-01 8.540221258752E-01 0.000000000000E+00 -2.875941234784E-01 8.356555452289E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.035604037164E+00 -2.036769166663E+00 0.000000000000E+00 4.560089172684E-01 -2.131574442006E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.997812468949E-01 8.461455950426E-01 0.000000000000E+00 -2.976317873632E-01 8.300725581625E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.706079780336E-01 -2.004318457157E+00 0.000000000000E+00 4.968349799574E-01 -2.105415198511E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.795074839176E-01 8.381303291264E-01 0.000000000000E+00 -3.075671899710E-01 8.245377470251E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.067874847378E-01 -1.971883433061E+00 0.000000000000E+00 5.370960385677E-01 -2.081557842129E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.590953946863E-01 8.299843125438E-01 0.000000000000E+00 -3.173872390115E-01 8.190488712626E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.442026466260E-01 -1.939498306597E+00 0.000000000000E+00 5.766887767813E-01 -2.059782508249E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.385731237420E-01 8.217154294984E-01 0.000000000000E+00 -3.270792957787E-01 8.136031383811E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.829053979450E-01 -1.907194946685E+00 0.000000000000E+00 6.155210251269E-01 -2.039880956802E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.179680271387E-01 8.133314560523E-01 0.000000000000E+00 -3.366312077494E-01 8.081972974981E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.229401182989E-01 -1.875002988276E+00 0.000000000000E+00 6.535110857705E-01 -2.021656753635E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.973066554219E-01 8.048400529989E-01 0.000000000000E+00 -3.460313353389E-01 8.028277250052E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.643442037081E-01 -1.842949939918E+00 0.000000000000E+00 6.905870648545E-01 -2.004925297399E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.766147397098E-01 7.962487594750E-01 0.000000000000E+00 -3.552685733560E-01 7.974905026976E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.071486077453E-01 -1.811061289285E+00 0.000000000000E+00 7.266862184728E-01 -1.989513721130E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.559171805702E-01 7.875649872517E-01 0.000000000000E+00 -3.643323676720E-01 7.921814887481E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.513783525983E-01 -1.779360606278E+00 0.000000000000E+00 7.617543170819E-01 -1.975260693279E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.352380394179E-01 7.787960156523E-01 0.000000000000E+00 -3.732127275833E-01 7.868963819185E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.970530102772E-01 -1.747869643240E+00 0.000000000000E+00 7.957450320351E-01 -1.962016139145E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.146005321960E-01 7.699489870455E-01 0.000000000000E+00 -3.819002343166E-01 7.816307794010E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.441871545069E-01 -1.716608432041E+00 0.000000000000E+00 8.286193469467E-01 -1.949640900445E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.940270251297E-01 7.610309028704E-01 0.000000000000E+00 -3.903860460917E-01 7.763802286849E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.927907841194E-01 -1.685595377914E+00 0.000000000000E+00 8.603449957500E-01 -1.938006348021E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.735390323723E-01 7.520486201506E-01 0.000000000000E+00 -3.986619001258E-01 7.711402738348E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.428697189705E-01 -1.654847349867E+00 0.000000000000E+00 8.908959286081E-01 -1.926993960213E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.531572153805E-01 7.430088484609E-01 0.000000000000E+00 -4.067201119280E-01 7.659064965583E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.944259695495E-01 -1.624379767490E+00 0.000000000000E+00 9.202518062507E-01 -1.916494877419E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.329013838828E-01 7.339181473111E-01 0.000000000000E+00 -4.145535722080E-01 7.606745524286E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.474580815300E-01 -1.594206684073E+00 0.000000000000E+00 9.483975228141E-01 -1.906409441514E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.127904983165E-01 7.247829239176E-01 0.000000000000E+00 -4.221557416876E-01 7.554402026128E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.019614565234E-01 -1.564340865998E+00 0.000000000000E+00 9.753227569043E-01 -1.896646727373E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.928426736271E-01 7.156094313324E-01 0.000000000000E+00 -4.295206440825E-01 7.501993414432E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.579286502828E-01 -1.534793868420E+00 0.000000000000E+00 1.001021550323E+00 -1.887124072370E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.730751843347E-01 7.064037669067E-01 0.000000000000E+00 -4.366428574925E-01 7.449480201500E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.153496493831E-01 -1.505576107211E+00 0.000000000000E+00 1.025491913624E+00 -1.877766608665E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.535044707834E-01 6.971718710638E-01 0.000000000000E+00 -4.435175044156E-01 7.396824670622E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.421212753325E-02 -1.476696927167E+00 0.000000000000E+00 1.048735457666E+00 -1.868506802155E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.341461464973E-01 6.879195263612E-01 0.000000000000E+00 -4.501402405821E-01 7.343991045617E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.450168297205E-02 -1.448164666600E+00 0.000000000000E+00 1.070757050398E+00 -1.859284001246E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.150150065746E-01 6.786523568233E-01 0.000000000000E+00 -4.565072427798E-01 7.290945630637E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.797943117486E-03 -1.419986718341E+00 0.000000000000E+00 1.091564497623E+00 -1.850043997902E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.961250370568E-01 6.693758275266E-01 0.000000000000E+00 -4.626151958303E-01 7.237656922794E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.070466585334E-02 -1.392169587376E+00 0.000000000000E+00 1.111168246875E+00 -1.840738602949E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.774894252136E-01 6.600952444216E-01 0.000000000000E+00 -4.684612788514E-01 7.184095699993E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.623787258378E-02 -1.364718945139E+00 0.000000000000E+00 1.129581113368E+00 -1.831325237084E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.591205706885E-01 6.508157543776E-01 0.000000000000E+00 -4.740431509346E-01 7.130235086244E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.104182544628E-01 -1.337639680751E+00 0.000000000000E+00 1.146818026880E+00 -1.821766538712E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.410300974541E-01 6.415423454360E-01 0.000000000000E+00 -4.793589363441E-01 7.076050596556E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.432676526761E-01 -1.310935949231E+00 0.000000000000E+00 1.162895798465E+00 -1.812029989284E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.232288665238E-01 6.322798472609E-01 0.000000000000E+00 -4.844072093403E-01 7.021520163365E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.748089180800E-01 -1.284611216994E+00 0.000000000000E+00 1.177832905786E+00 -1.802087556599E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.057269893745E-01 6.230329317742E-01 0.000000000000E+00 -4.891869787115E-01 6.966624146366E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.050657830411E-01 -1.258668304726E+00 0.000000000000E+00 1.191649295860E+00 -1.791915356184E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.853384202950E-02 6.138061139657E-01 0.000000000000E+00 -4.936976720950E-01 6.911345327431E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.340627441576E-01 -1.233109427810E+00 0.000000000000E+00 1.204366203915E+00 -1.781493330645E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.165807975695E-02 6.046037528669E-01 0.000000000000E+00 -4.979391201548E-01 6.855668892221E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.618249545466E-01 -1.207936234600E+00 0.000000000000E+00 1.216005987059E+00 -1.770804946713E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.510765233715E-02 5.954300526809E-01 0.000000000000E+00 -5.019115406776E-01 6.799582399973E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.883781246208E-01 -1.183149842540E+00 0.000000000000E+00 1.226591971566E+00 -1.759836909514E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.888981985235E-02 5.862890640569E-01 0.000000000000E+00 -5.056155226427E-01 6.743075742827E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.137484302454E-01 -1.158750872332E+00 0.000000000000E+00 1.236148312574E+00 -1.748578893506E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.301116895474E-02 5.771846855033E-01 0.000000000000E+00 -5.090520103117E-01 6.686141095966E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.379624273348E-01 -1.134739480375E+00 0.000000000000E+00 1.244699865064E+00 -1.737023289459E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.477629567375E-03 5.681206649291E-01 0.000000000000E+00 -5.122222873828E-01 6.628772859753E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.610469721872E-01 -1.111115389457E+00 0.000000000000E+00 1.252272065156E+00 -1.725164966775E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.705508026197E-03 5.591006013071E-01 0.000000000000E+00 -5.151279612474E-01 6.570967594935E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.830291469310E-01 -1.087877917895E+00 0.000000000000E+00 1.258890820784E+00 -1.713001050444E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.253357574764E-02 5.501279464514E-01 0.000000000000E+00 -5.177709473807E-01 6.512723951928E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.039361896505E-01 -1.065026007159E+00 0.000000000000E+00 1.264582410995E+00 -1.700530711972E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.700250998808E-02 5.412060069005E-01 0.000000000000E+00 -5.201534538983E-01 6.454042595106E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.237954288748E-01 -1.042558248204E+00 0.000000000000E+00 1.269373393148E+00 -1.687754973595E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.110883361384E-02 5.323379459005E-01 0.000000000000E+00 -5.222779663036E-01 6.394926122924E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.426342221681E-01 -1.020472906398E+00 0.000000000000E+00 1.273290517449E+00 -1.674676525094E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.484963775560E-02 5.235267854812E-01 0.000000000000E+00 -5.241472324499E-01 6.335378984673E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.604798986576E-01 -9.987679452420E-01 0.000000000000E+00 1.276360648280E+00 -1.661299552608E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.822256342234E-02 5.147754086174E-01 0.000000000000E+00 -5.257642477376E-01 6.275407394557E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.773597054833E-01 -9.774410488615E-01 0.000000000000E+00 1.278610691904E+00 -1.647629578851E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.122578298032E-02 5.060865614705E-01 0.000000000000E+00 -5.271322405648E-01 6.215019243757E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + +GlobalHybrid +HF 0.200000 diff --git a/test/prog/sktable/HYB-B3LYP/Non-Relativistic/_N-N.skf b/test/prog/sktable/HYB-B3LYP/Non-Relativistic/_N-N.skf new file mode 100644 index 00000000..f020b5de --- /dev/null +++ b/test/prog/sktable/HYB-B3LYP/Non-Relativistic/_N-N.skf @@ -0,0 +1,94 @@ +0.020000 69 + 0.000000000000E+00 -2.725447457275E-01 -6.400000000000E-01 -2.227885069976E-02 0.000000000000E+00 4.296169317686E-01 4.296169317686E-01 0.000000000000E+00 3.000000000000E+00 2.000000000000E+00 + 1.400700000000E+01 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.149363512315E+00 -2.460131078390E+00 0.000000000000E+00 2.961042403064E-01 -2.496708407806E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.779962733466E-01 8.457774438375E-01 0.000000000000E+00 -2.491001891901E-01 8.394645231493E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.064172728119E+00 -2.416309635984E+00 0.000000000000E+00 3.490707786496E-01 -2.466584350100E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.556239548434E-01 8.367788259385E-01 0.000000000000E+00 -2.588843615927E-01 8.333510629348E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.808702383195E-01 -2.372595382599E+00 0.000000000000E+00 4.013651599257E-01 -2.439182432810E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.331470612983E-01 8.276417618551E-01 0.000000000000E+00 -2.685905881998E-01 8.272857695048E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.995306484745E-01 -2.329037013268E+00 0.000000000000E+00 4.528248903253E-01 -2.414201414265E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.105999006627E-01 8.183761914374E-01 0.000000000000E+00 -2.782017862842E-01 8.212643949920E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.202160646392E-01 -2.285679461566E+00 0.000000000000E+00 5.033059889868E-01 -2.391359235380E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.880156017489E-01 8.089918768978E-01 0.000000000000E+00 -2.877015385349E-01 8.152822396725E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.429771353375E-01 -2.242564099063E+00 0.000000000000E+00 5.526817607001E-01 -2.370392940175E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.654261002934E-01 7.994983942891E-01 0.000000000000E+00 -2.970741307313E-01 8.093342622178E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.678540317960E-01 -2.199728930064E+00 0.000000000000E+00 6.008415935481E-01 -2.351058386094E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.428621293022E-01 7.899051260750E-01 0.000000000000E+00 -3.063045813917E-01 8.034151786986E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.948773667210E-01 -2.157208780839E+00 0.000000000000E+00 6.476897917036E-01 -2.333129789971E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.203532131914E-01 7.802212546976E-01 0.000000000000E+00 -3.153786642667E-01 7.975195510366E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.240690527274E-01 -2.115035482680E+00 0.000000000000E+00 6.931444510173E-01 -2.316399147999E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.979276653028E-01 7.704557570512E-01 0.000000000000E+00 -3.242829244801E-01 7.916418655997E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.554431021913E-01 -2.073238048291E+00 0.000000000000E+00 7.371363828422E-01 -2.300675561633E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.756125884295E-01 7.606173997822E-01 0.000000000000E+00 -3.330046890471E-01 7.857766026280E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.890063707895E-01 -2.031842841127E+00 0.000000000000E+00 7.796080897026E-01 -2.285784495906E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.534338780392E-01 7.507147353413E-01 0.000000000000E+00 -3.415320724370E-01 7.799182971602E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.247592473100E-01 -1.990873737387E+00 0.000000000000E+00 8.205127948977E-01 -2.271566992031E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.314162279245E-01 7.407560987222E-01 0.000000000000E+00 -3.498539777789E-01 7.740615921097E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.626962924569E-01 -1.950352280488E+00 0.000000000000E+00 8.598135269294E-01 -2.257878852153E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.095831380495E-01 7.307496048271E-01 0.000000000000E+00 -3.579600942556E-01 7.682012841104E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.028068293719E-01 -1.910297827915E+00 0.000000000000E+00 8.974822587132E-01 -2.244589810852E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.879569243913E-01 7.207031464064E-01 0.000000000000E+00 -3.658408911696E-01 7.623323627244E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.450754884766E-01 -1.870727690427E+00 0.000000000000E+00 9.334991008617E-01 -2.231582705148E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.665587306042E-01 7.106243925233E-01 0.000000000000E+00 -3.734876091183E-01 7.564500435741E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.948270907348E-02 -1.831657263684E+00 0.000000000000E+00 9.678515478554E-01 -2.218752652481E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.454085413545E-01 7.005207875017E-01 0.000000000000E+00 -3.808922486678E-01 7.505497959291E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.600520000248E-02 -1.793100152429E+00 0.000000000000E+00 1.000533775594E+00 -2.206006244169E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.245251971942E-01 6.903995503181E-01 0.000000000000E+00 -3.880475568706E-01 7.446273652458E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.538363842917E-02 -1.755068287443E+00 0.000000000000E+00 1.031545988589E+00 -2.193260760272E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.039264108549E-01 6.802676744024E-01 0.000000000000E+00 -3.949470119379E-01 7.386787911287E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.471332902814E-02 -1.717572035528E+00 0.000000000000E+00 1.060893814885E+00 -2.180443410416E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.836287848554E-01 6.701319278177E-01 0.000000000000E+00 -4.015848063388E-01 7.327004211514E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.120159664933E-01 -1.680620302863E+00 0.000000000000E+00 1.088587746609E+00 -2.167490604021E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.636478303280E-01 6.599988537895E-01 0.000000000000E+00 -4.079558285711E-01 7.266889209443E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.573258979529E-01 -1.644220632060E+00 0.000000000000E+00 1.114642623917E+00 -2.154347252369E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.439979869716E-01 6.498747715594E-01 0.000000000000E+00 -4.140556438198E-01 7.206412809301E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.006794326142E-01 -1.608379293339E+00 0.000000000000E+00 1.139077159894E+00 -2.140966104107E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.246926440492E-01 6.397657775399E-01 0.000000000000E+00 -4.198804736938E-01 7.145548200596E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.421145777580E-01 -1.573101370166E+00 0.000000000000E+00 1.161913503847E+00 -2.127307115056E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.057441623501E-01 6.296777467497E-01 0.000000000000E+00 -4.254271752122E-01 7.084271868748E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.816707983698E-01 -1.538390839787E+00 0.000000000000E+00 1.183176840281E+00 -2.113336852551E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.716389703854E-02 6.196163345084E-01 0.000000000000E+00 -4.306932191905E-01 7.022563582027E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.193887979102E-01 -1.504250648953E+00 0.000000000000E+00 1.202895020860E+00 -2.099027934071E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.896222131592E-02 6.095869783746E-01 0.000000000000E+00 -4.356766681609E-01 6.960406357578E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.553103169181E-01 -1.470682785265E+00 0.000000000000E+00 1.221098226760E+00 -2.084358499389E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.114855082336E-02 5.995949003093E-01 0.000000000000E+00 -4.403761539459E-01 6.897786409126E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.894779479824E-01 -1.437688344380E+00 0.000000000000E+00 1.237818658784E+00 -2.069311715349E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.373136871269E-02 5.896451090490E-01 0.000000000000E+00 -4.447908549914E-01 6.834693078726E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.219349651739E-01 -1.405267593418E+00 0.000000000000E+00 1.253090252845E+00 -2.053875312099E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.671825131567E-02 5.797424026748E-01 0.000000000000E+00 -4.489204735531E-01 6.771118754727E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.527251660980E-01 -1.373420030805E+00 0.000000000000E+00 1.266948418672E+00 -2.038041149449E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.158943417267E-04 5.698913713622E-01 0.000000000000E+00 -4.527652128225E-01 6.707058777964E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.818927253126E-01 -1.342144442789E+00 0.000000000000E+00 1.279429799799E+00 -2.021804811962E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.606986046478E-02 5.600964003004E-01 0.000000000000E+00 -4.563257540653E-01 6.642511337986E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.094820583974E-01 -1.311438956821E+00 0.000000000000E+00 1.290572053082E+00 -2.005165231466E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.183399827590E-02 5.503616727660E-01 0.000000000000E+00 -4.596032338417E-01 6.577477361006E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.355376958885E-01 -1.281301092035E+00 0.000000000000E+00 1.300413646252E+00 -1.988124335619E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.717230380698E-02 5.406911733417E-01 0.000000000000E+00 -4.625992213678E-01 6.511960391079E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.601041665603E-01 -1.251727806919E+00 0.000000000000E+00 1.308993672172E+00 -1.970686721198E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.208133368554E-02 5.310886912661E-01 0.000000000000E+00 -4.653156960729E-01 6.445966465895E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.832258896636E-01 -1.222715544364E+00 0.000000000000E+00 1.316351678656E+00 -1.952859350856E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.655838862662E-02 5.215578239059E-01 0.000000000000E+00 -4.677550254007E-01 6.379503988447E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.049470757964E-01 -1.194260274240E+00 0.000000000000E+00 1.322527512817E+00 -1.934651272112E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.060148547839E-02 5.121019803373E-01 0.000000000000E+00 -4.699199428985E-01 6.312583595694E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.253116361450E-01 -1.166357533576E+00 0.000000000000E+00 1.327561179012E+00 -1.916073357419E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.042093291997E-01 5.027243850281E-01 0.000000000000E+00 -4.718135266329E-01 6.245218025252E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.443630998143E-01 -1.139002464482E+00 0.000000000000E+00 1.331492709549E+00 -1.897138064163E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.173812848295E-01 4.934280816097E-01 0.000000000000E+00 -4.734391779676E-01 6.177421981021E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.621445389689E-01 -1.112189849896E+00 0.000000000000E+00 1.334362047366E+00 -1.877859213517E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.301173495069E-01 4.842159367293E-01 0.000000000000E+00 -4.748006007332E-01 6.109211998585E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.786985014741E-01 -1.085914147289E+00 0.000000000000E+00 1.336208939942E+00 -1.858251787085E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.424181245969E-01 4.750906439730E-01 0.000000000000E+00 -4.759017808195E-01 6.040606311103E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.940669507247E-01 -1.060169520381E+00 0.000000000000E+00 1.337072843750E+00 -1.838331740325E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.542847879758E-01 4.660547278504E-01 0.000000000000E+00 -4.767469662116E-01 5.971624716347E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + +GlobalHybrid +HF 0.200000 diff --git a/test/prog/sktable/HYB-B3LYP/Non-Relativistic/config b/test/prog/sktable/HYB-B3LYP/Non-Relativistic/config new file mode 100644 index 00000000..bfa360b6 --- /dev/null +++ b/test/prog/sktable/HYB-B3LYP/Non-Relativistic/config @@ -0,0 +1 @@ +C,N C,N \ No newline at end of file diff --git a/test/prog/sktable/HYB-B3LYP/Non-Relativistic/skdef.hsd b/test/prog/sktable/HYB-B3LYP/Non-Relativistic/skdef.hsd new file mode 100644 index 00000000..0c02cba0 --- /dev/null +++ b/test/prog/sktable/HYB-B3LYP/Non-Relativistic/skdef.hsd @@ -0,0 +1,112 @@ +SkdefVersion = 1 + +Globals { + Superposition = density + XCFunctional = B3LYP {} +} + +AtomParameters { + + C { + AtomConfig { + AtomicNumber = 6 + Mass = 12.01 + Occupations { + 1S = 1.0 1.0 + 2S = 1.0 1.0 + 2P = 2.0 0.0 + } + ValenceShells = 2s 2p + Relativistics = None + } + DftbAtom { + ShellResolved = No + DensityCompression = PowerCompression { Power = 2; Radius = 7.0 } + WaveCompressions = SingleAtomCompressions { + S = PowerCompression { Power = 2; Radius = 2.7 } + P = PowerCompression { Power = 2; Radius = 2.7 } + } + } + } + + N { + AtomConfig { + AtomicNumber = 7 + Mass = 14.007 + Occupations { + 1S = 1.0 1.0 + 2S = 1.0 1.0 + 2P = 2.0 1.0 + } + ValenceShells = 2s 2p + Relativistics = None + } + DftbAtom { + ShellResolved = No + DensityCompression = PowerCompression{ Power = 2; Radius = 11.0 } + WaveCompressions = SingleAtomCompressions { + S = PowerCompression { Power = 2; Radius = 2.2 } + P = PowerCompression { Power = 2; Radius = 2.2 } + } + CustomizedOnsites { + 2s = -0.64 + } + } + } + +} + + +OnecenterParameters { + + $StandardDeltaFilling { + DeltaFilling = 0.01 + } + + C { + $StandardDeltaFilling + Calculator = SlaterAtom { + Exponents { + S = 0.5 1.14 2.62 6.0 + P = 0.5 1.14 2.62 6.0 + } + MaxPowers { + S = 2 + P = 2 + } + } + } + + N { + $StandardDeltaFilling + Calculator = SlaterAtom { + Exponents { + S = 0.5 1.2 2.9 7.0 + P = 0.5 1.2 2.9 7.0 + } + MaxPowers { + S = 2 + P = 2 + } + } + } +} + +TwoCenterParameters { + + $EqGrid = EquidistantGrid { + GridStart = 0.6 + GridSeparation = 0.02 + Tolerance = 5e-5 + MaxDistance = -1.4 + } + + $SkTwocnt_300_150 = Sktwocnt { + IntegrationPoints = 300 150 + } + + C-C { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + C-N { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + N-N { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + +} diff --git a/test/prog/sktable/HYB-PBE0/Non-Relativistic/_C-C.skf b/test/prog/sktable/HYB-PBE0/Non-Relativistic/_C-C.skf new file mode 100644 index 00000000..f69c1dd9 --- /dev/null +++ b/test/prog/sktable/HYB-PBE0/Non-Relativistic/_C-C.skf @@ -0,0 +1,94 @@ +0.020000 69 + 0.000000000000E+00 -1.813114916604E-01 -6.127543641857E-01 -9.570533223604E-02 0.000000000000E+00 3.516710536763E-01 3.516710536763E-01 0.000000000000E+00 2.000000000000E+00 2.000000000000E+00 + 1.201000000000E+01 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.365081765595E-01 -1.189956898755E+00 0.000000000000E+00 -8.468833503294E-02 -1.106394539280E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.789503650454E-01 8.856739557866E-01 0.000000000000E+00 -2.103265250064E-01 8.642644948408E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.985703157462E-01 -1.171474886570E+00 0.000000000000E+00 -6.188950540745E-02 -1.085092142910E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.606813123627E-01 8.787114215007E-01 0.000000000000E+00 -2.187780905864E-01 8.586352274261E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.612839406889E-01 -1.152975044679E+00 0.000000000000E+00 -3.892081704844E-02 -1.065753224276E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.421897239087E-01 8.716095976303E-01 0.000000000000E+00 -2.272303231406E-01 8.530446883662E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.246930825021E-01 -1.134479414074E+00 0.000000000000E+00 -1.587418531557E-02 -1.048227057965E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.234995716926E-01 8.643747676102E-01 0.000000000000E+00 -2.356718849112E-01 8.474931827347E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.888362800765E-01 -1.116008619695E+00 0.000000000000E+00 7.165841459232E-03 -1.032368554049E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.046344033690E-01 8.570131745242E-01 0.000000000000E+00 -2.440915871224E-01 8.419804023357E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.537469165291E-01 -1.097581921251E+00 0.000000000000E+00 3.012179207419E-02 -1.018038683441E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.856173196818E-01 8.495310144175E-01 0.000000000000E+00 -2.524784271057E-01 8.365054998132E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.194535427481E-01 -1.079217265235E+00 0.000000000000E+00 5.292296580738E-02 -1.005104773191E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.664709542905E-01 8.419344301299E-01 0.000000000000E+00 -2.608216210260E-01 8.310671578555E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.859802042165E-01 -1.060931338094E+00 0.000000000000E+00 7.550511585206E-02 -9.934406971729E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.472174557594E-01 8.342295056140E-01 0.000000000000E+00 -2.691106325547E-01 8.256636536089E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.533467492609E-01 -1.042739619668E+00 0.000000000000E+00 9.781012554425E-02 -9.829269736232E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.278784715117E-01 8.264222607023E-01 0.000000000000E+00 -2.773351978220E-01 8.202929184436E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.215691321956E-01 -1.024656437007E+00 0.000000000000E+00 1.197856825724E-01 -9.734507887802E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.084751335777E-01 8.185186462918E-01 0.000000000000E+00 -2.854853469652E-01 8.149525932414E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.906597039112E-01 -1.006695018054E+00 0.000000000000E+00 1.413849539098E-01 -9.649059576953E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.890280459833E-01 8.105245399153E-01 0.000000000000E+00 -2.935514225692E-01 8.096400793849E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.606274904135E-01 -9.888675449926E-01 0.000000000000E+00 1.625662643813E-01 -9.571928337474E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.695572736462E-01 8.024457416715E-01 0.000000000000E+00 -3.015240952793E-01 8.043525856398E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.314784586710E-01 -9.711852070015E-01 0.000000000000E+00 1.832927811773E-01 -9.502181764832E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.500823326643E-01 7.942879704893E-01 0.000000000000E+00 -3.093943768427E-01 7.990871711302E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.032157694207E-01 -9.536582521357E-01 0.000000000000E+00 2.035322061731E-01 -9.438949860256E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.306221818952E-01 7.860568607024E-01 0.000000000000E+00 -3.171536308203E-01 7.938407846037E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.758400168617E-01 -9.362960380022E-01 0.000000000000E+00 2.232564774882E-01 -9.381423111076E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.111952157417E-01 7.777579589141E-01 0.000000000000E+00 -3.247935811876E-01 7.886103001877E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.493494554184E-01 -9.191070810415E-01 0.000000000000E+00 2.424414813200E-01 -9.328850368177E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.918192580659E-01 7.693967211314E-01 0.000000000000E+00 -3.323063190285E-01 7.833925498336E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.237402139759E-01 -9.020991042356E-01 0.000000000000E+00 2.610667747240E-01 -9.280536572249E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.725115571704E-01 7.609785101533E-01 0.000000000000E+00 -3.396843075051E-01 7.781843526410E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.900649813809E-02 -8.852790830117E-01 0.000000000000E+00 2.791153196806E-01 -9.235840371902E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.532887817886E-01 7.525085931964E-01 0.000000000000E+00 -3.469203852732E-01 7.729825412522E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.514078112728E-02 -8.686532891171E-01 0.000000000000E+00 2.965732285314E-01 -9.194171669459E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.341670180368E-01 7.439921397432E-01 0.000000000000E+00 -3.540077684964E-01 7.677839854963E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.213398390462E-02 -8.522273322896E-01 0.000000000000E+00 3.134295206870E-01 -9.154989124203E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.151617672853E-01 7.354342196017E-01 0.000000000000E+00 -3.609400515971E-01 7.625856134620E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.997564495800E-02 -8.360061995937E-01 0.000000000000E+00 3.296758904280E-01 -9.117797637825E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.962879449119E-01 7.268398011644E-01 0.000000000000E+00 -3.677112068706E-01 7.573844301645E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.654079989448E-03 -8.199942923512E-01 0.000000000000E+00 3.453064856270E-01 -9.082145842890E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.775598799028E-01 7.182137498550E-01 0.000000000000E+00 -3.743155830762E-01 7.521775339715E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.184346851779E-02 -8.041954606686E-01 0.000000000000E+00 3.603176973212E-01 -9.047623612238E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.589913152727E-01 7.095608267561E-01 0.000000000000E+00 -3.807479031079E-01 7.469621309403E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.153069211149E-02 -7.886130356479E-01 0.000000000000E+00 3.747079602121E-01 -9.013859605388E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.405954092739E-01 7.008856874058E-01 0.000000000000E+00 -3.870032608366E-01 7.417355472145E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.042208797212E-02 -7.732498594556E-01 0.000000000000E+00 3.884775643290E-01 -8.980518866705E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.223847373694E-01 6.921928807594E-01 0.000000000000E+00 -3.930771172098E-01 7.364952396211E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.853284172102E-02 -7.581083134964E-01 0.000000000000E+00 4.016284781977E-01 -8.947300489113E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.043712949442E-01 6.834868483057E-01 0.000000000000E+00 -3.989652956823E-01 7.312388045992E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.587872169955E-02 -7.431903449834E-01 0.000000000000E+00 4.141641838701E-01 -8.913935355977E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.865665007298E-01 6.747719233332E-01 0.000000000000E+00 -4.046639770478E-01 7.259639855882E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.024759846943E-01 -7.284974922028E-01 0.000000000000E+00 4.260895240678E-01 -8.880183972152E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.689812009176E-01 6.660523303400E-01 0.000000000000E+00 -4.101696937327E-01 7.206686789948E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.183412927016E-01 -7.140309087472E-01 0.000000000000E+00 4.374105614833E-01 -8.845834393002E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.516256739377E-01 6.573321845809E-01 0.000000000000E+00 -4.154793236088E-01 7.153509388511E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.334916399222E-01 -6.997913869299E-01 0.000000000000E+00 4.481344499962E-01 -8.810700257408E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.345096358765E-01 6.486154917471E-01 0.000000000000E+00 -4.205900833766E-01 7.100089802709E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.479442888350E-01 -6.857793804091E-01 0.000000000000E+00 4.582693172454E-01 -8.774618927041E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.176422465094E-01 6.399061477742E-01 0.000000000000E+00 -4.254995215637E-01 7.046411818059E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.617167139718E-01 -6.719950259986E-01 0.000000000000E+00 4.678241577278E-01 -8.737449731187E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.010321159234E-01 6.312079387714E-01 0.000000000000E+00 -4.302055111840E-01 6.992460867951E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.748265519325E-01 -6.584381651053E-01 0.000000000000E+00 4.768087354469E-01 -8.699072317391E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.468731170216E-02 6.225245410703E-01 0.000000000000E+00 -4.347062420935E-01 6.938224037983E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.872915562151E-01 -6.451083643442E-01 0.000000000000E+00 4.852334949591E-01 -8.659385100845E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.861536664713E-02 6.138595213867E-01 0.000000000000E+00 -4.390002130815E-01 6.883690061975E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.991295555994E-01 -6.320049349790E-01 0.000000000000E+00 4.931094796566E-01 -8.618303804287E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.282328700872E-02 6.052163370919E-01 0.000000000000E+00 -4.430862237275E-01 6.828849310443E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.103584150631E-01 -6.191269521706E-01 0.000000000000E+00 5.004482563387E-01 -8.575760088528E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.731756119806E-02 5.965983365894E-01 0.000000000000E+00 -4.469633660571E-01 6.773693772290E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.209959984580E-01 -6.064732729063E-01 0.000000000000E+00 5.072618450600E-01 -8.531700260749E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.210416895206E-02 5.880087597931E-01 0.000000000000E+00 -4.506310160233E-01 6.718217030401E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.310601324627E-01 -5.940425527945E-01 0.000000000000E+00 5.135626535217E-01 -8.486084055459E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.188590922800E-03 5.794507387023E-01 0.000000000000E+00 -4.540888248400E-01 6.662414231792E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.405685715801E-01 -5.818332622915E-01 0.000000000000E+00 5.193634154915E-01 -8.438883486433E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.424181337705E-03 5.709272980701E-01 0.000000000000E+00 -4.573367101943E-01 6.606282052934E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.495389641466E-01 -5.698437020126E-01 0.000000000000E+00 5.246771328204E-01 -8.390081763066E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.172963502656E-02 5.624413561609E-01 0.000000000000E+00 -4.603748473573E-01 6.549818660802E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + +GlobalHybrid +HF 0.350000 diff --git a/test/prog/sktable/HYB-PBE0/Non-Relativistic/_C-N.skf b/test/prog/sktable/HYB-PBE0/Non-Relativistic/_C-N.skf new file mode 100644 index 00000000..7a4ccc11 --- /dev/null +++ b/test/prog/sktable/HYB-PBE0/Non-Relativistic/_C-N.skf @@ -0,0 +1,93 @@ +0.020000 69 + 0.000000000000E+00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.833982846685E-01 -1.435734492577E+00 0.000000000000E+00 -2.210805094232E-01 -1.266910014458E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.249365699999E-01 8.556203218388E-01 0.000000000000E+00 -1.608239951384E-01 8.357493401769E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.343183134143E-01 -1.410665975270E+00 0.000000000000E+00 -1.896012757317E-01 -1.246765317967E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.050412282508E-01 8.478585324529E-01 0.000000000000E+00 -1.688275052500E-01 8.301443193638E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.863391801802E-01 -1.385650001543E+00 0.000000000000E+00 -1.579926604717E-01 -1.228776970893E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.849688262346E-01 8.399572843477E-01 0.000000000000E+00 -1.768780676471E-01 8.245857031631E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.395082471672E-01 -1.360715729744E+00 0.000000000000E+00 -1.263882644315E-01 -1.212739928099E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.647476504288E-01 8.319243204566E-01 0.000000000000E+00 -1.849605519401E-01 8.190714511374E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.938650507384E-01 -1.335890125001E+00 0.000000000000E+00 -9.490945641897E-02 -1.198460113130E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.444052837549E-01 8.237672944436E-01 0.000000000000E+00 -1.930600749128E-01 8.135989659253E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.494418943178E-01 -1.311198061832E+00 0.000000000000E+00 -6.366599085761E-02 -1.185754615285E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.239685845875E-01 8.154937630476E-01 0.000000000000E+00 -2.011620482901E-01 8.081651850685E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.062644179455E-01 -1.286662426768E+00 0.000000000000E+00 -3.275663664779E-02 -1.174451732766E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.034636688950E-01 8.071111791621E-01 0.000000000000E+00 -2.092522203036E-01 8.027666652665E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.643521426424E-01 -1.262304220282E+00 0.000000000000E+00 -2.269808797378E-03 -1.164390890613E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.829158951940E-01 7.986268855949E-01 0.000000000000E+00 -2.173167116224E-01 7.973996593880E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.237189881340E-01 -1.238142657393E+00 0.000000000000E+00 2.771580418208E-02 -1.155422457782E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.623498520374E-01 7.900481094494E-01 0.000000000000E+00 -2.253420461790E-01 7.920601865909E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.843737637713E-01 -1.214195266306E+00 0.000000000000E+00 5.713062264676E-02 -1.147407484092E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.417893477951E-01 7.813819570808E-01 0.000000000000E+00 -2.333151773734E-01 7.867440959165E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.463206326334E-01 -1.190477984690E+00 0.000000000000E+00 8.591357245145E-02 -1.140217374581E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.212574025153E-01 7.726354095788E-01 0.000000000000E+00 -2.412235101055E-01 7.814471237263E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.095595479117E-01 -1.167005253008E+00 0.000000000000E+00 1.140114993803E-01 -1.133733516080E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.007762416849E-01 7.638153187369E-01 0.000000000000E+00 -2.490549190397E-01 7.761649453501E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.740866637069E-01 -1.143790104350E+00 0.000000000000E+00 1.413786034710E-01 -1.127846868335E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.803672917320E-01 7.549284034697E-01 0.000000000000E+00 -2.567977634726E-01 7.708932213108E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.398947196936E-01 -1.120844250605E+00 0.000000000000E+00 1.679758952117E-01 -1.122457530075E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.600511771339E-01 7.459812466447E-01 0.000000000000E+00 -2.644408991388E-01 7.656276384789E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.069734019791E-01 -1.098178164305E+00 0.000000000000E+00 1.937706741833E-01 -1.117474288469E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.398477190166E-01 7.369802922973E-01 0.000000000000E+00 -2.719736872580E-01 7.603639465041E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.530968063651E-02 -1.075801156156E+00 0.000000000000E+00 2.187360308375E-01 -1.112814159067E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.197759351424E-01 7.279318432018E-01 0.000000000000E+00 -2.793860010942E-01 7.550979898532E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.488812511055E-02 -1.053721447916E+00 0.000000000000E+00 2.428503724228E-01 -1.108401922144E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.998540411998E-01 7.188420587731E-01 0.000000000000E+00 -2.866682302743E-01 7.498257357760E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.569119465299E-02 -1.031946240739E+00 0.000000000000E+00 2.660969717389E-01 -1.104169660205E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.800994533185E-01 7.097169532769E-01 0.000000000000E+00 -2.938112830858E-01 7.445432985010E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.230049345068E-02 -1.010481779003E+00 0.000000000000E+00 2.884635404701E-01 -1.100056301017E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.605287917428E-01 7.005623943283E-01 0.000000000000E+00 -3.008065869524E-01 7.392469599518E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.910791670742E-02 -9.893334100957E-01 0.000000000000E+00 3.099418283270E-01 -1.096007169973E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.411578856023E-01 6.913841016607E-01 0.000000000000E+00 -3.076460872654E-01 7.339331872581E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.475342548282E-02 -9.685056404556E-01 0.000000000000E+00 3.305272464362E-01 -1.091973554725E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.220017787257E-01 6.821876461474E-01 0.000000000000E+00 -3.143222447333E-01 7.285986473221E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.926054338870E-02 -9.480021884989E-01 0.000000000000E+00 3.502185166347E-01 -1.087912285023E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.030747364470E-01 6.729784490638E-01 0.000000000000E+00 -3.208280313919E-01 7.232402186846E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.126537891658E-01 -9.278260347948E-01 0.000000000000E+00 3.690173465875E-01 -1.083785329954E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.843902533576E-01 6.637617815730E-01 0.000000000000E+00 -3.271569254084E-01 7.178550009230E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.349585186578E-01 -9.079794699974E-01 0.000000000000E+00 3.869281301466E-01 -1.079559414169E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.659610619588E-01 6.545427644257E-01 0.000000000000E+00 -3.333029047960E-01 7.124403217968E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.562007845787E-01 -8.884641408021E-01 0.000000000000E+00 4.039576719549E-01 -1.075205654036E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.477991421713E-01 6.453263678611E-01 0.000000000000E+00 -3.392604401483E-01 7.069937423477E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.764072117175E-01 -8.692810940587E-01 0.000000000000E+00 4.201149346748E-01 -1.070699214119E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.299157316604E-01 6.361174116992E-01 0.000000000000E+00 -3.450244864910E-01 7.015130601415E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.956048846993E-01 -8.504308191403E-01 0.000000000000E+00 4.354108069967E-01 -1.066018983726E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.123213369334E-01 6.269205656144E-01 0.000000000000E+00 -3.505904743399E-01 6.959963108343E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.138212457198E-01 -8.319132885200E-01 0.000000000000E+00 4.498578903424E-01 -1.061147272839E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 9.502574516933E-02 6.177403495818E-01 0.000000000000E+00 -3.559543000493E-01 6.904417682279E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.310840002733E-01 -8.137279965012E-01 0.000000000000E+00 4.634703020720E-01 -1.056069526577E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.803803673784E-02 6.085811344868E-01 0.000000000000E+00 -3.611123155253E-01 6.848479429715E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.474210289893E-01 -7.958739960698E-01 0.000000000000E+00 4.762634933287E-01 -1.050774057071E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.136659836631E-02 5.994471428907E-01 0.000000000000E+00 -3.660613173747E-01 6.792135800548E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.628603044390E-01 -7.783499338329E-01 0.000000000000E+00 4.882540798450E-01 -1.045251791680E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.501913691242E-02 5.903424499445E-01 0.000000000000E+00 -3.707985355552E-01 6.735376552274E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.774298123013E-01 -7.611540830483E-01 0.000000000000E+00 4.994596843328E-01 -1.039496036575E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.900269370000E-02 5.812709844429E-01 0.000000000000E+00 -3.753216215862E-01 6.678193704708E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.911574763673E-01 -7.442843747921E-01 0.000000000000E+00 5.098987894867E-01 -1.033502254748E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.332365937527E-02 5.722365300122E-01 0.000000000000E+00 -3.796286363793E-01 6.620581486395E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.040710877139E-01 -7.277384273257E-01 0.000000000000E+00 5.195906008558E-01 -1.027267857756E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.012210759320E-03 5.632427264241E-01 0.000000000000E+00 -3.837180377387E-01 6.562536273788E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.161982383529E-01 -7.115135737313E-01 0.000000000000E+00 5.285549190883E-01 -1.020792010569E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.699978097687E-02 5.542930710299E-01 0.000000000000E+00 -3.875886675840E-01 6.504056524195E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.275662593503E-01 -6.956068879091E-01 0.000000000000E+00 5.368120212995E-01 -1.014075448969E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.163451896624E-02 5.453909203081E-01 0.000000000000E+00 -3.912397389414E-01 6.445142703420E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.382021641364E-01 -6.800152090329E-01 0.000000000000E+00 5.443825512857E-01 -1.007120309118E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.591247932368E-02 5.365394915181E-01 0.000000000000E+00 -3.946708227465E-01 6.385797208947E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.481325969532E-01 -6.647351645351E-01 0.000000000000E+00 5.512874184309E-01 -9.999299688322E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.983028673824E-02 5.277418644553E-01 0.000000000000E+00 -3.978818345030E-01 6.326024289451E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.573837866690E-01 -6.497631916529E-01 0.000000000000E+00 5.575477050411E-01 -9.925089001492E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.338511891334E-02 5.190009833003E-01 0.000000000000E+00 -4.008730208346E-01 6.265829961347E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.659815059621E-01 -6.350955576751E-01 0.000000000000E+00 5.631845819250E-01 -9.848625328265E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.657468926566E-02 5.103196585562E-01 0.000000000000E+00 -4.036449459677E-01 6.205221923052E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + +GlobalHybrid +HF 0.350000 diff --git a/test/prog/sktable/HYB-PBE0/Non-Relativistic/_N-C.skf b/test/prog/sktable/HYB-PBE0/Non-Relativistic/_N-C.skf new file mode 100644 index 00000000..4f919463 --- /dev/null +++ b/test/prog/sktable/HYB-PBE0/Non-Relativistic/_N-C.skf @@ -0,0 +1,93 @@ +0.020000 69 + 0.000000000000E+00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.833982846685E-01 -1.435734492577E+00 0.000000000000E+00 1.955304533912E-01 -1.266910014458E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.249365699999E-01 8.556203218388E-01 0.000000000000E+00 -2.909290696443E-01 8.357493401769E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.343183134143E-01 -1.410665975270E+00 0.000000000000E+00 2.257787119067E-01 -1.246765317967E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.050412282508E-01 8.478585324529E-01 0.000000000000E+00 -3.009864535161E-01 8.301443193638E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.863391801802E-01 -1.385650001543E+00 0.000000000000E+00 2.556814104125E-01 -1.228776970893E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.849688262346E-01 8.399572843477E-01 0.000000000000E+00 -3.109384889923E-01 8.245857031631E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.395082471672E-01 -1.360715729744E+00 0.000000000000E+00 2.851452439477E-01 -1.212739928099E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.647476504288E-01 8.319243204566E-01 0.000000000000E+00 -3.207724216382E-01 8.190714511374E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.938650507384E-01 -1.335890125001E+00 0.000000000000E+00 3.140870681946E-01 -1.198460113130E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.444052837549E-01 8.237672944436E-01 0.000000000000E+00 -3.304759390369E-01 8.135989659253E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.494418943178E-01 -1.311198061832E+00 0.000000000000E+00 3.424333023196E-01 -1.185754615285E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.239685845875E-01 8.154937630476E-01 0.000000000000E+00 -3.400372019010E-01 8.081651850685E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.062644179455E-01 -1.286662426768E+00 0.000000000000E+00 3.701193319337E-01 -1.174451732766E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.034636688950E-01 8.071111791621E-01 0.000000000000E+00 -3.494448695691E-01 8.027666652665E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.643521426424E-01 -1.262304220282E+00 0.000000000000E+00 3.970889187007E-01 -1.164390890613E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.829158951940E-01 7.986268855949E-01 0.000000000000E+00 -3.586881204145E-01 7.973996593880E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.237189881340E-01 -1.238142657393E+00 0.000000000000E+00 4.232936218617E-01 -1.155422457782E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.623498520374E-01 7.900481094494E-01 0.000000000000E+00 -3.677566676688E-01 7.920601865909E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.843737637713E-01 -1.214195266306E+00 0.000000000000E+00 4.486922359927E-01 -1.147407484092E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.417893477951E-01 7.813819570808E-01 0.000000000000E+00 -3.766407711287E-01 7.867440959165E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.463206326334E-01 -1.190477984690E+00 0.000000000000E+00 4.732502481159E-01 -1.140217374581E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.212574025153E-01 7.726354095788E-01 0.000000000000E+00 -3.853312451806E-01 7.814471237263E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.095595479117E-01 -1.167005253008E+00 0.000000000000E+00 4.969393161131E-01 -1.133733516080E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.007762416849E-01 7.638153187369E-01 0.000000000000E+00 -3.938194635477E-01 7.761649453501E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.740866637069E-01 -1.143790104350E+00 0.000000000000E+00 5.197367702225E-01 -1.127846868335E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.803672917320E-01 7.549284034697E-01 0.000000000000E+00 -4.020973611280E-01 7.708932213108E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.398947196936E-01 -1.120844250605E+00 0.000000000000E+00 5.416251379135E-01 -1.122457530075E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.600511771339E-01 7.459812466447E-01 0.000000000000E+00 -4.101574332627E-01 7.656276384789E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.069734019791E-01 -1.098178164305E+00 0.000000000000E+00 5.625916928451E-01 -1.117474288469E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.398477190166E-01 7.369802922973E-01 0.000000000000E+00 -4.179927327436E-01 7.603639465041E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.530968063651E-02 -1.075801156156E+00 0.000000000000E+00 5.826280277222E-01 -1.112814159067E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.197759351424E-01 7.279318432018E-01 0.000000000000E+00 -4.255968648396E-01 7.550979898532E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.488812511055E-02 -1.053721447916E+00 0.000000000000E+00 6.017296504379E-01 -1.108401922144E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.998540411998E-01 7.188420587731E-01 0.000000000000E+00 -4.329639805949E-01 7.498257357760E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.569119465299E-02 -1.031946240739E+00 0.000000000000E+00 6.198956043672E-01 -1.104169660205E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.800994533185E-01 7.097169532769E-01 0.000000000000E+00 -4.400887686283E-01 7.445432985010E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.230049345068E-02 -1.010481779003E+00 0.000000000000E+00 6.371281120689E-01 -1.100056301017E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.605287917428E-01 7.005623943283E-01 0.000000000000E+00 -4.469664456372E-01 7.392469599518E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.910791670742E-02 -9.893334100957E-01 0.000000000000E+00 6.534322421876E-01 -1.096007169973E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.411578856023E-01 6.913841016607E-01 0.000000000000E+00 -4.535927457915E-01 7.339331872581E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.475342548282E-02 -9.685056404556E-01 0.000000000000E+00 6.688156009470E-01 -1.091973554725E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.220017787257E-01 6.821876461474E-01 0.000000000000E+00 -4.599639091810E-01 7.285986473221E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.926054338870E-02 -9.480021884989E-01 0.000000000000E+00 6.832880475935E-01 -1.087912285023E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.030747364470E-01 6.729784490638E-01 0.000000000000E+00 -4.660766694631E-01 7.232402186846E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.126537891658E-01 -9.278260347948E-01 0.000000000000E+00 6.968614336355E-01 -1.083785329954E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.843902533576E-01 6.637617815730E-01 0.000000000000E+00 -4.719282408419E-01 7.178550009230E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.349585186578E-01 -9.079794699974E-01 0.000000000000E+00 7.095493652704E-01 -1.079559414169E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.659610619588E-01 6.545427644257E-01 0.000000000000E+00 -4.775163044938E-01 7.124403217968E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.562007845787E-01 -8.884641408021E-01 0.000000000000E+00 7.213669877950E-01 -1.075205654036E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.477991421713E-01 6.453263678611E-01 0.000000000000E+00 -4.828389945440E-01 7.069937423477E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.764072117175E-01 -8.692810940587E-01 0.000000000000E+00 7.323307903965E-01 -1.070699214119E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.299157316604E-01 6.361174116992E-01 0.000000000000E+00 -4.878948836840E-01 7.015130601415E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.956048846993E-01 -8.504308191403E-01 0.000000000000E+00 7.424584293281E-01 -1.066018983726E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.123213369334E-01 6.269205656144E-01 0.000000000000E+00 -4.926829685122E-01 6.959963108343E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.138212457198E-01 -8.319132885200E-01 0.000000000000E+00 7.517685673466E-01 -1.061147272839E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 9.502574516933E-02 6.177403495818E-01 0.000000000000E+00 -4.972026546688E-01 6.904417682279E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.310840002733E-01 -8.137279965012E-01 0.000000000000E+00 7.602807273729E-01 -1.056069526577E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.803803673784E-02 6.085811344868E-01 0.000000000000E+00 -5.014537418286E-01 6.848479429715E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.474210289893E-01 -7.958739960698E-01 0.000000000000E+00 7.680151584360E-01 -1.050774057071E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.136659836631E-02 5.994471428907E-01 0.000000000000E+00 -5.054364086080E-01 6.792135800548E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.628603044390E-01 -7.783499338329E-01 0.000000000000E+00 7.749927122656E-01 -1.045251791680E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.501913691242E-02 5.903424499445E-01 0.000000000000E+00 -5.091511974355E-01 6.735376552274E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.774298123013E-01 -7.611540830483E-01 0.000000000000E+00 7.812347292379E-01 -1.039496036575E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.900269370000E-02 5.812709844429E-01 0.000000000000E+00 -5.125989994304E-01 6.678193704708E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.911574763673E-01 -7.442843747921E-01 0.000000000000E+00 7.867629326887E-01 -1.033502254748E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.332365937527E-02 5.722365300122E-01 0.000000000000E+00 -5.157810393280E-01 6.620581486395E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.040710877139E-01 -7.277384273257E-01 0.000000000000E+00 7.915993308688E-01 -1.027267857756E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.012210759320E-03 5.632427264241E-01 0.000000000000E+00 -5.186988604867E-01 6.562536273788E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.161982383529E-01 -7.115135737313E-01 0.000000000000E+00 7.957661260642E-01 -1.020792010569E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.699978097687E-02 5.542930710299E-01 0.000000000000E+00 -5.213543100067E-01 6.504056524195E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.275662593503E-01 -6.956068879091E-01 0.000000000000E+00 7.992856305762E-01 -1.014075448969E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.163451896624E-02 5.453909203081E-01 0.000000000000E+00 -5.237495239884E-01 6.445142703420E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.382021641364E-01 -6.800152090329E-01 0.000000000000E+00 8.021801893301E-01 -1.007120309118E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.591247932368E-02 5.365394915181E-01 0.000000000000E+00 -5.258869129536E-01 6.385797208947E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.481325969532E-01 -6.647351645351E-01 0.000000000000E+00 8.044721089696E-01 -9.999299688322E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.983028673824E-02 5.277418644553E-01 0.000000000000E+00 -5.277691474529E-01 6.326024289451E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.573837866690E-01 -6.497631916529E-01 0.000000000000E+00 8.061835933062E-01 -9.925089001492E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.338511891334E-02 5.190009833003E-01 0.000000000000E+00 -5.293991438761E-01 6.265829961347E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.659815059621E-01 -6.350955576751E-01 0.000000000000E+00 8.073366848899E-01 -9.848625328265E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.657468926566E-02 5.103196585562E-01 0.000000000000E+00 -5.307800504845E-01 6.205221923052E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + +GlobalHybrid +HF 0.350000 diff --git a/test/prog/sktable/HYB-PBE0/Non-Relativistic/_N-N.skf b/test/prog/sktable/HYB-PBE0/Non-Relativistic/_N-N.skf new file mode 100644 index 00000000..ea4f632b --- /dev/null +++ b/test/prog/sktable/HYB-PBE0/Non-Relativistic/_N-N.skf @@ -0,0 +1,94 @@ +0.020000 69 + 0.000000000000E+00 -2.728117352687E-01 -6.400000000000E-01 -3.003582004087E-02 0.000000000000E+00 4.273856562495E-01 4.273856562495E-01 0.000000000000E+00 3.000000000000E+00 2.000000000000E+00 + 1.400700000000E+01 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.960950750264E-01 -1.721876707237E+00 0.000000000000E+00 9.671725514361E-02 -1.496484662647E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.829425685432E-01 8.478755212021E-01 0.000000000000E+00 -2.519572956058E-01 8.394698611729E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.328621357107E-01 -1.687760645027E+00 0.000000000000E+00 1.370543619803E-01 -1.475919809703E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.607134187811E-01 8.389711214247E-01 0.000000000000E+00 -2.617478139981E-01 8.333218156255E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.714380854986E-01 -1.653831200188E+00 0.000000000000E+00 1.768097637029E-01 -1.457688498979E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.383679437571E-01 8.299266784559E-01 0.000000000000E+00 -2.714582547877E-01 8.272208364159E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.118679280935E-01 -1.620126596476E+00 0.000000000000E+00 2.158507796371E-01 -1.441522843802E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.159400287025E-01 8.207519146651E-01 0.000000000000E+00 -2.810718769266E-01 8.211628821730E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.541856263833E-01 -1.586681686378E+00 0.000000000000E+00 2.540610769399E-01 -1.427173219451E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.934624542006E-01 8.114563890383E-01 0.000000000000E+00 -2.905725820137E-01 8.151434473752E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.984151060235E-01 -1.553528142639E+00 0.000000000000E+00 2.913395484737E-01 -1.414408032495E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.709668800683E-01 8.020494887162E-01 0.000000000000E+00 -2.999449511440E-01 8.091576715472E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.445712023008E-01 -1.520694646066E+00 0.000000000000E+00 3.275992125546E-01 -1.403013317199E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.484838332108E-01 7.925404215523E-01 0.000000000000E+00 -3.091742740463E-01 8.032004375516E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.926605500650E-01 -1.488207068393E+00 0.000000000000E+00 3.627661437623E-01 -1.392792198114E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.260426990125E-01 7.829382095979E-01 0.000000000000E+00 -3.182465713489E-01 7.972664596310E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.426824176802E-01 -1.456088649124E+00 0.000000000000E+00 3.967784415439E-01 -1.383564251435E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.036717158837E-01 7.732516834309E-01 0.000000000000E+00 -3.271486107442E-01 7.913503618562E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.946294864549E-01 -1.424360165388E+00 0.000000000000E+00 4.295852411994E-01 -1.375164792185E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.813979726431E-01 7.634894772555E-01 0.000000000000E+00 -3.358679177548E-01 7.854467476321E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.484885773821E-01 -1.393040093953E+00 0.000000000000E+00 4.611457701181E-01 -1.367444109511E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.592474084590E-01 7.536600247025E-01 0.000000000000E+00 -3.443927817391E-01 7.795502608970E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.042413270915E-01 -1.362144764712E+00 0.000000000000E+00 4.914284508863E-01 -1.360266668345E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.372448151162E-01 7.437715552731E-01 0.000000000000E+00 -3.527122577103E-01 7.736556396306E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.186481453592E-02 -1.331688505185E+00 0.000000000000E+00 5.204100521266E-01 -1.353510292387E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.154138414067E-01 7.338320913692E-01 0.000000000000E+00 -3.608161644877E-01 7.677577622631E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.133213930226E-02 -1.301683775848E+00 0.000000000000E+00 5.480748876174E-01 -1.347065340792E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.937769994761E-01 7.238494458638E-01 0.000000000000E+00 -3.686950796422E-01 7.618516875503E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.738704813985E-02 -1.272141296478E+00 0.000000000000E+00 5.744140642549E-01 -1.340833888906E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.723556729769E-01 7.138312201675E-01 0.000000000000E+00 -3.763403316529E-01 7.559326884524E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.432606417404E-02 -1.243070164046E+00 0.000000000000E+00 5.994247795403E-01 -1.334728921923E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.511701269021E-01 7.037848027528E-01 0.000000000000E+00 -3.837439896413E-01 7.499962805266E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.952075737273E-02 -1.214477962984E+00 0.000000000000E+00 6.231096692443E-01 -1.328673549007E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.302395189875E-01 6.937173681026E-01 0.000000000000E+00 -3.908988510154E-01 7.440382453109E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.230091201634E-01 -1.186370868807E+00 0.000000000000E+00 6.454762055434E-01 -1.322600244230E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.095819125848E-01 6.836358760502E-01 0.000000000000E+00 -3.977984273120E-01 7.380546491533E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.548309442832E-01 -1.158753746091E+00 0.000000000000E+00 6.665361451535E-01 -1.316450119356E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.892142909134E-01 6.735470714854E-01 0.000000000000E+00 -4.044369285006E-01 7.320418579075E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.850275161413E-01 -1.131630241591E+00 0.000000000000E+00 6.863050259416E-01 -1.310172232054E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.691525726108E-01 6.634574844004E-01 0.000000000000E+00 -4.108092459750E-01 7.259965478923E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.136413471621E-01 -1.105002873080E+00 0.000000000000E+00 7.048017093801E-01 -1.303722931650E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.494116285030E-01 6.533734302539E-01 0.000000000000E+00 -4.169109344405E-01 7.199157134831E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.407159336597E-01 -1.078873114178E+00 0.000000000000E+00 7.220479652715E-01 -1.297065243123E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.300052995224E-01 6.433010106321E-01 0.000000000000E+00 -4.227381928742E-01 7.137966716809E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.662955408727E-01 -1.053241475268E+00 0.000000000000E+00 7.380680945997E-01 -1.290168288902E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.109464157006E-01 6.332461141886E-01 0.000000000000E+00 -4.282878447215E-01 7.076370639772E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.904250063817E-01 -1.028107580444E+00 0.000000000000E+00 7.528885861987E-01 -1.283006747211E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 9.224681616806E-02 6.232144178461E-01 0.000000000000E+00 -4.335573174704E-01 7.014348558137E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.131495590526E-01 -1.003470240433E+00 0.000000000000E+00 7.665378031567E-01 -1.275560345190E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.391737009082E-02 6.132113882438E-01 0.000000000000E+00 -4.385446217308E-01 6.951883339100E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.345146507137E-01 -9.793275214553E-01 0.000000000000E+00 7.790456953544E-01 -1.267813384855E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.596799847587E-02 6.032422834145E-01 0.000000000000E+00 -4.432483299323E-01 6.888961017150E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.545657988024E-01 -9.556768100372E-01 0.000000000000E+00 7.904435351694E-01 -1.259754299984E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.840769677708E-02 5.933121546806E-01 0.000000000000E+00 -4.476675547402E-01 6.825570732154E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.733484390830E-01 -9.325148738884E-01 0.000000000000E+00 8.007636740303E-01 -1.251375242167E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.124455823275E-02 5.834258487514E-01 0.000000000000E+00 -4.518019272818E-01 6.761704653202E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.909077882000E-01 -9.098379189745E-01 0.000000000000E+00 8.100393180961E-01 -1.242671694494E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.485797866225E-03 5.735880100136E-01 0.000000000000E+00 -4.556515752628E-01 6.697357890163E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.072887162456E-01 -8.876416429547E-01 0.000000000000E+00 8.183043218162E-01 -1.233642111555E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.186222291931E-02 5.638030829994E-01 0.000000000000E+00 -4.592171010460E-01 6.632528394821E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.225356297027E-01 -8.659212851914E-01 0.000000000000E+00 8.255929984712E-01 -1.224287584635E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.779397122054E-02 5.540753150228E-01 0.000000000000E+00 -4.624995597595E-01 6.567216853234E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.366923651399E-01 -8.446716735233E-01 0.000000000000E+00 8.319399470072E-01 -1.214611531079E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.330471705676E-02 5.444087589723E-01 0.000000000000E+00 -4.655004374910E-01 6.501426570861E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.498020939163E-01 -8.238872679746E-01 0.000000000000E+00 8.373798945721E-01 -1.204619406914E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.839050740376E-02 5.348072762488E-01 0.000000000000E+00 -4.682216296237E-01 6.435163351846E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.619072379486E-01 -8.035622015731E-01 0.000000000000E+00 8.419475541785E-01 -1.194318441794E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.304813990612E-02 5.252745398386E-01 0.000000000000E+00 -4.706654193606E-01 6.368435373739E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.730493963710E-01 -7.836903184514E-01 0.000000000000E+00 8.456774968766E-01 -1.183717395354E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.727513633429E-02 5.158140375112E-01 0.000000000000E+00 -4.728344564807E-01 6.301253058789E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.832692827058E-01 -7.642652093784E-01 0.000000000000E+00 8.486040377520E-01 -1.172826333976E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.010697158517E-01 5.064290751320E-01 0.000000000000E+00 -4.747317363680E-01 6.233628942879E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.926066719934E-01 -7.452802448512E-01 0.000000000000E+00 8.507611349928E-01 -1.161656426977E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.144307681554E-01 4.971227800794E-01 0.000000000000E+00 -4.763605793470E-01 6.165577543013E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.011003572023E-01 -7.267286058747E-01 0.000000000000E+00 8.521823012131E-01 -1.150219761132E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.273578265527E-01 4.878981047576E-01 0.000000000000E+00 -4.777246103595E-01 6.097115224224E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.087881141655E-01 -7.086033125582E-01 0.000000000000E+00 8.529005261801E-01 -1.138529172472E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.398510410327E-01 4.787578301960E-01 0.000000000000E+00 -4.788277390086E-01 6.028260066657E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.157066742618E-01 -6.908972506525E-01 0.000000000000E+00 8.529482100788E-01 -1.126598094227E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.519111513925E-01 4.697045697245E-01 0.000000000000E+00 -4.796741400007E-01 5.959031733489E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + +GlobalHybrid +HF 0.350000 diff --git a/test/prog/sktable/HYB-PBE0/Non-Relativistic/config b/test/prog/sktable/HYB-PBE0/Non-Relativistic/config new file mode 100644 index 00000000..bfa360b6 --- /dev/null +++ b/test/prog/sktable/HYB-PBE0/Non-Relativistic/config @@ -0,0 +1 @@ +C,N C,N \ No newline at end of file diff --git a/test/prog/sktable/HYB-PBE0/Non-Relativistic/skdef.hsd b/test/prog/sktable/HYB-PBE0/Non-Relativistic/skdef.hsd new file mode 100644 index 00000000..50decfa5 --- /dev/null +++ b/test/prog/sktable/HYB-PBE0/Non-Relativistic/skdef.hsd @@ -0,0 +1,112 @@ +SkdefVersion = 1 + +Globals { + Superposition = density + XCFunctional = PBE0 {alpha = 0.35} +} + +AtomParameters { + + C { + AtomConfig { + AtomicNumber = 6 + Mass = 12.01 + Occupations { + 1S = 1.0 1.0 + 2S = 1.0 1.0 + 2P = 2.0 0.0 + } + ValenceShells = 2s 2p + Relativistics = None + } + DftbAtom { + ShellResolved = No + DensityCompression = PowerCompression { Power = 2; Radius = 7.0 } + WaveCompressions = SingleAtomCompressions { + S = PowerCompression { Power = 2; Radius = 2.7 } + P = PowerCompression { Power = 2; Radius = 2.7 } + } + } + } + + N { + AtomConfig { + AtomicNumber = 7 + Mass = 14.007 + Occupations { + 1S = 1.0 1.0 + 2S = 1.0 1.0 + 2P = 2.0 1.0 + } + ValenceShells = 2s 2p + Relativistics = None + } + DftbAtom { + ShellResolved = No + DensityCompression = PowerCompression{ Power = 2; Radius = 11.0 } + WaveCompressions = SingleAtomCompressions { + S = PowerCompression { Power = 2; Radius = 2.2 } + P = PowerCompression { Power = 2; Radius = 2.2 } + } + CustomizedOnsites { + 2s = -0.64 + } + } + } + +} + + +OnecenterParameters { + + $StandardDeltaFilling { + DeltaFilling = 0.01 + } + + C { + $StandardDeltaFilling + Calculator = SlaterAtom { + Exponents { + S = 0.5 1.14 2.62 6.0 + P = 0.5 1.14 2.62 6.0 + } + MaxPowers { + S = 2 + P = 2 + } + } + } + + N { + $StandardDeltaFilling + Calculator = SlaterAtom { + Exponents { + S = 0.5 1.2 2.9 7.0 + P = 0.5 1.2 2.9 7.0 + } + MaxPowers { + S = 2 + P = 2 + } + } + } +} + +TwoCenterParameters { + + $EqGrid = EquidistantGrid { + GridStart = 0.6 + GridSeparation = 0.02 + Tolerance = 5e-5 + MaxDistance = -1.4 + } + + $SkTwocnt_300_150 = Sktwocnt { + IntegrationPoints = 300 150 + } + + C-C { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + C-N { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + N-N { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + +} diff --git a/test/prog/sktable/LCY-BNL/Non-Relativistic/_N-N.skf b/test/prog/sktable/LCY-BNL/Non-Relativistic/_N-N.skf new file mode 100644 index 00000000..ba91c1ff --- /dev/null +++ b/test/prog/sktable/LCY-BNL/Non-Relativistic/_N-N.skf @@ -0,0 +1,94 @@ +0.020000 69 + 0.000000000000E+00 -2.669685730009E-01 -6.400000000000E-01 -3.175220535120E-02 0.000000000000E+00 4.223164023475E-01 4.223164023475E-01 0.000000000000E+00 3.000000000000E+00 2.000000000000E+00 + 1.400700000000E+01 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.666758682400E-01 -1.708638836567E+00 0.000000000000E+00 6.185278486526E-02 -1.446505627435E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.782694356461E-01 8.458739863399E-01 0.000000000000E+00 -2.455582034209E-01 8.402432951447E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.033433355118E-01 -1.674150987635E+00 0.000000000000E+00 1.020864773209E-01 -1.426781129294E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.559218433119E-01 8.368814576771E-01 0.000000000000E+00 -2.553106509632E-01 8.341536493306E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.419356731473E-01 -1.639870548887E+00 0.000000000000E+00 1.417621523994E-01 -1.409372413017E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.334722988034E-01 8.277509158249E-01 0.000000000000E+00 -2.649928858541E-01 8.281103295339E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.824959834175E-01 -1.605837356713E+00 0.000000000000E+00 1.807427421901E-01 -1.394012077760E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.109551157926E-01 8.184923410097E-01 0.000000000000E+00 -2.745876016568E-01 8.221089027374E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.250553418387E-01 -1.572087658412E+00 0.000000000000E+00 2.189080007500E-01 -1.380451108281E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.884033586254E-01 8.091155302158E-01 0.000000000000E+00 -2.840781148786E-01 8.161445071175E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.696339099930E-01 -1.538654301556E+00 0.000000000000E+00 2.561534063155E-01 -1.368458652859E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.658488254564E-01 7.996300874124E-01 0.000000000000E+00 -2.934484101823E-01 8.102119656841E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.162419984936E-01 -1.505566922514E+00 0.000000000000E+00 2.923890689411E-01 -1.357821620615E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.433220372873E-01 7.900454150234E-01 0.000000000000E+00 -3.026831774558E-01 8.043058878577E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.648810759883E-01 -1.472852132728E+00 0.000000000000E+00 3.275386546282E-01 -1.348344137987E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.208522323734E-01 7.803707065593E-01 0.000000000000E+00 -3.117678414443E-01 7.984207596809E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.155447211047E-01 -1.440533701406E+00 0.000000000000E+00 3.615383350371E-01 -1.339846897875E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.984673654909E-01 7.706149403288E-01 0.000000000000E+00 -3.206885846062E-01 7.925510233874E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.682195151736E-01 -1.408632733435E+00 0.000000000000E+00 3.943357701188E-01 -1.332166429771E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.761941115938E-01 7.607868741575E-01 0.000000000000E+00 -3.294323638211E-01 7.866911470614E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.228858744023E-01 -1.377167841407E+00 0.000000000000E+00 4.258891294534E-01 -1.325154314535E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.540578734131E-01 7.508950410401E-01 0.000000000000E+00 -3.379869215370E-01 7.808356851157E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.951882089008E-02 -1.346155310778E+00 0.000000000000E+00 4.561661567531E-01 -1.318676363658E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.320827925863E-01 7.409477456572E-01 0.000000000000E+00 -3.463407919067E-01 7.749793303077E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.808869247480E-02 -1.315609257416E+00 0.000000000000E+00 4.851432808930E-01 -1.312611779441E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.102917639264E-01 7.309530616944E-01 0.000000000000E+00 -3.544833024286E-01 7.691169579890E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.438208073841E-03 -1.285541777011E+00 0.000000000000E+00 5.128047759591E-01 -1.306852309791E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.887064524709E-01 7.209188298988E-01 0.000000000000E+00 -3.624045715719E-01 7.632436632622E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.909902346932E-02 -1.255963086171E+00 0.000000000000E+00 5.391419721165E-01 -1.301301408975E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.673473129739E-01 7.108526568175E-01 0.000000000000E+00 -3.700955028301E-01 7.573547916878E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.493381024861E-02 -1.226881655366E+00 0.000000000000E+00 5.641525184915E-01 -1.295873413713E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.462336115297E-01 7.007619141607E-01 0.000000000000E+00 -3.775477756184E-01 7.514459641518E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.089850625397E-01 -1.198304334186E+00 0.000000000000E+00 5.878396986220E-01 -1.290492742326E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.253834490391E-01 6.906537387395E-01 0.000000000000E+00 -3.847538333958E-01 7.455130964707E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.412972877963E-01 -1.170236469577E+00 0.000000000000E+00 6.102117982706E-01 -1.285093123052E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.048137862528E-01 6.805350329274E-01 0.000000000000E+00 -3.917068693659E-01 7.395524142753E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.719166300605E-01 -1.142682017788E+00 0.000000000000E+00 6.312815244948E-01 -1.279616856154E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.845404701462E-01 6.704124656004E-01 0.000000000000E+00 -3.984008100830E-01 7.335604636800E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.008905355276E-01 -1.115643650693E+00 0.000000000000E+00 6.510654739108E-01 -1.274014112922E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.645782614012E-01 6.602924735120E-01 0.000000000000E+00 -4.048302972595E-01 7.275341182067E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.282674547811E-01 -1.089122856949E+00 0.000000000000E+00 6.695836472199E-01 -1.268242273286E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.449408627889E-01 6.501812630620E-01 0.000000000000E+00 -4.109906680529E-01 7.214705824001E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.540965761481E-01 -1.063120038294E+00 0.000000000000E+00 6.868590064349E-01 -1.262265302506E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.256409482671E-01 6.400848124209E-01 0.000000000000E+00 -4.168779340798E-01 7.153673925363E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.784275851555E-01 -1.037634601068E+00 0.000000000000E+00 7.029170709363E-01 -1.256053166422E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.066901926208E-01 6.300088739749E-01 0.000000000000E+00 -4.224887593873E-01 7.092224147925E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.013104459296E-01 -1.012665042974E+00 0.000000000000E+00 7.177855485226E-01 -1.249581284071E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.809930149309E-02 6.199589770562E-01 0.000000000000E+00 -4.278204375894E-01 7.030338412176E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.227952013792E-01 -9.882090350224E-01 0.000000000000E+00 7.314939979219E-01 -1.242830016082E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.987804166748E-02 6.099404309298E-01 0.000000000000E+00 -4.328708683574E-01 6.968001838095E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.429317899772E-01 -9.642634986547E-01 0.000000000000E+00 7.440735197032E-01 -1.235784187097E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.203527147735E-02 5.999583280051E-01 0.000000000000E+00 -4.376385334340E-01 6.905202669814E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.617698777898E-01 -9.408246780701E-01 0.000000000000E+00 7.555564730588E-01 -1.228432640503E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.457897123181E-02 5.900175472481E-01 0.000000000000E+00 -4.421224723252E-01 6.841932186681E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.793587050221E-01 -9.178882078551E-01 0.000000000000E+00 7.659762164361E-01 -1.220767823831E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.751627355932E-02 5.801227577664E-01 0.000000000000E+00 -4.463222578082E-01 6.778184603034E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.957469467554E-01 -8.954491760633E-01 0.000000000000E+00 7.753668704258E-01 -1.212785403348E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.534935824165E-04 5.702784225459E-01 0.000000000000E+00 -4.502379713773E-01 6.713956958719E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.109825877523E-01 -8.735021829338E-01 0.000000000000E+00 7.837631016337E-01 -1.204483906491E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.540384115276E-02 5.604888023167E-01 0.000000000000E+00 -4.538701787389E-01 6.649249002205E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.251128112452E-01 -8.520413954626E-01 0.000000000000E+00 7.911999264773E-01 -1.195864390912E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.125096105859E-02 5.507579595288E-01 0.000000000000E+00 -4.572199054507E-01 6.584063067943E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.381839015432E-01 -8.310605980487E-01 0.000000000000E+00 7.977125339647E-01 -1.186930138944E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.668382525699E-02 5.410897624194E-01 0.000000000000E+00 -4.602886127929E-01 6.518403949414E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.502411601433E-01 -8.105532394418E-01 0.000000000000E+00 8.033361265504E-01 -1.177686376371E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.169909274855E-02 5.314878891545E-01 0.000000000000E+00 -4.630781739444E-01 6.452278769175E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.613288348498E-01 -7.905124762080E-01 0.000000000000E+00 8.081057781548E-01 -1.168140014350E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.629409404141E-02 5.219558320312E-01 0.000000000000E+00 -4.655908505298E-01 6.385696847033E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.714900612296E-01 -7.709312129265E-01 0.000000000000E+00 8.120563083884E-01 -1.158299413337E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.046680327484E-02 5.124969017244E-01 0.000000000000E+00 -4.678292695928E-01 6.318669567345E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.807668155797E-01 -7.518021393152E-01 0.000000000000E+00 8.152221719765E-01 -1.148174167820E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.042158108661E-01 5.031142315669E-01 0.000000000000E+00 -4.697964010447E-01 6.251210246328E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.891998784790E-01 -7.331177644772E-01 0.000000000000E+00 8.176373623369E-01 -1.137774910675E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.175402967042E-01 4.938107818506E-01 0.000000000000E+00 -4.714955356274E-01 6.183334000119E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.968288079354E-01 -7.148704484460E-01 0.000000000000E+00 8.193353282397E-01 -1.127113135893E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.304400039085E-01 4.845893441386E-01 0.000000000000E+00 -4.729302634254E-01 6.115057614259E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.036919211267E-01 -6.970524312012E-01 0.000000000000E+00 8.203489024730E-01 -1.116201038467E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.429152131664E-01 4.754525455784E-01 0.000000000000E+00 -4.741044529539E-01 6.046399415138E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.098262837552E-01 -6.796558593160E-01 0.000000000000E+00 8.207102414602E-01 -1.105051370223E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.549667176609E-01 4.664028532072E-01 0.000000000000E+00 -4.750222308451E-01 5.977379143898E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + +RangeSep +LC 0.300000 diff --git a/test/prog/sktable/LCY-BNL/Non-Relativistic/_N-O.skf b/test/prog/sktable/LCY-BNL/Non-Relativistic/_N-O.skf new file mode 100644 index 00000000..69f0251e --- /dev/null +++ b/test/prog/sktable/LCY-BNL/Non-Relativistic/_N-O.skf @@ -0,0 +1,93 @@ +0.020000 69 + 0.000000000000E+00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.215352598174E-01 -1.866966874788E+00 0.000000000000E+00 -3.022307947473E-02 -1.572125314802E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.449582157941E-01 8.290853298410E-01 0.000000000000E+00 -2.184487113395E-01 8.271733432491E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.501859567977E-01 -1.825787106659E+00 0.000000000000E+00 1.919589175647E-02 -1.555477952560E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.217936792707E-01 8.195464654485E-01 0.000000000000E+00 -2.282452315733E-01 8.212051214191E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.814339497060E-01 -1.784992447262E+00 0.000000000000E+00 6.769253833728E-02 -1.541000252619E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.985927459151E-01 8.098792231122E-01 0.000000000000E+00 -2.379886940673E-01 8.152740046926E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.153006569788E-01 -1.744626637657E+00 0.000000000000E+00 1.151040267929E-01 -1.528381604116E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.753916563878E-01 8.000947238439E-01 0.000000000000E+00 -2.476580683244E-01 8.093732523818E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.517935965283E-01 -1.704728723514E+00 0.000000000000E+00 1.612909193171E-01 -1.517337870641E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.522250166016E-01 7.902038221700E-01 0.000000000000E+00 -2.572332125861E-01 8.034959222503E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.909079595510E-01 -1.665333357618E+00 0.000000000000E+00 2.061353272504E-01 -1.507610389102E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.291257982707E-01 7.802170974845E-01 0.000000000000E+00 -2.666949216222E-01 7.976349887076E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.326280775469E-01 -1.626471093482E+00 0.000000000000E+00 2.495391165802E-01 -1.498964811449E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.061253461586E-01 7.701448469537E-01 0.000000000000E+00 -2.760249636337E-01 7.917834455781E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.769287807959E-01 -1.588168668092E+00 0.000000000000E+00 2.914221793143E-01 -1.491189837721E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.832533912680E-01 7.599970798490E-01 0.000000000000E+00 -2.852061073275E-01 7.859343946209E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.237766480250E-01 -1.550449272217E+00 0.000000000000E+00 3.317207813449E-01 -1.484095880284E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.605380692726E-01 7.497835131923E-01 0.000000000000E+00 -2.942221401575E-01 7.800811209646E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.313114826130E-02 -1.513332807144E+00 0.000000000000E+00 3.703859947455E-01 -1.477513691967E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.380059435404E-01 7.395135686039E-01 0.000000000000E+00 -3.030578786647E-01 7.742171565870E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.494567704857E-02 -1.476836127320E+00 0.000000000000E+00 4.073822202650E-01 -1.471292984787E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.156820321480E-01 7.291963702501E-01 0.000000000000E+00 -3.116991717835E-01 7.683363329363E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.083150953030E-02 -1.440973268935E+00 0.000000000000E+00 4.426858039258E-01 -1.465301061002E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.935898383324E-01 7.188407437928E-01 0.000000000000E+00 -3.201328979210E-01 7.624328237330E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.425645813313E-02 -1.405755665063E+00 0.000000000000E+00 4.762837498846E-01 -1.459421473963E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.717513838714E-01 7.084552162505E-01 0.000000000000E+00 -3.283469565584E-01 7.565011789456E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.053887722556E-01 -1.371192348321E+00 0.000000000000E+00 5.081725299054E-01 -1.453552732488E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.501872449239E-01 6.980480166836E-01 0.000000000000E+00 -3.363302550654E-01 7.505363508685E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.442909491614E-01 -1.337290142146E+00 0.000000000000E+00 5.383569878760E-01 -1.447607059049E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.289165899057E-01 6.876270776261E-01 0.000000000000E+00 -3.440726913631E-01 7.445337131739E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.810277905841E-01 -1.304053841649E+00 0.000000000000E+00 5.668493359217E-01 -1.441509208816E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.079572190092E-01 6.772000371852E-01 0.000000000000E+00 -3.515651330202E-01 7.384890737483E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.156658777704E-01 -1.271486384792E+00 0.000000000000E+00 5.936682370592E-01 -1.435195353742E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.873256050153E-01 6.667742417424E-01 0.000000000000E+00 -3.587993933173E-01 7.323986820624E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.482731018694E-01 -1.239589014289E+00 0.000000000000E+00 6.188379682362E-01 -1.428612033413E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.670369350779E-01 6.563567491886E-01 0.000000000000E+00 -3.657682047672E-01 7.262592317650E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.789182417865E-01 -1.208361430449E+00 0.000000000000E+00 6.423876571281E-01 -1.421715172481E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.471051531930E-01 6.459543326319E-01 0.000000000000E+00 -3.724651905339E-01 7.200678591345E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.076705831441E-01 -1.177801935017E+00 0.000000000000E+00 6.643505861802E-01 -1.414469163232E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.275430030951E-01 6.355734845245E-01 0.000000000000E+00 -3.788848341524E-01 7.138221379648E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.345995736033E-01 -1.147907566088E+00 0.000000000000E+00 6.847635579367E-01 -1.406846011042E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.083620713510E-01 6.252204211536E-01 0.000000000000E+00 -3.850224479118E-01 7.075200714106E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.597745112605E-01 -1.118674224203E+00 0.000000000000E+00 7.036663165000E-01 -1.398824540148E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.957283044758E-02 6.149010874494E-01 0.000000000000E+00 -3.908741402278E-01 7.011600812681E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.832642639663E-01 -1.090096789826E+00 0.000000000000E+00 7.211010207942E-01 -1.390389657046E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.118468169333E-02 6.046211620652E-01 0.000000000000E+00 -3.964367822953E-01 6.947409951190E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.051370181746E-01 -1.062169232507E+00 0.000000000000E+00 7.371117660745E-01 -1.381531668944E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.320599777812E-02 5.943860626895E-01 0.000000000000E+00 -4.017079742818E-01 6.882620317211E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.254600563243E-01 -1.034884712076E+00 0.000000000000E+00 7.517441506974E-01 -1.372245654750E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.564416485351E-02 5.842009515514E-01 0.000000000000E+00 -4.066860112924E-01 6.817227849914E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.442995618537E-01 -1.008235672281E+00 0.000000000000E+00 7.650448855522E-01 -1.362530886211E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.850562401750E-02 5.740707410848E-01 0.000000000000E+00 -4.113698493077E-01 6.751232068857E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.617204508242E-01 -9.822139272874E-01 0.000000000000E+00 7.770614437525E-01 -1.352390296858E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.795912103631E-03 5.640000997212E-01 0.000000000000E+00 -4.157590712748E-01 6.684635894465E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.777862288955E-01 -9.568107414612E-01 0.000000000000E+00 7.878417482413E-01 -1.341829996395E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.448029830897E-02 5.539934577813E-01 0.000000000000E+00 -4.198538535056E-01 6.617445462576E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.925588721216E-01 -9.320169028595E-01 0.000000000000E+00 7.974338949281E-01 -1.330858828163E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.031915973399E-02 5.440550134397E-01 0.000000000000E+00 -4.236549325155E-01 6.549669935162E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.060987297988E-01 -9.078227908213E-01 0.000000000000E+00 8.058859089138E-01 -1.319487967223E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.571761152066E-02 5.341887387391E-01 0.000000000000E+00 -4.271635724191E-01 6.481321309041E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.184644474347E-01 -8.842184380476E-01 0.000000000000E+00 8.132455312969E-01 -1.307730556566E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.067334254522E-02 5.243983856329E-01 0.000000000000E+00 -4.303815329783E-01 6.412414224172E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.297129078368E-01 -8.611935875327E-01 0.000000000000E+00 8.195600340443E-01 -1.295601378942E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.518475488468E-02 5.146874920373E-01 0.000000000000E+00 -4.333110383852E-01 6.342965772913E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.398991883345E-01 -8.387377446916E-01 0.000000000000E+00 8.248760604409E-01 -1.283116561777E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.925092849751E-02 5.050593878752E-01 0.000000000000E+00 -4.359547468476E-01 6.272995311387E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.490765322370E-01 -8.168402250092E-01 0.000000000000E+00 8.292394887172E-01 -1.270293312714E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.028715869270E-01 4.955172010972E-01 0.000000000000E+00 -4.383157210294E-01 6.202524273974E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.572963327625E-01 -7.954901975194E-01 0.000000000000E+00 8.326953165837E-01 -1.257149683375E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.160470640361E-01 4.860638636657E-01 0.000000000000E+00 -4.403973993908E-01 6.131575991744E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.646081278342E-01 -7.746767244029E-01 0.000000000000E+00 8.352875645468E-01 -1.243704359040E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.287782717770E-01 4.767021174910E-01 0.000000000000E+00 -4.422035684601E-01 6.060175515529E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.710596043046E-01 -7.543887969775E-01 0.000000000000E+00 8.370591960527E-01 -1.229976472065E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.410666689904E-01 4.674345203076E-01 0.000000000000E+00 -4.437383360605E-01 5.988349444200E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.766966103301E-01 -7.346153683349E-01 0.000000000000E+00 8.380520526681E-01 -1.215985436983E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.529142312290E-01 4.582634514827E-01 0.000000000000E+00 -4.450061055078E-01 5.916125758601E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.815631747666E-01 -7.153453828672E-01 0.000000000000E+00 8.383068026729E-01 -1.201750805373E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.643234215926E-01 4.491911177486E-01 0.000000000000E+00 -4.460115507871E-01 5.843533661481E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.857015325851E-01 -6.965678029066E-01 0.000000000000E+00 8.378629015892E-01 -1.187292138702E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.752971625583E-01 4.402195588515E-01 0.000000000000E+00 -4.467595927115E-01 5.770603423718E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + +RangeSep +LC 0.300000 diff --git a/test/prog/sktable/LCY-BNL/Non-Relativistic/_O-N.skf b/test/prog/sktable/LCY-BNL/Non-Relativistic/_O-N.skf new file mode 100644 index 00000000..df8375ac --- /dev/null +++ b/test/prog/sktable/LCY-BNL/Non-Relativistic/_O-N.skf @@ -0,0 +1,93 @@ +0.020000 69 + 0.000000000000E+00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.215352598174E-01 -1.866966874788E+00 0.000000000000E+00 3.965007783471E-01 -1.572125314802E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.449582157941E-01 8.290853298410E-01 0.000000000000E+00 -3.110321581609E-01 8.271733432491E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.501859567977E-01 -1.825787106659E+00 0.000000000000E+00 4.412116802964E-01 -1.555477952560E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.217936792707E-01 8.195464654485E-01 0.000000000000E+00 -3.216124089428E-01 8.212051214191E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.814339497060E-01 -1.784992447262E+00 0.000000000000E+00 4.845945382803E-01 -1.541000252619E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.985927459151E-01 8.098792231122E-01 0.000000000000E+00 -3.320075378474E-01 8.152740046926E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.153006569788E-01 -1.744626637657E+00 0.000000000000E+00 5.265386572656E-01 -1.528381604116E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.753916563878E-01 8.000947238439E-01 0.000000000000E+00 -3.422009210648E-01 8.093732523818E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.517935965283E-01 -1.704728723514E+00 0.000000000000E+00 5.669526100981E-01 -1.517337870641E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.522250166016E-01 7.902038221700E-01 0.000000000000E+00 -3.521769069121E-01 8.034959222503E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.909079595510E-01 -1.665333357618E+00 0.000000000000E+00 6.057625828199E-01 -1.507610389102E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.291257982707E-01 7.802170974845E-01 0.000000000000E+00 -3.619208391842E-01 7.976349887076E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.326280775469E-01 -1.626471093482E+00 0.000000000000E+00 6.429107834059E-01 -1.498964811449E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.061253461586E-01 7.701448469537E-01 0.000000000000E+00 -3.714190719035E-01 7.917834455781E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.769287807959E-01 -1.588168668092E+00 0.000000000000E+00 6.783539231702E-01 -1.491189837721E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.832533912680E-01 7.599970798490E-01 0.000000000000E+00 -3.806589764100E-01 7.859343946209E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.237766480250E-01 -1.550449272217E+00 0.000000000000E+00 7.120617775614E-01 -1.484095880284E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.605380692726E-01 7.497835131923E-01 0.000000000000E+00 -3.896289416617E-01 7.800811209646E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.313114826130E-02 -1.513332807144E+00 0.000000000000E+00 7.440158310463E-01 -1.477513691967E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.380059435404E-01 7.395135686039E-01 0.000000000000E+00 -3.983183685528E-01 7.742171565870E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.494567704857E-02 -1.476836127320E+00 0.000000000000E+00 7.742080091796E-01 -1.471292984787E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.156820321480E-01 7.291963702501E-01 0.000000000000E+00 -4.067176589873E-01 7.683363329363E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.083150953030E-02 -1.440973268935E+00 0.000000000000E+00 8.026394996178E-01 -1.465301061002E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.935898383324E-01 7.188407437928E-01 0.000000000000E+00 -4.148182003891E-01 7.624328237330E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.425645813313E-02 -1.405755665063E+00 0.000000000000E+00 8.293196625454E-01 -1.459421473963E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.717513838714E-01 7.084552162505E-01 0.000000000000E+00 -4.226123462706E-01 7.565011789456E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.053887722556E-01 -1.371192348321E+00 0.000000000000E+00 8.542650295844E-01 -1.453552732488E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.501872449239E-01 6.980480166836E-01 0.000000000000E+00 -4.300933934270E-01 7.505363508685E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.442909491614E-01 -1.337290142146E+00 0.000000000000E+00 8.774983887242E-01 -1.447607059049E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.289165899057E-01 6.876270776261E-01 0.000000000000E+00 -4.372555562754E-01 7.445337131739E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.810277905841E-01 -1.304053841649E+00 0.000000000000E+00 8.990479512735E-01 -1.441509208816E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.079572190092E-01 6.772000371852E-01 0.000000000000E+00 -4.440939388074E-01 7.384890737483E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.156658777704E-01 -1.271486384792E+00 0.000000000000E+00 9.189465955349E-01 -1.435195353742E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.873256050153E-01 6.667742417424E-01 0.000000000000E+00 -4.506045045836E-01 7.323986820624E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.482731018694E-01 -1.239589014289E+00 0.000000000000E+00 9.372311810584E-01 -1.428612033413E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.670369350779E-01 6.563567491886E-01 0.000000000000E+00 -4.567840451527E-01 7.262592317650E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.789182417865E-01 -1.208361430449E+00 0.000000000000E+00 9.539419270431E-01 -1.421715172481E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.471051531930E-01 6.459543326319E-01 0.000000000000E+00 -4.626301472451E-01 7.200678591345E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.076705831441E-01 -1.177801935017E+00 0.000000000000E+00 9.691218486921E-01 -1.414469163232E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.275430030951E-01 6.355734845245E-01 0.000000000000E+00 -4.681411590516E-01 7.138221379648E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.345995736033E-01 -1.147907566088E+00 0.000000000000E+00 9.828162459277E-01 -1.406846011042E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.083620713510E-01 6.252204211536E-01 0.000000000000E+00 -4.733161558675E-01 7.075200714106E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.597745112605E-01 -1.118674224203E+00 0.000000000000E+00 9.950722396719E-01 -1.398824540148E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.957283044758E-02 6.149010874494E-01 0.000000000000E+00 -4.781549053507E-01 7.011600812681E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.832642639663E-01 -1.090096789826E+00 0.000000000000E+00 1.005938351704E+00 -1.390389657046E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.118468169333E-02 6.046211620652E-01 0.000000000000E+00 -4.826578326161E-01 6.947409951190E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.051370181746E-01 -1.062169232507E+00 0.000000000000E+00 1.015464124823E+00 -1.381531668944E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.320599777812E-02 5.943860626895E-01 0.000000000000E+00 -4.868259853628E-01 6.882620317211E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.254600563243E-01 -1.034884712076E+00 0.000000000000E+00 1.023699780602E+00 -1.372245654750E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.564416485351E-02 5.842009515514E-01 0.000000000000E+00 -4.906609992050E-01 6.817227849914E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.442995618537E-01 -1.008235672281E+00 0.000000000000E+00 1.030695912385E+00 -1.362530886211E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.850562401750E-02 5.740707410848E-01 0.000000000000E+00 -4.941650633588E-01 6.751232068857E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.617204508242E-01 -9.822139272874E-01 0.000000000000E+00 1.036503211419E+00 -1.352390296858E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.795912103631E-03 5.640000997212E-01 0.000000000000E+00 -4.973408868160E-01 6.684635894465E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.777862288955E-01 -9.568107414612E-01 0.000000000000E+00 1.041172224096E+00 -1.341829996395E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.448029830897E-02 5.539934577813E-01 0.000000000000E+00 -5.001916651169E-01 6.617445462576E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.925588721216E-01 -9.320169028595E-01 0.000000000000E+00 1.044753138305E+00 -1.330858828163E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.031915973399E-02 5.440550134397E-01 0.000000000000E+00 -5.027210478204E-01 6.549669935162E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.060987297988E-01 -9.078227908213E-01 0.000000000000E+00 1.047295596889E+00 -1.319487967223E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.571761152066E-02 5.341887387391E-01 0.000000000000E+00 -5.049331067502E-01 6.481321309041E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.184644474347E-01 -8.842184380476E-01 0.000000000000E+00 1.048848536158E+00 -1.307730556566E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.067334254522E-02 5.243983856329E-01 0.000000000000E+00 -5.068323050886E-01 6.412414224172E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.297129078368E-01 -8.611935875327E-01 0.000000000000E+00 1.049460047434E+00 -1.295601378942E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.518475488468E-02 5.146874920373E-01 0.000000000000E+00 -5.084234673697E-01 6.342965772913E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.398991883345E-01 -8.387377446916E-01 0.000000000000E+00 1.049177259629E+00 -1.283116561777E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.925092849751E-02 5.050593878752E-01 0.000000000000E+00 -5.097117504193E-01 6.272995311387E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.490765322370E-01 -8.168402250092E-01 0.000000000000E+00 1.048046240893E+00 -1.270293312714E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.028715869270E-01 4.955172010972E-01 0.000000000000E+00 -5.107026152743E-01 6.202524273974E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.572963327625E-01 -7.954901975194E-01 0.000000000000E+00 1.046111917498E+00 -1.257149683375E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.160470640361E-01 4.860638636657E-01 0.000000000000E+00 -5.114018001079E-01 6.131575991744E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.646081278342E-01 -7.746767244029E-01 0.000000000000E+00 1.043418008207E+00 -1.243704359040E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.287782717770E-01 4.767021174910E-01 0.000000000000E+00 -5.118152941766E-01 6.060175515529E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.710596043046E-01 -7.543887969775E-01 0.000000000000E+00 1.040006972495E+00 -1.229976472065E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.410666689904E-01 4.674345203076E-01 0.000000000000E+00 -5.119493128018E-01 5.988349444200E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.766966103301E-01 -7.346153683349E-01 0.000000000000E+00 1.035919971129E+00 -1.215985436983E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.529142312290E-01 4.582634514827E-01 0.000000000000E+00 -5.118102733872E-01 5.916125758601E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.815631747666E-01 -7.153453828672E-01 0.000000000000E+00 1.031196837741E+00 -1.201750805373E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.643234215926E-01 4.491911177486E-01 0.000000000000E+00 -5.114047724721E-01 5.843533661481E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.857015325851E-01 -6.965678029066E-01 0.000000000000E+00 1.025876060116E+00 -1.187292138702E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.752971625583E-01 4.402195588515E-01 0.000000000000E+00 -5.107395638139E-01 5.770603423718E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + +RangeSep +LC 0.300000 diff --git a/test/prog/sktable/LCY-BNL/Non-Relativistic/_O-O.skf b/test/prog/sktable/LCY-BNL/Non-Relativistic/_O-O.skf new file mode 100644 index 00000000..379721f1 --- /dev/null +++ b/test/prog/sktable/LCY-BNL/Non-Relativistic/_O-O.skf @@ -0,0 +1,94 @@ +0.020000 69 + 0.000000000000E+00 -3.733147131786E-01 -9.957804904732E-01 0.000000000000E+00 0.000000000000E+00 4.911827024249E-01 4.911827024249E-01 0.000000000000E+00 4.000000000000E+00 2.000000000000E+00 + 1.601000000000E+01 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.457199541170E-01 -2.041113605484E+00 0.000000000000E+00 3.339236849553E-01 -1.748277478042E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.123916830265E-01 8.174937848190E-01 0.000000000000E+00 -2.880974646858E-01 8.278208526549E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.657083375504E-01 -1.991729945420E+00 0.000000000000E+00 3.878914952347E-01 -1.732947815123E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.881955276903E-01 8.072614547051E-01 0.000000000000E+00 -2.987233351638E-01 8.215818618326E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.891719225072E-01 -1.942986763106E+00 0.000000000000E+00 4.399988331716E-01 -1.719593938626E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.640437801528E-01 7.969131070719E-01 0.000000000000E+00 -3.091681700694E-01 8.153674906237E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.160955255887E-01 -1.894930696405E+00 0.000000000000E+00 4.901210389529E-01 -1.707864716827E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.399746077054E-01 7.864612183254E-01 0.000000000000E+00 -3.194120023835E-01 8.091692655054E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.464482761875E-01 -1.847602266438E+00 0.000000000000E+00 5.381596582615E-01 -1.697444819118E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.160240597833E-01 7.759178884253E-01 0.000000000000E+00 -3.294361705679E-01 8.029787682194E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.801857808164E-01 -1.801036338077E+00 0.000000000000E+00 5.840398342371E-01 -1.688052655147E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.922260949438E-01 7.652948345197E-01 0.000000000000E+00 -3.392233364640E-01 7.967877533037E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.172520937412E-01 -1.755262557190E+00 0.000000000000E+00 6.277078427058E-01 -1.679438212315E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.686126151985E-01 7.546033864941E-01 0.000000000000E+00 -3.487574919863E-01 7.905882466932E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.758149796077E-02 -1.710305763330E+00 0.000000000000E+00 6.691287807028E-01 -1.671380848547E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.452135066608E-01 7.438544842581E-01 0.000000000000E+00 -3.580239559831E-01 7.843726271640E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.100103074644E-03 -1.666186377566E+00 0.000000000000E+00 7.082844146548E-01 -1.663687086039E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.220566855507E-01 7.330586766030E-01 0.000000000000E+00 -3.670093625279E-01 7.781336923244E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.227273067705E-02 -1.622920766381E+00 0.000000000000E+00 7.451711913114E-01 -1.656188442381E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.991681486837E-01 7.222261214734E-01 0.000000000000E+00 -3.757016417992E-01 7.718647107709E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.026231300272E-01 -1.580521583206E+00 0.000000000000E+00 7.797984112127E-01 -1.648739327373E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.765720276473E-01 7.113665875080E-01 0.000000000000E+00 -3.840899946071E-01 7.655594619283E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.500415931364E-01 -1.538998089458E+00 0.000000000000E+00 8.121865610791E-01 -1.641215026493E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.542906459404E-01 7.004894567146E-01 0.000000000000E+00 -3.921648615309E-01 7.592122649982E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.946220043894E-01 -1.498356456716E+00 0.000000000000E+00 8.423657982588E-01 -1.633509785461E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.323445784229E-01 6.896037281511E-01 0.000000000000E+00 -3.999178875425E-01 7.528179983331E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.364607627482E-01 -1.458600051208E+00 0.000000000000E+00 8.703745777410E-01 -1.625535004426E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.107527124838E-01 6.787180224975E-01 0.000000000000E+00 -4.073418829089E-01 7.463721104558E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.756560080809E-01 -1.419729701293E+00 0.000000000000E+00 8.962584106456E-01 -1.617217545582E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.895323104003E-01 6.678405874081E-01 0.000000000000E+00 -4.144307810865E-01 7.398706238380E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.123069321897E-01 -1.381743948246E+00 0.000000000000E+00 9.200687426508E-01 -1.608498154426E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.686990724147E-01 6.569793035454E-01 0.000000000000E+00 -4.211795942506E-01 7.333101324603E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.465131640383E-01 -1.344639280553E+00 0.000000000000E+00 9.418619413379E-01 -1.599329992450E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.482672001121E-01 6.461416912021E-01 0.000000000000E+00 -4.275843670341E-01 7.266877940758E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.783742213717E-01 -1.308410351962E+00 0.000000000000E+00 9.616983825683E-01 -1.589677277690E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.282494597291E-01 6.353349174253E-01 0.000000000000E+00 -4.336421289867E-01 7.200013180158E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.079890231272E-01 -1.273050183667E+00 0.000000000000E+00 9.796416273703E-01 -1.579514028847E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.086572450704E-01 6.245658035670E-01 0.000000000000E+00 -4.393508462102E-01 7.132489492885E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.354554585939E-01 -1.238550351195E+00 0.000000000000E+00 9.957576821224E-01 -1.568822908442E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.950063975473E-02 6.138408331861E-01 0.000000000000E+00 -4.447093725701E-01 7.064294496434E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.608700102082E-01 -1.204901156673E+00 0.000000000000E+00 1.010114335892E+00 -1.557594160430E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.078847854802E-02 6.031661602394E-01 0.000000000000E+00 -4.497174008349E-01 6.995420762026E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.843274272669E-01 -1.172091787278E+00 0.000000000000E+00 1.022780569575E+00 -1.545824637748E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.252840758007E-02 5.925476175003E-01 0.000000000000E+00 -4.543754140520E-01 6.925865581877E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.059204478656E-01 -1.140110460672E+00 0.000000000000E+00 1.033826031973E+00 -1.533516915273E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.472694327288E-02 5.819907251525E-01 0.000000000000E+00 -4.586846374233E-01 6.855630722135E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.257395661629E-01 -1.108944558269E+00 0.000000000000E+00 1.043320578226E+00 -1.520678483642E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.738952983942E-02 5.715006995089E-01 0.000000000000E+00 -4.626469909111E-01 6.784722165586E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.438728417664E-01 -1.078580747128E+00 0.000000000000E+00 1.051333866141E+00 -1.507321019368E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.205952385017E-04 5.610824618130E-01 0.000000000000E+00 -4.662650427677E-01 6.713149847712E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.604057478290E-01 -1.049005091261E+00 0.000000000000E+00 1.057935005982E+00 -1.493459726587E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.587639450372E-02 5.507406470819E-01 0.000000000000E+00 -4.695419641505E-01 6.640927389210E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.754210541586E-01 -1.020203153097E+00 0.000000000000E+00 1.063192259350E+00 -1.479112745713E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.179888267338E-02 5.404796129575E-01 0.000000000000E+00 -4.724814849603E-01 6.568071827658E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.889987416742E-01 -9.921600857902E-01 0.000000000000E+00 1.067172782824E+00 -1.464300624302E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.724517099769E-02 5.303034485339E-01 0.000000000000E+00 -4.750878510100E-01 6.494603350599E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.012159445825E-01 -9.648607170398E-01 0.000000000000E+00 1.069942412123E+00 -1.449045845406E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.221437055346E-02 5.202159831324E-01 0.000000000000E+00 -4.773657826128E-01 6.420545031985E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.121469167926E-01 -9.382896250440E-01 0.000000000000E+00 1.071565482766E+00 -1.433372408862E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.670635447099E-02 5.102207950027E-01 0.000000000000E+00 -4.793204346573E-01 6.345922573615E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.218630193249E-01 -9.124312071683E-01 0.000000000000E+00 1.072104683390E+00 -1.417305461036E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.072171243540E-02 5.003212199255E-01 0.000000000000E+00 -4.809573582166E-01 6.270764052885E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.304327258794E-01 -8.872697418664E-01 0.000000000000E+00 1.071620938126E+00 -1.400870968829E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.042617069760E-01 4.905203597012E-01 0.000000000000E+00 -4.822824637273E-01 6.195099677976E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.379216437462E-01 -8.627894443940E-01 0.000000000000E+00 1.070173314784E+00 -1.384095433870E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.173282315247E-01 4.808210905076E-01 0.000000000000E+00 -4.833019857562E-01 6.118961551337E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.443925479331E-01 -8.389745167607E-01 0.000000000000E+00 1.067818955761E+00 -1.367005643197E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.299237702164E-01 4.712260711134E-01 0.000000000000E+00 -4.840224493618E-01 6.042383442154E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.499054262763E-01 -8.158091923990E-01 0.000000000000E+00 1.064613028984E+00 -1.349628452879E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.420513593956E-01 4.617377509365E-01 0.000000000000E+00 -4.844506380487E-01 5.965400568326E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.545175337991E-01 -7.932777759562E-01 0.000000000000E+00 1.060608696367E+00 -1.331990601344E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.537145507918E-01 4.523583779376E-01 0.000000000000E+00 -4.845935632998E-01 5.888049388318E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.582834547137E-01 -7.713646786038E-01 0.000000000000E+00 1.055857097565E+00 -1.314118549443E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.649173763163E-01 4.430900063424E-01 0.000000000000E+00 -4.844584356684E-01 5.810367403124E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.612551706605E-01 -7.500544492339E-01 0.000000000000E+00 1.050407346999E+00 -1.296038344470E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.756643144345E-01 4.339345041849E-01 0.000000000000E+00 -4.840526374014E-01 5.732392968489E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.634821339563E-01 -7.293318018763E-01 0.000000000000E+00 1.044306542353E+00 -1.277775505650E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.859602580622E-01 4.248935606690E-01 0.000000000000E+00 -4.833836965613E-01 5.654165117418E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.650113447700E-01 -7.091816396604E-01 0.000000000000E+00 1.037599782923E+00 -1.259354928775E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.958104839335E-01 4.159686933447E-01 0.000000000000E+00 -4.824592626112E-01 5.575723392932E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + +RangeSep +LC 0.300000 diff --git a/test/prog/sktable/LCY-BNL/Non-Relativistic/config b/test/prog/sktable/LCY-BNL/Non-Relativistic/config new file mode 100644 index 00000000..fe945713 --- /dev/null +++ b/test/prog/sktable/LCY-BNL/Non-Relativistic/config @@ -0,0 +1 @@ +N,O N,O diff --git a/test/prog/sktable/LCY-BNL/Non-Relativistic/skdef.hsd b/test/prog/sktable/LCY-BNL/Non-Relativistic/skdef.hsd new file mode 100644 index 00000000..7a1c533f --- /dev/null +++ b/test/prog/sktable/LCY-BNL/Non-Relativistic/skdef.hsd @@ -0,0 +1,112 @@ +SkdefVersion = 1 + +Globals { + Superposition = density + XCFunctional = lcy-bnl {omega = 0.3} +} + +AtomParameters { + + N { + AtomConfig { + AtomicNumber = 7 + Mass = 14.007 + Occupations { + 1S = 1.0 1.0 + 2S = 1.0 1.0 + 2P = 2.0 1.0 + } + ValenceShells = 2s 2p + Relativistics = None + } + DftbAtom { + ShellResolved = No + DensityCompression = PowerCompression{ Power = 2; Radius = 11.0 } + WaveCompressions = SingleAtomCompressions { + S = PowerCompression { Power = 2; Radius = 2.2 } + P = PowerCompression { Power = 2; Radius = 2.2 } + } + CustomizedOnsites { + 2s = -0.64 + } + } + } + + O { + AtomConfig { + AtomicNumber = 8 + Mass = 16.01 + Occupations { + 1S = 1.0 1.0 + 2S = 1.0 1.0 + 2P = 2.0 2.0 + } + ValenceShells = 2s 2p + Relativistics = None + } + DftbAtom { + ShellResolved = No + DensityCompression = PowerCompression{ Power = 2; Radius = 9.0 } + WaveCompressions = SingleAtomCompressions { + S = PowerCompression { Power = 2; Radius = 2.3 } + P = PowerCompression { Power = 2; Radius = 2.3 } + } + } + } + +} + + +OnecenterParameters { + + $StandardDeltaFilling { + DeltaFilling = 0.01 + } + + N { + $StandardDeltaFilling + Calculator = SlaterAtom { + Exponents { + S = 0.5 1.2 2.9 7.0 + P = 0.5 1.2 2.9 7.0 + } + MaxPowers { + S = 3 + P = 3 + } + } + } + + O { + $StandardDeltaFilling + Calculator = SlaterAtom { + Exponents { + S = 0.5 1.26 3.17 8.0 + P = 0.5 1.26 3.17 8.0 + } + MaxPowers { + S = 3 + P = 3 + } + } + } +} + +TwoCenterParameters { + + $EqGrid = EquidistantGrid { + GridStart = 0.6 + GridSeparation = 0.02 + Tolerance = 5e-5 + MaxDistance = -1.4 + } + + $SkTwocnt_300_150 = Sktwocnt { + IntegrationPoints = 300 150 + } + + N-N { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + N-O { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + O-O { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + +} diff --git a/test/prog/sktable/LCY-PBE96/Non-Relativistic/_N-N.skf b/test/prog/sktable/LCY-PBE96/Non-Relativistic/_N-N.skf new file mode 100644 index 00000000..0b7fab32 --- /dev/null +++ b/test/prog/sktable/LCY-PBE96/Non-Relativistic/_N-N.skf @@ -0,0 +1,94 @@ +0.020000 69 + 0.000000000000E+00 -2.690322599836E-01 -6.400000000000E-01 -3.150532541543E-02 0.000000000000E+00 4.247672421193E-01 4.247672421193E-01 0.000000000000E+00 3.000000000000E+00 2.000000000000E+00 + 1.400700000000E+01 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.691777028583E-01 -1.701845431066E+00 0.000000000000E+00 7.010295364800E-02 -1.454459379036E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.775567894896E-01 8.456242282502E-01 0.000000000000E+00 -2.481197665526E-01 8.396808635942E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.062364773804E-01 -1.667497200740E+00 0.000000000000E+00 1.102416620741E-01 -1.434774184318E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.551651620790E-01 8.366160596950E-01 0.000000000000E+00 -2.579059545319E-01 8.335670823373E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.452025045201E-01 -1.633362074956E+00 0.000000000000E+00 1.498085180013E-01 -1.417393080785E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.326708293413E-01 8.274694671877E-01 0.000000000000E+00 -2.676179976307E-01 8.274988841946E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.861173466285E-01 -1.599478755289E+00 0.000000000000E+00 1.886686888644E-01 -1.402048265442E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.101082632606E-01 8.181944478335E-01 0.000000000000E+00 -2.772386624003E-01 8.214718468254E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.290108481325E-01 -1.565882395370E+00 0.000000000000E+00 2.267040280102E-01 -1.388490563428E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.875107012549E-01 8.088008183868E-01 0.000000000000E+00 -2.867513399376E-01 8.154811256056E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.739022369996E-01 -1.532604802016E+00 0.000000000000E+00 2.638119550036E-01 -1.376489162595E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.649101276208E-01 7.992982054632E-01 0.000000000000E+00 -2.961400894682E-01 8.095215657385E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.208011674610E-01 -1.499674633647E+00 0.000000000000E+00 2.999043501212E-01 -1.365831171693E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.423372606803E-01 7.896960369476E-01 0.000000000000E+00 -3.053896741141E-01 8.035878024148E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.697087022508E-01 -1.467117594454E+00 0.000000000000E+00 3.349064733761E-01 -1.356321042540E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.198215451452E-01 7.800035345197E-01 0.000000000000E+00 -3.144855895349E-01 7.976743497511E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.206182341354E-01 -1.434956622937E+00 0.000000000000E+00 3.687559159184E-01 -1.347779889930E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.973911492398E-01 7.702297072225E-01 0.000000000000E+00 -3.234140860897E-01 7.917756792468E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.735163476161E-01 -1.403212073611E+00 0.000000000000E+00 4.014015894633E-01 -1.340044737364E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.750729661563E-01 7.603833460025E-01 0.000000000000E+00 -3.321621851208E-01 7.858862885037E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.283836223165E-01 -1.371901890828E+00 0.000000000000E+00 4.328027576211E-01 -1.332967711785E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.528926194392E-01 7.504730191559E-01 0.000000000000E+00 -3.407176899191E-01 7.800007609393E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.519537968572E-02 -1.341041773908E+00 0.000000000000E+00 4.629281116790E-01 -1.326415206325E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.308744719224E-01 7.405070686159E-01 0.000000000000E+00 -3.490691918938E-01 7.741138172097E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.392237433774E-02 -1.310645332994E+00 0.000000000000E+00 4.917548925619E-01 -1.320267026654E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.090416378640E-01 7.304936070224E-01 0.000000000000E+00 -3.572060724274E-01 7.682203590296E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.531430788701E-03 -1.280724235413E+00 0.000000000000E+00 5.192680603116E-01 -1.314415533793E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.874159979486E-01 7.204405155165E-01 0.000000000000E+00 -3.651185008662E-01 7.623155060523E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.301397416585E-02 -1.251288342630E+00 0.000000000000E+00 5.454595123596E-01 -1.308764794124E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.660182168437E-01 7.103554422061E-01 0.000000000000E+00 -3.727974290603E-01 7.563946264382E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.875318338768E-02 -1.222345838303E+00 0.000000000000E+00 5.703273518874E-01 -1.303229745647E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.448677630205E-01 7.002458012528E-01 0.000000000000E+00 -3.802345828386E-01 7.504533617055E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.027278852518E-01 -1.193903348187E+00 0.000000000000E+00 5.938752074506E-01 -1.297735388168E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.239829305671E-01 6.901187725295E-01 0.000000000000E+00 -3.874224507726E-01 7.444876464247E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.349816921024E-01 -1.165966052829E+00 0.000000000000E+00 6.161116045863E-01 -1.292216003728E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.033808627385E-01 6.799813018062E-01 0.000000000000E+00 -3.943542705583E-01 7.384937232803E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.655597686578E-01 -1.138537793972E+00 0.000000000000E+00 6.370493892946E-01 -1.286614412253E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.830775770098E-01 6.698401014184E-01 0.000000000000E+00 -4.010240133189E-01 7.324681539878E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.945085062886E-01 -1.111621175462E+00 0.000000000000E+00 6.567052021673E-01 -1.280881265869E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.630879914096E-01 6.597016513783E-01 0.000000000000E+00 -4.074263661065E-01 7.264078265220E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.218752379320E-01 -1.085217659197E+00 0.000000000000E+00 6.750990007524E-01 -1.274974383854E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.434259519337E-01 6.495722008908E-01 0.000000000000E+00 -4.135567128610E-01 7.203099590739E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.477079877436E-01 -1.059327656423E+00 0.000000000000E+00 6.922536267299E-01 -1.268858128785E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.241042608488E-01 6.394577702381E-01 0.000000000000E+00 -4.194111140607E-01 7.141721011265E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.720552495401E-01 -1.033950614493E+00 0.000000000000E+00 7.081944137925E-01 -1.262502823246E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.051347057139E-01 6.293641529968E-01 0.000000000000E+00 -4.249862852828E-01 7.079921320032E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.949657885711E-01 -1.009085099076E+00 0.000000000000E+00 7.229488318712E-01 -1.255884205634E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.652808896117E-02 6.192969185593E-01 0.000000000000E+00 -4.302795748706E-01 7.017682572162E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.164884620400E-01 -9.847288717917E-01 0.000000000000E+00 7.365461634667E-01 -1.248982923051E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.829425788969E-02 6.092614149246E-01 0.000000000000E+00 -4.352889408891E-01 6.954990029119E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.366720548574E-01 -9.608789632706E-01 0.000000000000E+00 7.490172082685E-01 -1.241784059066E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.044213494109E-02 5.992627717346E-01 0.000000000000E+00 -4.400129275348E-01 6.891832086855E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.555651282010E-01 -9.375317416994E-01 0.000000000000E+00 7.603940128286E-01 -1.234276694116E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.297974813579E-02 5.893059035260E-01 0.000000000000E+00 -4.444506411494E-01 6.828200190103E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.732158794283E-01 -9.146829769731E-01 0.000000000000E+00 7.707096227025E-01 -1.226453496510E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.591426156180E-02 5.793955131756E-01 0.000000000000E+00 -4.486017259730E-01 6.764088735039E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.896720126600E-01 -8.923279006305E-01 0.000000000000E+00 7.799978550729E-01 -1.218310342159E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.479941818111E-04 5.695360955135E-01 0.000000000000E+00 -4.524663397614E-01 6.699494962342E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.049806198898E-01 -8.704612617774E-01 0.000000000000E+00 7.882930903860E-01 -1.209845961476E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.700149167419E-02 5.597319410845E-01 0.000000000000E+00 -4.560451293770E-01 6.634418842445E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.191880727855E-01 -8.490773792204E-01 0.000000000000E+00 7.956300819121E-01 -1.201061612034E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.284147657267E-02 5.499871400370E-01 0.000000000000E+00 -4.593392064535E-01 6.568862954602E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.323399254421E-01 -8.281701900314E-01 0.000000000000E+00 8.020437823950E-01 -1.191960775770E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.826393779215E-02 5.403055861202E-01 0.000000000000E+00 -4.623501232229E-01 6.502832361226E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.444808283008E-01 -8.077332947545E-01 0.000000000000E+00 8.075691870916E-01 -1.182548879632E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.326557802469E-02 5.306909807727E-01 0.000000000000E+00 -4.650798485846E-01 6.436334478789E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.556544532935E-01 -7.877599994532E-01 0.000000000000E+00 8.122411925464E-01 -1.172833038591E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.784378465202E-02 5.211468372874E-01 0.000000000000E+00 -4.675307444844E-01 6.369378946421E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.659034300690E-01 -7.682433547823E-01 0.000000000000E+00 8.160944704215E-01 -1.162821819987E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.199660109682E-02 5.116764850360E-01 0.000000000000E+00 -4.697055426677E-01 6.301977493238E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.752692929533E-01 -7.491761922535E-01 0.000000000000E+00 8.191633556550E-01 -1.152525028148E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.057226986519E-01 5.022830737417E-01 0.000000000000E+00 -4.716073218572E-01 6.234143805273E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.837924381134E-01 -7.305511578525E-01 0.000000000000E+00 8.214817481494E-01 -1.141953508199E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.190213488206E-01 4.929695777853E-01 0.000000000000E+00 -4.732394854039E-01 6.165893392804E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.915120902535E-01 -7.123607431529E-01 0.000000000000E+00 8.230830271383E-01 -1.131118967950E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.318923961962E-01 4.837388005359E-01 0.000000000000E+00 -4.746057394486E-01 6.097243458759E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.984662780819E-01 -6.945973140690E-01 0.000000000000E+00 8.239999773372E-01 -1.120033816753E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.443362319035E-01 4.745933786928E-01 0.000000000000E+00 -4.757100716296E-01 6.028212768782E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.046918177414E-01 -6.772531373759E-01 0.000000000000E+00 8.242647259674E-01 -1.108711020192E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.563537676196E-01 4.655357866318E-01 0.000000000000E+00 -4.765567303625E-01 5.958821523476E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + +RangeSep +LC 0.300000 diff --git a/test/prog/sktable/LCY-PBE96/Non-Relativistic/_N-O.skf b/test/prog/sktable/LCY-PBE96/Non-Relativistic/_N-O.skf new file mode 100644 index 00000000..09b088ed --- /dev/null +++ b/test/prog/sktable/LCY-PBE96/Non-Relativistic/_N-O.skf @@ -0,0 +1,93 @@ +0.020000 69 + 0.000000000000E+00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.246970334695E-01 -1.860683939120E+00 0.000000000000E+00 -2.170036783105E-02 -1.581468022581E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.441266922146E-01 8.287733694112E-01 0.000000000000E+00 -2.209648781438E-01 8.264960346370E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.537051945102E-01 -1.819649329541E+00 0.000000000000E+00 2.762286677268E-02 -1.564824301515E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.209141739085E-01 8.192169725578E-01 0.000000000000E+00 -2.307963600470E-01 8.204987621409E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.852874519259E-01 -1.779003120428E+00 0.000000000000E+00 7.601161893243E-02 -1.550336227824E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.976647855219E-01 8.095317861891E-01 0.000000000000E+00 -2.405712065322E-01 8.145378248460E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.194641713797E-01 -1.738787848057E+00 0.000000000000E+00 1.233053169196E-01 -1.537693048202E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.744149767195E-01 7.997289575220E-01 0.000000000000E+00 -2.502684334284E-01 8.086064956850E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.562421673476E-01 -1.699041445931E+00 0.000000000000E+00 1.693665792189E-01 -1.526610727886E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.511995756773E-01 7.898193705527E-01 0.000000000000E+00 -2.598679403739E-01 8.026978514935E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.956162432372E-01 -1.659797555916E+00 0.000000000000E+00 2.140793615319E-01 -1.516830899313E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.280517871710E-01 7.798136372881E-01 0.000000000000E+00 -2.693505579465E-01 7.968048897886E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.375706235254E-01 -1.621085827222E+00 0.000000000000E+00 2.573471635296E-01 -1.508119660507E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.050031972233E-01 7.697220904777E-01 0.000000000000E+00 -2.786980842968E-01 7.909206302872E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.820802796927E-01 -1.582932201433E+00 0.000000000000E+00 2.990913065382E-01 -1.500266271069E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.820837836184E-01 7.595547777301E-01 0.000000000000E+00 -2.878933122983E-01 7.850382023589E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.291121520322E-01 -1.545359182298E+00 0.000000000000E+00 3.392492902216E-01 -1.493081784738E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.593219316371E-01 7.493214569065E-01 0.000000000000E+00 -2.969200481611E-01 7.791509195808E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.862626919605E-02 -1.508386089549E+00 0.000000000000E+00 3.777732342737E-01 -1.486397650193E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.367444544155E-01 7.390315926857E-01 0.000000000000E+00 -3.057631223891E-01 7.732523425279E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.057676700583E-02 -1.472029296676E+00 0.000000000000E+00 4.146284097369E-01 -1.480064305968E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.143766173700E-01 7.286943542057E-01 0.000000000000E+00 -3.144083939009E-01 7.673363308812E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.508719186013E-02 -1.436302453205E+00 0.000000000000E+00 4.497918636266E-01 -1.473949790708E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.922421661753E-01 7.183186136905E-01 0.000000000000E+00 -3.228427480726E-01 7.613970858858E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.842059484632E-02 -1.401216692572E+00 0.000000000000E+00 4.832511395471E-01 -1.467938386092E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.703633578171E-01 7.079129459768E-01 0.000000000000E+00 -3.310540894063E-01 7.554291841320E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 9.948184907389E-02 -1.366780826988E+00 0.000000000000E+00 5.150030956119E-01 -1.461929306327E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.487609942799E-01 6.974856288602E-01 0.000000000000E+00 -3.390313294733E-01 7.494276035709E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.383321372476E-01 -1.333001530719E+00 0.000000000000E+00 5.450528191338E-01 -1.455835444788E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.274544584625E-01 6.870446441858E-01 0.000000000000E+00 -3.467643707319E-01 7.433877426172E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.750348516382E-01 -1.299883512986E+00 0.000000000000E+00 5.734126353956E-01 -1.449582185121E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.064617519476E-01 6.765976796132E-01 0.000000000000E+00 -3.542440867703E-01 7.373054331287E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.096550964223E-01 -1.267429681362E+00 0.000000000000E+00 6.001012057312E-01 -1.443106281057E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.857995342819E-01 6.661521309888E-01 0.000000000000E+00 -3.614622994803E-01 7.311769479922E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.422592481801E-01 -1.235641296159E+00 0.000000000000E+00 6.251427084926E-01 -1.436354806451E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.654831634540E-01 6.557151052647E-01 0.000000000000E+00 -3.684117536281E-01 7.249990039877E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.729145648720E-01 -1.204518116088E+00 0.000000000000E+00 6.485660955513E-01 -1.429284174917E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.455267372808E-01 6.452934239058E-01 0.000000000000E+00 -3.750860892420E-01 7.187687605461E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.016888349285E-01 -1.174058535276E+00 0.000000000000E+00 6.704044167914E-01 -1.421859226904E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.259431354466E-01 6.348936267315E-01 0.000000000000E+00 -3.814798122071E-01 7.124838149621E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.286500598486E-01 -1.144259711796E+00 0.000000000000E+00 6.906942055138E-01 -1.414052381205E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.067440619557E-01 6.245219761415E-01 0.000000000000E+00 -3.875882634155E-01 7.061421945725E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.538661655690E-01 -1.115117687838E+00 0.000000000000E+00 7.094749185357E-01 -1.405842847512E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.794008778981E-02 6.141844616793E-01 0.000000000000E+00 -3.934075867902E-01 6.997423463632E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.774047395565E-01 -1.086627501814E+00 0.000000000000E+00 7.267884258426E-01 -1.397215896642E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.954069357872E-02 6.038868048900E-01 0.000000000000E+00 -3.989346964707E-01 6.932831244218E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.993327919106E-01 -1.058783292703E+00 0.000000000000E+00 7.426785456824E-01 -1.388162185277E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.155431211692E-02 5.936344644319E-01 0.000000000000E+00 -4.041672434164E-01 6.867637756118E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.197165396598E-01 -1.031578397037E+00 0.000000000000E+00 7.571906218825E-01 -1.378677132333E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.398837057550E-02 5.834326414049E-01 0.000000000000E+00 -4.091035816609E-01 6.801839238051E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.386212139060E-01 -1.005005438921E+00 0.000000000000E+00 7.703711408115E-01 -1.368760344347E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.684933227875E-02 5.732862848614E-01 0.000000000000E+00 -4.137427344213E-01 6.735435529732E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.561108895846E-01 -9.790564135095E-01 0.000000000000E+00 7.822673858168E-01 -1.358415087477E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.427379309570E-04 5.632000974679E-01 0.000000000000E+00 -4.180843602459E-01 6.668429894036E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.722483374652E-01 -9.537227643163E-01 0.000000000000E+00 7.929271271492E-01 -1.347647803811E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.612675380578E-02 5.531785412888E-01 0.000000000000E+00 -4.221287193619E-01 6.600828832793E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.870948977430E-01 -9.289954547466E-01 0.000000000000E+00 8.023983454259E-01 -1.336467669722E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.195532646680E-02 5.432258436645E-01 0.000000000000E+00 -4.258766403633E-01 6.532641898290E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.007103742495E-01 -9.048650341883E-01 0.000000000000E+00 8.107289866258E-01 -1.324886194013E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.733996674460E-02 5.333460031609E-01 0.000000000000E+00 -4.293294873624E-01 6.463881502312E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.131529480360E-01 -8.813216989928E-01 0.000000000000E+00 8.179667465334E-01 -1.312916853526E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.227842631228E-02 5.235427955673E-01 0.000000000000E+00 -4.324891277106E-01 6.394562724326E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.244791088729E-01 -8.583553486530E-01 0.000000000000E+00 8.241588824833E-01 -1.300574763889E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.676918455848E-02 5.138197799233E-01 0.000000000000E+00 -4.353579003798E-01 6.324703120180E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.347436030959E-01 -8.359556374651E-01 0.000000000000E+00 8.293520502369E-01 -1.287876383049E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.081141227245E-02 5.041803045547E-01 0.000000000000E+00 -4.379385850800E-01 6.254322532529E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.439993961961E-01 -8.141120219481E-01 0.000000000000E+00 8.335921638437E-01 -1.274839245253E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.044049363080E-01 4.946275131044E-01 0.000000000000E+00 -4.402343721777E-01 6.183442903998E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.522976485827E-01 -7.928138042804E-01 0.000000000000E+00 8.369242764061E-01 -1.261481723196E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.175502052475E-01 4.851643505418E-01 0.000000000000E+00 -4.422488334664E-01 6.112088093959E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.596877030243E-01 -7.720501720030E-01 0.000000000000E+00 8.393924797739E-01 -1.247822816129E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.302482560805E-01 4.757935691378E-01 0.000000000000E+00 -4.439858938316E-01 6.040283699644E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.662170823773E-01 -7.518102342228E-01 0.000000000000E+00 8.410398213079E-01 -1.233881961795E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.425006819033E-01 4.665177343941E-01 0.000000000000E+00 -4.454498038431E-01 5.968056882197E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.719314963217E-01 -7.320830545442E-01 0.000000000000E+00 8.419082359857E-01 -1.219678870204E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.543096006425E-01 4.573392309156E-01 0.000000000000E+00 -4.466451132961E-01 5.895436198172E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.768748559395E-01 -7.128576809420E-01 0.000000000000E+00 8.420384922571E-01 -1.205233377341E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.656776247997E-01 4.482602682170E-01 0.000000000000E+00 -4.475766457209E-01 5.822451436849E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.810892950803E-01 -6.941231727822E-01 0.000000000000E+00 8.414701501843E-01 -1.190565317043E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.766078322088E-01 4.392828864567E-01 0.000000000000E+00 -4.482494738676E-01 5.749133463701E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + +RangeSep +LC 0.300000 diff --git a/test/prog/sktable/LCY-PBE96/Non-Relativistic/_O-N.skf b/test/prog/sktable/LCY-PBE96/Non-Relativistic/_O-N.skf new file mode 100644 index 00000000..ed537327 --- /dev/null +++ b/test/prog/sktable/LCY-PBE96/Non-Relativistic/_O-N.skf @@ -0,0 +1,93 @@ +0.020000 69 + 0.000000000000E+00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.246970334695E-01 -1.860683939120E+00 0.000000000000E+00 4.058680979270E-01 -1.581468022581E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.441266922146E-01 8.287733694112E-01 0.000000000000E+00 -3.134511935844E-01 8.264960346370E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.537051945102E-01 -1.819649329541E+00 0.000000000000E+00 4.504634810547E-01 -1.564824301515E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.209141739085E-01 8.192169725578E-01 0.000000000000E+00 -3.240531303874E-01 8.204987621409E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.852874519259E-01 -1.779003120428E+00 0.000000000000E+00 4.937171825033E-01 -1.550336227824E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.976647855219E-01 8.095317861891E-01 0.000000000000E+00 -3.344655176777E-01 8.145378248460E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.194641713797E-01 -1.738787848057E+00 0.000000000000E+00 5.355209994043E-01 -1.537693048202E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.744149767195E-01 7.997289575220E-01 0.000000000000E+00 -3.446718294912E-01 8.086064956850E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.562421673476E-01 -1.699041445931E+00 0.000000000000E+00 5.757857876936E-01 -1.526610727886E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.511995756773E-01 7.898193705527E-01 0.000000000000E+00 -3.546565156614E-01 8.026978514935E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.956162432372E-01 -1.659797555916E+00 0.000000000000E+00 6.144397994419E-01 -1.516830899313E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.280517871710E-01 7.798136372881E-01 0.000000000000E+00 -3.644050234304E-01 7.968048897886E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.375706235254E-01 -1.621085827222E+00 0.000000000000E+00 6.514270910817E-01 -1.508119660507E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.050031972233E-01 7.697220904777E-01 0.000000000000E+00 -3.739038107996E-01 7.909206302872E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.820802796927E-01 -1.582932201433E+00 0.000000000000E+00 6.867060091455E-01 -1.500266271069E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.820837836184E-01 7.595547777301E-01 0.000000000000E+00 -3.831403525427E-01 7.850382023589E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.291121520322E-01 -1.545359182298E+00 0.000000000000E+00 7.202477578529E-01 -1.493081784738E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.593219316371E-01 7.493214569065E-01 0.000000000000E+00 -3.921031397294E-01 7.791509195808E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.862626919605E-02 -1.508386089549E+00 0.000000000000E+00 7.520350514486E-01 -1.486397650193E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.367444544155E-01 7.390315926857E-01 0.000000000000E+00 -4.007816735362E-01 7.732523425279E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.057676700583E-02 -1.472029296676E+00 0.000000000000E+00 7.820608534510E-01 -1.480064305968E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.143766173700E-01 7.286943542057E-01 0.000000000000E+00 -4.091664540507E-01 7.673363308812E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.508719186013E-02 -1.436302453205E+00 0.000000000000E+00 8.103272044864E-01 -1.473949790708E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.922421661753E-01 7.183186136905E-01 0.000000000000E+00 -4.172489647177E-01 7.613970858858E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.842059484632E-02 -1.401216692572E+00 0.000000000000E+00 8.368441397881E-01 -1.467938386092E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.703633578171E-01 7.079129459768E-01 0.000000000000E+00 -4.250216530142E-01 7.554291841320E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 9.948184907389E-02 -1.366780826988E+00 0.000000000000E+00 8.616286964125E-01 -1.461929306327E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.487609942799E-01 6.974856288602E-01 0.000000000000E+00 -4.324779078886E-01 7.494276035709E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.383321372476E-01 -1.333001530719E+00 0.000000000000E+00 8.847040086815E-01 -1.455835444788E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.274544584625E-01 6.870446441858E-01 0.000000000000E+00 -4.396120344506E-01 7.433877426172E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.750348516382E-01 -1.299883512986E+00 0.000000000000E+00 9.060984885081E-01 -1.449582185121E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.064617519476E-01 6.765976796132E-01 0.000000000000E+00 -4.464192263519E-01 7.373054331287E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.096550964223E-01 -1.267429681362E+00 0.000000000000E+00 9.258450854546E-01 -1.443106281057E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.857995342819E-01 6.661521309888E-01 0.000000000000E+00 -4.528955362583E-01 7.311769479922E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.422592481801E-01 -1.235641296159E+00 0.000000000000E+00 9.439806199903E-01 -1.436354806451E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.654831634540E-01 6.557151052647E-01 0.000000000000E+00 -4.590378447724E-01 7.249990039877E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.729145648720E-01 -1.204518116088E+00 0.000000000000E+00 9.605451826876E-01 -1.429284174917E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.455267372808E-01 6.452934239058E-01 0.000000000000E+00 -4.648438281347E-01 7.187687605461E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.016888349285E-01 -1.174058535276E+00 0.000000000000E+00 9.755815920609E-01 -1.421859226904E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.259431354466E-01 6.348936267315E-01 0.000000000000E+00 -4.703119249964E-01 7.124838149621E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.286500598486E-01 -1.144259711796E+00 0.000000000000E+00 9.891349042899E-01 -1.414052381205E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.067440619557E-01 6.245219761415E-01 0.000000000000E+00 -4.754413025278E-01 7.061421945725E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.538661655690E-01 -1.115117687838E+00 0.000000000000E+00 1.001251968975E+00 -1.405842847512E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.794008778981E-02 6.141844616793E-01 0.000000000000E+00 -4.802318220998E-01 6.997423463632E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.774047395565E-01 -1.086627501814E+00 0.000000000000E+00 1.011981026115E+00 -1.397215896642E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.954069357872E-02 6.038868048900E-01 0.000000000000E+00 -4.846840047494E-01 6.932831244218E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.993327919106E-01 -1.058783292703E+00 0.000000000000E+00 1.021371340525E+00 -1.388162185277E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.155431211692E-02 5.936344644319E-01 0.000000000000E+00 -4.887989966195E-01 6.867637756118E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.197165396598E-01 -1.031578397037E+00 0.000000000000E+00 1.029472870742E+00 -1.378677132333E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.398837057550E-02 5.834326414049E-01 0.000000000000E+00 -4.925785345390E-01 6.801839238051E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.386212139060E-01 -1.005005438921E+00 0.000000000000E+00 1.036335970149E+00 -1.368760344347E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.684933227875E-02 5.732862848614E-01 0.000000000000E+00 -4.960249118925E-01 6.735435529732E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.561108895846E-01 -9.790564135095E-01 0.000000000000E+00 1.042011118432E+00 -1.358415087477E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.427379309570E-04 5.632000974679E-01 0.000000000000E+00 -4.991409449085E-01 6.668429894036E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.722483374652E-01 -9.537227643163E-01 0.000000000000E+00 1.046548681735E+00 -1.347647803811E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.612675380578E-02 5.531785412888E-01 0.000000000000E+00 -5.019299394808E-01 6.600828832793E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.870948977430E-01 -9.289954547466E-01 0.000000000000E+00 1.049998699939E+00 -1.336467669722E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.195532646680E-02 5.432258436645E-01 0.000000000000E+00 -5.043956586209E-01 6.532641898290E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.007103742495E-01 -9.048650341883E-01 0.000000000000E+00 1.052410699517E+00 -1.324886194013E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.733996674460E-02 5.333460031609E-01 0.000000000000E+00 -5.065422906261E-01 6.463881502312E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.131529480360E-01 -8.813216989928E-01 0.000000000000E+00 1.053833530322E+00 -1.312916853526E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.227842631228E-02 5.235427955673E-01 0.000000000000E+00 -5.083744180350E-01 6.394562724326E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.244791088729E-01 -8.583553486530E-01 0.000000000000E+00 1.054315224664E+00 -1.300574763889E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.676918455848E-02 5.138197799233E-01 0.000000000000E+00 -5.098969874311E-01 6.324703120180E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.347436030959E-01 -8.359556374651E-01 0.000000000000E+00 1.053902876962E+00 -1.287876383049E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.081141227245E-02 5.041803045547E-01 0.000000000000E+00 -5.111152801436E-01 6.254322532529E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.439993961961E-01 -8.141120219481E-01 0.000000000000E+00 1.052642542270E+00 -1.274839245253E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.044049363080E-01 4.946275131044E-01 0.000000000000E+00 -5.120348838854E-01 6.183442903998E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.522976485827E-01 -7.928138042804E-01 0.000000000000E+00 1.050579152023E+00 -1.261481723196E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.175502052475E-01 4.851643505418E-01 0.000000000000E+00 -5.126616653603E-01 6.112088093959E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.596877030243E-01 -7.720501720030E-01 0.000000000000E+00 1.047756445374E+00 -1.247822816129E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.302482560805E-01 4.757935691378E-01 0.000000000000E+00 -5.130017438612E-01 6.040283699644E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.662170823773E-01 -7.518102342228E-01 0.000000000000E+00 1.044216914591E+00 -1.233881961795E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.425006819033E-01 4.665177343941E-01 0.000000000000E+00 -5.130614658773E-01 5.968056882197E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.719314963217E-01 -7.320830545442E-01 0.000000000000E+00 1.040001763073E+00 -1.219678870204E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.543096006425E-01 4.573392309156E-01 0.000000000000E+00 -5.128473807184E-01 5.895436198172E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.768748559395E-01 -7.128576809420E-01 0.000000000000E+00 1.035150874644E+00 -1.205233377341E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.656776247997E-01 4.482602682170E-01 0.000000000000E+00 -5.123662171618E-01 5.822451436849E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.810892950803E-01 -6.941231727822E-01 0.000000000000E+00 1.029702792855E+00 -1.190565317043E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.766078322088E-01 4.392828864567E-01 0.000000000000E+00 -5.116248611184E-01 5.749133463701E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + +RangeSep +LC 0.300000 diff --git a/test/prog/sktable/LCY-PBE96/Non-Relativistic/_O-O.skf b/test/prog/sktable/LCY-PBE96/Non-Relativistic/_O-O.skf new file mode 100644 index 00000000..d9811216 --- /dev/null +++ b/test/prog/sktable/LCY-PBE96/Non-Relativistic/_O-O.skf @@ -0,0 +1,94 @@ +0.020000 69 + 0.000000000000E+00 -3.759090141948E-01 -1.008183885828E+00 0.000000000000E+00 0.000000000000E+00 4.937268013626E-01 4.937268013626E-01 0.000000000000E+00 4.000000000000E+00 2.000000000000E+00 + 1.601000000000E+01 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.498007152396E-01 -2.035353856985E+00 0.000000000000E+00 3.434917864615E-01 -1.758708119242E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.114246206595E-01 8.171514499535E-01 0.000000000000E+00 -2.905161000412E-01 8.269818583196E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.701008076076E-01 -1.986123469704E+00 0.000000000000E+00 3.973355821349E-01 -1.743335776129E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.871728932412E-01 8.068980713907E-01 0.000000000000E+00 -3.011643030815E-01 8.207070073994E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.938465145449E-01 -1.937533981525E+00 0.000000000000E+00 4.493078393415E-01 -1.729923633654E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.629655752695E-01 7.965282534953E-01 0.000000000000E+00 -3.116272934756E-01 8.144560818707E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.210223317324E-01 -1.889630820863E+00 0.000000000000E+00 4.992863581815E-01 -1.718120712603E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.388411235915E-01 7.860545154301E-01 0.000000000000E+00 -3.218851759801E-01 8.082206321755E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.515974463197E-01 -1.842453450545E+00 0.000000000000E+00 5.471748611007E-01 -1.707612067288E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.148358860410E-01 7.754890035370E-01 0.000000000000E+00 -3.319193580764E-01 8.019922673574E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.855278602120E-01 -1.796035829045E+00 0.000000000000E+00 5.929003890528E-01 -1.698116668045E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.909841248356E-01 7.648434846542E-01 0.000000000000E+00 -3.417125673003E-01 7.957627713740E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.227583263457E-01 -1.750406844381E+00 0.000000000000E+00 6.364108438457E-01 -1.689385189614E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.673180473343E-01 7.541293413034E-01 0.000000000000E+00 -3.512488577522E-01 7.895242007050E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.322410132927E-02 -1.705590720063E+00 0.000000000000E+00 6.776726847905E-01 -1.681197761105E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.438678431869E-01 7.433575685758E-01 0.000000000000E+00 -3.605136071034E-01 7.832689650300E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.852518273393E-03 -1.661607393693E+00 0.000000000000E+00 7.166687856179E-01 -1.673361722569E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.206617269806E-01 7.325387725623E-01 0.000000000000E+00 -3.694935053042E-01 7.769898926687E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.643561460362E-02 -1.618472869963E+00 0.000000000000E+00 7.533964555607E-01 -1.665709424397E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.977259855621E-01 7.216831701807E-01 0.000000000000E+00 -3.781765360946E-01 7.706802823834E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 9.672478087356E-02 -1.576199550358E+00 0.000000000000E+00 7.878656258215E-01 -1.658096098161E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.750850292808E-01 7.108005902613E-01 0.000000000000E+00 -3.865519523204E-01 7.643339430430E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.441036756707E-01 -1.534796541996E+00 0.000000000000E+00 8.200971991653E-01 -1.650397820357E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.527614464627E-01 6.999004757653E-01 0.000000000000E+00 -3.946102459698E-01 7.579452225469E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.886642622138E-01 -1.494269947664E+00 0.000000000000E+00 8.501215564794E-01 -1.642509583703E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.307760604839E-01 6.889918870146E-01 0.000000000000E+00 -4.023431137577E-01 7.515090273014E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.305009468733E-01 -1.454623138471E+00 0.000000000000E+00 8.779772105938E-01 -1.634343484423E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.091479888701E-01 6.780835058236E-01 0.000000000000E+00 -4.097434190091E-01 7.450208334403E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.697098544628E-01 -1.415857009938E+00 0.000000000000E+00 9.037095951590E-01 -1.625827028656E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.878947039018E-01 6.671836404280E-01 0.000000000000E+00 -4.168051505208E-01 7.384766908818E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.063881871035E-01 -1.377970221991E+00 0.000000000000E+00 9.273699752873E-01 -1.616901557079E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.670320942555E-01 6.563002311162E-01 0.000000000000E+00 -4.235233790134E-01 7.318732212166E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.406336528942E-01 -1.340959423139E+00 0.000000000000E+00 9.490144669238E-01 -1.607520784222E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.465745272574E-01 6.454408564732E-01 0.000000000000E+00 -4.298942117212E-01 7.252076103303E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.725439539710E-01 -1.304819459187E+00 0.000000000000E+00 9.687031531478E-01 -1.597649447424E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.265349113750E-01 6.346127401553E-01 0.000000000000E+00 -4.359147456161E-01 7.184775965782E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.022163267357E-01 -1.269543566985E+00 0.000000000000E+00 9.864992873623E-01 -1.587262059849E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.069247586079E-01 6.238227581191E-01 0.000000000000E+00 -4.415830197009E-01 7.116814552460E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.297471296530E-01 -1.235123553813E+00 0.000000000000E+00 1.002468575170E+00 -1.576341761996E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.775424648550E-02 6.130774462355E-01 0.000000000000E+00 -4.468979667670E-01 7.048179799570E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.552314758722E-01 -1.201549963163E+00 0.000000000000E+00 1.016678528383E+00 -1.564879266374E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.903227940915E-02 6.023830082235E-01 0.000000000000E+00 -4.518593649586E-01 6.978864616115E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.787629090113E-01 -1.168812227695E+00 0.000000000000E+00 1.029197885879E+00 -1.552871890443E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.076654911703E-02 5.917453238451E-01 0.000000000000E+00 -4.564677894505E-01 6.908866653828E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.004331208565E-01 -1.136898810151E+00 0.000000000000E+00 1.040096096909E+00 -1.540322673154E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.296359407657E-02 5.811699573076E-01 0.000000000000E+00 -4.607245645044E-01 6.838188062296E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.203317096684E-01 -1.105797333008E+00 0.000000000000E+00 1.049442862928E+00 -1.527239570666E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.562885764152E-02 5.706621658237E-01 0.000000000000E+00 -4.646317161349E-01 6.766835233336E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.385459774340E-01 -1.075494697585E+00 0.000000000000E+00 1.057307734276E+00 -1.513634726879E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.233255163255E-03 5.602269082853E-01 0.000000000000E+00 -4.681919255866E-01 6.694818538157E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.551607639521E-01 -1.045977193292E+00 0.000000000000E+00 1.063759758055E+00 -1.499523814409E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.761932234174E-02 5.498688540096E-01 0.000000000000E+00 -4.714084837893E-01 6.622152060428E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.702583152175E-01 -1.017230597652E+00 0.000000000000E+00 1.068867173518E+00 -1.484925441637E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.352685120123E-02 5.395923915222E-01 0.000000000000E+00 -4.742852469380E-01 6.548853327924E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.839181832174E-01 -9.892402676958E-01 0.000000000000E+00 1.072697151241E+00 -1.469860621375E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.895422627101E-02 5.294016373434E-01 0.000000000000E+00 -4.768265933146E-01 6.474943045051E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.962171541470E-01 -9.619912232954E-01 0.000000000000E+00 1.075315572344E+00 -1.454352296741E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.390065891647E-02 5.193004447497E-01 0.000000000000E+00 -4.790373814509E-01 6.400444828225E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.072292019233E-01 -9.354682229624E-01 0.000000000000E+00 1.076786844070E+00 -1.438424919854E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.836613868393E-02 5.092924124829E-01 0.000000000000E+00 -4.809229097087E-01 6.325384945764E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.170254640191E-01 -9.096558326228E-01 0.000000000000E+00 1.077173748170E+00 -1.422104079066E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.235138639657E-02 4.993808933848E-01 0.000000000000E+00 -4.824888773379E-01 6.249792063669E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.256742367742E-01 -8.845384878491E-01 0.000000000000E+00 1.076537318675E+00 -1.405416170604E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.058578090092E-01 4.895690029378E-01 0.000000000000E+00 -4.837413470564E-01 6.173696998460E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.332409875503E-01 -8.601005500062E-01 0.000000000000E+00 1.074936745885E+00 -1.388388110700E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.188874562187E-01 4.798596276917E-01 0.000000000000E+00 -4.846867091812E-01 6.097132477978E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.397883813359E-01 -8.363263567464E-01 0.000000000000E+00 1.072429303590E+00 -1.371047084466E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.314429788167E-01 4.702554335641E-01 0.000000000000E+00 -4.853316473282E-01 6.020132910906E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.453763196165E-01 -8.132002672678E-01 0.000000000000E+00 1.069070296810E+00 -1.353420328053E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.435275887628E-01 4.607588739991E-01 0.000000000000E+00 -4.856831056864E-01 5.942734165571E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.500619896174E-01 -7.907067027273E-01 0.000000000000E+00 1.064913027555E+00 -1.335534940837E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.551450209510E-01 4.513721979743E-01 0.000000000000E+00 -4.857482578624E-01 5.864973358463E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.538999221481E-01 -7.688301821776E-01 0.000000000000E+00 1.060008776334E+00 -1.317417724631E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.662994966330E-01 4.420974578468E-01 0.000000000000E+00 -4.855344772842E-01 5.786888652745E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.569420565507E-01 -7.475553543790E-01 0.000000000000E+00 1.054406797370E+00 -1.299095047156E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.769956884612E-01 4.329365170297E-01 0.000000000000E+00 -4.850493091425E-01 5.708519066964E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.592378113825E-01 -7.268670258140E-01 0.000000000000E+00 1.048154325657E+00 -1.280592727231E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.872386871058E-01 4.238910574948E-01 0.000000000000E+00 -4.843004438460E-01 5.629904294029E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.608341596403E-01 -7.067501852134E-01 0.000000000000E+00 1.041296594206E+00 -1.261935939333E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.970339694023E-01 4.149625870944E-01 0.000000000000E+00 -4.832956919578E-01 5.551084530462E-01 + + +Spline +12 0.0553585 +112.9353346817185 2.801373701455403 -0.1119994835253462 +0.035 0.0375 0.204206 -35.71077211012958 2016.504000000031 24177.93762071238 +0.0375 0.04 0.12791 -25.17491577974109 2197.838532155373 -120889.6881035729 +0.04 0.0425 0.07682029999999999 -16.45240477090621 1291.165871378576 -57585.58520643491 +0.0425 0.045 0.0428593 -11.07630513663398 859.2739823303137 16659.22892930921 +0.045 0.04533 0.0207993 -6.467574682557872 984.2181993001326 -2167173.572075024 +0.04533 0.045334 0.0186943 -6.526006277016704 -1161.283637054166 353213222.4907721 +0.045334 0.046259 0.0186682 -6.518342311433599 3077.275032831984 -1324559.571220061 +0.046259 0.047184 0.0142234 -4.225362350069925 -598.3777773036936 561811.1110751317 +0.047184 0.0493131 0.0102476 -3.890262342340788 960.6480559297889 -100763.5210502349 +0.0493131 0.0503195 0.00534702 -1.169934109375229 317.0412179256228 -143026.9144497911 +0.0503195 0.0513259 0.00434492 -0.9663840979460291 -114.7856421811885 10348.58893883691 +0.0513259 0.0553585 0.00326664 -1.165980214261954 -83.5411824570522 -5782.515169399558 27636944.82683195 -3877959552.095367 + +This SPLINE is just a DUMMY-SPLINE!!!!!!!!!!!!!!! + +RangeSep +LC 0.300000 diff --git a/test/prog/sktable/LCY-PBE96/Non-Relativistic/config b/test/prog/sktable/LCY-PBE96/Non-Relativistic/config new file mode 100644 index 00000000..fe945713 --- /dev/null +++ b/test/prog/sktable/LCY-PBE96/Non-Relativistic/config @@ -0,0 +1 @@ +N,O N,O diff --git a/test/prog/sktable/LCY-PBE96/Non-Relativistic/skdef.hsd b/test/prog/sktable/LCY-PBE96/Non-Relativistic/skdef.hsd new file mode 100644 index 00000000..84ce5ed5 --- /dev/null +++ b/test/prog/sktable/LCY-PBE96/Non-Relativistic/skdef.hsd @@ -0,0 +1,112 @@ +SkdefVersion = 1 + +Globals { + Superposition = density + XCFunctional = lcy-pbe {omega = 0.3} +} + +AtomParameters { + + N { + AtomConfig { + AtomicNumber = 7 + Mass = 14.007 + Occupations { + 1S = 1.0 1.0 + 2S = 1.0 1.0 + 2P = 2.0 1.0 + } + ValenceShells = 2s 2p + Relativistics = None + } + DftbAtom { + ShellResolved = No + DensityCompression = PowerCompression{ Power = 2; Radius = 11.0 } + WaveCompressions = SingleAtomCompressions { + S = PowerCompression { Power = 2; Radius = 2.2 } + P = PowerCompression { Power = 2; Radius = 2.2 } + } + CustomizedOnsites { + 2s = -0.64 + } + } + } + + O { + AtomConfig { + AtomicNumber = 8 + Mass = 16.01 + Occupations { + 1S = 1.0 1.0 + 2S = 1.0 1.0 + 2P = 2.0 2.0 + } + ValenceShells = 2s 2p + Relativistics = None + } + DftbAtom { + ShellResolved = No + DensityCompression = PowerCompression{ Power = 2; Radius = 9.0 } + WaveCompressions = SingleAtomCompressions { + S = PowerCompression { Power = 2; Radius = 2.3 } + P = PowerCompression { Power = 2; Radius = 2.3 } + } + } + } + +} + + +OnecenterParameters { + + $StandardDeltaFilling { + DeltaFilling = 0.01 + } + + N { + $StandardDeltaFilling + Calculator = SlaterAtom { + Exponents { + S = 0.5 1.2 2.9 7.0 + P = 0.5 1.2 2.9 7.0 + } + MaxPowers { + S = 3 + P = 3 + } + } + } + + O { + $StandardDeltaFilling + Calculator = SlaterAtom { + Exponents { + S = 0.5 1.26 3.17 8.0 + P = 0.5 1.26 3.17 8.0 + } + MaxPowers { + S = 3 + P = 3 + } + } + } +} + +TwoCenterParameters { + + $EqGrid = EquidistantGrid { + GridStart = 0.6 + GridSeparation = 0.02 + Tolerance = 5e-5 + MaxDistance = -1.4 + } + + $SkTwocnt_300_150 = Sktwocnt { + IntegrationPoints = 300 150 + } + + N-N { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + N-O { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + O-O { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + +} diff --git a/test/prog/sktable/LDA-PW91/Non-Relativistic/_C-C.skf b/test/prog/sktable/LDA-PW91/Non-Relativistic/_C-C.skf new file mode 100644 index 00000000..07526047 --- /dev/null +++ b/test/prog/sktable/LDA-PW91/Non-Relativistic/_C-C.skf @@ -0,0 +1,72 @@ +0.020000 69 + 0.000000000000E+00 -1.991451862259E-01 -5.008031449917E-01 -4.388315590133E-02 0.000000000000E+00 3.643020864178E-01 3.643020864178E-01 0.000000000000E+00 2.000000000000E+00 2.000000000000E+00 + 1.201000000000E+01 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.844335644262E-01 -1.158831472154E+00 0.000000000000E+00 -1.532138107253E-01 -8.093734973696E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.679466317284E-01 8.813917702996E-01 0.000000000000E+00 -2.008133202018E-01 8.635402625062E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.456739148386E-01 -1.139675387004E+00 0.000000000000E+00 -1.314644054894E-01 -7.899972329040E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.492155997514E-01 8.742049263007E-01 0.000000000000E+00 -2.091727570098E-01 8.579340852825E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.076702831819E-01 -1.120517002295E+00 0.000000000000E+00 -1.095167671226E-01 -7.725882616683E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.302755305639E-01 8.668785823435E-01 0.000000000000E+00 -2.175449208067E-01 8.523697578710E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.704688294368E-01 -1.101380152281E+00 0.000000000000E+00 -8.746662402316E-02 -7.569935814207E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.111518006532E-01 8.594194715795E-01 0.000000000000E+00 -2.259178385112E-01 8.468472315748E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.341094893670E-01 -1.082287132412E+00 0.000000000000E+00 -6.540204147804E-02 -7.430661481405E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.918692547428E-01 8.518342736425E-01 0.000000000000E+00 -2.342796621806E-01 8.413658391291E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.986263375247E-01 -1.063258746510E+00 0.000000000000E+00 -4.340369106076E-02 -7.306652878918E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.724521787071E-01 8.441296067060E-01 0.000000000000E+00 -2.426187117679E-01 8.359243743955E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.640479492209E-01 -1.044314356167E+00 0.000000000000E+00 -2.154514110278E-02 -7.196569800234E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.529242758309E-01 8.363120201579E-01 0.000000000000E+00 -2.509235135005E-01 8.305211666342E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.303977591399E-01 -1.025471931862E+00 0.000000000000E+00 1.068369437573E-04 -7.099140318195E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.333086462072E-01 8.283879878655E-01 0.000000000000E+00 -2.591828341391E-01 8.251541494386E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.976944145427E-01 -1.006748105389E+00 0.000000000000E+00 2.149195078064E-02 -7.013161619075E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.136277690762E-01 8.203639020000E-01 0.000000000000E+00 -2.673857113701E-01 8.198209244618E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.659521212516E-01 -9.881582231795E-01 0.000000000000E+00 4.255606213579E-02 -6.937500073502E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.939034879173E-01 8.122460673942E-01 0.000000000000E+00 -2.755214805777E-01 8.145188200955E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.351809808330E-01 -9.697164001716E-01 0.000000000000E+00 6.325085769357E-02 -6.871090673208E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.741569981147E-01 8.040406964067E-01 0.000000000000E+00 -2.835797982309E-01 8.092449452912E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.053873176069E-01 -9.514355738986E-01 0.000000000000E+00 8.353351910261E-02 -6.812935945231E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.544088370239E-01 7.957539042660E-01 0.000000000000E+00 -2.915506621122E-01 8.039962387270E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.765739943028E-01 -9.333275585031E-01 0.000000000000E+00 1.033663946884E-01 -6.762104440231E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.346788762751E-01 7.873917048704E-01 0.000000000000E+00 -2.994244286068E-01 7.987695135420E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.487407153659E-01 -9.154030984129E-01 0.000000000000E+00 1.227166751482E-01 -6.717728878685E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.149863161581E-01 7.789600070194E-01 0.000000000000E+00 -3.071918272571E-01 7.935614978637E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.218843170837E-01 -8.976719214437E-01 0.000000000000E+00 1.415560751915E-01 -6.679004027475E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.953496819369E-01 7.704646110537E-01 0.000000000000E+00 -3.148439727817E-01 7.883688713607E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.599904386636E-02 -8.801427911144E-01 0.000000000000E+00 1.598605228054E-01 -6.645184369675E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.757868219536E-01 7.619112058811E-01 0.000000000000E+00 -3.223723747470E-01 7.831882980539E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.107681016807E-02 -8.628235579903E-01 0.000000000000E+00 1.776098575654E-01 -6.615581621732E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.563149073838E-01 7.533053663678E-01 0.000000000000E+00 -3.297689450676E-01 7.780164556171E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.710744768484E-02 -8.457212098886E-01 0.000000000000E+00 1.947875391758E-01 -6.589562144805E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.369504335161E-01 7.446525510737E-01 0.000000000000E+00 -3.370260035077E-01 7.728500613953E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.407893761315E-02 -8.288419208025E-01 0.000000000000E+00 2.113803672052E-01 -6.566544290381E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.177092224306E-01 7.359581003121E-01 0.000000000000E+00 -3.441362813401E-01 7.676858953619E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.977627895172E-03 -8.121910984215E-01 0.000000000000E+00 2.273782127786E-01 -6.545995714444E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.986064269615E-01 7.272272345152E-01 0.000000000000E+00 -3.510929233180E-01 7.625208202334E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.921156448245E-02 -7.957734301444E-01 0.000000000000E+00 2.427737627972E-01 -6.527430689328E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.796565358309E-01 7.184650528866E-01 0.000000000000E+00 -3.578894880994E-01 7.573517989475E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.950496593345E-02 -7.795929275007E-01 0.000000000000E+00 2.575622770814E-01 -6.510407437716E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.608733798514E-01 7.096765323240E-01 0.000000000000E+00 -3.645199472612E-01 7.521759097061E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.891997312861E-02 -7.636529689143E-01 0.000000000000E+00 2.717413586636E-01 -6.494525509193E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.422701390959E-01 7.008665265945E-01 0.000000000000E+00 -3.709786830301E-01 7.469903587751E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.747489381227E-02 -7.479563407598E-01 0.000000000000E+00 2.853107373042E-01 -6.479423216033E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.238593509424E-01 6.920397657477E-01 0.000000000000E+00 -3.772604848491E-01 7.417924912209E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 9.518880101983E-02 -7.325052766806E-01 0.000000000000E+00 2.982720661651E-01 -6.464775141662E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.056529189049E-01 6.832008557490E-01 0.000000000000E+00 -3.833605448931E-01 7.365797997599E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.120814000459E-01 -7.173014951507E-01 0.000000000000E+00 3.106287314447E-01 -6.450289732308E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.876621221688E-01 6.743542783217E-01 0.000000000000E+00 -3.892744526402E-01 7.313499318803E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.281729074401E-01 -7.023462352795E-01 0.000000000000E+00 3.223856746716E-01 -6.435706979764E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.698976257503E-01 6.655043909808E-01 0.000000000000E+00 -3.949981885962E-01 7.261006953942E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.434839412565E-01 -6.876402908704E-01 0.000000000000E+00 3.335492272548E-01 -6.420796200934E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.523694912109E-01 6.566554272468E-01 0.000000000000E+00 -4.005281172669E-01 7.208300625611E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.580354217504E-01 -6.731840427574E-01 0.000000000000E+00 3.441269568197E-01 -6.405353917874E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.350871878549E-01 6.478114970263E-01 0.000000000000E+00 -4.058609794645E-01 7.155361729208E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.718484817096E-01 -6.589774894533E-01 0.000000000000E+00 3.541275247924E-01 -6.389201840322E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.180596043501E-01 6.389765871477E-01 0.000000000000E+00 -4.109938840294E-01 7.102173349611E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.849443856176E-01 -6.450202761529E-01 0.000000000000E+00 3.635605546632E-01 -6.372184951331E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.012950607097E-01 6.301545620394E-01 0.000000000000E+00 -4.159242990430E-01 7.048720267392E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.973444568705E-01 -6.313117221417E-01 0.000000000000E+00 3.724365103321E-01 -6.354169695421E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.480132058398E-02 6.213491645412E-01 0.000000000000E+00 -4.206500426025E-01 6.994988955656E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.090700123185E-01 -6.178508466661E-01 0.000000000000E+00 3.807665839323E-01 -6.335042267720E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.858560380746E-02 6.125640168368E-01 0.000000000000E+00 -4.251692732223E-01 6.940967568533E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.201423034453E-01 -6.046363933248E-01 0.000000000000E+00 3.885625925333E-01 -6.314707001828E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.265459915856E-02 6.038026214989E-01 0.000000000000E+00 -4.294804799237E-01 6.886645922269E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.305824635666E-01 -5.916668530453E-01 0.000000000000E+00 3.958368831398E-01 -6.293084853567E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.701447728616E-02 5.950683626365E-01 0.000000000000E+00 -4.335824720679E-01 6.832015469775E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.404114604802E-01 -5.789404857090E-01 0.000000000000E+00 4.026022454258E-01 -6.270111977374E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.167090376484E-02 5.863645071372E-01 0.000000000000E+00 -4.374743689854E-01 6.777069269451E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.496500540683E-01 -5.664553404895E-01 0.000000000000E+00 4.088718316719E-01 -6.245738391801E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.629052242417E-03 5.776942059937E-01 0.000000000000E+00 -4.411555894482E-01 6.721801949017E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.583187584058E-01 -5.542092749689E-01 0.000000000000E+00 4.146590834052E-01 -6.219926730425E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.106382353268E-03 5.690604957097E-01 0.000000000000E+00 -4.446258410300E-01 6.666209665036E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.664378079828E-01 -5.421999730928E-01 0.000000000000E+00 4.199776642756E-01 -6.192651074365E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.253117057824E-02 5.604662997749E-01 0.000000000000E+00 -4.478851093931E-01 6.610290058741E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.740271276977E-01 -5.304249620266E-01 0.000000000000E+00 4.248413987335E-01 -6.163895862595E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.664153523430E-02 5.519144302048E-01 0.000000000000E+00 -4.509336475409E-01 6.554042208747E-01 diff --git a/test/prog/sktable/LDA-PW91/Non-Relativistic/_C-O.skf b/test/prog/sktable/LDA-PW91/Non-Relativistic/_C-O.skf new file mode 100644 index 00000000..51973ad6 --- /dev/null +++ b/test/prog/sktable/LDA-PW91/Non-Relativistic/_C-O.skf @@ -0,0 +1,71 @@ +0.020000 69 + 0.000000000000E+00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.686339489004E-01 -1.469337820029E+00 0.000000000000E+00 -3.956387801498E-01 -1.016832164944E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.797772864651E-01 8.272580013917E-01 0.000000000000E+00 -1.243343367013E-01 8.028635544958E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.141719597777E-01 -1.439399960177E+00 0.000000000000E+00 -3.576811112027E-01 -1.003378391744E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.590145783887E-01 8.189402090230E-01 0.000000000000E+00 -1.323054988897E-01 7.978386164078E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.613960816559E-01 -1.409657521302E+00 0.000000000000E+00 -3.197965759724E-01 -9.919735365729E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.381416649061E-01 8.104916398633E-01 0.000000000000E+00 -1.403589598873E-01 7.928580109422E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.103406879293E-01 -1.380144379898E+00 0.000000000000E+00 -2.821504742031E-01 -9.823716125952E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.171895669475E-01 8.019213159742E-01 0.000000000000E+00 -1.484751113314E-01 7.879165848673E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.610299725038E-01 -1.350891285863E+00 0.000000000000E+00 -2.448899266925E-01 -9.743443286428E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.961881856798E-01 7.932380939515E-01 0.000000000000E+00 -1.566347807728E-01 7.830088271502E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.134789097240E-01 -1.321926032137E+00 0.000000000000E+00 -2.081450133700E-01 -9.676807328290E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.751662888507E-01 7.844506563623E-01 0.000000000000E+00 -1.648192964235E-01 7.781289740732E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.676941646783E-01 -1.293273622058E+00 0.000000000000E+00 -1.720299094363E-01 -9.621867066080E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.541515023627E-01 7.755675043028E-01 0.000000000000E+00 -1.730105425914E-01 7.732711030468E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.236749516665E-01 -1.264956433475E+00 0.000000000000E+00 -1.366440069935E-01 -9.576843455673E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.331703065845E-01 7.665969510010E-01 0.000000000000E+00 -1.811910065207E-01 7.684292157982E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.814138394659E-01 -1.236994378853E+00 0.000000000000E+00 -1.020730118714E-01 -9.540112572765E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.122480369365E-01 7.575471163892E-01 0.000000000000E+00 -1.893438173294E-01 7.635973116300E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.408975028112E-01 -1.209405060693E+00 0.000000000000E+00 -6.839000735595E-02 -9.510198014476E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.914088883220E-01 7.484259225772E-01 0.000000000000E+00 -1.974527777006E-01 7.587694514510E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.021074202121E-01 -1.182203921764E+00 0.000000000000E+00 -3.565647830272E-02 -9.485762933346E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.706759230000E-01 7.392410901583E-01 0.000000000000E+00 -2.055023889555E-01 7.539398132678E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.502051888310E-02 -1.155404389719E+00 0.000000000000E+00 -3.923290684697E-03 -9.465601876009E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.500710815275E-01 7.300001352872E-01 0.000000000000E+00 -2.134778701036E-01 7.491027398126E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.960976813235E-02 -1.129018015787E+00 0.000000000000E+00 2.676837698576E-02 -9.448632567123E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.296151964219E-01 7.207103674678E-01 0.000000000000E+00 -2.213651714302E-01 7.442527789630E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.155276942050E-03 -1.103054607341E+00 0.000000000000E+00 5.638615270082E-02 -9.433887751921E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.093280082226E-01 7.113788879966E-01 0.000000000000E+00 -2.291509831518E-01 7.393847175780E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.630797918795E-02 -1.077522354185E+00 0.000000000000E+00 8.490564174153E-02 -9.420507187406E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.892281836514E-01 7.020125890078E-01 0.000000000000E+00 -2.368227396366E-01 7.344936093519E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.688416798479E-02 -1.052427948546E+00 0.000000000000E+00 1.123096495626E-01 -9.407729852315E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.693333355954E-01 6.926181530696E-01 0.000000000000E+00 -2.443686196555E-01 7.295747972486E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 9.592172987071E-02 -1.027776698750E+00 0.000000000000E+00 1.385874563669E-01 -9.394886428906E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.496600446582E-01 6.832020532853E-01 0.000000000000E+00 -2.517775430992E-01 7.246239310536E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.234602382736E-01 -1.003572636687E+00 0.000000000000E+00 1.637341423278E-01 -9.381392095347E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.302238820441E-01 6.737705538548E-01 0.000000000000E+00 -2.590391645658E-01 7.196369805412E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.495406193684E-01 -9.798186191676E-01 0.000000000000E+00 1.877499619184E-01 -9.366739655363E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.110394335589E-01 6.643297110541E-01 0.000000000000E+00 -2.661438641947E-01 7.146102447261E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.742048511235E-01 -9.565164233467E-01 0.000000000000E+00 2.106397654299E-01 -9.350493021898E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.921203245312E-01 6.548853745952E-01 0.000000000000E+00 -2.730827360965E-01 7.095403576315E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.974956927047E-01 -9.336668364094E-01 0.000000000000E+00 2.324124654966E-01 -9.332281063355E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.734792454733E-01 6.454431893282E-01 0.000000000000E+00 -2.798475746972E-01 7.044242909772E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.194564415636E-01 -9.112697397324E-01 0.000000000000E+00 2.530805462768E-01 -9.311791814484E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.551279783164E-01 6.360085972525E-01 0.000000000000E+00 -2.864308592955E-01 6.992593541569E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.401307157253E-01 -8.893241877617E-01 0.000000000000E+00 2.726596128517E-01 -9.288767048810E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.370774230737E-01 6.265868398048E-01 0.000000000000E+00 -2.928257371014E-01 6.940431918471E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.595622589985E-01 -8.678284818485E-01 0.000000000000E+00 2.911679783855E-01 -9.262997205549E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.193376247932E-01 6.171829603939E-01 0.000000000000E+00 -2.990260050050E-01 6.887737795585E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.777947670450E-01 -8.467802392915E-01 0.000000000000E+00 3.086262866201E-01 -9.234316660987E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.019178006828E-01 6.078018071553E-01 0.000000000000E+00 -3.050260903019E-01 6.834494174162E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.948717324501E-01 -8.261764578355E-01 0.000000000000E+00 3.250571673444E-01 -9.202599332149E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.482636729548E-02 5.984480358984E-01 0.000000000000E+00 -3.108210305785E-01 6.780687224270E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.108363071275E-01 -8.060135758678E-01 0.000000000000E+00 3.404849225741E-01 -9.167754599095E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.807096767937E-02 5.891261132238E-01 0.000000000000E+00 -3.164064529430E-01 6.726306194712E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.257311805693E-01 -7.862875285514E-01 0.000000000000E+00 3.549352412814E-01 -9.129723531237E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.165849840656E-02 5.798403197874E-01 0.000000000000E+00 -3.217785527700E-01 6.671343312297E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.395984726019E-01 -7.669938001242E-01 0.000000000000E+00 3.684349406354E-01 -9.088475402515E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.559513640336E-02 5.705947536920E-01 0.000000000000E+00 -3.269340721067E-01 6.615793672406E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.524796394459E-01 -7.481274725818E-01 0.000000000000E+00 3.810117318269E-01 -9.044004480059E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.988636551630E-02 5.613933339854E-01 0.000000000000E+00 -3.318702778758E-01 6.559655122563E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.644153919894E-01 -7.296832709555E-01 0.000000000000E+00 3.926940086719E-01 -8.996327070971E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.537002755182E-03 5.522398042499E-01 0.000000000000E+00 -3.365849399939E-01 6.502928140567E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.754456252843E-01 -7.116556053828E-01 0.000000000000E+00 4.035106572975E-01 -8.945478812066E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.044877583678E-02 5.431377362657E-01 0.000000000000E+00 -3.410763095088E-01 6.445615708556E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.856093583546E-01 -6.940386101591E-01 0.000000000000E+00 4.134908853221E-01 -8.891512187745E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.506740972895E-02 5.340905337331E-01 0.000000000000E+00 -3.453430968513E-01 6.387723184228E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.949446834799E-01 -6.768261799500E-01 0.000000000000E+00 4.226640690422E-01 -8.834494261583E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.931592890156E-02 5.251014360415E-01 0.000000000000E+00 -3.493844502794E-01 6.329258170312E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.034887241736E-01 -6.600120033317E-01 0.000000000000E+00 4.310596172334E-01 -8.774504607727E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.319192932657E-02 5.161735220716E-01 0.000000000000E+00 -3.531999345860E-01 6.270230383232E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.112776011316E-01 -6.435895938200E-01 0.000000000000E+00 4.387068502603E-01 -8.711633428713E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.669354895606E-02 5.073097140203E-01 0.000000000000E+00 -3.567895101314E-01 6.210651521808E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.183464054728E-01 -6.275523185379E-01 0.000000000000E+00 4.456348932758E-01 -8.645979846909E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.981944423790E-02 4.985127812368E-01 0.000000000000E+00 -3.601535122505E-01 6.150535136726E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.247291786335E-01 -6.118934246655E-01 0.000000000000E+00 4.518725823656E-01 -8.577650357342E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.256876717421E-02 4.897853440629E-01 0.000000000000E+00 -3.632926310791E-01 6.089896501404E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.304588983199E-01 -5.966060638059E-01 0.000000000000E+00 4.574483825701E-01 -8.506757430284E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.049411429340E-01 4.811298776669E-01 0.000000000000E+00 -3.662078918350E-01 6.028752484802E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.355674699554E-01 -5.816833143962E-01 0.000000000000E+00 4.623903167825E-01 -8.433418252551E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.169366480279E-01 4.725487158649E-01 0.000000000000E+00 -3.689006355834E-01 5.967121426641E-01 diff --git a/test/prog/sktable/LDA-PW91/Non-Relativistic/_O-C.skf b/test/prog/sktable/LDA-PW91/Non-Relativistic/_O-C.skf new file mode 100644 index 00000000..95e81d76 --- /dev/null +++ b/test/prog/sktable/LDA-PW91/Non-Relativistic/_O-C.skf @@ -0,0 +1,71 @@ +0.020000 69 + 0.000000000000E+00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.686339489004E-01 -1.469337820029E+00 0.000000000000E+00 3.723228695638E-01 -1.016832164944E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.797772864651E-01 8.272580013917E-01 0.000000000000E+00 -3.381931435904E-01 8.028635544958E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.141719597777E-01 -1.439399960177E+00 0.000000000000E+00 4.048110331490E-01 -1.003378391744E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.590145783887E-01 8.189402090230E-01 0.000000000000E+00 -3.489248185523E-01 7.978386164078E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.613960816559E-01 -1.409657521302E+00 0.000000000000E+00 4.364449439282E-01 -9.919735365729E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.381416649061E-01 8.104916398633E-01 0.000000000000E+00 -3.594688476156E-01 7.928580109422E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.103406879293E-01 -1.380144379898E+00 0.000000000000E+00 4.671446442509E-01 -9.823716125952E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.171895669475E-01 8.019213159742E-01 0.000000000000E+00 -3.698122589387E-01 7.879165848673E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.610299725038E-01 -1.350891285863E+00 0.000000000000E+00 4.968424091019E-01 -9.743443286428E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.961881856798E-01 7.932380939515E-01 0.000000000000E+00 -3.799427618865E-01 7.830088271502E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.134789097240E-01 -1.321926032137E+00 0.000000000000E+00 5.254818080989E-01 -9.676807328290E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.751662888507E-01 7.844506563623E-01 0.000000000000E+00 -3.898487685363E-01 7.781289740732E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.676941646783E-01 -1.293273622058E+00 0.000000000000E+00 5.530167948407E-01 -9.621867066080E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.541515023627E-01 7.755675043028E-01 0.000000000000E+00 -3.995194092319E-01 7.732711030468E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.236749516665E-01 -1.264956433475E+00 0.000000000000E+00 5.794108295001E-01 -9.576843455673E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.331703065845E-01 7.665969510010E-01 0.000000000000E+00 -4.089445427872E-01 7.684292157982E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.814138394659E-01 -1.236994378853E+00 0.000000000000E+00 6.046360391573E-01 -9.540112572765E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.122480369365E-01 7.575471163892E-01 0.000000000000E+00 -4.181147618985E-01 7.635973116300E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.408975028112E-01 -1.209405060693E+00 0.000000000000E+00 6.286724191639E-01 -9.510198014476E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.914088883220E-01 7.484259225772E-01 0.000000000000E+00 -4.270213942818E-01 7.587694514510E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.021074202121E-01 -1.182203921764E+00 0.000000000000E+00 6.515070777878E-01 -9.485762933346E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.706759230000E-01 7.392410901583E-01 0.000000000000E+00 -4.356565000129E-01 7.539398132678E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.502051888310E-02 -1.155404389719E+00 0.000000000000E+00 6.731335254767E-01 -9.465601876009E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.500710815275E-01 7.300001352872E-01 0.000000000000E+00 -4.440128655102E-01 7.491027398126E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.960976813235E-02 -1.129018015787E+00 0.000000000000E+00 6.935510092965E-01 -9.448632567123E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.296151964219E-01 7.207103674678E-01 0.000000000000E+00 -4.520839945620E-01 7.442527789630E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.155276942050E-03 -1.103054607341E+00 0.000000000000E+00 7.127638924177E-01 -9.433887751921E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.093280082226E-01 7.113788879966E-01 0.000000000000E+00 -4.598640967703E-01 7.393847175780E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.630797918795E-02 -1.077522354185E+00 0.000000000000E+00 7.307810779495E-01 -9.420507187406E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.892281836514E-01 7.020125890078E-01 0.000000000000E+00 -4.673480737469E-01 7.344936093519E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.688416798479E-02 -1.052427948546E+00 0.000000000000E+00 7.476154759395E-01 -9.407729852315E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.693333355954E-01 6.926181530696E-01 0.000000000000E+00 -4.745315033719E-01 7.295747972486E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 9.592172987071E-02 -1.027776698750E+00 0.000000000000E+00 7.632835119733E-01 -9.394886428906E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.496600446582E-01 6.832020532853E-01 0.000000000000E+00 -4.814106223959E-01 7.246239310536E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.234602382736E-01 -1.003572636687E+00 0.000000000000E+00 7.778046755159E-01 -9.381392095347E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.302238820441E-01 6.737705538548E-01 0.000000000000E+00 -4.879823076404E-01 7.196369805412E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.495406193684E-01 -9.798186191676E-01 0.000000000000E+00 7.912011059269E-01 -9.366739655363E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.110394335589E-01 6.643297110541E-01 0.000000000000E+00 -4.942440560313E-01 7.146102447261E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.742048511235E-01 -9.565164233467E-01 0.000000000000E+00 8.034972139560E-01 -9.350493021898E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.921203245312E-01 6.548853745952E-01 0.000000000000E+00 -5.001939636745E-01 7.095403576315E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.974956927047E-01 -9.336668364094E-01 0.000000000000E+00 8.147193364643E-01 -9.332281063355E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.734792454733E-01 6.454431893282E-01 0.000000000000E+00 -5.058307041660E-01 7.044242909772E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.194564415636E-01 -9.112697397324E-01 0.000000000000E+00 8.248954221193E-01 -9.311791814484E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.551279783164E-01 6.360085972525E-01 0.000000000000E+00 -5.111535063083E-01 6.992593541569E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.401307157253E-01 -8.893241877617E-01 0.000000000000E+00 8.340547458570E-01 -9.288767048810E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.370774230737E-01 6.265868398048E-01 0.000000000000E+00 -5.161621313906E-01 6.940431918471E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.595622589985E-01 -8.678284818485E-01 0.000000000000E+00 8.422276499893E-01 -9.262997205549E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.193376247932E-01 6.171829603939E-01 0.000000000000E+00 -5.208568501712E-01 6.887737795585E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.777947670450E-01 -8.467802392915E-01 0.000000000000E+00 8.494453099387E-01 -9.234316660987E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.019178006828E-01 6.078018071553E-01 0.000000000000E+00 -5.252384196897E-01 6.834494174162E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.948717324501E-01 -8.261764578355E-01 0.000000000000E+00 8.557395227061E-01 -9.202599332149E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.482636729548E-02 5.984480358984E-01 0.000000000000E+00 -5.293080600223E-01 6.780687224270E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.108363071275E-01 -8.060135758678E-01 0.000000000000E+00 8.611425163021E-01 -9.167754599095E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.807096767937E-02 5.891261132238E-01 0.000000000000E+00 -5.330674310792E-01 6.726306194712E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.257311805693E-01 -7.862875285514E-01 0.000000000000E+00 8.656867785006E-01 -9.129723531237E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.165849840656E-02 5.798403197874E-01 0.000000000000E+00 -5.365186095365E-01 6.671343312297E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.395984726019E-01 -7.669938001242E-01 0.000000000000E+00 8.694049033951E-01 -9.088475402515E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.559513640336E-02 5.705947536920E-01 0.000000000000E+00 -5.396640659805E-01 6.615793672406E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.524796394459E-01 -7.481274725818E-01 0.000000000000E+00 8.723294543561E-01 -9.044004480059E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.988636551630E-02 5.613933339854E-01 0.000000000000E+00 -5.425066423358E-01 6.559655122563E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.644153919894E-01 -7.296832709555E-01 0.000000000000E+00 8.744928420905E-01 -8.996327070971E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.537002755182E-03 5.522398042499E-01 0.000000000000E+00 -5.450495296382E-01 6.502928140567E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.754456252843E-01 -7.116556053828E-01 0.000000000000E+00 8.759272166073E-01 -8.945478812066E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.044877583678E-02 5.431377362657E-01 0.000000000000E+00 -5.472962462067E-01 6.445615708556E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.856093583546E-01 -6.940386101591E-01 0.000000000000E+00 8.766643719781E-01 -8.891512187745E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.506740972895E-02 5.340905337331E-01 0.000000000000E+00 -5.492506162613E-01 6.387723184228E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.949446834799E-01 -6.768261799500E-01 0.000000000000E+00 8.767356628639E-01 -8.834494261583E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.931592890156E-02 5.251014360415E-01 0.000000000000E+00 -5.509167490264E-01 6.329258170312E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.034887241736E-01 -6.600120033317E-01 0.000000000000E+00 8.761719318524E-01 -8.774504607727E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -5.319192932657E-02 5.161735220716E-01 0.000000000000E+00 -5.522990183538E-01 6.270230383232E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.112776011316E-01 -6.435895938200E-01 0.000000000000E+00 8.750034467156E-01 -8.711633428713E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.669354895606E-02 5.073097140203E-01 0.000000000000E+00 -5.534020428932E-01 6.210651521808E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.183464054728E-01 -6.275523185379E-01 0.000000000000E+00 8.732598467589E-01 -8.645979846909E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.981944423790E-02 4.985127812368E-01 0.000000000000E+00 -5.542306668347E-01 6.150535136726E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.247291786335E-01 -6.118934246655E-01 0.000000000000E+00 8.709700974883E-01 -8.577650357342E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.256876717421E-02 4.897853440629E-01 0.000000000000E+00 -5.547899412406E-01 6.089896501404E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.304588983199E-01 -5.966060638059E-01 0.000000000000E+00 8.681624528737E-01 -8.506757430284E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.049411429340E-01 4.811298776669E-01 0.000000000000E+00 -5.550851059821E-01 6.028752484802E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.355674699554E-01 -5.816833143962E-01 0.000000000000E+00 8.648644245347E-01 -8.433418252551E-01 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.169366480279E-01 4.725487158649E-01 0.000000000000E+00 -5.551215722907E-01 5.967121426641E-01 diff --git a/test/prog/sktable/LDA-PW91/Non-Relativistic/_O-O.skf b/test/prog/sktable/LDA-PW91/Non-Relativistic/_O-O.skf new file mode 100644 index 00000000..a619c38c --- /dev/null +++ b/test/prog/sktable/LDA-PW91/Non-Relativistic/_O-O.skf @@ -0,0 +1,72 @@ +0.020000 69 + 0.000000000000E+00 -3.382615309271E-01 -8.712170440733E-01 0.000000000000E+00 0.000000000000E+00 4.946289886562E-01 4.946289886562E-01 0.000000000000E+00 4.000000000000E+00 2.000000000000E+00 + 1.601000000000E+01 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.326190935645E-01 -1.880830124308E+00 0.000000000000E+00 2.471691470686E-01 -1.428102965249E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.091855466982E-01 8.160930793488E-01 0.000000000000E+00 -2.875578384015E-01 8.274780560328E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.567485641871E-01 -1.832880446807E+00 0.000000000000E+00 2.983763043403E-01 -1.415080769001E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.849088297428E-01 8.058011883910E-01 0.000000000000E+00 -2.981926612102E-01 8.212417559567E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.843957103756E-01 -1.785611675449E+00 0.000000000000E+00 3.477554272224E-01 -1.404027976808E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.606847140361E-01 7.953946124391E-01 0.000000000000E+00 -3.086453389762E-01 8.150305431199E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.155360568439E-01 -1.739068177080E+00 0.000000000000E+00 3.951869752604E-01 -1.394595314817E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.365515319808E-01 7.848859576827E-01 0.000000000000E+00 -3.188957229509E-01 8.088358387737E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.501296465289E-01 -1.693288145782E+00 0.000000000000E+00 4.405774875116E-01 -1.386469498149E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.125454462893E-01 7.742874426841E-01 0.000000000000E+00 -3.289249931476E-01 8.026491245344E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -8.812322679558E-02 -1.648304074064E+00 0.000000000000E+00 4.838569425054E-01 -1.379371102174E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.887004795642E-01 7.636108921659E-01 0.000000000000E+00 -3.387156760111E-01 7.964620605553E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.945224142041E-02 -1.604143203527E+00 0.000000000000E+00 5.249762695080E-01 -1.373052343781E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.650485513728E-01 7.528677327626E-01 0.000000000000E+00 -3.482516506773E-01 7.902665846321E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.595736508621E-02 -1.560827953747E+00 0.000000000000E+00 5.639050195286E-01 -1.367294828827E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.416195217385E-01 7.420689905518E-01 0.000000000000E+00 -3.575181452231E-01 7.840549940326E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 7.818752196094E-02 -1.518376328537E+00 0.000000000000E+00 6.006292000386E-01 -1.361907309962E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.184412400626E-01 7.312252901931E-01 0.000000000000E+00 -3.665017241961E-01 7.778200117655E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.273265748736E-01 -1.476802299214E+00 0.000000000000E+00 6.351492736475E-01 -1.356723488976E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.955395985704E-01 7.203468555141E-01 0.000000000000E+00 -3.751902686059E-01 7.715548389157E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.734679850635E-01 -1.436116164818E+00 0.000000000000E+00 6.674783179732E-01 -1.351599889282E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.729385894617E-01 7.094435113930E-01 0.000000000000E+00 -3.835729494571E-01 7.652531945787E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.167091725726E-01 -1.396324889574E+00 0.000000000000E+00 6.976403416010E-01 -1.346413817174E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.506603650167E-01 6.985246867955E-01 0.000000000000E+00 -3.916401958083E-01 7.589093448230E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.571504911304E-01 -1.357432418086E+00 0.000000000000E+00 7.256687493188E-01 -1.341061424645E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.287252999836E-01 6.875994188396E-01 0.000000000000E+00 -3.993836582520E-01 7.525181220104E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.948943225722E-01 -1.319439968981E+00 0.000000000000E+00 7.516049486638E-01 -1.335455881901E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.071520556377E-01 6.766763577626E-01 0.000000000000E+00 -4.067961686234E-01 7.460749356974E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.300442793110E-01 -1.282346307844E+00 0.000000000000E+00 7.754970891411E-01 -1.329525663968E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.859576449691E-01 6.657637726821E-01 0.000000000000E+00 -4.138716966685E-01 7.395757762428E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.627045042259E-01 -1.246148000382E+00 0.000000000000E+00 7.973989251907E-01 -1.323212952853E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.651574985121E-01 6.548695580441E-01 0.000000000000E+00 -4.206053043279E-01 7.330172121466E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.929790582725E-01 -1.210839646813E+00 0.000000000000E+00 8.173687939900E-01 -1.316472154529E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.447655303861E-01 6.440012406652E-01 0.000000000000E+00 -4.269930982218E-01 7.263963820520E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.209713870783E-01 -1.176414098517E+00 0.000000000000E+00 8.354686993978E-01 -1.309268528319E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.247942041695E-01 6.331659872791E-01 0.000000000000E+00 -4.330321808610E-01 7.197109822527E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.467838587031E-01 -1.142862657955E+00 0.000000000000E+00 8.517634937063E-01 -1.301576925069E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.052545982752E-01 6.223706125080E-01 0.000000000000E+00 -4.387206010479E-01 7.129592504635E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.705173655766E-01 -1.110175262876E+00 0.000000000000E+00 8.663201493028E-01 -1.293380629670E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 8.615647054203E-02 6.116215871841E-01 0.000000000000E+00 -4.440573038761E-01 7.061399465319E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.922709843634E-01 -1.078340655799E+00 0.000000000000E+00 8.792071128157E-01 -1.284670302891E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.750832179433E-02 6.009250469547E-01 0.000000000000E+00 -4.490420806896E-01 6.992523306960E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.121416881391E-01 -1.047346539695E+00 0.000000000000E+00 8.904937347976E-01 -1.275443017186E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 4.931745816379E-02 5.902868011093E-01 0.000000000000E+00 -4.536755193147E-01 6.922961399244E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.302241058035E-01 -1.017179720783E+00 0.000000000000E+00 9.002497684653E-01 -1.265701380931E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 3.159005199757E-02 5.797123415734E-01 0.000000000000E+00 -4.579589548354E-01 6.852715628119E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.466103241187E-01 -9.878262392931E-01 0.000000000000E+00 9.085449314601E-01 -1.255452745505E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.433120121070E-02 5.692068520187E-01 0.000000000000E+00 -4.618944211458E-01 6.781792134457E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.613897281534E-01 -9.592714889964E-01 0.000000000000E+00 9.154485250109E-01 -1.244708489651E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -2.455013032038E-03 5.587752170450E-01 0.000000000000E+00 -4.654846034780E-01 6.710201046053E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.746488762555E-01 -9.315003262857E-01 0.000000000000E+00 9.210291052771E-01 -1.233483375682E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.876547039397E-02 5.484220313932E-01 0.000000000000E+00 -4.687327920697E-01 6.637956206099E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.864714059818E-01 -9.044971695154E-01 0.000000000000E+00 9.253542020120E-01 -1.221794972226E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -3.459795727048E-02 5.381516091541E-01 0.000000000000E+00 -4.716428371118E-01 6.565074900847E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 5.969379676770E-01 -8.782460892879E-01 0.000000000000E+00 9.284900800356E-01 -1.209663138413E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -4.995111456509E-02 5.279679929394E-01 0.000000000000E+00 -4.742191050844E-01 6.491577588777E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.061261826503E-01 -8.527308903306E-01 0.000000000000E+00 9.305015393295E-01 -1.197109564619E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -6.482438736593E-02 5.178749629895E-01 0.000000000000E+00 -4.764664365723E-01 6.417487633226E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.141106231215E-01 -8.279351855655E-01 0.000000000000E+00 9.314517498723E-01 -1.184157365119E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -7.921797653465E-02 5.078760461905E-01 0.000000000000E+00 -4.783901056258E-01 6.342831040136E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.209628113300E-01 -8.038424629437E-01 0.000000000000E+00 9.314021176225E-01 -1.170830718232E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -9.313279220670E-02 4.979745249812E-01 0.000000000000E+00 -4.799957807166E-01 6.267636202273E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.267512354007E-01 -7.804361455797E-01 0.000000000000E+00 9.304121783325E-01 -1.157154549821E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.065704091894E-01 4.881734461305E-01 0.000000000000E+00 -4.812894873221E-01 6.191933651044E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.315413797598E-01 -7.576996456905E-01 0.000000000000E+00 9.285395161353E-01 -1.143154256238E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.195330242345E-01 4.784756293697E-01 0.000000000000E+00 -4.822775721555E-01 6.115755816791E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.353957680724E-01 -7.356164128129E-01 0.000000000000E+00 9.258397040911E-01 -1.128855463067E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.320234151537E-01 4.688836758659E-01 0.000000000000E+00 -4.829666690489E-01 6.039136798280E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.383740168561E-01 -7.141699767432E-01 0.000000000000E+00 9.223662641140E-01 -1.114283816264E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.440449017368E-01 4.593999765260E-01 0.000000000000E+00 -4.833636664831E-01 5.962112141878E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.405328980875E-01 -6.933439856182E-01 0.000000000000E+00 9.181706439196E-01 -1.099464802539E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.556013084295E-01 4.500267201218E-01 0.000000000000E+00 -4.834756767511E-01 5.884718630837E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.419264092753E-01 -6.731222395265E-01 0.000000000000E+00 9.133022088371E-01 -1.084423596048E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.666969287193E-01 4.407659012289E-01 0.000000000000E+00 -4.833100067310E-01 5.806994084892E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.426058496270E-01 -6.534887200173E-01 0.000000000000E+00 9.078082465293E-01 -1.069184928696E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.773364911786E-01 4.316193279736E-01 0.000000000000E+00 -4.828741302413E-01 5.728977170342E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.426199010689E-01 -6.344276158479E-01 0.000000000000E+00 9.017339828390E-01 -1.053772981567E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.875251271070E-01 4.225886295842E-01 0.000000000000E+00 -4.821756619414E-01 5.650707220630E-01 + 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 6.420147130152E-01 -6.159233452901E-01 0.000000000000E+00 8.951226071554E-01 -1.038211295188E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 -1.972683397175E-01 4.136752637429E-01 0.000000000000E+00 -4.812223327398E-01 5.572224067391E-01 diff --git a/test/prog/sktable/LDA-PW91/Non-Relativistic/config b/test/prog/sktable/LDA-PW91/Non-Relativistic/config new file mode 100644 index 00000000..2b6041a2 --- /dev/null +++ b/test/prog/sktable/LDA-PW91/Non-Relativistic/config @@ -0,0 +1 @@ +C,O C,O \ No newline at end of file diff --git a/test/prog/sktable/LDA-PW91/Non-Relativistic/skdef.hsd b/test/prog/sktable/LDA-PW91/Non-Relativistic/skdef.hsd new file mode 100644 index 00000000..c11f60ad --- /dev/null +++ b/test/prog/sktable/LDA-PW91/Non-Relativistic/skdef.hsd @@ -0,0 +1,186 @@ +SkdefVersion = 1 + +Globals { + Superposition = density + XCFunctional = lda {} +} + +AtomParameters { + + H { + AtomConfig { + AtomicNumber = 1 + Mass = 1.008 + Occupations { + 1S = 1.0 0.0 + } + ValenceShells = 1s + Relativistics = None + } + DftbAtom { + ShellResolved = No + DensityCompression = PowerCompression { Power = 2; Radius = 2.5 } + WaveCompressions = SingleAtomCompressions { + S = PowerCompression { Power = 2; Radius = 3.0 } + } + } + } + + C { + AtomConfig { + AtomicNumber = 6 + Mass = 12.01 + Occupations { + 1S = 1.0 1.0 + 2S = 1.0 1.0 + 2P = 2.0 0.0 + } + ValenceShells = 2s 2p + Relativistics = None + } + DftbAtom { + ShellResolved = No + DensityCompression = PowerCompression { Power = 2; Radius = 7.0 } + WaveCompressions = SingleAtomCompressions { + S = PowerCompression { Power = 2; Radius = 2.7 } + P = PowerCompression { Power = 2; Radius = 2.7 } + } + } + } + + N { + AtomConfig { + AtomicNumber = 7 + Mass = 14.007 + Occupations { + 1S = 1.0 1.0 + 2S = 1.0 1.0 + 2P = 2.0 1.0 + } + ValenceShells = 2s 2p + Relativistics = None + } + DftbAtom { + ShellResolved = No + DensityCompression = PowerCompression{ Power = 2; Radius = 11.0 } + WaveCompressions = SingleAtomCompressions { + S = PowerCompression { Power = 2; Radius = 2.2 } + P = PowerCompression { Power = 2; Radius = 2.2 } + } + CustomizedOnsites { + 2s = -0.64 + } + } + } + + O { + AtomConfig { + AtomicNumber = 8 + Mass = 16.01 + Occupations { + 1S = 1.0 1.0 + 2S = 1.0 1.0 + 2P = 2.0 2.0 + } + ValenceShells = 2s 2p + Relativistics = None + } + DftbAtom { + ShellResolved = No + DensityCompression = PowerCompression{ Power = 2; Radius = 9.0 } + WaveCompressions = SingleAtomCompressions { + S = PowerCompression { Power = 2; Radius = 2.3 } + P = PowerCompression { Power = 2; Radius = 2.3 } + } + } + } + +} + + +OnecenterParameters { + + $StandardDeltaFilling { + DeltaFilling = 0.01 + } + + H { + $StandardDeltaFilling + Calculator = SlaterAtom { + Exponents { + S = 0.50 1.0 2.0 + } + MaxPowers { + S = 3 + } + } + } + + C { + $StandardDeltaFilling + Calculator = SlaterAtom { + Exponents { + S = 0.5 1.14 2.62 6.0 + P = 0.5 1.14 2.62 6.0 + } + MaxPowers { + S = 3 + P = 3 + } + } + } + + N { + $StandardDeltaFilling + Calculator = SlaterAtom { + Exponents { + S = 0.5 1.2 2.9 7.0 + P = 0.5 1.2 2.9 7.0 + } + MaxPowers { + S = 3 + P = 3 + } + } + } + + O { + $StandardDeltaFilling + Calculator = SlaterAtom { + Exponents { + S = 0.5 1.26 3.17 8.0 + P = 0.5 1.26 3.17 8.0 + } + MaxPowers { + S = 3 + P = 3 + } + } + } +} + +TwoCenterParameters { + + $EqGrid = EquidistantGrid { + GridStart = 0.6 + GridSeparation = 0.02 + Tolerance = 5e-5 + MaxDistance = -1.4 + } + + $SkTwocnt_300_150 = Sktwocnt { + IntegrationPoints = 300 150 + } + + H-H { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + H-C { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + H-N { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + H-O { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + C-C { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + C-N { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + C-O { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + N-N { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + N-O { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + O-O { Grid = $EqGrid; Calculator = $SkTwocnt_300_150 } + +} diff --git a/test/prog/sktable/bin/testwithworkdir b/test/prog/sktable/bin/testwithworkdir new file mode 100644 index 00000000..ad596f5d --- /dev/null +++ b/test/prog/sktable/bin/testwithworkdir @@ -0,0 +1,119 @@ +#!/usr/bin/env python3 + +''' +Basic sktable Regression Test Script + +Initialized with the path to a working directory this script figures out the +rudimentary specifications of an sktable run and compares the existing +reference files with the output of the current version of the program. +''' + + +import os +import sys +import shutil +import subprocess +import argparse +from distutils.dir_util import copy_tree +from argparse import RawTextHelpFormatter + +sys.path.append(os.path.abspath('../../../../sktools/src/')) + +import testwithworkdir as twd +from testwithworkdir import TestWithWorkDirError + + +USAGE = ''' +Basic sktable Regression Test Script\n\n + +Initialized with the path to a working directory this script figures out the +rudimentary specifications of an sktable run and compares the existing +reference files with the output of the current version of the program. +''' + + +def main(cmdlineargs=None): + '''Main driver routine. + + Args: + cmdlineargs: list of command line arguments. When None, arguments in + sys.argv are parsed (Default: None) + + ''' + + args = parse_cmdline_args(cmdlineargs) + + copy_tree(os.path.join(args.templateroot, args.test), + os.path.join(args.workdir, args.test)) + + cwd = os.path.join(args.workdir, args.test) + + # get sktable configuration + with open(os.path.join(cwd, 'config'), 'r') as fd: + config = fd.readline() + + cmd = 'python3 ' \ + + os.path.abspath('../../../../sktools/src/sktools/scripts/skgen.py') \ + + ' ' + '-c {} '.format( + os.path.join(cwd, 'skdef.hsd')) \ + + '-o {} '.format(os.path.abspath( + '../../../slateratom/prog/slateratom')) \ + + '-t {} '.format( + os.path.abspath('../../../sktwocnt/prog/sktwocnt')) \ + + 'sktable ' + config + + # remove _build folder and old files if present + shutil.rmtree(os.path.join(cwd, '_build'), ignore_errors=True) + for fname in os.listdir(cwd): + if not fname.startswith('_') and fname.endswith('.skf'): + os.remove(os.path.join(cwd, fname)) + + # set environment variables + env = os.environ.copy() + path = os.path.abspath('../../../../sktools/src/') + os.pathsep \ + + os.path.abspath('../../../../sktools/src/sktools/') + try: + env['PYTHONPATH'] = path + os.pathsep + env['PYTHONPATH'] + except KeyError: + env['PYTHONPATH'] = path + + # run skgen/sktable + subprocess.call(cmd, cwd=cwd, env=env, shell=True) + + test = twd.TestWithWorkDir(os.path.join(args.workdir, args.test)) + passed = test.test() + + if not passed: + msg = "Regression test '" + str(args.test) + "' did not pass." + raise TestWithWorkDirError(msg) + + +def parse_cmdline_args(cmdlineargs=None): + '''Parses command line arguments. + + Args: + cmdlineargs: List of command line arguments. When None, arguments in + sys.argv are parsed (Default: None). + + ''' + + parser = argparse.ArgumentParser( + description=USAGE, formatter_class=RawTextHelpFormatter) + + msg = 'test specification' + parser.add_argument('test', action='store', type=str, help=msg) + + msg = 'working directory to run the tests in' + parser.add_argument('workdir', action='store', type=str, help=msg) + + msg = 'path to root of test template directories' + parser.add_argument('-r', '--templateroot', action='store', + dest='templateroot', default=os.getcwd(), type=str, + help=msg) + + args = parser.parse_args(cmdlineargs) + + return args + + +main() diff --git a/test/prog/sktable/bin/testwithworkdir.py b/test/prog/sktable/bin/testwithworkdir.py new file mode 100644 index 00000000..083a99b9 --- /dev/null +++ b/test/prog/sktable/bin/testwithworkdir.py @@ -0,0 +1,127 @@ +''' +Basic sktable Regression Test Class + +Initialized with the path to a working directory this class figures out the +rudimentary specifications of an sktable run and compares the existing +reference file with the output of the current version of the program. +''' + + +import os +import warnings +from collections import Counter + +from sktools.oldskfile import OldSKFile + + +SKDEF = 'skdef.hsd' + +ATOL = 1e-10 +RTOL = 1e-09 + + +class TestWithWorkDir: + '''Basic sktable Regression Test Class.''' + + + def __init__(self, wdir): + '''Initializes a TestWithWorkDir object. + + Args: + + wdir (str): path to working directory to perform regression testing + + ''' + + self._wdir = wdir + + # check for skdef file + if not os.path.isfile(os.path.join(self._wdir, SKDEF)): + raise TestWithWorkDirError('Skdef file absent.') + + # check for reference SK-files and additional junk + allfiles = os.listdir(self._wdir) + reffiles = [fname for fname in os.listdir(self._wdir) + if fname.startswith('_') and fname.endswith('.skf')] + if len(reffiles) < 1: + raise TestWithWorkDirError('No reference SK-files found.') + + # check if there is any additional junk + if Counter(reffiles) != Counter(allfiles): + exceptions = ['config', '_build', SKDEF] + curfiles = [fname.strip('_') for fname in reffiles] + junkfiles = [fname for fname in allfiles + if fname not in reffiles + and fname not in curfiles + and fname not in exceptions + and not fname.endswith('~')] + if len(junkfiles) > 0: + warnings.warn('Found additional junk in the directory: {}' + .format(junkfiles)) + + # store list of SK-files to compare (without '_' at the beginning) + self._skfiles = [fname.strip('_') for fname in reffiles] + + + def test(self): + '''Performs regression testing by comparing all relevant files. + + Returns: + + passed (bool): True, if all tests have passed, otherwise False + + ''' + + skpassed = True + + for skfile in self._skfiles: + ishomo = infer_homonuclear(skfile) + if ishomo: + print('Comparing homonuclear files ({}, {}):' + .format(skfile, '_' + skfile)) + else: + print('Comparing heteronuclear files ({}, {}):' + .format(skfile, '_' + skfile)) + curskfile = OldSKFile.fromfile( + os.path.join(self._wdir, skfile), ishomo) + refskfile = OldSKFile.fromfile( + os.path.join(self._wdir, '_' + skfile), ishomo) + skpassed = skpassed and curskfile.equals(refskfile, atol=ATOL, + rtol=RTOL) + if skpassed: + print('Passed.') + else: + print('Failed.') + + return skpassed + + +def infer_homonuclear(fname): + '''Tries to infer whether the filename of an SK-file + corresponds to a homo- or heteronuclear configuration. + + Args: + + fname (str): pathname of SK-file + + Returns: + + ishomo (bool): true, if SK-file seems to be homonuclear + + ''' + + fname = fname.strip('_') + fname = fname.strip('.skf') + elements = fname.split('-') + + ishomo = elements[0] == elements[1] + + return ishomo + + +class TestWithWorkDirError(Exception): + '''Exception thrown by the TestWithWorkDir class.''' + + +class SkfileError(Exception): + '''Exception thrown by the Skfile class.''' diff --git a/test/prog/sktable/tests b/test/prog/sktable/tests new file mode 100644 index 00000000..4ef363ba --- /dev/null +++ b/test/prog/sktable/tests @@ -0,0 +1,13 @@ +#! This file will be preprocessed using the same preprocessor options as used +#! for the compilation. + +#:include 'common.fypp' + +LDA-PW91/Non-Relativistic +GGA-PBE96/Non-Relativistic +HYB-PBE0/Non-Relativistic +HYB-B3LYP/Non-Relativistic +LCY-BNL/Non-Relativistic +LCY-PBE96/Non-Relativistic +CAMY-B3LYP/Non-Relativistic +CAMY-PBEh/Non-Relativistic diff --git a/tools/utils/srccheck/pylint/pylintrc-2.ini b/tools/utils/srccheck/pylint/pylintrc-2.ini new file mode 100644 index 00000000..4c909ac7 --- /dev/null +++ b/tools/utils/srccheck/pylint/pylintrc-2.ini @@ -0,0 +1,26 @@ +[TYPECHECK] + +ignored-modules = numpy, numpy.linalg +ignored-classes = numpy, numpy.linalg + +[BASIC] + +variable-rgx = [a-z_][a-z0-9_]{1,30}$ +good-names = _ + +[FORMAT] + +max-line-length = 80 + +[DESIGN] + +min-public-methods = 0 +max-locals = 20 +max-attributes = 20 +max-args = 10 +max-returns = 10 +max-statements = 100 +max-branches = 20 + +[MESSAGES CONTROL] +disable = old-style-class,star-args diff --git a/tools/utils/srccheck/pylint/pylintrc-3.ini b/tools/utils/srccheck/pylint/pylintrc-3.ini new file mode 100644 index 00000000..5d85cf14 --- /dev/null +++ b/tools/utils/srccheck/pylint/pylintrc-3.ini @@ -0,0 +1,30 @@ +[TYPECHECK] + +ignored-modules = numpy, numpy.linalg +ignored-classes = numpy, numpy.linalg + +[BASIC] + +variable-rgx = [a-z_][a-z0-9_]{1,30}$ +good-names = _ + +[FORMAT] + +max-line-length = 80 + +[DESIGN] + +min-public-methods = 0 +max-locals = 20 +max-attributes = 20 +max-args = 10 +max-returns = 10 +max-statements = 100 +max-branches = 20 + +[MESSAGES CONTROL] +disable = star-args + +[IMPORTS] +# remove optparse from deprecated modules +deprecated-modules = diff --git a/utils/srccheck/pylint/pylintrc-2.ini b/utils/srccheck/pylint/pylintrc-2.ini new file mode 100644 index 00000000..4c909ac7 --- /dev/null +++ b/utils/srccheck/pylint/pylintrc-2.ini @@ -0,0 +1,26 @@ +[TYPECHECK] + +ignored-modules = numpy, numpy.linalg +ignored-classes = numpy, numpy.linalg + +[BASIC] + +variable-rgx = [a-z_][a-z0-9_]{1,30}$ +good-names = _ + +[FORMAT] + +max-line-length = 80 + +[DESIGN] + +min-public-methods = 0 +max-locals = 20 +max-attributes = 20 +max-args = 10 +max-returns = 10 +max-statements = 100 +max-branches = 20 + +[MESSAGES CONTROL] +disable = old-style-class,star-args diff --git a/utils/srccheck/pylint/pylintrc-3.ini b/utils/srccheck/pylint/pylintrc-3.ini new file mode 100644 index 00000000..5d85cf14 --- /dev/null +++ b/utils/srccheck/pylint/pylintrc-3.ini @@ -0,0 +1,30 @@ +[TYPECHECK] + +ignored-modules = numpy, numpy.linalg +ignored-classes = numpy, numpy.linalg + +[BASIC] + +variable-rgx = [a-z_][a-z0-9_]{1,30}$ +good-names = _ + +[FORMAT] + +max-line-length = 80 + +[DESIGN] + +min-public-methods = 0 +max-locals = 20 +max-attributes = 20 +max-args = 10 +max-returns = 10 +max-statements = 100 +max-branches = 20 + +[MESSAGES CONTROL] +disable = star-args + +[IMPORTS] +# remove optparse from deprecated modules +deprecated-modules = diff --git a/utils/srcmanip/set_version b/utils/srcmanip/set_version new file mode 100755 index 00000000..84a7179a --- /dev/null +++ b/utils/srcmanip/set_version @@ -0,0 +1,125 @@ +#!/usr/bin/env python3 + +'''Tool for setting the version numbers in the project''' + +import sys +import re +import os +import argparse + +_DESCRIPTION = '''Set all version numbers in the project to a given value. +The list of files, where the project number is changed, is hardcoded in the +script.''' + +_VERSION_PATTERN = r'\d+\.\d+(?:\.\d+)?(?:-\w+)?' + +_FILES_AND_PATTERNS = [ + # + ( + 'CMakeLists.txt', + r'project\(SkProgs VERSION {}'.format(_VERSION_PATTERN), + 'project(SkProgs VERSION {version}' + ), + ( + 'slateratom/prog/cmdargs.f90', + r'parameter :: programVersion = \'{}\''\ + .format(_VERSION_PATTERN), + "parameter :: programVersion = '{version}'" + ), + ( + 'sktwocnt/prog/cmdargs.f90', + r'parameter :: programVersion = \'{}\''\ + .format(_VERSION_PATTERN), + "parameter :: programVersion = '{version}'" + ), + ( + 'sktools/src/sktools/__init__.py', + r"^PACKAGE_VERSION = '{}'".format(_VERSION_PATTERN), + "PACKAGE_VERSION = '{version}'" + ), + ( + 'sktools/setup.cfg', + r'version = {}'.format(_VERSION_PATTERN), + 'version = {version}' + ), + # +] + + +def main(): + 'Main script executable.' + + args = _parse_arguments() + version = args.version + shortversion = _get_short_version(version) + rootdir = os.path.join(os.path.dirname(sys.argv[0]), '../../') + + _replace_in_registered_files(rootdir, version, shortversion) + #_replace_in_changelog(rootdir, version) + + +def _parse_arguments(): + '''Returns parsed command line arguments.''' + + parser = argparse.ArgumentParser(description=_DESCRIPTION) + msg = 'Version to set' + parser.add_argument('version', help=msg) + args = parser.parse_args() + + match = re.match(r'^{}$'.format(_VERSION_PATTERN), args.version) + if match is None: + parser.error("Invalid version string") + + return args + + +def _get_short_version(version): + '''Returns the short version (without patch number).''' + + return '.'.join(version.split('.')[0:2]) + + +def _replace_in_registered_files(rootdir, version, shortversion): + '''Replaces the version number in various (registered) files.''' + + for fname, regexp, repl in _FILES_AND_PATTERNS: + fname = os.path.join(rootdir, fname) + print("Replacments in '{}': ".format(fname), end='') + fp = open(fname, 'r') + txt = fp.read() + fp.close() + replacement = repl.format(version=version, shortversion=shortversion) + newtxt, nsub = re.subn(regexp, replacement, txt, flags=re.MULTILINE) + print(nsub) + fp = open(fname, 'w') + fp.write(newtxt) + fp.close() + + +def _replace_in_changelog(rootdir, version): + '''Replace version number in Change Log and adapt decoration below.''' + + fname = os.path.join(rootdir, 'CHANGELOG.rst') + print("Replacments in '{}': ".format(fname), end='') + fp = open(fname, 'r') + txt = fp.read() + fp.close() + decoration = '=' * len(version) + newtxt, nsub = re.subn( + r'^Unreleased\s*\n=+', version + '\n' + decoration, txt, + count=1, flags=re.MULTILINE) + print(nsub) + fp = open(fname, 'w') + fp.write(newtxt) + fp.close() + + + +def _fatal_error(msg): + '''Writes error message and exits.''' + sys.stderr.write(msg + "\n") + sys.exit(1) + + +if __name__ == '__main__': + main() diff --git a/utils/test/testlist_to_fypp b/utils/test/testlist_to_fypp new file mode 100755 index 00000000..a1d56948 --- /dev/null +++ b/utils/test/testlist_to_fypp @@ -0,0 +1,7 @@ +#!/usr/bin/env python3 +import re +import sys +CONDITIONAL_PATTERN = re.compile( + r'^[ \t]*([^#\n][^\n]*?)[ \t]+#\?[ \t]+([^\n]*?)[ \t]*$', re.MULTILINE) +sys.stdout.write( + CONDITIONAL_PATTERN.sub(r'#{if \2}#\1#{endif}#', sys.stdin.read()))