diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 000000000..b5408c2f0 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,31 @@ +FROM ubuntu:24.04 + +RUN apt update -y && apt install -y --no-install-recommends\ + gcc \ + g++ \ + make \ + cmake \ + ninja-build \ + git \ + ca-certificates \ + libopenblas-dev \ + && apt clean && rm -rf /var/lib/apt/lists/* + +# Install SuiteSparse for klu +RUN git clone --single-branch --depth 1 --branch v7.10.2 https://github.com/DrTimothyAldenDavis/SuiteSparse.git /tmp/suitesparse && \ + cd /tmp/suitesparse && \ + mkdir -p build && cd build && \ + cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DSUITESPARSE_ENABLE_PROJECTS="klu" .. && \ + ninja install && \ + rm -rf /tmp/suitesparse + +# Install sundials using klu from previous step +RUN git clone --single-branch --branch develop https://github.com/LLNL/sundials.git /tmp/sundials && \ + cd /tmp/sundials && \ + git checkout 07d21c2c5ae33211a9a2fafd8eac56de5582dce0 && \ + mkdir -p build && cd build && \ + cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DENABLE_KLU=ON .. && \ + ninja install && \ + rm -rf /tmp/sundials diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 000000000..fa5dc63f0 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,12 @@ +{ + "build": { + "dockerfile": "Dockerfile" + }, + "customizations": { + "vscode": { + "extensions": [ + "ms-vscode.cpptools" + ] + } + } +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..dcc5f149c --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[{CMakeLists.txt,*.{cpp,hpp,tpp,sh,h,cu,hip,cmake}}] +indent_style = space +indent_size = 2 + +[*.{json,m}] +indent_style = space +indent_size = 4 diff --git a/.github/workflows/spack_default_build.yaml b/.github/workflows/spack_default_build.yaml index fcdb28c9b..5ece7532c 100644 --- a/.github/workflows/spack_default_build.yaml +++ b/.github/workflows/spack_default_build.yaml @@ -1,5 +1,5 @@ # https://spack.readthedocs.io/en/latest/binary_caches.html#spack-build-cache-for-github-actions -name: Spack Ubunutu x86_64 Buildcache +name: CPU tests (Ubunutu x86_64) env: SPACK_COLOR: always @@ -7,7 +7,7 @@ env: # Our repo name contains upper case characters, so we can't use ${{ github.repository }} IMAGE_NAME: gridkit USERNAME: gridkit-bot - BASE_VERSION: ubuntu-24.04-fortran-v0.2.11 + BASE_VERSION: ubuntu-24.04-fortran-v0.2.12 # Until we remove the need to clone submodules to build, this should on be in PRs on: [pull_request] @@ -92,7 +92,7 @@ jobs: permissions: packages: write contents: read - timeout-minutes: 30 + timeout-minutes: 60 strategy: matrix: @@ -101,6 +101,9 @@ jobs: spack_spec: - gridkit@develop +enzyme ^enzyme@0.0.173 + ^sundials@develop + - gridkit@develop ~enzyme + ^sundials@develop steps: - name: Add LLVM @@ -127,13 +130,14 @@ jobs: specs: - ${{ matrix.spack_spec }} target=x86_64_v2 concretizer: + unify: true reuse: dependencies config: install_tree: root: /opt/spack padded_length: 128 mirrors: - local-buildcache: oci://${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + local-buildcache: oci://${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/${{ env.BASE_VERSION }} spack: https://binaries.spack.io/v0.23.1 packages: llvm: diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index eda93831a..9e7c4c3a4 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,6 +3,7 @@ repos: rev: v19.1.7 hooks: - id: clang-format + types_or: [c++, c, cuda] - repo: https://github.com/pre-commit/pre-commit-hooks rev: v5.0.0 hooks: diff --git a/CMakeLists.txt b/CMakeLists.txt index 24f15839c..7428b0468 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,11 +20,14 @@ set(PACKAGE_VERSION_PATCH "0") set(PACKAGE_VERSION "${PACKAGE_VERSION_MAJOR}.${PACKAGE_VERSION_MINOR}.${PACKAGE_VERSION_PATCH}") -# TODO: Probably beter to set a debug interface target -# set(CMAKE_CXX_FLAGS_DEBUG "-Wall -O0 -g -DDEBUG") - set(CMAKE_CXX_STANDARD 17) +if (MSVC) + set(CMAKE_CXX_FLAGS "/Wall") +else() + set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wconversion -Wpedantic") +endif() + # Ipopt support is disabled by default option(GRIDKIT_ENABLE_IPOPT "Enable Ipopt support" OFF) @@ -37,6 +40,22 @@ option(GRIDKIT_ENABLE_SUNDIALS_SPARSE "Enable SUNDIALS sparse linear solvers" ON # Enzyme support is disabled by default option(GRIDKIT_ENABLE_ENZYME "Enable automatic differentiation with Enzyme" OFF) +# Enable the address sanitizer +option(GRIDKIT_ENABLE_ASAN "Enable the address sanitizer" OFF) + +if(GRIDKIT_ENABLE_ASAN) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") +endif() + +# Enable the undefined behavior sanitizer +option(GRIDKIT_ENABLE_UBSAN "Enable the undefined behavior sanitizer" OFF) + +if(GRIDKIT_ENABLE_UBSAN) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined -fno-omit-frame-pointer") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined") +endif() + set(CMAKE_MACOSX_RPATH 1) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS 1) @@ -73,7 +92,7 @@ if(GRIDKIT_ENABLE_IPOPT) enable_language(Fortran) # Needed for linking to HSL endif() if(GRIDKIT_ENABLE_SUNDIALS) - find_package(SUNDIALS 7.0.0 REQUIRED CONFIG + find_package(SUNDIALS 7.0.0 REQUIRED CONFIG PATHS ${SUNDIALS_DIR} ${SUNDIALS_DIR}/lib/cmake/sundials) message(STATUS "SUNDIALS configuration found: ${SUNDIALS_CONFIG}") @@ -84,6 +103,8 @@ endif() if(${GRIDKIT_ENABLE_ENZYME}) include(FindEnzyme) + # todo Add a centralized configuration file + add_definitions(-DGRIDKIT_ENABLE_ENZYME) endif() # Macro that adds libraries @@ -97,7 +118,7 @@ add_subdirectory(src) enable_testing() add_subdirectory(examples) add_subdirectory(tests) - + export(EXPORT gridkit-targets FILE ${CMAKE_CURRENT_BINARY_DIR}/GridKitTargets.cmake) # Configuring exporting cmake config diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 01fe28e12..10e9c6368 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -57,6 +57,64 @@ in the GridKit™ repository. There has to be at least one approval before the pull request can be merged. +## Documenting Code + +### Doxygen +All comments in the code should follow [Doxygen](https://www.doxygen.nl/manual/index.html) +markup. For uniformity, we recommend C-style Doxygen comments starting with +two `*`. + +### Documenting functions +Functions should be documented in source files. The rationale is to have +the documentation near the implementation, so that is handy to a developer and +can be updated quickly when the function modified. + +### Minimal function documentation +Function documentation should include specification of function parameters, +template parameters (if any), return value, preconditions, postconditions, +and invariants. + +```c++ +/** + * @brief + * + * @param + * @tparam + * @return + * + * @pre + * @post + * + * LONGER DESCRIPTION, RUNTIME, EXAMPLES, ETC + */ +``` + +* `@brief` marks the text that will be displayed in summaries and index lists. +Typically you would put here a few words description of your function. +* `@param` describes a function parameter and takes an optional direction: +`@param[in]` means the parameter's value is only read and not modified within +the function, `@param[out]` means the parameter is not read and is only +modified, and `@param[in,out]` means the parameter is both read and modified. +* `@pre` and `@post` define the pre- and postconditions, which should be +precise but brief. When in doubt, attempt rigorous conditions but keep in mind +that some concepts such as "validity" may be difficult or impossible to define +precisely. Specifications are primarily for human consumption. +* `@param`, `@pre`, and `@post` sections should be repeated as many time as +required. + + +### Doxygen and Markdown + +Doxygen supports Markdown markup and it should be used to make documentation +more clear. For example, +```c++ + * @return The size of `a` +``` +is clearer than +```c++ + * @return The size of a +``` +when read in plain text and in formatted documentation. ## Code Style @@ -126,6 +184,24 @@ double another_member; // No, there is no trailing underscore to distinguish i double memberVariable_; // No, using lowercase camel instead of C-style name format ``` +#### Ecxeption + +Public member variables that are accessed directly do not need trailing +underscores. For example, consider this code: +```c++ +struct ModelData +{ + int id; + double value; +}; + +ModelData data; +data.id = 1; +data.value = 2.0; +``` +Member variables of struct `data` are accessed diorectly outside the struct +and do not need to be denoted with trailing underscores `_`. + ### Function names Use lowercase camel format for function names. @@ -399,3 +475,7 @@ class Matrix // No, class is outside GridKit namespace { // matrix code }; +``` + +## Development Container +A development container is available for all developers using VS Code to develop. This will automatically install all pre-requisite software you need to develop in GridKit. Any developer who wishes to use this setup can follow [this tutorial](https://code.visualstudio.com/docs/devcontainers/tutorial) and simply use the option "Reopen Folder in Container" rather than "New Dev Container...", which will automatically build the included container. diff --git a/README.md b/README.md index c123faa21..087e4a145 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Before installing GridKit™ make sure you have all needed dependencies. ### Dependencies You should have all of the following installed before installing GridKit™ - A version of - - [SUNDIALS](https://github.com/LLNL/sundials) >= 7.0.0 + - [SUNDIALS](https://github.com/LLNL/sundials) `develop` branch at commit >= [`07d21c2`](https://github.com/LLNL/sundials/commit/07d21c2c5ae33211a9a2fafd8eac56de5582dce0) - [Suitesparse](https://github.com/DrTimothyAldenDavis/SuiteSparse) >= 5.x (optional) - If using Suitesparse, SUNDIALS must also be built with [KLU support](https://sundials.readthedocs.io/en/latest/sundials/Install_link.html#cmakeoption-ENABLE_KLU) - [Ipopt](https://github.com/coin-or/Ipopt) >= 3.x (optional) diff --git a/cmake/EnzymeAddLibrary.cmake b/cmake/EnzymeAddLibrary.cmake new file mode 100644 index 000000000..9d7832ee8 --- /dev/null +++ b/cmake/EnzymeAddLibrary.cmake @@ -0,0 +1,123 @@ +# +#[[ + +Macro to manually compile with Enzyme + +Author(s): +- Asher Mancinelli +- Nicholson Koukpaizan + +]] + +macro(enzyme_build_object) + set(options) + set(oneValueArgs NAME) + set(multiValueArgs SOURCES LINK_LIBRARIES INCLUDE_DIRECTORIES) + cmake_parse_arguments(enzyme_build_object "${options}" "${oneValueArgs}" + "${multiValueArgs}" ${ARGN}) + + set(PHASE2 "${CMAKE_CURRENT_BINARY_DIR}/${enzyme_build_object_NAME}.bc") + set(PHASE3 "${CMAKE_CURRENT_BINARY_DIR}/${enzyme_build_object_NAME}_enzyme.ll") + set(PHASE4 "${CMAKE_CURRENT_BINARY_DIR}/${enzyme_build_object_NAME}_opt.ll") + set(PHASE5 "${CMAKE_CURRENT_BINARY_DIR}/${enzyme_build_object_NAME}") + + set(OBJS "") + set(includes "${enzyme_build_object_INCLUDE_DIRECTORIES}") + + foreach(lib ${enzyme_build_object_LINK_LIBRARIES}) + get_target_property(include ${lib} INCLUDE_DIRECTORIES) + set(includes "${includes}" ${include}) + + get_target_property(libsource ${lib} SOURCES) + string(FIND "${libsource}" "TARGET" found) + if(NOT(${found} EQUAL -1)) + list(APPEND LINKER_FLAGS "-Wl,${libsource}") + endif() + endforeach() + + foreach(dir ${includes}) + if(EXISTS ${dir}) + list(APPEND INCLUDE_COMPILER_LIST "-I${dir}") + endif() + endforeach() + + foreach(SRC ${enzyme_build_object_SOURCES}) + set(PHASE0 "${CMAKE_CURRENT_SOURCE_DIR}/${SRC}") + set(PHASE1 "${CMAKE_CURRENT_BINARY_DIR}/${enzyme_build_object_NAME}_${SRC}_compile.o") + add_custom_command( + DEPENDS ${PHASE0} + OUTPUT ${PHASE1} + COMMAND ${CMAKE_CXX_COMPILER} -flto -c ${PHASE0} ${INCLUDE_COMPILER_LIST} -O2 -fno-vectorize -ffast-math -fno-unroll-loops -fpass-plugin=${ENZYME_CLANG_PLUGIN_LIBRARY} -Xclang -load -Xclang ${ENZYME_CLANG_PLUGIN_LIBRARY} -mllvm -enable-load-pre=0 -mllvm -enzyme-auto-sparsity=1 -o ${PHASE1} + COMMENT "Compiling ${SRC} to object file for target ${enzyme_build_object_NAME}" + ) + set(OBJS "${OBJS} ${PHASE1}") + endforeach() + + cmake_language(EVAL CODE " + add_custom_command( + DEPENDS ${OBJS} + OUTPUT ${PHASE2} + COMMAND ${GRIDKIT_LLVM_LINK} ${OBJS} -o ${PHASE2} + COMMENT \"Linking object files to LLVM bytecode for target ${enzyme_build_object_NAME}\" + ) + ") + + add_custom_command( + DEPENDS ${PHASE2} + OUTPUT ${PHASE3} + COMMAND ${GRIDKIT_OPT} ${PHASE2} -load-pass-plugin=${ENZYME_LLVM_PLUGIN_LIBRARY} -passes=enzyme -o ${PHASE3} -S + COMMENT "Running Enzyme opt pass on target ${enzyme_build_object_NAME}" + ) + + add_custom_command( + DEPENDS ${PHASE3} + OUTPUT ${PHASE4} + COMMAND ${GRIDKIT_OPT} ${PHASE3} -O2 -o ${PHASE4} -S + COMMENT "Running remaining opt passes on target ${enzyme_build_object_NAME}" + ) + + add_custom_command( + DEPENDS ${PHASE4} + OUTPUT ${PHASE5} + COMMAND ${CMAKE_CXX_COMPILER} -c ${PHASE4} -o ${PHASE5} + COMMENT "Generating optimized object file for target ${enzyme_build_object_NAME}" + ) +endmacro() + +macro(enzyme_add_executable) + set(options) + set(oneValueArgs NAME) + set(multiValueArgs SOURCES LINK_LIBRARIES INCLUDE_DIRECTORIES) + cmake_parse_arguments(enzyme_add_executable "${options}" "${oneValueArgs}" + "${multiValueArgs}" ${ARGN}) + + enzyme_build_object( + NAME "${enzyme_add_executable_NAME}.o" + SOURCES ${enzyme_add_executable_SOURCES} + LINK_LIBRARIES ${enzyme_add_executable_LINK_LIBRARIES} + INCLUDE_DIRECTORIES ${enzyme_add_executable_INCLUDE_DIRECTORIES} + ) + + add_executable("${enzyme_add_executable_NAME}" "${enzyme_add_executable_NAME}.o") + set_target_properties("${enzyme_add_executable_NAME}" PROPERTIES LINKER_LANGUAGE CXX) + target_link_libraries("${enzyme_add_executable_NAME}" ${enzyme_add_executable_LINK_LIBRARIES}) +endmacro() + +macro(enzyme_add_library) + set(options) + set(oneValueArgs NAME) + set(multiValueArgs SOURCES LINK_LIBRARIES INCLUDE_DIRECTORIES) + cmake_parse_arguments(enzyme_add_library "${options}" "${oneValueArgs}" + "${multiValueArgs}" ${ARGN}) + + enzyme_build_object( + NAME "${enzyme_add_library_NAME}.o" + SOURCES ${enzyme_add_library_SOURCES} + LINK_LIBRARIES ${enzyme_add_library_LINK_LIBRARIES} + INCLUDE_DIRECTORIES ${enzyme_add_library_INCLUDE_DIRECTORIES} + ) + + add_library("${enzyme_add_library_NAME}" "${enzyme_add_library_NAME}.o") + set_target_properties("${enzyme_add_library_NAME}" PROPERTIES LINKER_LANGUAGE CXX) + target_link_libraries("${enzyme_add_library_NAME}" ${enzyme_add_library_LINK_LIBRARIES}) +endmacro() diff --git a/cmake/FindEnzyme.cmake b/cmake/FindEnzyme.cmake index 00a76d372..fbfaa440a 100644 --- a/cmake/FindEnzyme.cmake +++ b/cmake/FindEnzyme.cmake @@ -59,82 +59,3 @@ find_program(GRIDKIT_OPT opt bin REQUIRED) message(STATUS "opt: ${GRIDKIT_OPT}") - -macro(enzyme_add_executable) - set(options) - set(oneValueArgs NAME) - set(multiValueArgs SOURCES LINK_LIBRARIES INCLUDE_DIRECTORIES) - cmake_parse_arguments(enzyme_add_executable "${options}" "${oneValueArgs}" - "${multiValueArgs}" ${ARGN}) - - set(PHASE2 "${CMAKE_CURRENT_BINARY_DIR}/${enzyme_add_executable_NAME}.bc") - set(PHASE3 "${CMAKE_CURRENT_BINARY_DIR}/${enzyme_add_executable_NAME}_enzyme.ll") - set(PHASE4 "${CMAKE_CURRENT_BINARY_DIR}/${enzyme_add_executable_NAME}_opt.ll") - set(PHASE5 "${CMAKE_CURRENT_BINARY_DIR}/${enzyme_add_executable_NAME}") - - set(OBJS "") - set(includes "${enzyme_add_executable_INCLUDE_DIRECTORIES}") - - foreach(lib ${enzyme_add_executable_LINK_LIBRARIES}) - get_target_property(include ${lib} INCLUDE_DIRECTORIES) - set(includes "${includes}" ${include}) - - get_target_property(libsource ${lib} SOURCES) - string(FIND "${libsource}" "TARGET" found) - if(NOT(${found} EQUAL -1)) - list(APPEND LINKER_FLAGS "-Wl,${libsource}") - endif() - endforeach() - - foreach(dir ${includes}) - if(EXISTS ${dir}) - list(APPEND INCLUDE_COMPILER_LIST "-I${dir}") - endif() - endforeach() - - foreach(SRC ${enzyme_add_executable_SOURCES}) - set(PHASE0 "${CMAKE_CURRENT_SOURCE_DIR}/${SRC}") - set(PHASE1 "${CMAKE_CURRENT_BINARY_DIR}/${enzyme_add_executable_NAME}_${SRC}_compile.o") - add_custom_command( - DEPENDS ${PHASE0} - OUTPUT ${PHASE1} - COMMAND ${CMAKE_CXX_COMPILER} -flto -c ${PHASE0} ${INCLUDE_COMPILER_LIST} -O2 -fno-vectorize -ffast-math -fno-unroll-loops -fpass-plugin=${ENZYME_CLANG_PLUGIN_LIBRARY} -Xclang -load -Xclang ${ENZYME_CLANG_PLUGIN_LIBRARY} -mllvm -enable-load-pre=0 -mllvm -enzyme-auto-sparsity=1 -o ${PHASE1} - COMMENT "Compiling ${SRC} to object file for target ${enzyme_add_executable_NAME}" - ) - set(OBJS "${OBJS} ${PHASE1}") - endforeach() - - cmake_language(EVAL CODE " - add_custom_command( - DEPENDS ${OBJS} - OUTPUT ${PHASE2} - COMMAND ${GRIDKIT_LLVM_LINK} ${OBJS} -o ${PHASE2} - COMMENT \"Linking object files to LLVM bytecode for target ${enzyme_add_executable_NAME}\" - ) - ") - - add_custom_command( - DEPENDS ${PHASE2} - OUTPUT ${PHASE3} - COMMAND ${GRIDKIT_OPT} ${PHASE2} -load-pass-plugin=${ENZYME_LLVM_PLUGIN_LIBRARY} -passes=enzyme -o ${PHASE3} -S - COMMENT "Running Enzyme opt pass on target ${enzyme_add_executable_NAME}" - ) - - add_custom_command( - DEPENDS ${PHASE3} - OUTPUT ${PHASE4} - COMMAND ${GRIDKIT_OPT} ${PHASE3} -O2 -o ${PHASE4} -S - COMMENT "Running remaining opt passes on target ${enzyme_add_executable_NAME}" - ) - - add_custom_command( - DEPENDS ${PHASE4} ${enzyme_add_executable_LINK_LIBRARIES} - OUTPUT ${PHASE5} - COMMAND ${CMAKE_CXX_COMPILER} ${LINKER_FLAGS} ${PHASE4} -o ${PHASE5} - ) - - add_custom_target( - "${enzyme_add_executable_NAME}_target" ALL - DEPENDS ${PHASE5} - ) -endmacro() diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 6e0382b71..c242976a4 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,25 +1,16 @@ -# +# [[ +# Author(s): +# - Slaven Peles +#]] -add_subdirectory(MatPowerTesting) add_subdirectory(LinearAlgebra) -add_subdirectory(DistributedGeneratorTest) -if(TARGET SUNDIALS::kinsol) - add_subdirectory(Grid3Bus) -endif() +add_subdirectory(PowerFlow) +add_subdirectory(PowerElectronics) +add_subdirectory(Experimental) if(TARGET SUNDIALS::idas) - add_subdirectory(AdjointSensitivity) - add_subdirectory(RLCircuit) - add_subdirectory(Microgrid) - add_subdirectory(ScaleMicrogrid) add_subdirectory(PhasorDynamics) - if(GRIDKIT_ENABLE_IPOPT) - add_subdirectory(DynamicConstrainedOpt) - add_subdirectory(GenConstLoad) - add_subdirectory(GenInfiniteBus) - add_subdirectory(ParameterEstimation) - endif() endif() if(GRIDKIT_ENABLE_ENZYME) diff --git a/examples/Enzyme/Library/Scalar/CMakeLists.txt b/examples/Enzyme/Library/Scalar/CMakeLists.txt index 6dff430a6..21e1b9b9f 100644 --- a/examples/Enzyme/Library/Scalar/CMakeLists.txt +++ b/examples/Enzyme/Library/Scalar/CMakeLists.txt @@ -1,6 +1,4 @@ -enzyme_add_executable( - NAME EnzymeLibScalarCheck - SOURCES EnzymeScalar.cpp ScalarModel.cpp -) +add_executable(EnzymeLibScalarCheck EnzymeScalar.cpp ScalarModel.cpp) +target_link_libraries(EnzymeLibScalarCheck ClangEnzymeFlags GRIDKIT::Utilities) add_test(NAME "EnzymeLibScalarCheck" COMMAND ${CMAKE_CURRENT_BINARY_DIR}/EnzymeLibScalarCheck) diff --git a/examples/Enzyme/Library/Scalar/EnzymeScalar.cpp b/examples/Enzyme/Library/Scalar/EnzymeScalar.cpp index a20f69e13..933e1bd70 100644 --- a/examples/Enzyme/Library/Scalar/EnzymeScalar.cpp +++ b/examples/Enzyme/Library/Scalar/EnzymeScalar.cpp @@ -1,7 +1,7 @@ #include -#include #include "ScalarModel.hpp" +#include /** * @brief Example that computes the derivative of a library function @@ -23,7 +23,7 @@ int main() double dsq = scalar_model.getDerivativeValue(); std::cout << "x = " << var << ", x^2 = " << sq << ", d(x^2)/dx = " << dsq << "\n"; - if (std::abs(dsq - 2.0 * var) > std::numeric_limits::epsilon()) + if (!GridKit::Testing::isEqual(dsq, 2.0 * var)) { fail++; std::cout << "Result incorrect\n"; diff --git a/examples/Enzyme/Library/Vector/CMakeLists.txt b/examples/Enzyme/Library/Vector/CMakeLists.txt index eda952de8..559a249b6 100644 --- a/examples/Enzyme/Library/Vector/CMakeLists.txt +++ b/examples/Enzyme/Library/Vector/CMakeLists.txt @@ -1,7 +1,4 @@ -enzyme_add_executable( - NAME EnzymeLibVectorCheck - SOURCES EnzymeVector.cpp VectorModel.cpp - LINK_LIBRARIES GRIDKIT::DenseMatrix -) +add_executable(EnzymeLibVectorCheck EnzymeVector.cpp VectorModel.cpp) +target_link_libraries(EnzymeLibVectorCheck ClangEnzymeFlags GRIDKIT::DenseMatrix GRIDKIT::Utilities) add_test(NAME "EnzymeLibVectorCheck" COMMAND ${CMAKE_CURRENT_BINARY_DIR}/EnzymeLibVectorCheck) diff --git a/examples/Enzyme/Library/Vector/EnzymeVector.cpp b/examples/Enzyme/Library/Vector/EnzymeVector.cpp index 8a3e69259..4d9dd22f1 100644 --- a/examples/Enzyme/Library/Vector/EnzymeVector.cpp +++ b/examples/Enzyme/Library/Vector/EnzymeVector.cpp @@ -1,7 +1,7 @@ #include -#include #include "VectorModel.hpp" +#include /** * @brief Example that computes the Jacobian of a vector-valued residual @@ -20,12 +20,12 @@ inline double dsquare_ref_scalar(double x) DenseMatrix dsquare_ref(std::vector x, std::vector y) { DenseMatrix jac(x.size(), y.size()); - for (int idy = 0; idy < y.size(); ++idy) + for (size_t idy = 0; idy < y.size(); ++idy) { - for (int idx = 0; idx < x.size(); ++idx) + for (size_t idx = 0; idx < x.size(); ++idx) { - if (idx == idy) - jac.setValue(idx, idy, dsquare_ref_scalar(x[idx])); + if (idy <= idx) + jac.setValue(idx, idy, dsquare_ref_scalar(x[idy])); } } return jac; @@ -34,12 +34,12 @@ DenseMatrix dsquare_ref(std::vector x, std::vector y) int main() { // Size and variable declarations - constexpr int n = 10; + constexpr size_t n = 10; std::vector var(n); // Random input values - srand(time(NULL)); - for (int idx = 0; idx < var.size(); ++idx) + srand(static_cast(time(NULL))); + for (size_t idx = 0; idx < var.size(); ++idx) { var[idx] = rand(); } @@ -59,11 +59,11 @@ int main() // Check int fail = 0; bool verbose = true; - for (int idy = 0; idy < res.size(); ++idy) + for (size_t idy = 0; idy < res.size(); ++idy) { - for (int idx = 0; idx < var.size(); ++idx) + for (size_t idx = 0; idx < var.size(); ++idx) { - if (std::abs(jac.getValue(idx, idy) - jac_ref.getValue(idx, idy)) > std::numeric_limits::epsilon()) + if (!GridKit::Testing::isEqual(jac.getValue(idx, idy), jac_ref.getValue(idx, idy))) { fail++; if (verbose) diff --git a/examples/Enzyme/Library/Vector/VectorModel.cpp b/examples/Enzyme/Library/Vector/VectorModel.cpp index cb4d89f5e..bdd998422 100644 --- a/examples/Enzyme/Library/Vector/VectorModel.cpp +++ b/examples/Enzyme/Library/Vector/VectorModel.cpp @@ -4,7 +4,7 @@ #include "EnzymeWrapper.hpp" -VectorModel::VectorModel(int n) +VectorModel::VectorModel(size_t n) : x_(n), f_(n), df_dx_(n, n) @@ -18,15 +18,19 @@ inline double VectorModel::square_scalar(double x) void VectorModel::square(std::vector& x, std::vector& y) { - for (int idx = 0; idx < x.size(); ++idx) + for (size_t idx = 0; idx < x.size(); ++idx) { - y[idx] = this->square_scalar(x[idx]); + y[idx] = 0.0; + for (size_t idy = 0; idy <= idx; idy++) + { + y[idx] += this->square_scalar(x[idy]); + } } } void VectorModel::setVariable(std::vector x) { - for (int idx = 0; idx < x.size(); ++idx) + for (size_t idx = 0; idx < x.size(); ++idx) { x_[idx] = x[idx]; } @@ -39,13 +43,13 @@ void VectorModel::evalResidual() void VectorModel::evalJacobian() { - const int n = x_.size(); + const size_t n = x_.size(); std::vector v(n); VectorModel d_vector_model(n); - for (int idy = 0; idy < n; ++idy) + for (size_t idy = 0; idy < n; ++idy) { // Elementary vector for Jacobian-vector product - for (int idx = 0; idx < n; ++idx) + for (size_t idx = 0; idx < n; ++idx) { v[idx] = 0.0; } @@ -60,7 +64,7 @@ void VectorModel::evalJacobian() &d_vector_model); // Store result - for (int idx = 0; idx < n; ++idx) + for (size_t idx = 0; idx < n; ++idx) { df_dx_.setValue(idx, idy, d_res[idx]); } diff --git a/examples/Enzyme/Library/Vector/VectorModel.hpp b/examples/Enzyme/Library/Vector/VectorModel.hpp index da66f696f..fd85f7166 100644 --- a/examples/Enzyme/Library/Vector/VectorModel.hpp +++ b/examples/Enzyme/Library/Vector/VectorModel.hpp @@ -17,7 +17,7 @@ class VectorModel void square(std::vector&, std::vector&); public: - VectorModel(int); + VectorModel(size_t); void setVariable(std::vector); void evalResidual(); void evalJacobian(); diff --git a/examples/Enzyme/PowerElectronics/CMakeLists.txt b/examples/Enzyme/PowerElectronics/CMakeLists.txt index a8e74e881..a24c23268 100644 --- a/examples/Enzyme/PowerElectronics/CMakeLists.txt +++ b/examples/Enzyme/PowerElectronics/CMakeLists.txt @@ -1,7 +1,5 @@ -enzyme_add_executable( - NAME EnzymePowerElectronicsCheck - SOURCES main.cpp - LINK_LIBRARIES GRIDKIT::DenseMatrix GRIDKIT::power_elec_disgen -) +add_executable(EnzymePowerElectronicsCheck main.cpp) +target_compile_options(EnzymePowerElectronicsCheck PUBLIC -fno-vectorize -ffast-math -fno-unroll-loops) +target_link_libraries(EnzymePowerElectronicsCheck ClangEnzymeFlags GRIDKIT::DenseMatrix GRIDKIT::power_elec_disgen GRIDKIT::Utilities) add_test(NAME "EnzymePowerElectronicsCheck" COMMAND ${CMAKE_CURRENT_BINARY_DIR}/EnzymePowerElectronicsCheck) diff --git a/examples/Enzyme/PowerElectronics/main.cpp b/examples/Enzyme/PowerElectronics/main.cpp index eff14ddb0..35de5af92 100644 --- a/examples/Enzyme/PowerElectronics/main.cpp +++ b/examples/Enzyme/PowerElectronics/main.cpp @@ -1,9 +1,9 @@ #include -#include #include #include #include +#include /** * @brief Standalone example that computes the Jacobian associated with the @@ -15,7 +15,7 @@ */ using DenseMatrix = GridKit::LinearAlgebra::DenseMatrix; -using SparseMatrix = COO_Matrix; +using SparseMatrix = GridKit::LinearAlgebra::COO_Matrix; using DG = GridKit::DistributedGenerator; using DGParameters = GridKit::DistributedGeneratorParameters; @@ -97,15 +97,15 @@ void evaluateResidual(std::vector y_, std::vector f_) template void EnzymeModelJacobian(T* model, DenseMatrix& jac) { - int N = model->size(); + size_t N = model->size(); std::vector y(N); std::vector v(N); std::vector res(N); std::vector d_res(N); - for (int idy = 0; idy < N; ++idy) + for (size_t idy = 0; idy < N; ++idy) { // Elementary vector for Jacobian-vector product - for (int idx = 0; idx < N; ++idx) + for (size_t idx = 0; idx < N; ++idx) { y[idx] = (model->y())[idx]; res[idx] = (model->getResidual())[idx]; @@ -123,7 +123,7 @@ void EnzymeModelJacobian(T* model, DenseMatrix& jac) &d_res); // Store result - for (int idx = 0; idx < N; ++idx) + for (size_t idx = 0; idx < N; ++idx) { jac.setValue(idx, idy, d_res[idx]); } @@ -171,16 +171,18 @@ int main() // Check int fail = 0; bool verbose = true; - for (int idy = 0; idy < dg->size(); ++idy) + for (size_t idy = 0; idy < dg->size(); ++idy) { - for (int idx = 0; idx < dg->size(); ++idx) + for (size_t idx = 0; idx < dg->size(); ++idx) { - if (std::abs(jac_autodiff.getValue(idx, idy) - jac_ref_dense.getValue(idx, idy)) > std::numeric_limits::epsilon()) + double jac_value = jac_autodiff.getValue(idx, idy); + double jac_ref_value = jac_ref_dense.getValue(idx, idy); + if (!GridKit::Testing::isEqual(jac_value, jac_ref_value)) { fail++; if (verbose) { - std::cout << "Result incorrect at line = " << idy << ", column = " << idx << "\n"; + std::cout << "Result incorrect at line = " << idy << ", column = " << idx << ", obtained = " << jac_value << ", reference = " << jac_ref_value << ", difference = " << std::abs(jac_value - jac_ref_value) << "\n"; } } } diff --git a/examples/Enzyme/Standalone/CMakeLists.txt b/examples/Enzyme/Standalone/CMakeLists.txt index d80ba4f50..e62a2ea10 100644 --- a/examples/Enzyme/Standalone/CMakeLists.txt +++ b/examples/Enzyme/Standalone/CMakeLists.txt @@ -1,19 +1,12 @@ -enzyme_add_executable( - NAME EnzymeStandaloneScalarCheck - SOURCES EnzymeScalar.cpp -) +add_executable(EnzymeStandaloneScalarCheck EnzymeScalar.cpp) +target_link_libraries(EnzymeStandaloneScalarCheck ClangEnzymeFlags GRIDKIT::Utilities) -enzyme_add_executable( - NAME EnzymeStandaloneVectorCheck - SOURCES EnzymeVector.cpp - LINK_LIBRARIES GRIDKIT::DenseMatrix -) +add_executable(EnzymeStandaloneVectorCheck EnzymeVector.cpp) +target_link_libraries(EnzymeStandaloneVectorCheck ClangEnzymeFlags GRIDKIT::DenseMatrix GRIDKIT::Utilities) -enzyme_add_executable( - NAME EnzymeStandaloneSparseCheck - SOURCES EnzymeSparse.cpp - LINK_LIBRARIES GRIDKIT::SparseMatrix -) +add_executable(EnzymeStandaloneSparseCheck EnzymeSparse.cpp) +target_compile_options(EnzymeStandaloneSparseCheck PUBLIC -mllvm -enzyme-auto-sparsity=1) +target_link_libraries(EnzymeStandaloneSparseCheck ClangEnzymeFlags GRIDKIT::SparseMatrix GRIDKIT::Utilities) add_test(NAME "EnzymeStandaloneScalarCheck" COMMAND ${CMAKE_CURRENT_BINARY_DIR}/EnzymeStandaloneScalarCheck) add_test(NAME "EnzymeStandaloneVectorCheck" COMMAND ${CMAKE_CURRENT_BINARY_DIR}/EnzymeStandaloneVectorCheck) diff --git a/examples/Enzyme/Standalone/EnzymeScalar.cpp b/examples/Enzyme/Standalone/EnzymeScalar.cpp index d799e9b0f..01f1ce8d6 100644 --- a/examples/Enzyme/Standalone/EnzymeScalar.cpp +++ b/examples/Enzyme/Standalone/EnzymeScalar.cpp @@ -1,5 +1,6 @@ #include -#include + +#include /** * @brief Standalone example that computes the derivative of a scalar function @@ -27,7 +28,7 @@ int main() double sq = square(var); double dsq = dsquare(var); std::cout << "x = " << var << ", x^2 = " << sq << ", d(x^2)/dx = " << dsq << "\n"; - if (std::abs(dsq - 2.0 * var) > std::numeric_limits::epsilon()) + if (!GridKit::Testing::isEqual(dsq, 2.0 * var)) { fail++; std::cout << "Result incorrect\n"; diff --git a/examples/Enzyme/Standalone/EnzymeSparse.cpp b/examples/Enzyme/Standalone/EnzymeSparse.cpp index 627cc78f9..22311318b 100644 --- a/examples/Enzyme/Standalone/EnzymeSparse.cpp +++ b/examples/Enzyme/Standalone/EnzymeSparse.cpp @@ -1,10 +1,10 @@ #include #include -#include #include #include #include +#include /** * @brief Standalone example that computes the sparse Jacobian of a vector-valued function @@ -14,7 +14,7 @@ * TODO: Convert this into a unit test. */ -using SparseMatrix = COO_Matrix; +using SparseMatrix = GridKit::LinearAlgebra::COO_Matrix; extern int enzyme_dup; extern int enzyme_const; extern int enzyme_dupnoneed; @@ -26,15 +26,15 @@ template extern T __enzyme_todense(Tys...) noexcept; /// Sparse storage for Enzyme -template +template struct Triple { - size_t row; - size_t col; - T val; + size_t row; + size_t col; + ScalarT val; Triple(Triple&&) = default; - Triple(size_t row, size_t col, T val) + Triple(size_t row, size_t col, ScalarT val) : row(row), col(col), val(val) @@ -42,73 +42,77 @@ struct Triple } }; -__attribute__((enzyme_sparse_accumulate)) static void inner_storeflt(int64_t row, int64_t col, float val, std::vector>& triplets) +[[maybe_unused]] __attribute__((enzyme_sparse_accumulate)) static void inner_storeflt(size_t row, size_t col, float val, std::vector>& triplets) { triplets.emplace_back(row, col, val); } -__attribute__((enzyme_sparse_accumulate)) static void inner_storedbl(int64_t row, int64_t col, double val, std::vector>& triplets) +[[maybe_unused]] __attribute__((enzyme_sparse_accumulate)) static void inner_storedbl(size_t row, size_t col, double val, std::vector>& triplets) { triplets.emplace_back(row, col, val); } -template -__attribute__((always_inline)) static void sparse_store(T val, int64_t idx, size_t i, std::vector>& triplets) +template +__attribute__((always_inline)) static void sparse_store(ScalarT val, size_t idx, size_t i, std::vector>& triplets) { if (val == 0.0) return; - idx /= sizeof(T); - if constexpr (sizeof(T) == 4) - inner_storeflt(i, idx, val, triplets); + idx /= sizeof(ScalarT); + if constexpr (sizeof(ScalarT) == 4) + inner_storeflt(idx, i, val, triplets); else - inner_storedbl(i, idx, val, triplets); + inner_storedbl(idx, i, val, triplets); } -template -__attribute__((always_inline)) static T sparse_load(int64_t idx, size_t i, std::vector>& triplets) +template +__attribute__((always_inline)) static ScalarT sparse_load(size_t, size_t, std::vector>&) { return 0.0; } -template -__attribute__((always_inline)) static void ident_store(T, int64_t idx, size_t i) +template +__attribute__((always_inline)) static void ident_store(ScalarT, size_t, size_t) { assert(0 && "should never load"); } -template -__attribute__((always_inline)) static T ident_load(int64_t idx, size_t i) +template +__attribute__((always_inline)) static ScalarT ident_load(size_t idx, size_t i) { - idx /= sizeof(T); - return (T) (idx == i); + idx /= sizeof(ScalarT); + return (ScalarT) (idx == i); } /// Vector-valued function to differentiate -template -__attribute__((always_inline)) static void f(size_t N, T* input, T* output) +template +__attribute__((always_inline)) static void f(size_t N, ScalarT* input, ScalarT* output) { - for (size_t i = 0; i < N; i++) + for (size_t idx = 0; idx < N; ++idx) { - output[i] = input[i] * input[i]; + output[idx] = 0.0; + for (size_t idy = 0; idy <= idx; idy++) + { + output[idx] += input[idy] * input[idy]; + } } } /// Reference Jacobian -template -void jac_f_ref(std::vector x, std::vector y, SparseMatrix& jac) +template +void jac_f_ref(std::vector x, std::vector y, SparseMatrix& jac) { - std::vector ctemp{}; - std::vector rtemp{}; - std::vector valtemp{}; - for (int idy = 0; idy < y.size(); ++idy) + std::vector ctemp{}; + std::vector rtemp{}; + std::vector valtemp{}; + for (size_t idy = 0; idy < y.size(); ++idy) { - for (int idx = 0; idx < x.size(); ++idx) + for (size_t idx = 0; idx < x.size(); ++idx) { - if (idx == idy) + if (idy <= idx) { rtemp.push_back(idx); ctemp.push_back(idy); - valtemp.push_back(2.0 * x[idx]); + valtemp.push_back(2.0 * x[idy]); } } } @@ -116,29 +120,29 @@ void jac_f_ref(std::vector x, std::vector y, SparseMatrix& jac) } /// Function that computes the Jacobian via automatic differentiation -template -__attribute__((noinline)) void jac_f(size_t N, T* input, SparseMatrix& jac) +template +__attribute__((noinline)) void jac_f(size_t N, ScalarT* input, SparseMatrix& jac) { - std::vector> triplets; + std::vector> triplets; for (size_t i = 0; i < N; i++) { - T* output = __enzyme_todense((void*) ident_load, (void*) ident_store, i); - T* d_output = __enzyme_todense((void*) sparse_load, (void*) sparse_store, i, &triplets); + ScalarT* output = __enzyme_todense((void*) ident_load, (void*) ident_store, i); + ScalarT* d_output = __enzyme_todense((void*) sparse_load, (void*) sparse_store, i, &triplets); - __enzyme_fwddiff((void*) f, + __enzyme_fwddiff((void*) f, enzyme_const, N, enzyme_dup, input, output, enzyme_dupnoneed, - (T*) 0x1, + (ScalarT*) 0x1, d_output); } - std::vector ctemp{}; - std::vector rtemp{}; - std::vector valtemp{}; + std::vector ctemp{}; + std::vector rtemp{}; + std::vector valtemp{}; for (auto& tup : triplets) { rtemp.push_back(tup.row); @@ -155,13 +159,13 @@ void check(SparseMatrix matrix_1, SparseMatrix matrix_2, int& fail) const auto [rcord_1, ccord_1, vals_1] = entries_1; std::tuple&, std::vector&, std::vector&> entries_2 = matrix_2.getEntries(); const auto [rcord_2, ccord_2, vals_2] = entries_2; - for (int ind = 0; ind < vals_1.size(); ++ind) + for (size_t ind = 0; ind < vals_1.size(); ++ind) { if (rcord_1[ind] != rcord_2[ind]) fail++; if (ccord_1[ind] != ccord_2[ind]) fail++; - if (std::abs(vals_1[ind] - vals_2[ind]) > std::numeric_limits::epsilon()) + if (!GridKit::Testing::isEqual(vals_1[ind], vals_2[ind])) fail++; } } @@ -177,7 +181,7 @@ int main() /// Input initialization double val = 0.0; - for (int i = 0; i < N; ++i) + for (size_t i = 0; i < N; ++i) { x[i] = val; val += 1.0; diff --git a/examples/Enzyme/Standalone/EnzymeVector.cpp b/examples/Enzyme/Standalone/EnzymeVector.cpp index 94a10f9a4..4883fc56d 100644 --- a/examples/Enzyme/Standalone/EnzymeVector.cpp +++ b/examples/Enzyme/Standalone/EnzymeVector.cpp @@ -1,8 +1,8 @@ #include -#include #include #include +#include /** * @brief Standalone example that computes the Jacobian of a vector-valued function @@ -30,21 +30,25 @@ inline double dsquare_ref_scalar(double x) // Vector-valued function to differentiate void square(std::vector x, std::vector& y) { - for (int idx = 0; idx < x.size(); ++idx) + for (size_t idx = 0; idx < x.size(); ++idx) { - y[idx] = square_scalar(x[idx]); + y[idx] = 0.0; + for (size_t idy = 0; idy <= idx; idy++) + { + y[idx] += square_scalar(x[idy]); + } } } // Reference Jacobian void dsquare_ref(std::vector x, std::vector y, DenseMatrix& dy) { - for (int idy = 0; idy < y.size(); ++idy) + for (size_t idy = 0; idy < y.size(); ++idy) { - for (int idx = 0; idx < x.size(); ++idx) + for (size_t idx = 0; idx < x.size(); ++idx) { - if (idx == idy) - dy.setValue(idx, idy, dsquare_ref_scalar(x[idx])); + if (idy <= idx) + dy.setValue(idx, idy, dsquare_ref_scalar(x[idy])); } } } @@ -54,10 +58,10 @@ void dsquare(std::vector x, std::vector y, DenseMatrix& dy) { std::vector v(x.size()); std::vector d_y(y.size()); - for (int idy = 0; idy < y.size(); ++idy) + for (size_t idy = 0; idy < y.size(); ++idy) { // Elementary vector for Jacobian-vector product - for (int idx = 0; idx < x.size(); ++idx) + for (size_t idx = 0; idx < x.size(); ++idx) { v[idx] = 0.0; } @@ -67,7 +71,7 @@ void dsquare(std::vector x, std::vector y, DenseMatrix& dy) __enzyme_fwddiff((void*) square, enzyme_dup, x, v, enzyme_dupnoneed, y, &d_y); // Store result - for (int idx = 0; idx < x.size(); ++idx) + for (size_t idx = 0; idx < x.size(); ++idx) { dy.setValue(idx, idy, d_y[idx]); } @@ -77,15 +81,15 @@ void dsquare(std::vector x, std::vector y, DenseMatrix& dy) int main() { // Vector and matrix declarations - constexpr int N = 10; + constexpr size_t N = 10; std::vector x(N); std::vector sq(N); DenseMatrix dsq = DenseMatrix(N, N); DenseMatrix dsq_ref = DenseMatrix(N, N); // Random input values - srand(time(NULL)); - for (int idx = 0; idx < x.size(); ++idx) + srand(static_cast(time(NULL))); + for (size_t idx = 0; idx < x.size(); ++idx) { x[idx] = rand(); } @@ -102,11 +106,11 @@ int main() // Check int fail = 0; bool verbose = true; - for (int idy = 0; idy < sq.size(); ++idy) + for (size_t idy = 0; idy < sq.size(); ++idy) { - for (int idx = 0; idx < x.size(); ++idx) + for (size_t idx = 0; idx < x.size(); ++idx) { - if (std::abs(dsq.getValue(idx, idy) - dsq_ref.getValue(idx, idy)) > std::numeric_limits::epsilon()) + if (!GridKit::Testing::isEqual(dsq.getValue(idx, idy), dsq_ref.getValue(idx, idy))) { fail++; if (verbose) diff --git a/examples/AdjointSensitivity/AdjointSensitivity.cpp b/examples/Experimental/AdjointSensitivity/AdjointSensitivity.cpp similarity index 98% rename from examples/AdjointSensitivity/AdjointSensitivity.cpp rename to examples/Experimental/AdjointSensitivity/AdjointSensitivity.cpp index bab5f20df..0565734ed 100644 --- a/examples/AdjointSensitivity/AdjointSensitivity.cpp +++ b/examples/Experimental/AdjointSensitivity/AdjointSensitivity.cpp @@ -138,5 +138,10 @@ int main() std::cout << "The two results differ beyond solver tolerance!\n"; } + delete idas; + delete bus; + delete gen; + delete model; + return retval; } diff --git a/examples/AdjointSensitivity/CMakeLists.txt b/examples/Experimental/AdjointSensitivity/CMakeLists.txt similarity index 100% rename from examples/AdjointSensitivity/CMakeLists.txt rename to examples/Experimental/AdjointSensitivity/CMakeLists.txt diff --git a/examples/Experimental/CMakeLists.txt b/examples/Experimental/CMakeLists.txt new file mode 100644 index 000000000..767767ffa --- /dev/null +++ b/examples/Experimental/CMakeLists.txt @@ -0,0 +1,14 @@ +# [[ +# Author(s): +# - Slaven Peles +#]] + +if(TARGET SUNDIALS::idas) + add_subdirectory(AdjointSensitivity) + if(GRIDKIT_ENABLE_IPOPT) + add_subdirectory(DynamicConstrainedOpt) + add_subdirectory(GenConstLoad) + add_subdirectory(GenInfiniteBus) + add_subdirectory(ParameterEstimation) + endif() +endif() diff --git a/examples/DynamicConstrainedOpt/CMakeLists.txt b/examples/Experimental/DynamicConstrainedOpt/CMakeLists.txt similarity index 100% rename from examples/DynamicConstrainedOpt/CMakeLists.txt rename to examples/Experimental/DynamicConstrainedOpt/CMakeLists.txt diff --git a/examples/DynamicConstrainedOpt/DynamicConstrainedOpt.cpp b/examples/Experimental/DynamicConstrainedOpt/DynamicConstrainedOpt.cpp similarity index 70% rename from examples/DynamicConstrainedOpt/DynamicConstrainedOpt.cpp rename to examples/Experimental/DynamicConstrainedOpt/DynamicConstrainedOpt.cpp index b8def3c11..9c3654b2d 100644 --- a/examples/DynamicConstrainedOpt/DynamicConstrainedOpt.cpp +++ b/examples/Experimental/DynamicConstrainedOpt/DynamicConstrainedOpt.cpp @@ -1,6 +1,6 @@ - #include #include +#include #include #include @@ -20,47 +20,47 @@ int main() using namespace GridKit::Testing; // Create an infinite bus - BaseBus* bus = new BusSlack(1.0, 0.0); + BusSlack bus(1.0, 0.0); // Attach a generator to that bus - Generator2* gen = new Generator2(bus); + Generator2 gen(&bus); // Create a system model - SystemModel* model = new SystemModel(); - model->addBus(bus); - model->addComponent(gen); + SystemModel model; + model.addBus(&bus); + model.addComponent(&gen); // allocate model components - model->allocate(); + model.allocate(); // Create numerical integrator and configure it for the generator model - Ida* idas = new Ida(model); + Ida idas(&model); double t_init = 0.0; double t_final = 20.0; // setup simulation - idas->configureSimulation(); - idas->configureAdjoint(); - idas->getDefaultInitialCondition(); - idas->initializeSimulation(t_init); - idas->configureQuadrature(); - idas->initializeQuadrature(); + idas.configureSimulation(); + idas.configureAdjoint(); + idas.getDefaultInitialCondition(); + idas.initializeSimulation(t_init); + idas.configureQuadrature(); + idas.initializeQuadrature(); double t_fault = 0.02; double t_clear = 0.06; - idas->runSimulation(t_fault); + idas.runSimulation(t_fault); // create initial condition after a fault { - gen->V() = 0.0; - idas->runSimulation(t_clear, 2); - gen->V() = 1.0; - gen->theta() = -0.01; - idas->saveInitialCondition(); + gen.V() = 0.0; + idas.runSimulation(t_clear, 2); + gen.V() = 1.0; + gen.theta() = -0.01; + idas.saveInitialCondition(); } // Set integration time for dynamic constrained optimization - idas->setIntegrationTime(t_init, t_final, 100); + idas.setIntegrationTime(t_init, t_final, 100); // Guess optimization parameter value double Pm = 0.7; @@ -87,10 +87,10 @@ int main() // Create dynamic objective interface to Ipopt solver Ipopt::SmartPtr ipoptDynamicObjectiveInterface = - new IpoptInterface::DynamicObjective(idas); + new IpoptInterface::DynamicObjective(&idas); // Initialize problem - model->param()[0] = Pm; + model.param()[0] = Pm; // Solve the problem status = ipoptApp->OptimizeTNLP(ipoptDynamicObjectiveInterface); @@ -101,24 +101,24 @@ int main() // Print result std::cout << "\nSucess:\n The problem solved in " << ipoptApp->Statistics()->IterationCount() << " iterations!\n" - << " Optimal value of Pm = " << model->param()[0] << "\n" + << " Optimal value of Pm = " << model.param()[0] << "\n" << " The final value of the objective function G(Pm) = " << ipoptApp->Statistics()->FinalObjective() << "\n\n"; } // Store dynamic objective optimization results - double* results = new double[model->sizeParams()]; - for (unsigned i = 0; i < model->sizeParams(); ++i) + double* results = new double[model.sizeParams()]; + for (unsigned i = 0; i < model.sizeParams(); ++i) { - results[i] = model->param()[i]; + results[i] = model.param()[i]; } // Create dynamic constraint interface to Ipopt solver Ipopt::SmartPtr ipoptDynamicConstraintInterface = - new IpoptInterface::DynamicConstraint(idas); + new IpoptInterface::DynamicConstraint(&idas); // Initialize problem - model->param()[0] = Pm; + model.param()[0] = Pm; // Solve the problem status = ipoptApp->OptimizeTNLP(ipoptDynamicConstraintInterface); @@ -129,16 +129,16 @@ int main() // Print result std::cout << "\nSucess:\n The problem solved in " << ipoptApp->Statistics()->IterationCount() << " iterations!\n" - << " Optimal value of Pm = " << model->param()[0] << "\n" + << " Optimal value of Pm = " << model.param()[0] << "\n" << " The final value of the objective function G(Pm) = " << ipoptApp->Statistics()->FinalObjective() << "\n\n"; } // Compare results of the two optimization methods int retval = 0; - for (unsigned i = 0; i < model->sizeParams(); ++i) + for (unsigned i = 0; i < model.sizeParams(); ++i) { - if (!isEqual(results[i], model->param()[i], 10 * tol)) + if (!isEqual(results[i], model.param()[i], 10 * tol)) --retval; } @@ -148,7 +148,5 @@ int main() } delete[] results; - delete idas; - delete model; return retval; } diff --git a/examples/GenConstLoad/CMakeLists.txt b/examples/Experimental/GenConstLoad/CMakeLists.txt similarity index 100% rename from examples/GenConstLoad/CMakeLists.txt rename to examples/Experimental/GenConstLoad/CMakeLists.txt diff --git a/examples/GenConstLoad/GenConstLoad.cpp b/examples/Experimental/GenConstLoad/GenConstLoad.cpp similarity index 100% rename from examples/GenConstLoad/GenConstLoad.cpp rename to examples/Experimental/GenConstLoad/GenConstLoad.cpp diff --git a/examples/GenInfiniteBus/CMakeLists.txt b/examples/Experimental/GenInfiniteBus/CMakeLists.txt similarity index 100% rename from examples/GenInfiniteBus/CMakeLists.txt rename to examples/Experimental/GenInfiniteBus/CMakeLists.txt diff --git a/examples/GenInfiniteBus/GenInfiniteBus.cpp b/examples/Experimental/GenInfiniteBus/GenInfiniteBus.cpp similarity index 67% rename from examples/GenInfiniteBus/GenInfiniteBus.cpp rename to examples/Experimental/GenInfiniteBus/GenInfiniteBus.cpp index b3ea77a08..143e3d099 100644 --- a/examples/GenInfiniteBus/GenInfiniteBus.cpp +++ b/examples/Experimental/GenInfiniteBus/GenInfiniteBus.cpp @@ -1,6 +1,6 @@ - #include #include +#include #include #include @@ -20,49 +20,49 @@ int main() using namespace GridKit::Testing; // Create an infinite bus - BaseBus* bus = new BusSlack(1.0, 0.0); + BusSlack bus(1.0, 0.0); // Attach a generator to that bus - Generator4* gen = new Generator4(bus); + Generator4 gen(&bus); // Create a system model - SystemModel* model = new SystemModel(); - model->addBus(bus); - model->addComponent(gen); + SystemModel model; + model.addBus(&bus); + model.addComponent(&gen); // allocate model components - model->allocate(); + model.allocate(); // Create numerical integrator and configure it for the generator model - Ida* idas = new Ida(model); + Ida idas(&model); double t_init = 0.0; double t_final = 15.0; // setup simulation - idas->configureSimulation(); - idas->configureAdjoint(); - idas->getDefaultInitialCondition(); - idas->initializeSimulation(t_init); - idas->configureQuadrature(); - idas->initializeQuadrature(); + idas.configureSimulation(); + idas.configureAdjoint(); + idas.getDefaultInitialCondition(); + idas.initializeSimulation(t_init); + idas.configureQuadrature(); + idas.initializeQuadrature(); double t_fault = 0.1; double t_clear = 0.1; - idas->runSimulation(t_fault); - idas->saveInitialCondition(); + idas.runSimulation(t_fault); + idas.saveInitialCondition(); // create initial condition after a fault { - idas->getSavedInitialCondition(); - idas->initializeSimulation(t_init); - gen->V() = 0.0; - idas->runSimulation(t_clear, 20); - gen->V() = 1.0; - idas->saveInitialCondition(); + idas.getSavedInitialCondition(); + idas.initializeSimulation(t_init); + gen.V() = 0.0; + idas.runSimulation(t_clear, 20); + gen.V() = 1.0; + idas.saveInitialCondition(); } // Set integration time for dynamic constrained optimization - idas->setIntegrationTime(t_init, t_final, 100); + idas.setIntegrationTime(t_init, t_final, 100); // Guess initial values of optimization parameters double Pm = 1.0; @@ -90,11 +90,11 @@ int main() // Create dynamic objective interface to Ipopt solver Ipopt::SmartPtr ipoptDynamicObjectiveInterface = - new IpoptInterface::DynamicObjective(idas); + new IpoptInterface::DynamicObjective(&idas); // Initialize the problem - model->param()[0] = Pm; - model->param()[1] = Ef; + model.param()[0] = Pm; + model.param()[1] = Ef; // Solve the problem status = ipoptApp->OptimizeTNLP(ipoptDynamicObjectiveInterface); @@ -105,26 +105,26 @@ int main() // Print result std::cout << "\nSucess:\n The problem solved in " << ipoptApp->Statistics()->IterationCount() << " iterations!\n" - << " Optimal value of Pm = " << model->param()[0] << "\n" - << " Optimal value of Ef = " << model->param()[1] << "\n" + << " Optimal value of Pm = " << model.param()[0] << "\n" + << " Optimal value of Ef = " << model.param()[1] << "\n" << " The final value of the objective function G(Pm,Ef) = " << ipoptApp->Statistics()->FinalObjective() << "\n\n"; } // Create dynamic constraint interface to Ipopt solver Ipopt::SmartPtr ipoptDynamicConstraintInterface = - new IpoptInterface::DynamicConstraint(idas); + new IpoptInterface::DynamicConstraint(&idas); // Store dynamic objective optimization results - double* results = new double[model->sizeParams()]; - for (unsigned i = 0; i < model->sizeParams(); ++i) + double* results = new double[model.sizeParams()]; + for (unsigned i = 0; i < model.sizeParams(); ++i) { - results[i] = model->param()[i]; + results[i] = model.param()[i]; } // Initialize the problem - model->param()[0] = Pm; - model->param()[1] = Ef; + model.param()[0] = Pm; + model.param()[1] = Ef; // Solve the problem status = ipoptApp->OptimizeTNLP(ipoptDynamicConstraintInterface); @@ -135,17 +135,17 @@ int main() // Print result std::cout << "\nSucess:\n The problem solved in " << ipoptApp->Statistics()->IterationCount() << " iterations!\n" - << " Optimal value of Pm = " << model->param()[0] << "\n" - << " Optimal value of Ef = " << model->param()[1] << "\n" + << " Optimal value of Pm = " << model.param()[0] << "\n" + << " Optimal value of Ef = " << model.param()[1] << "\n" << " The final value of the objective function G(Pm,Ef) = " << ipoptApp->Statistics()->FinalObjective() << "\n\n"; } // Compare results of the two optimization methods int retval = 0; - for (unsigned i = 0; i < model->sizeParams(); ++i) + for (unsigned i = 0; i < model.sizeParams(); ++i) { - if (!isEqual(results[i], model->param()[i], 100 * tol)) + if (!isEqual(results[i], model.param()[i], 100 * tol)) --retval; } @@ -155,7 +155,5 @@ int main() } delete[] results; - delete idas; - delete model; return 0; } diff --git a/examples/ParameterEstimation/CMakeLists.txt b/examples/Experimental/ParameterEstimation/CMakeLists.txt similarity index 100% rename from examples/ParameterEstimation/CMakeLists.txt rename to examples/Experimental/ParameterEstimation/CMakeLists.txt diff --git a/examples/ParameterEstimation/ParameterEstimation.cpp b/examples/Experimental/ParameterEstimation/ParameterEstimation.cpp similarity index 69% rename from examples/ParameterEstimation/ParameterEstimation.cpp rename to examples/Experimental/ParameterEstimation/ParameterEstimation.cpp index 0899dfa44..99598188f 100644 --- a/examples/ParameterEstimation/ParameterEstimation.cpp +++ b/examples/Experimental/ParameterEstimation/ParameterEstimation.cpp @@ -1,6 +1,6 @@ - #include #include +#include #include #include "lookup_table.hpp" @@ -23,58 +23,58 @@ int main() using namespace GridKit::Testing; // Create an infinite bus - BaseBus* bus = new BusSlack(1.0, 0.0); + BusSlack bus(1.0, 0.0); // Attach a generator to that bus - Generator4Param* gen = new Generator4Param(bus); + Generator4Param gen(&bus); // Create a system model - SystemModel* model = new SystemModel(); - model->addBus(bus); - model->addComponent(gen); + SystemModel model; + model.addBus(&bus); + model.addComponent(&gen); // allocate model components - model->allocate(); + model.allocate(); // Create numerical integrator and configure it for the generator model - Ida* idas = new Ida(model); + Ida idas(&model); double t_init = -1.0; double t_final = -1.0; std::istringstream input_data(lookup_table); - GridKit::setLookupTable(gen->getLookupTable(), input_data, t_init, t_final); + GridKit::setLookupTable(gen.getLookupTable(), input_data, t_init, t_final); std::cout << "Performing parameter estimation with respect to data\nfrom " << "t_init = " << t_init << " to t_final = " << t_final << "\n"; // setup simulation - idas->configureSimulation(); - idas->configureAdjoint(); - idas->getDefaultInitialCondition(); - idas->initializeSimulation(t_init); - idas->configureQuadrature(); - idas->initializeQuadrature(); + idas.configureSimulation(); + idas.configureAdjoint(); + idas.getDefaultInitialCondition(); + idas.initializeSimulation(t_init); + idas.configureQuadrature(); + idas.initializeQuadrature(); double t_fault = 0.1; double t_clear = 0.1; - idas->runSimulation(t_fault); - idas->saveInitialCondition(); + idas.runSimulation(t_fault); + idas.saveInitialCondition(); // create initial condition after a fault { - idas->getSavedInitialCondition(); - idas->initializeSimulation(t_init); - gen->V() = 0.0; - idas->runSimulation(t_clear, 20); - gen->V() = 1.0; - idas->saveInitialCondition(); + idas.getSavedInitialCondition(); + idas.initializeSimulation(t_init); + gen.V() = 0.0; + idas.runSimulation(t_clear, 20); + gen.V() = 1.0; + idas.saveInitialCondition(); } // Set integration time for dynamic constrained optimization - idas->setIntegrationTime(t_init, t_final, 100); + idas.setIntegrationTime(t_init, t_final, 100); // Guess value of inertia coefficient - model->param()[0] = 3.0; + model.param()[0] = 3.0; // Create an instance of the IpoptApplication Ipopt::SmartPtr ipoptApp = IpoptApplicationFactory(); @@ -98,7 +98,7 @@ int main() // Create dynamic objective interface to Ipopt solver Ipopt::SmartPtr ipoptDynamicObjectiveInterface = - new IpoptInterface::DynamicObjective(idas); + new IpoptInterface::DynamicObjective(&idas); // Solve the problem status = ipoptApp->OptimizeTNLP(ipoptDynamicObjectiveInterface); @@ -109,24 +109,24 @@ int main() // Print result std::cout << "\nSucess:\n The problem solved in " << ipoptApp->Statistics()->IterationCount() << " iterations!\n" - << " Optimal value of H = " << model->param()[0] << "\n" + << " Optimal value of H = " << model.param()[0] << "\n" << " The final value of the objective function G(H) = " << ipoptApp->Statistics()->FinalObjective() << "\n\n"; } // Store dynamic objective optimization results - double* results = new double[model->sizeParams()]; - for (unsigned i = 0; i < model->sizeParams(); ++i) + double* results = new double[model.sizeParams()]; + for (unsigned i = 0; i < model.sizeParams(); ++i) { - results[i] = model->param()[i]; + results[i] = model.param()[i]; } // Guess value of inertia coefficient - model->param()[0] = 3.0; + model.param()[0] = 3.0; // Create dynamic constraint interface to Ipopt solver Ipopt::SmartPtr ipoptDynamicConstraintInterface = - new IpoptInterface::DynamicConstraint(idas); + new IpoptInterface::DynamicConstraint(&idas); // Solve the problem status = ipoptApp->OptimizeTNLP(ipoptDynamicConstraintInterface); @@ -137,16 +137,16 @@ int main() // Print result std::cout << "\nSucess:\n The problem solved in " << ipoptApp->Statistics()->IterationCount() << " iterations!\n" - << " Optimal value of H = " << model->param()[0] << "\n" + << " Optimal value of H = " << model.param()[0] << "\n" << " The final value of the objective function G(H) = " << ipoptApp->Statistics()->FinalObjective() << "\n\n"; } // Compare results of the two optimization methods int retval = 0; - for (unsigned i = 0; i < model->sizeParams(); ++i) + for (unsigned i = 0; i < model.sizeParams(); ++i) { - if (!isEqual(results[i], model->param()[i], 100 * tol)) + if (!isEqual(results[i], model.param()[i], 100 * tol)) --retval; } @@ -156,7 +156,5 @@ int main() } delete[] results; - delete idas; - delete model; return retval; } diff --git a/examples/ParameterEstimation/lookup_table.hpp b/examples/Experimental/ParameterEstimation/lookup_table.hpp similarity index 100% rename from examples/ParameterEstimation/lookup_table.hpp rename to examples/Experimental/ParameterEstimation/lookup_table.hpp diff --git a/examples/LinearAlgebra/SparseTest/SparseTest.cpp b/examples/LinearAlgebra/SparseTest/SparseTest.cpp index 3c7fe99ef..f9d99ffd1 100644 --- a/examples/LinearAlgebra/SparseTest/SparseTest.cpp +++ b/examples/LinearAlgebra/SparseTest/SparseTest.cpp @@ -10,7 +10,7 @@ #include -int main(int argc, char const* argv[]) +int main() { std::vector val{0.1, 0.2, 0.3, 0.4}; std::vector x{2, 1, 3, 1}; @@ -18,7 +18,7 @@ int main(int argc, char const* argv[]) size_t n = 4; size_t m = 4; - COO_Matrix A = COO_Matrix(x, y, val, m, n); + GridKit::LinearAlgebra::COO_Matrix A = GridKit::LinearAlgebra::COO_Matrix(x, y, val, m, n); std::vector valn(4); std::vector xn(4); @@ -34,10 +34,10 @@ int main(int argc, char const* argv[]) std::cout << "A:\n"; A.printMatrix(); - std::vector val2{0.5, 0.6, 0.7, 0.8, 1.0}; - std::vector x2{0, 2, 0, 2, 1}; - std::vector y2{3, 3, 2, 2, 3}; - COO_Matrix B = COO_Matrix(x2, y2, val2, m, n); + std::vector val2{0.5, 0.6, 0.7, 0.8, 1.0}; + std::vector x2{0, 2, 0, 2, 1}; + std::vector y2{3, 3, 2, 2, 3}; + GridKit::LinearAlgebra::COO_Matrix B = GridKit::LinearAlgebra::COO_Matrix(x2, y2, val2, m, n); std::cout << "B:\n"; B.printMatrix(); diff --git a/examples/PhasorDynamics/CMakeLists.txt b/examples/PhasorDynamics/CMakeLists.txt index 58ded3a14..36696ce66 100644 --- a/examples/PhasorDynamics/CMakeLists.txt +++ b/examples/PhasorDynamics/CMakeLists.txt @@ -1,2 +1,4 @@ add_subdirectory(Example1) add_subdirectory(Example2) +add_subdirectory(Example3) +add_subdirectory(Example4) diff --git a/examples/PhasorDynamics/Example1/CMakeLists.txt b/examples/PhasorDynamics/Example1/CMakeLists.txt index e79e6103b..d0e498a5e 100644 --- a/examples/PhasorDynamics/Example1/CMakeLists.txt +++ b/examples/PhasorDynamics/Example1/CMakeLists.txt @@ -4,6 +4,7 @@ target_link_libraries(phasordynamics_example1 GRIDKIT::phasor_dynamics_bus_fault GRIDKIT::phasor_dynamics_branch GRIDKIT::phasor_dynamics_genrou + GRIDKIT::phasor_dynamics_load GRIDKIT::solvers_dyn) install(TARGETS phasordynamics_example1 RUNTIME DESTINATION bin) diff --git a/examples/PhasorDynamics/Example1/example1.cpp b/examples/PhasorDynamics/Example1/example1.cpp index 300bf0d47..04c78c5dd 100644 --- a/examples/PhasorDynamics/Example1/example1.cpp +++ b/examples/PhasorDynamics/Example1/example1.cpp @@ -14,11 +14,16 @@ #include #include +#include #include +#include #include #include +#include #include +#include #include +#include #include #include @@ -27,45 +32,83 @@ int main() using namespace GridKit::PhasorDynamics; using namespace AnalysisManager::Sundials; + using scalar_type = double; + using real_type = double; + using index_type = size_t; + std::cout << "Example 1 version 2\n"; - /* Create model parts */ - SystemModel sys; - Bus bus1(0.9949877346411762, 0.09999703952427966); - BusInfinite bus2(1.0, 0.0); - Branch branch(&bus1, &bus2, 0, 0.1, 0, 0); - BusFault fault(&bus1, 0, 1e-3, 0); - - Genrou gen(&bus1, - 1, - 1., - 0.05013, - 3., - 0., - 0., - 7., - .04, - .05, - .75, - 2.1, - 0.2, - 0.18, - 0.5, - 0.5, - 0.18, - 0.15, - 0., - 0.); - - /* Connect everything together */ - sys.addBus(&bus1); - sys.addBus(&bus2); - sys.addComponent(&branch); - sys.addComponent(&fault); - sys.addComponent(&gen); + // + // Create model data + // + + SystemModelData data; + + // Set bus data + data.bus.resize(2); + + data.bus[0].bus_id = 0; + data.bus[0].bus_type = BusData::DEFAULT; + data.bus[0].Vr0 = 0.9949877346411762; + data.bus[0].Vi0 = 0.09999703952427966; + + data.bus[1].bus_id = 1; + data.bus[1].bus_type = BusData::SLACK; + data.bus[1].Vr0 = 1.0; + data.bus[1].Vi0 = 0.0; + + // Set branch data + data.branch.resize(1); + + data.branch[0].bus1_id = data.bus[0].bus_id; + data.branch[0].bus2_id = data.bus[1].bus_id; + data.branch[0].R = 0.0; + data.branch[0].X = 0.1; + data.branch[0].G = 0.0; + data.branch[0].B = 0.0; + + // Set generator data + data.genrou.resize(1); + + data.genrou[0].unit_id = 1; + data.genrou[0].p0 = 1.; + data.genrou[0].q0 = 0.05013; + data.genrou[0].H = 3.; + data.genrou[0].D = 0.; + data.genrou[0].Ra = 0.; + data.genrou[0].Tdop = 7.; + data.genrou[0].Tdopp = .04; + data.genrou[0].Tqopp = .05; + data.genrou[0].Tqop = .75; + data.genrou[0].Xd = 2.1; + data.genrou[0].Xdp = 0.2; + data.genrou[0].Xdpp = 0.18; + data.genrou[0].Xq = 0.5; + data.genrou[0].Xqp = 0.5; + data.genrou[0].Xqpp = 0.18; + data.genrou[0].Xl = 0.15; + data.genrou[0].S10 = 0.; + data.genrou[0].S12 = 0.; + + // Add faults + data.bus_fault.resize(1); + + data.bus_fault[0].R = 0.0; + data.bus_fault[0].X = 1e-3; + data.bus_fault[0].status = false; + + // + // Instantiate system model + // + + SystemModel sys(data); sys.allocate(); - double dt = 1.0 / 4.0 / 60.0; + // Get access to the fault + auto* fault = sys.getBusFault(0); + + // Set time step to 1/4 of a 60Hz cycle + real_type dt = 1.0 / 4.0 / 60.0; // A data structure to keep track of the data we want to // compare to the reference solution. Rather than keeping @@ -77,7 +120,9 @@ int main() // (plain ol' data), which have some benefits in C++. struct OutputData { - double ti, Vr, Vi, dw; + // Output variables are time, real and imaginary voltage and + // frequency deviation + real_type ti, Vr, Vi, dw; }; // A list of output for each time step. @@ -93,19 +138,19 @@ int main() // reference to that variable inside the callback). We select // the subset of the output we're interested in recording and // push it into output, which is updated outside the callback. - auto output_cb = [&](double t) + auto output_cb = [&](real_type t) { - std::vector& yval = sys.y(); + std::vector& y_val = sys.y(); - output.push_back(OutputData{t, yval[0], yval[1], yval[3]}); + output.push_back(OutputData{t, y_val[0], y_val[1], y_val[3]}); }; // Set up simulation - Ida ida(&sys); + Ida ida(&sys); ida.configureSimulation(); // Run simulation - making sure to pass the callback to record output - double start = static_cast(clock()); + real_type start = static_cast(clock()); // Run for 1s ida.initializeSimulation(0.0, false); @@ -113,50 +158,67 @@ int main() ida.runSimulation(1.0, nout, output_cb); // Introduce fault and run for the next 0.1s - fault.setStatus(1); + fault->setStatus(true); ida.initializeSimulation(1.0, false); nout = static_cast(std::round((1.1 - 1.0) / dt)); ida.runSimulation(1.1, nout, output_cb); // Clear the fault and run until t = 10s. - fault.setStatus(0); + fault->setStatus(false); ida.initializeSimulation(1.1, false); nout = static_cast(std::round((10.0 - 1.1) / dt)); ida.runSimulation(10.0, nout, output_cb); - double stop = static_cast(clock()); + real_type stop = static_cast(clock()); - double error_V = 0.0; // error in |V| + real_type error_V = 0.0; // error in |V| + real_type error_w = 0.0; // error in rotor speed // Read through the simulation data stored in the buffer. // Since we captured by reference, output should be available // for us to read here, outside the callback. for (size_t i = 0; i < output.size(); i++) { - OutputData data = output[i]; - std::vector& ref_sol = reference_solution[i + 1]; + OutputData data = output[i]; + std::vector& ref_sol = Example1::reference_solution[i + 1]; - double err = + real_type err = std::abs(std::sqrt(data.Vr * data.Vr + data.Vi * data.Vi) - ref_sol[2]) / (1.0 + std::abs(ref_sol[2])); if (err > error_V) error_V = err; - std::cout << "GridKit: t = " << data.ti - << ", |V| = " << std::sqrt(data.Vr * data.Vr + data.Vi * data.Vi) - << ", w = " << (1.0 + data.dw) << "\n"; - std::cout << "Ref : t = " << ref_sol[0] - << ", |V| = " << ref_sol[2] - << ", w = " << ref_sol[1] - << "\n"; - std::cout << "Error in |V| = " - << err - << "\n"; - std::cout << "\n"; + err = std::abs(1.0 + data.dw - ref_sol[1]) / (1.0 + ref_sol[1]); + if (err > error_w) + error_w = err; + + // // Optional output + // std::cout << "GridKit: t = " << data.ti + // << ", |V| = " << std::sqrt(data.Vr * data.Vr + data.Vi * data.Vi) + // << ", w = " << (1.0 + data.dw) << "\n"; + // std::cout << "Ref : t = " << ref_sol[0] + // << ", |V| = " << ref_sol[2] + // << ", w = " << ref_sol[1] + // << "\n"; + // std::cout << "Error in |V| = " + // << err + // << "\n"; + // std::cout << "\n"; } + // Errors allowed for agreement with Powerworld results + real_type error_V_allowed = 2e-4; + real_type error_w_allowed = 1e-4; + + // Tolerances based on Powerworld reference accuracy int status = 0; std::cout << "Max error in |V| = " << error_V << "\n"; - if (error_V > 2e-4) + if (error_V > error_V_allowed) + { + std::cout << "Test failed with error too large!\n"; + status = 1; + } + std::cout << "Max error in w = " << error_w << "\n"; + if (error_w > error_w_allowed) { std::cout << "Test failed with error too large!\n"; status = 1; diff --git a/examples/PhasorDynamics/Example1/example1.hpp b/examples/PhasorDynamics/Example1/example1.hpp index b654a62f4..ff17a22d3 100644 --- a/examples/PhasorDynamics/Example1/example1.hpp +++ b/examples/PhasorDynamics/Example1/example1.hpp @@ -9,2405 +9,2408 @@ // Columns: // Time, Machine Speed (PowerWorld), Bus 1 Voltage Magnitude (PowerWorld)}, -std::vector> reference_solution = - {{0, 1, 0}, // It should be {0,1,1.000000477} but something is wrong in GridKit - {0.004167, 1, 1.000000477}, - {0.008333, 1, 1.000000477}, - {0.0125, 0.99999994, 1.000000477}, - {0.016667, 0.99999994, 1.000000477}, - {0.020833, 0.99999994, 1.000000477}, - {0.025, 0.99999994, 1.000000477}, - {0.029167, 0.99999994, 1.000000477}, - {0.033333, 0.99999994, 1.000000477}, - {0.0375, 0.99999994, 1.000000477}, - {0.041667, 0.99999994, 1.000000477}, - {0.045833, 0.99999994, 1.000000477}, - {0.05, 0.999999881, 1.000000477}, - {0.054167, 0.999999881, 1.000000477}, - {0.058333, 0.999999881, 1.000000477}, - {0.0625, 0.999999881, 1.000000477}, - {0.066667, 0.999999881, 1.000000477}, - {0.070833, 0.999999881, 1.000000477}, - {0.075, 0.999999881, 1.000000477}, - {0.079167, 0.999999881, 1.000000477}, - {0.083333, 0.999999881, 1.000000477}, - {0.0875, 0.999999881, 1.000000477}, - {0.091667, 0.999999881, 1.000000477}, - {0.095833, 0.999999881, 1.000000477}, - {0.1, 0.999999881, 1.000000477}, - {0.104167, 0.999999881, 1.000000477}, - {0.108333, 0.999999881, 1.000000477}, - {0.1125, 0.999999881, 1.000000477}, - {0.116667, 0.999999881, 1.000000477}, - {0.120833, 0.999999881, 1.000000477}, - {0.125, 0.999999881, 1.000000477}, - {0.129167, 0.999999881, 1.000000477}, - {0.133333, 0.999999881, 1.000000477}, - {0.1375, 0.99999994, 1.000000477}, - {0.141667, 0.99999994, 1.000000477}, - {0.145833, 0.99999994, 1.000000477}, - {0.15, 0.99999994, 1.000000477}, - {0.154167, 0.99999994, 1.000000477}, - {0.158333, 0.99999994, 1.000000477}, - {0.1625, 0.99999994, 1.000000477}, - {0.166667, 0.99999994, 1.000000477}, - {0.170833, 0.99999994, 1.000000477}, - {0.175, 0.99999994, 1.000000477}, - {0.179167, 0.99999994, 1.000000477}, - {0.183333, 0.99999994, 1.000000477}, - {0.1875, 0.99999994, 1.000000477}, - {0.191667, 0.99999994, 1.000000477}, - {0.195833, 1, 1.000000477}, - {0.2, 1, 1.000000477}, - {0.204167, 1, 1.000000477}, - {0.208333, 1, 1.000000477}, - {0.2125, 1, 1.000000477}, - {0.216667, 1, 1.000000477}, - {0.220833, 1, 1.000000477}, - {0.225, 1, 1.000000477}, - {0.229167, 1, 1.000000477}, - {0.233333, 1, 1.000000477}, - {0.2375, 1, 1.000000477}, - {0.241667, 1, 1.000000477}, - {0.245833, 1, 1.000000477}, - {0.25, 1, 1.000000477}, - {0.254167, 1, 1.000000477}, - {0.258333, 1, 1.000000477}, - {0.2625, 1, 1.000000477}, - {0.266667, 1, 1.000000477}, - {0.270833, 1, 1.000000477}, - {0.275, 1, 1.000000477}, - {0.279167, 1, 1.000000477}, - {0.283333, 1, 1.000000477}, - {0.2875, 1, 1.000000477}, - {0.291667, 1, 1.000000477}, - {0.295833, 1.000000119, 1.000000477}, - {0.3, 1.000000119, 1.000000477}, - {0.304167, 1.000000119, 1.000000477}, - {0.308333, 1.000000119, 1.000000477}, - {0.3125, 1.000000119, 1.000000477}, - {0.316667, 1.000000119, 1.000000477}, - {0.320833, 1.000000119, 1.000000477}, - {0.325, 1.000000119, 1.000000477}, - {0.329167, 1.000000119, 1.000000477}, - {0.333333, 1.000000119, 1.000000477}, - {0.3375, 1.000000119, 1.000000477}, - {0.341667, 1.000000119, 1.000000477}, - {0.345833, 1.000000119, 1.000000477}, - {0.35, 1.000000119, 1.000000477}, - {0.354167, 1.000000119, 1.000000477}, - {0.358333, 1.000000119, 1.000000477}, - {0.3625, 1, 1.000000477}, - {0.366667, 1, 1.000000477}, - {0.370833, 1, 1.000000477}, - {0.375, 1, 1.000000477}, - {0.379167, 1, 1.000000477}, - {0.383333, 1, 1.000000477}, - {0.3875, 1, 1.000000477}, - {0.391667, 1, 1.000000477}, - {0.395833, 1, 1.000000477}, - {0.4, 1, 1.000000477}, - {0.404167, 1, 1.000000477}, - {0.408333, 1, 1.000000477}, - {0.4125, 1, 1.000000477}, - {0.416667, 1, 1.000000477}, - {0.420833, 1, 1.000000477}, - {0.425, 1, 1.000000477}, - {0.429167, 1, 1.000000477}, - {0.433333, 1, 1.000000477}, - {0.4375, 1, 1.000000477}, - {0.441667, 1, 1.000000477}, - {0.445833, 1, 1.000000477}, - {0.45, 1, 1.000000477}, - {0.454167, 1, 1.000000477}, - {0.458333, 1, 1.000000477}, - {0.4625, 1, 1.000000477}, - {0.466667, 1, 1.000000477}, - {0.470833, 1, 1.000000477}, - {0.475, 1, 1.000000477}, - {0.479167, 1, 1.000000477}, - {0.483333, 1, 1.000000477}, - {0.4875, 1, 1.000000477}, - {0.491667, 1, 1.000000477}, - {0.495833, 1, 1.000000477}, - {0.5, 1, 1.000000477}, - {0.504167, 1, 1.000000477}, - {0.508333, 1, 1.000000477}, - {0.5125, 0.99999994, 1.000000477}, - {0.516667, 0.99999994, 1.000000477}, - {0.520833, 0.99999994, 1.000000477}, - {0.525, 0.99999994, 1.000000477}, - {0.529167, 0.99999994, 1.000000477}, - {0.533333, 0.99999994, 1.000000477}, - {0.5375, 0.99999994, 1.000000477}, - {0.541667, 0.99999994, 1.000000477}, - {0.545833, 0.99999994, 1.000000477}, - {0.55, 0.99999994, 1.000000477}, - {0.554167, 0.99999994, 1.000000477}, - {0.558333, 0.99999994, 1.000000477}, - {0.5625, 0.99999994, 1.000000477}, - {0.566667, 0.99999994, 1.000000477}, - {0.570833, 0.99999994, 1.000000477}, - {0.575, 0.99999994, 1.000000477}, - {0.579167, 0.99999994, 1.000000477}, - {0.583333, 0.99999994, 1.000000477}, - {0.5875, 0.99999994, 1.000000477}, - {0.591667, 0.99999994, 1.000000477}, - {0.595833, 0.99999994, 1.000000477}, - {0.6, 0.99999994, 1.000000477}, - {0.604167, 0.99999994, 1.000000477}, - {0.608333, 0.99999994, 1.000000477}, - {0.6125, 0.99999994, 1.000000477}, - {0.616667, 0.99999994, 1.000000477}, - {0.620833, 1, 1.000000477}, - {0.625, 1, 1.000000477}, - {0.629167, 1, 1.000000477}, - {0.633333, 1, 1.000000477}, - {0.6375, 1, 1.000000477}, - {0.641667, 1, 1.000000477}, - {0.645833, 1, 1.000000477}, - {0.65, 1, 1.000000477}, - {0.654167, 1, 1.000000477}, - {0.658333, 1, 1.000000477}, - {0.6625, 1, 1.000000477}, - {0.666667, 1, 1.000000477}, - {0.670833, 1, 1.000000477}, - {0.675, 1, 1.000000477}, - {0.679167, 1, 1.000000477}, - {0.683333, 1, 1.000000477}, - {0.6875, 1, 1.000000477}, - {0.691667, 1, 1.000000477}, - {0.695833, 1, 1.000000477}, - {0.7, 1, 1.000000477}, - {0.704167, 1, 1.000000477}, - {0.708333, 1, 1.000000477}, - {0.7125, 1, 1.000000477}, - {0.716667, 1, 1.000000477}, - {0.720833, 1, 1.000000477}, - {0.725, 1, 1.000000477}, - {0.729167, 1, 1.000000477}, - {0.733333, 1, 1.000000477}, - {0.7375, 1, 1.000000477}, - {0.741667, 1, 1.000000477}, - {0.745833, 1, 1.000000477}, - {0.75, 1, 1.000000477}, - {0.754167, 1, 1.000000477}, - {0.758333, 1, 1.000000477}, - {0.7625, 1, 1.000000477}, - {0.766667, 1, 1.000000477}, - {0.770833, 1, 1.000000477}, - {0.775, 1, 1.000000477}, - {0.779167, 1, 1.000000477}, - {0.783333, 1, 1.000000477}, - {0.7875, 1, 1.000000477}, - {0.791667, 1, 1.000000477}, - {0.795833, 1, 1.000000477}, - {0.8, 1, 1.000000477}, - {0.804167, 1, 1.000000477}, - {0.808333, 1, 1.000000477}, - {0.8125, 1, 1.000000477}, - {0.816667, 1, 1.000000477}, - {0.820833, 1, 1.000000477}, - {0.825, 1, 1.000000477}, - {0.829167, 1, 1.000000477}, - {0.833333, 1, 1.000000477}, - {0.8375, 1, 1.000000477}, - {0.841667, 1, 1.000000477}, - {0.845833, 1, 1.000000477}, - {0.85, 1, 1.000000477}, - {0.854167, 1, 1.000000477}, - {0.858333, 1, 1.000000477}, - {0.8625, 1, 1.000000477}, - {0.866667, 1, 1.000000477}, - {0.870833, 1, 1.000000477}, - {0.875, 1, 1.000000477}, - {0.879167, 1, 1.000000477}, - {0.883333, 1, 1.000000477}, - {0.8875, 1, 1.000000477}, - {0.891667, 1, 1.000000477}, - {0.895833, 1, 1.000000477}, - {0.9, 1, 1.000000477}, - {0.904167, 1, 1.000000477}, - {0.908333, 1, 1.000000477}, - {0.9125, 1, 1.000000477}, - {0.916667, 1, 1.000000477}, - {0.920833, 1, 1.000000477}, - {0.925, 1, 1.000000477}, - {0.929167, 1, 1.000000477}, - {0.933333, 1, 1.000000477}, - {0.9375, 1, 1.000000477}, - {0.941667, 1, 1.000000477}, - {0.945833, 1, 1.000000477}, - {0.95, 1, 1.000000477}, - {0.954167, 1, 1.000000477}, - {0.958333, 1, 1.000000477}, - {0.9625, 1, 1.000000477}, - {0.966667, 1, 1.000000477}, - {0.970833, 1, 1.000000477}, - {0.975, 1, 1.000000477}, - {0.979167, 1, 1.000000477}, - {0.983333, 1, 1.000000477}, - {0.9875, 1, 1.000000477}, - {0.991667, 1, 1.000000477}, - {0.995833, 1, 1.000000477}, - {1, 1, 1.000000477}, - {1.004167, 1.000682712, 0.015128844}, - {1.008333, 1.001363397, 0.014973078}, - {1.0125, 1.002042532, 0.014841928}, - {1.016667, 1.002720356, 0.014729479}, - {1.020833, 1.00339675, 0.014631276}, - {1.025, 1.004072189, 0.014543867}, - {1.029167, 1.004746675, 0.01446466}, - {1.033333, 1.00541997, 0.014391631}, - {1.0375, 1.006092548, 0.01432314}, - {1.041667, 1.006764412, 0.014257919}, - {1.045833, 1.007435203, 0.014194945}, - {1.05, 1.008105278, 0.014133334}, - {1.054167, 1.008774638, 0.014072391}, - {1.058333, 1.009443045, 0.014011139}, - {1.0625, 1.010110855, 0.01395021}, - {1.066667, 1.010777831, 0.013887996}, - {1.070833, 1.011443853, 0.013824509}, - {1.075, 1.01210916, 0.013759368}, - {1.079167, 1.012773633, 0.013692267}, - {1.083333, 1.013437271, 0.013622929}, - {1.0875, 1.014100075, 0.013551049}, - {1.091667, 1.014762163, 0.013476389}, - {1.095833, 1.015423179, 0.013398723}, - {1.1, 1.016083598, 0.013398723}, - {1.104167, 1.015262365, 0.88047874}, - {1.108333, 1.014493585, 0.89023459}, - {1.1125, 1.013762116, 0.898759723}, - {1.116667, 1.013056278, 0.906125188}, - {1.120833, 1.012367129, 0.912427425}, - {1.125, 1.01168704, 0.917777061}, - {1.129167, 1.011010766, 0.922281682}, - {1.133333, 1.010334253, 0.926045954}, - {1.1375, 1.009654403, 0.929170609}, - {1.141667, 1.008969307, 0.931745946}, - {1.145833, 1.008277893, 0.93385452}, - {1.15, 1.007579207, 0.935571969}, - {1.154167, 1.006873131, 0.936964393}, - {1.158333, 1.006160259, 0.938090801}, - {1.1625, 1.005440712, 0.939003944}, - {1.166667, 1.0047158, 0.9397493}, - {1.170833, 1.003986597, 0.940366805}, - {1.175, 1.003253937, 0.940891325}, - {1.179167, 1.002519608, 0.941352487}, - {1.183333, 1.001785278, 0.94177556}, - {1.1875, 1.001052022, 0.942182004}, - {1.191667, 1.000321627, 0.942589283}, - {1.195833, 0.999596179, 0.943011642}, - {1.2, 0.998876929, 0.943460345}, - {1.204167, 0.998165727, 0.943943799}, - {1.208333, 0.997464538, 0.944467604}, - {1.2125, 0.996774673, 0.945035696}, - {1.216667, 0.996098042, 0.945649385}, - {1.220833, 0.995436549, 0.946308196}, - {1.225, 0.994791448, 0.947010458}, - {1.229167, 0.994164526, 0.947752595}, - {1.233333, 0.993557453, 0.948529899}, - {1.2375, 0.99297154, 0.949337125}, - {1.241667, 0.992408335, 0.950167537}, - {1.245833, 0.99186933, 0.951014042}, - {1.25, 0.991355598, 0.951869369}, - {1.254167, 0.990868449, 0.952725708}, - {1.258333, 0.990409136, 0.953574955}, - {1.2625, 0.989978492, 0.954409778}, - {1.266667, 0.989577591, 0.955215633}, - {1.270833, 0.989207327, 0.956005096}, - {1.275, 0.988868177, 0.956751525}, - {1.279167, 0.988560915, 0.957458079}, - {1.283333, 0.988285899, 0.958120406}, - {1.2875, 0.988043547, 0.958723307}, - {1.291667, 0.987834036, 0.959283113}, - {1.295833, 0.987657607, 0.959768534}, - {1.3, 0.987514019, 0.960213661}, - {1.304167, 0.987403274, 0.96057564}, - {1.308333, 0.987325132, 0.96090132}, - {1.3125, 0.987279058, 0.961140752}, - {1.316667, 0.987264812, 0.961349428}, - {1.320833, 0.987281561, 0.961474001}, - {1.325, 0.987328827, 0.961574197}, - {1.329167, 0.987405658, 0.961597323}, - {1.333333, 0.987511337, 0.961602867}, - {1.3375, 0.987644792, 0.96154201}, - {1.341667, 0.987805247, 0.961470485}, - {1.345833, 0.987991393, 0.961345851}, - {1.35, 0.988202393, 0.961207449}, - {1.354167, 0.988437057, 0.961049318}, - {1.358333, 0.988694072, 0.960876703}, - {1.3625, 0.988972366, 0.960694611}, - {1.366667, 0.989270747, 0.960507751}, - {1.370833, 0.989587843, 0.96032083}, - {1.375, 0.989922643, 0.960137904}, - {1.379167, 0.990273893, 0.959962845}, - {1.383333, 0.990640223, 0.95979917}, - {1.3875, 0.991020679, 0.959649861}, - {1.391667, 0.991413951, 0.959517598}, - {1.395833, 0.991818845, 0.959404588}, - {1.4, 0.992234349, 0.959312677}, - {1.404167, 0.99265933, 0.959243178}, - {1.408333, 0.993092477, 0.959197223}, - {1.4125, 0.993533015, 0.959175408}, - {1.416667, 0.993979812, 0.95917803}, - {1.420833, 0.994431734, 0.959205091}, - {1.425, 0.994888008, 0.959256351}, - {1.429167, 0.995347559, 0.959331334}, - {1.433333, 0.995809376, 0.959429204}, - {1.4375, 0.996272743, 0.959549129}, - {1.441667, 0.996736646, 0.95968461}, - {1.445833, 0.997200072, 0.959850907}, - {1.45, 0.997662604, 0.960024655}, - {1.454167, 0.998123169, 0.960226417}, - {1.458333, 0.998580933, 0.960433066}, - {1.4625, 0.999035299, 0.960664332}, - {1.466667, 0.999485552, 0.96089834}, - {1.470833, 0.99993068, 0.961153209}, - {1.475, 1.000370383, 0.961408794}, - {1.479167, 1.000803709, 0.961681604}, - {1.483333, 1.001230001, 0.961953163}, - {1.4875, 1.001648784, 0.962238312}, - {1.491667, 1.00205946, 0.962520778}, - {1.495833, 1.002461076, 0.962813199}, - {1.5, 1.002853513, 0.963101745}, - {1.504167, 1.003236055, 0.963396966}, - {1.508333, 1.003607988, 0.96368736}, - {1.5125, 1.003968954, 0.963981271}, - {1.516667, 1.004318357, 0.964269757}, - {1.520833, 1.004655838, 0.964558721}, - {1.525, 1.004980803, 0.964841962}, - {1.529167, 1.005292892, 0.965122938}, - {1.533333, 1.005591631, 0.965397894}, - {1.5375, 1.00587666, 0.965667963}, - {1.541667, 1.006147623, 0.96593219}, - {1.545833, 1.006403923, 0.966188729}, - {1.55, 1.006645441, 0.966439664}, - {1.554167, 1.00687182, 0.966680348}, - {1.558333, 1.007082582, 0.966915607}, - {1.5625, 1.007277608, 0.967138052}, - {1.566667, 1.00745666, 0.967355549}, - {1.570833, 1.007619381, 0.96755743}, - {1.575, 1.007765532, 0.967754841}, - {1.579167, 1.007894993, 0.967934012}, - {1.583333, 1.008007526, 0.968109071}, - {1.5875, 1.008103132, 0.968263447}, - {1.591667, 1.008181453, 0.968414128}, - {1.595833, 1.008242607, 0.968541622}, - {1.6, 1.008286357, 0.968665838}, - {1.604167, 1.008312702, 0.968764782}, - {1.608333, 1.008321762, 0.968860805}, - {1.6125, 1.008313417, 0.968929827}, - {1.616667, 1.008287787, 0.968996286}, - {1.620833, 1.008244872, 0.969034612}, - {1.625, 1.00818491, 0.969070733}, - {1.629167, 1.00810802, 0.969078183}, - {1.633333, 1.008014202, 0.969083905}, - {1.6375, 1.007904053, 0.969061136}, - {1.641667, 1.007777452, 0.969037175}, - {1.645833, 1.007634878, 0.968985915}, - {1.65, 1.007476687, 0.96893394}, - {1.654167, 1.007303119, 0.968856812}, - {1.658333, 1.007114768, 0.968779624}, - {1.6625, 1.006911874, 0.968680382}, - {1.666667, 1.006694913, 0.968581617}, - {1.670833, 1.00646472, 0.968464911}, - {1.675, 1.006221414, 0.968349338}, - {1.679167, 1.005965829, 0.968220592}, - {1.683333, 1.005698442, 0.968093693}, - {1.6875, 1.005420089, 0.967959166}, - {1.691667, 1.005131125, 0.967827022}, - {1.695833, 1.004832625, 0.967693269}, - {1.7, 1.004525065, 0.967562377}, - {1.704167, 1.00420928, 0.967436075}, - {1.708333, 1.003885984, 0.967313051}, - {1.7125, 1.003556132, 0.967200637}, - {1.716667, 1.003220201, 0.967091799}, - {1.720833, 1.0028795, 0.966999233}, - {1.725, 1.00253439, 0.966910303}, - {1.729167, 1.00218606, 0.966842711}, - {1.733333, 1.001835227, 0.966778576}, - {1.7375, 1.001482844, 0.966739953}, - {1.741667, 1.001129627, 0.966711283}, - {1.745833, 1.000776529, 0.966690898}, - {1.75, 1.000424623, 0.966700375}, - {1.754167, 1.000074387, 0.96671176}, - {1.758333, 0.999727011, 0.966754198}, - {1.7625, 0.999383092, 0.966797709}, - {1.766667, 0.999043643, 0.966872096}, - {1.770833, 0.998709381, 0.966946483}, - {1.775, 0.998381138, 0.967050433}, - {1.779167, 0.99805963, 0.967153192}, - {1.783333, 0.997745872, 0.96728301}, - {1.7875, 0.997440159, 0.967410386}, - {1.791667, 0.997143567, 0.967561364}, - {1.795833, 0.99685663, 0.967714787}, - {1.8, 0.996579885, 0.967869997}, - {1.804167, 0.996314168, 0.968042195}, - {1.808333, 0.996059835, 0.968208969}, - {1.8125, 0.995817542, 0.968387842}, - {1.816667, 0.995587707, 0.968560398}, - {1.820833, 0.995370924, 0.968739927}, - {1.825, 0.995167375, 0.968912601}, - {1.829167, 0.994977593, 0.969087243}, - {1.833333, 0.994801879, 0.969254494}, - {1.8375, 0.99464041, 0.96941936}, - {1.841667, 0.994493544, 0.969576657}, - {1.845833, 0.994361401, 0.969727576}, - {1.85, 0.994244099, 0.969871104}, - {1.854167, 0.994141817, 0.970005214}, - {1.858333, 0.994054556, 0.970132172}, - {1.8625, 0.993982315, 0.970247447}, - {1.866667, 0.993925095, 0.970356286}, - {1.870833, 0.993882775, 0.97045207}, - {1.875, 0.993855238, 0.970542192}, - {1.879167, 0.993842363, 0.970618844}, - {1.883333, 0.993843973, 0.970690787}, - {1.8875, 0.993859708, 0.970749676}, - {1.891667, 0.993889451, 0.97080493}, - {1.895833, 0.993932843, 0.970848203}, - {1.9, 0.993989527, 0.970888972}, - {1.904167, 0.994059205, 0.97091943}, - {1.908333, 0.994141459, 0.970948577}, - {1.9125, 0.994235873, 0.970969498}, - {1.916667, 0.994342029, 0.970990121}, - {1.920833, 0.99445945, 0.971004903}, - {1.925, 0.994587719, 0.971020401}, - {1.929167, 0.9947263, 0.971032619}, - {1.933333, 0.994874775, 0.971046269}, - {1.9375, 0.995032549, 0.971059203}, - {1.941667, 0.995199144, 0.971074224}, - {1.945833, 0.995373964, 0.971090853}, - {1.95, 0.995556593, 0.971110106}, - {1.954167, 0.995746374, 0.971133053}, - {1.958333, 0.995942831, 0.971158922}, - {1.9625, 0.996145368, 0.971190274}, - {1.966667, 0.996353567, 0.971224725}, - {1.970833, 0.996566653, 0.97126615}, - {1.975, 0.996784389, 0.971310556}, - {1.979167, 0.997005939, 0.971363068}, - {1.983333, 0.997230887, 0.971418381}, - {1.9875, 0.997458696, 0.971482456}, - {1.991667, 0.997688949, 0.971549094}, - {1.995833, 0.997920871, 0.971624851}, - {2, 0.998154223, 0.971702695}, - {2.004167, 0.99838829, 0.971789718}, - {2.008333, 0.998622656, 0.971878409}, - {2.0125, 0.998856843, 0.971975863}, - {2.016667, 0.999090433, 0.972074568}, - {2.020833, 0.999322772, 0.972181499}, - {2.025, 0.999553561, 0.972289145}, - {2.029167, 0.999782324, 0.972404182}, - {2.033333, 1.000008583, 0.972519457}, - {2.0375, 1.000231862, 0.97264123}, - {2.041667, 1.000451922, 0.972762704}, - {2.045833, 1.000668168, 0.972889543}, - {2.05, 1.000880361, 0.973015666}, - {2.054167, 1.001088023, 0.973146021}, - {2.058333, 1.001290798, 0.973275185}, - {2.0625, 1.001488328, 0.973407388}, - {2.066667, 1.001680374, 0.973538041}, - {2.070833, 1.00186646, 0.973670363}, - {2.075, 1.002046466, 0.973800957}, - {2.079167, 1.002219915, 0.973931909}, - {2.083333, 1.002386689, 0.974060893}, - {2.0875, 1.00254631, 0.974188983}, - {2.091667, 1.002698779, 0.974314928}, - {2.095833, 1.002843618, 0.974438667}, - {2.1, 1.002980828, 0.974560261}, - {2.104167, 1.003109932, 0.974678457}, - {2.108333, 1.003231049, 0.974794388}, - {2.1125, 1.003343701, 0.974905789}, - {2.116667, 1.003448009, 0.975015044}, - {2.120833, 1.003543615, 0.975118697}, - {2.125, 1.003630638, 0.975220263}, - {2.129167, 1.00370872, 0.975315332}, - {2.133333, 1.003777862, 0.975408375}, - {2.1375, 1.003837943, 0.975494087}, - {2.141667, 1.003889084, 0.97557801}, - {2.145833, 1.003931046, 0.975653946}, - {2.15, 1.003963828, 0.975728214}, - {2.154167, 1.003987551, 0.975794077}, - {2.158333, 1.004002213, 0.97585845}, - {2.1625, 1.004007816, 0.975914061}, - {2.166667, 1.00400424, 0.97596848}, - {2.170833, 1.003991842, 0.976014078}, - {2.175, 1.003970623, 0.976058662}, - {2.179167, 1.003940463, 0.976094544}, - {2.183333, 1.003901839, 0.976129651}, - {2.1875, 1.003854632, 0.976156354}, - {2.191667, 1.003799081, 0.97618264}, - {2.195833, 1.003735423, 0.976201057}, - {2.2, 1.003663778, 0.976219237}, - {2.204167, 1.003584385, 0.976230323}, - {2.208333, 1.003497481, 0.97624141}, - {2.2125, 1.003403306, 0.976246357}, - {2.216667, 1.003302097, 0.976251602}, - {2.220833, 1.003194094, 0.976251721}, - {2.225, 1.003079653, 0.976252377}, - {2.229167, 1.002959013, 0.976249218}, - {2.233333, 1.002832532, 0.976246715}, - {2.2375, 1.002700567, 0.976241708}, - {2.241667, 1.002563357, 0.976237595}, - {2.245833, 1.002421498, 0.97623235}, - {2.25, 1.00227499, 0.976228058}, - {2.254167, 1.002124429, 0.976224005}, - {2.258333, 1.001970172, 0.976221025}, - {2.2625, 1.001812577, 0.976219654}, - {2.266667, 1.001652002, 0.976219356}, - {2.270833, 1.001489043, 0.976221859}, - {2.275, 1.001323819, 0.976225436}, - {2.279167, 1.001156807, 0.976232946}, - {2.283333, 1.000988603, 0.976241529}, - {2.2875, 1.000819445, 0.97625488}, - {2.291667, 1.000649691, 0.976269126}, - {2.295833, 1.000480056, 0.976288915}, - {2.3, 1.00031054, 0.976309478}, - {2.304167, 1.00014174, 0.976336062}, - {2.308333, 0.999974132, 0.976363182}, - {2.3125, 0.999808013, 0.97639662}, - {2.316667, 0.999643743, 0.976430357}, - {2.320833, 0.999481857, 0.976470292}, - {2.325, 0.999322474, 0.976510406}, - {2.329167, 0.999166131, 0.97655654}, - {2.333333, 0.999013186, 0.976602495}, - {2.3375, 0.998863876, 0.976654112}, - {2.341667, 0.998718619, 0.976705313}, - {2.345833, 0.998577714, 0.97676152}, - {2.35, 0.998441339, 0.976817131}, - {2.354167, 0.99830997, 0.976876974}, - {2.358333, 0.998183727, 0.976935983}, - {2.3625, 0.998062968, 0.976998508}, - {2.366667, 0.997947812, 0.97706002}, - {2.370833, 0.997838557, 0.977124095}, - {2.375, 0.997735381, 0.977187037}, - {2.379167, 0.997638524, 0.977251768}, - {2.383333, 0.997548044, 0.977315128}, - {2.3875, 0.99746418, 0.97737956}, - {2.391667, 0.997386992, 0.977442563}, - {2.395833, 0.997316659, 0.977505863}, - {2.4, 0.99725318, 0.977567792}, - {2.404167, 0.997196674, 0.977629304}, - {2.408333, 0.997147202, 0.977689505}, - {2.4125, 0.997104764, 0.977748811}, - {2.416667, 0.997069418, 0.977806926}, - {2.420833, 0.997041106, 0.977863729}, - {2.425, 0.997019887, 0.977919519}, - {2.429167, 0.997005641, 0.977973759}, - {2.433333, 0.99699831, 0.978027105}, - {2.4375, 0.996997893, 0.978078902}, - {2.441667, 0.997004211, 0.978129923}, - {2.445833, 0.997017264, 0.978179455}, - {2.45, 0.997036815, 0.97822845}, - {2.454167, 0.997062802, 0.978276134}, - {2.458333, 0.997095108, 0.97832346}, - {2.4625, 0.997133493, 0.978369713}, - {2.466667, 0.997177839, 0.978415847}, - {2.470833, 0.997227907, 0.978461266}, - {2.475, 0.997283578, 0.978506744}, - {2.479167, 0.997344553, 0.978551865}, - {2.483333, 0.997410715, 0.978597224}, - {2.4875, 0.997481763, 0.978642642}, - {2.491667, 0.99755758, 0.978688478}, - {2.495833, 0.997637749, 0.978734732}, - {2.5, 0.997722149, 0.978781521}, - {2.504167, 0.997810483, 0.978829205}, - {2.508333, 0.997902572, 0.978877366}, - {2.5125, 0.997998059, 0.978926837}, - {2.516667, 0.998096764, 0.978976846}, - {2.520833, 0.99819833, 0.979028463}, - {2.525, 0.998302639, 0.979080617}, - {2.529167, 0.998409212, 0.97913456}, - {2.533333, 0.998517931, 0.979189098}, - {2.5375, 0.998628497, 0.979245543}, - {2.541667, 0.998740673, 0.979302526}, - {2.545833, 0.998854041, 0.979361534}, - {2.55, 0.998968482, 0.97942096}, - {2.554167, 0.999083698, 0.979482412}, - {2.558333, 0.99919939, 0.979544222}, - {2.5625, 0.999315321, 0.97960794}, - {2.566667, 0.999431312, 0.979671896}, - {2.570833, 0.999546885, 0.979737639}, - {2.575, 0.999662042, 0.979803562}, - {2.579167, 0.999776363, 0.979871035}, - {2.583333, 0.999889672, 0.979938447}, - {2.5875, 1.000001788, 0.980007231}, - {2.591667, 1.000112414, 0.980075896}, - {2.595833, 1.000221252, 0.980145454}, - {2.6, 1.000328302, 0.980214894}, - {2.604167, 1.000433087, 0.98028487}, - {2.608333, 1.000535607, 0.980354488}, - {2.6125, 1.000635624, 0.980424404}, - {2.616667, 1.000732899, 0.980493844}, - {2.620833, 1.000827312, 0.980563104}, - {2.625, 1.000918627, 0.980631888}, - {2.629167, 1.001006722, 0.980700076}, - {2.633333, 1.001091361, 0.980767667}, - {2.6375, 1.001172543, 0.980834305}, - {2.641667, 1.001250029, 0.980900288}, - {2.645833, 1.001323581, 0.980964839}, - {2.65, 1.001393318, 0.981028795}, - {2.654167, 1.001459002, 0.981091022}, - {2.658333, 1.001520634, 0.981152534}, - {2.6625, 1.001577854, 0.98121196}, - {2.666667, 1.001630902, 0.98127073}, - {2.670833, 1.00167942, 0.981327116}, - {2.675, 1.001723647, 0.981382847}, - {2.679167, 1.001763225, 0.981435895}, - {2.683333, 1.001798391, 0.981488407}, - {2.6875, 1.001828909, 0.981538057}, - {2.691667, 1.001854777, 0.981587112}, - {2.695833, 1.001875997, 0.981633246}, - {2.7, 1.001892686, 0.981678843}, - {2.704167, 1.001904726, 0.981721342}, - {2.708333, 1.001912117, 0.981763482}, - {2.7125, 1.001914978, 0.981802464}, - {2.716667, 1.001913309, 0.981841147}, - {2.720833, 1.00190711, 0.981876731}, - {2.725, 1.001896501, 0.981912136}, - {2.729167, 1.00188148, 0.981944501}, - {2.733333, 1.001862168, 0.981976748}, - {2.7375, 1.001838684, 0.982006192}, - {2.741667, 1.001811028, 0.982035518}, - {2.745833, 1.001779318, 0.98206234}, - {2.75, 1.001743793, 0.982089102}, - {2.754167, 1.001704335, 0.98211354}, - {2.758333, 1.001661181, 0.982138097}, - {2.7625, 1.001614571, 0.982160687}, - {2.766667, 1.001564503, 0.982183337}, - {2.770833, 1.001511216, 0.982204437}, - {2.775, 1.001454711, 0.982225657}, - {2.779167, 1.001395345, 0.982245624}, - {2.783333, 1.001333117, 0.98226589}, - {2.7875, 1.001268268, 0.982285261}, - {2.791667, 1.001200914, 0.982304871}, - {2.795833, 1.001131415, 0.982324004}, - {2.8, 1.001059771, 0.982343495}, - {2.804167, 1.000986099, 0.982362807}, - {2.808333, 1.000910878, 0.982382476}, - {2.8125, 1.000833988, 0.982402384}, - {2.816667, 1.000755906, 0.98242265}, - {2.820833, 1.000676632, 0.982443452}, - {2.825, 1.000596285, 0.982464552}, - {2.829167, 1.000515342, 0.982486546}, - {2.833333, 1.000433803, 0.982508838}, - {2.8375, 1.000351906, 0.982532263}, - {2.841667, 1.000269771, 0.982555926}, - {2.845833, 1.000187874, 0.9825809}, - {2.85, 1.000106096, 0.982606173}, - {2.854167, 1.000024676, 0.982632816}, - {2.858333, 0.999943972, 0.982659698}, - {2.8625, 0.999864042, 0.982688129}, - {2.866667, 0.999785066, 0.98271668}, - {2.870833, 0.999707282, 0.98274678}, - {2.875, 0.999630749, 0.982777059}, - {2.879167, 0.999555767, 0.982808828}, - {2.883333, 0.999482453, 0.982840717}, - {2.8875, 0.999410987, 0.982874095}, - {2.891667, 0.999341428, 0.982907474}, - {2.895833, 0.999274015, 0.982942283}, - {2.9, 0.999208868, 0.982977033}, - {2.904167, 0.999146104, 0.983013093}, - {2.908333, 0.999085844, 0.983049035}, - {2.9125, 0.999028206, 0.983086228}, - {2.916667, 0.99897325, 0.983123243}, - {2.920833, 0.998921216, 0.98316133}, - {2.925, 0.998872042, 0.983199179}, - {2.929167, 0.998825967, 0.983237982}, - {2.933333, 0.998782873, 0.983276546}, - {2.9375, 0.998742998, 0.983315885}, - {2.941667, 0.998706341, 0.983354986}, - {2.945833, 0.998672962, 0.983394682}, - {2.95, 0.998642862, 0.9834342}, - {2.954167, 0.998616099, 0.983474135}, - {2.958333, 0.998592734, 0.983513892}, - {2.9625, 0.998572767, 0.983554006}, - {2.966667, 0.998556137, 0.983593881}, - {2.970833, 0.998542905, 0.983634114}, - {2.975, 0.99853307, 0.983674109}, - {2.979167, 0.998526633, 0.983714342}, - {2.983333, 0.998523533, 0.983754396}, - {2.9875, 0.998523712, 0.98379463}, - {2.991667, 0.998527169, 0.983834684}, - {2.995833, 0.998533845, 0.983874977}, - {3, 0.998543739, 0.983915091}, - {3.004167, 0.998556674, 0.983955443}, - {3.008333, 0.998572707, 0.983995676}, - {3.0125, 0.998591661, 0.984036088}, - {3.016667, 0.998613536, 0.98407644}, - {3.020833, 0.998638153, 0.984117031}, - {3.025, 0.998665512, 0.984157622}, - {3.029167, 0.998695493, 0.984198391}, - {3.033333, 0.998727977, 0.984239221}, - {3.0375, 0.998762906, 0.984280348}, - {3.041667, 0.998800099, 0.984321475}, - {3.045833, 0.998839438, 0.9843629}, - {3.05, 0.998880863, 0.984404445}, - {3.054167, 0.998924255, 0.984446287}, - {3.058333, 0.998969436, 0.984488249}, - {3.0625, 0.999016345, 0.984530509}, - {3.066667, 0.999064803, 0.984572887}, - {3.070833, 0.999114692, 0.984615624}, - {3.075, 0.999165893, 0.98465848}, - {3.079167, 0.999218225, 0.984701633}, - {3.083333, 0.999271631, 0.984744906}, - {3.0875, 0.999325931, 0.984788537}, - {3.091667, 0.999381006, 0.984832227}, - {3.095833, 0.999436736, 0.984876215}, - {3.1, 0.999492943, 0.984920263}, - {3.104167, 0.999549508, 0.984964609}, - {3.108333, 0.999606311, 0.985008955}, - {3.1125, 0.999663234, 0.98505348}, - {3.116667, 0.999720097, 0.985098004}, - {3.120833, 0.99977684, 0.985142648}, - {3.125, 0.999833286, 0.985187292}, - {3.129167, 0.999889314, 0.985231936}, - {3.133333, 0.999944806, 0.98527652}, - {3.1375, 0.999999642, 0.985321045}, - {3.141667, 1.000053763, 0.98536545}, - {3.145833, 1.000106931, 0.985409677}, - {3.15, 1.000159144, 0.985453784}, - {3.154167, 1.000210285, 0.985497534}, - {3.158333, 1.000260115, 0.985541224}, - {3.1625, 1.000308752, 0.985584378}, - {3.166667, 1.000355959, 0.985627472}, - {3.170833, 1.000401735, 0.985669911}, - {3.175, 1.000445843, 0.98571223}, - {3.179167, 1.0004884, 0.985753834}, - {3.183333, 1.00052917, 0.985795259}, - {3.1875, 1.000568032, 0.98583585}, - {3.191667, 1.000605226, 0.985876262}, - {3.195833, 1.000640273, 0.98591572}, - {3.2, 1.000673413, 0.985955}, - {3.204167, 1.000704527, 0.985993266}, - {3.208333, 1.000733614, 0.986031294}, - {3.2125, 1.000760436, 0.986068249}, - {3.216667, 1.000785112, 0.986105025}, - {3.220833, 1.000807524, 0.986140609}, - {3.225, 1.000827789, 0.986176014}, - {3.229167, 1.00084579, 0.986210167}, - {3.233333, 1.000861406, 0.986244142}, - {3.2375, 1.000874758, 0.986276925}, - {3.241667, 1.000885844, 0.986309528}, - {3.245833, 1.000894666, 0.986340821}, - {3.25, 1.000901222, 0.986372054}, - {3.254167, 1.000905395, 0.986401975}, - {3.258333, 1.000907302, 0.986431777}, - {3.2625, 1.000906944, 0.986460388}, - {3.266667, 1.000904441, 0.986488879}, - {3.270833, 1.000899673, 0.986516178}, - {3.275, 1.000892639, 0.986543477}, - {3.279167, 1.000883579, 0.986569583}, - {3.283333, 1.000872493, 0.98659569}, - {3.2875, 1.000859261, 0.986620784}, - {3.291667, 1.000844121, 0.986645818}, - {3.295833, 1.000826955, 0.986669898}, - {3.3, 1.000807881, 0.986694038}, - {3.304167, 1.000787139, 0.986717284}, - {3.308333, 1.000764608, 0.986740589}, - {3.3125, 1.00074029, 0.986763179}, - {3.316667, 1.000714421, 0.986785829}, - {3.320833, 1.000687122, 0.986807883}, - {3.325, 1.000658274, 0.986829996}, - {3.329167, 1.000628114, 0.986851633}, - {3.333333, 1.000596523, 0.986873388}, - {3.3375, 1.00056386, 0.986894786}, - {3.341667, 1.000530124, 0.986916244}, - {3.345833, 1.000495315, 0.986937523}, - {3.35, 1.000459552, 0.986958921}, - {3.354167, 1.000423074, 0.986980259}, - {3.358333, 1.000385761, 0.987001657}, - {3.3625, 1.000347853, 0.987023056}, - {3.366667, 1.000309348, 0.987044632}, - {3.370833, 1.000270367, 0.987066269}, - {3.375, 1.000231028, 0.987088084}, - {3.379167, 1.000191569, 0.987110138}, - {3.383333, 1.000151753, 0.987132251}, - {3.3875, 1.000112057, 0.987154663}, - {3.391667, 1.000072241, 0.987177193}, - {3.395833, 1.000032663, 0.987200141}, - {3.4, 0.999993145, 0.987223148}, - {3.404167, 0.999954045, 0.987246573}, - {3.408333, 0.999915302, 0.987270117}, - {3.4125, 0.999877036, 0.987294137}, - {3.416667, 0.999839365, 0.987318218}, - {3.420833, 0.999802351, 0.987342775}, - {3.425, 0.999765992, 0.987367451}, - {3.429167, 0.999730527, 0.987392604}, - {3.433333, 0.999695897, 0.987417817}, - {3.4375, 0.99966222, 0.987443566}, - {3.441667, 0.999629617, 0.987469375}, - {3.445833, 0.999598086, 0.98749572}, - {3.45, 0.999567688, 0.987522006}, - {3.454167, 0.999538481, 0.987548888}, - {3.458333, 0.999510586, 0.98757571}, - {3.4625, 0.999484062, 0.987603068}, - {3.466667, 0.999458849, 0.987630427}, - {3.470833, 0.999435067, 0.987658262}, - {3.475, 0.999412715, 0.987686098}, - {3.479167, 0.999391854, 0.98771435}, - {3.483333, 0.999372542, 0.987742543}, - {3.4875, 0.999354839, 0.987771213}, - {3.491667, 0.999338627, 0.987799883}, - {3.495833, 0.999324083, 0.987828851}, - {3.5, 0.999311149, 0.987857878}, - {3.504167, 0.999299824, 0.987887204}, - {3.508333, 0.999290168, 0.987916529}, - {3.5125, 0.999282122, 0.987946153}, - {3.516667, 0.999275744, 0.987975776}, - {3.520833, 0.999270976, 0.988005638}, - {3.525, 0.999267876, 0.9880355}, - {3.529167, 0.999266386, 0.98806566}, - {3.533333, 0.999266505, 0.98809576}, - {3.5375, 0.999268234, 0.988126099}, - {3.541667, 0.999271512, 0.988156438}, - {3.545833, 0.99927634, 0.988187015}, - {3.55, 0.999282718, 0.988217533}, - {3.554167, 0.999290526, 0.988248229}, - {3.558333, 0.999299765, 0.988278985}, - {3.5625, 0.999310493, 0.98830986}, - {3.566667, 0.999322534, 0.988340735}, - {3.570833, 0.999335885, 0.988371789}, - {3.575, 0.999350548, 0.988402784}, - {3.579167, 0.999366403, 0.988433957}, - {3.583333, 0.99938345, 0.98846513}, - {3.5875, 0.999401629, 0.988496423}, - {3.591667, 0.999420881, 0.988527715}, - {3.595833, 0.999441147, 0.988559127}, - {3.6, 0.999462366, 0.988590479}, - {3.604167, 0.999484479, 0.98862195}, - {3.608333, 0.999507427, 0.988653421}, - {3.6125, 0.99953115, 0.988684893}, - {3.616667, 0.999555588, 0.988716424}, - {3.620833, 0.999580622, 0.988747954}, - {3.625, 0.999606252, 0.988779485}, - {3.629167, 0.999632418, 0.988810956}, - {3.633333, 0.999659002, 0.988842487}, - {3.6375, 0.999685943, 0.988873959}, - {3.641667, 0.999713242, 0.98890543}, - {3.645833, 0.99974072, 0.988936782}, - {3.65, 0.999768436, 0.988968134}, - {3.654167, 0.999796212, 0.988999367}, - {3.658333, 0.999824107, 0.9890306}, - {3.6625, 0.999851942, 0.989061654}, - {3.666667, 0.999879658, 0.989092648}, - {3.670833, 0.999907255, 0.989123464}, - {3.675, 0.999934673, 0.989154279}, - {3.679167, 0.999961793, 0.989184797}, - {3.683333, 0.999988556, 0.989215255}, - {3.6875, 1.00001502, 0.989245474}, - {3.691667, 1.000041008, 0.989275634}, - {3.695833, 1.0000664, 0.989305437}, - {3.7, 1.000091314, 0.989335179}, - {3.704167, 1.000115633, 0.989364564}, - {3.708333, 1.000139356, 0.98939383}, - {3.7125, 1.000162244, 0.989422739}, - {3.716667, 1.000184536, 0.989451587}, - {3.720833, 1.000205874, 0.989479899}, - {3.725, 1.000226498, 0.989508212}, - {3.729167, 1.000246286, 0.989535987}, - {3.733333, 1.000265121, 0.989563704}, - {3.7375, 1.000283003, 0.989590943}, - {3.741667, 1.000299931, 0.989618063}, - {3.745833, 1.000315905, 0.989644587}, - {3.75, 1.000330806, 0.989671111}, - {3.754167, 1.000344634, 0.989697039}, - {3.758333, 1.000357509, 0.989722848}, - {3.7625, 1.000369191, 0.98974812}, - {3.766667, 1.000379801, 0.989773333}, - {3.770833, 1.000389338, 0.98979789}, - {3.775, 1.000397801, 0.989822447}, - {3.779167, 1.000405073, 0.989846408}, - {3.783333, 1.000411153, 0.98987025}, - {3.7875, 1.00041616, 0.989893556}, - {3.791667, 1.000419974, 0.989916801}, - {3.795833, 1.000422716, 0.989939451}, - {3.8, 1.000424385, 0.989962041}, - {3.804167, 1.000424862, 0.989984095}, - {3.808333, 1.000424266, 0.990006089}, - {3.8125, 1.000422597, 0.990027547}, - {3.816667, 1.000419736, 0.990049005}, - {3.820833, 1.000415921, 0.990069926}, - {3.825, 1.000411034, 0.990090847}, - {3.829167, 1.000405192, 0.990111291}, - {3.833333, 1.000398278, 0.990131736}, - {3.8375, 1.00039053, 0.990151703}, - {3.841667, 1.000381708, 0.990171731}, - {3.845833, 1.000372052, 0.99019134}, - {3.85, 1.000361443, 0.99021095}, - {3.854167, 1.000350118, 0.990230203}, - {3.858333, 1.000337839, 0.990249455}, - {3.8625, 1.000324965, 0.990268469}, - {3.866667, 1.000311255, 0.990287483}, - {3.870833, 1.000296831, 0.990306258}, - {3.875, 1.000281811, 0.990325034}, - {3.879167, 1.000266194, 0.99034363}, - {3.883333, 1.000249982, 0.990362227}, - {3.8875, 1.000233293, 0.990380764}, - {3.891667, 1.000216126, 0.990399241}, - {3.895833, 1.000198603, 0.990417659}, - {3.9, 1.000180602, 0.990436137}, - {3.904167, 1.000162244, 0.990454555}, - {3.908333, 1.000143766, 0.990473032}, - {3.9125, 1.000124931, 0.990491509}, - {3.916667, 1.000105858, 0.990509987}, - {3.920833, 1.000086665, 0.990528524}, - {3.925, 1.000067472, 0.990547061}, - {3.929167, 1.000048161, 0.990565717}, - {3.933333, 1.000028849, 0.990584433}, - {3.9375, 1.000009537, 0.990603209}, - {3.941667, 0.999990344, 0.990622103}, - {3.945833, 0.999971271, 0.990641057}, - {3.95, 0.999952376, 0.990660071}, - {3.954167, 0.99993372, 0.990679264}, - {3.958333, 0.999915302, 0.990698457}, - {3.9625, 0.999897242, 0.990717828}, - {3.966667, 0.999879479, 0.990737259}, - {3.970833, 0.999862075, 0.990756929}, - {3.975, 0.999845088, 0.990776539}, - {3.979167, 0.999828577, 0.990796447}, - {3.983333, 0.999812543, 0.990816295}, - {3.9875, 0.999797046, 0.990836442}, - {3.991667, 0.999782085, 0.990856528}, - {3.995833, 0.999767721, 0.990876913}, - {4, 0.999753952, 0.990897238}, - {4.004167, 0.999740779, 0.990917861}, - {4.008333, 0.999728322, 0.990938425}, - {4.0125, 0.99971652, 0.990959287}, - {4.016667, 0.999705434, 0.990980089}, - {4.020833, 0.999695063, 0.991001189}, - {4.025, 0.999685407, 0.991022229}, - {4.029167, 0.999676526, 0.991043508}, - {4.033333, 0.999668419, 0.991064787}, - {4.0375, 0.999661088, 0.991086245}, - {4.041667, 0.999654531, 0.991107702}, - {4.045833, 0.99964875, 0.991129398}, - {4.05, 0.999643803, 0.991151035}, - {4.054167, 0.99963963, 0.99117291}, - {4.058333, 0.999636233, 0.991194725}, - {4.0625, 0.99963367, 0.991216719}, - {4.066667, 0.999631941, 0.991238713}, - {4.070833, 0.999630928, 0.991260886}, - {4.075, 0.999630749, 0.991283059}, - {4.079167, 0.999631345, 0.991305292}, - {4.083333, 0.999632716, 0.991327584}, - {4.0875, 0.999634802, 0.991349995}, - {4.091667, 0.999637663, 0.991372347}, - {4.095833, 0.999641299, 0.991394877}, - {4.1, 0.999645591, 0.991417348}, - {4.104167, 0.999650598, 0.991439939}, - {4.108333, 0.99965626, 0.991462469}, - {4.1125, 0.999662578, 0.991485119}, - {4.116667, 0.999669552, 0.991507709}, - {4.120833, 0.999677122, 0.991530359}, - {4.125, 0.999685287, 0.991553009}, - {4.129167, 0.99969399, 0.991575718}, - {4.133333, 0.999703228, 0.991598368}, - {4.1375, 0.999713004, 0.991621077}, - {4.141667, 0.999723196, 0.991643786}, - {4.145833, 0.999733865, 0.991666436}, - {4.15, 0.999745011, 0.991689086}, - {4.154167, 0.999756455, 0.991711676}, - {4.158333, 0.999768317, 0.991734326}, - {4.1625, 0.999780476, 0.991756856}, - {4.166667, 0.999792933, 0.991779447}, - {4.170833, 0.999805629, 0.991801858}, - {4.175, 0.999818563, 0.991824329}, - {4.179167, 0.999831676, 0.991846681}, - {4.183333, 0.999844968, 0.991869032}, - {4.1875, 0.999858439, 0.991891265}, - {4.191667, 0.999871969, 0.991913497}, - {4.195833, 0.999885499, 0.991935551}, - {4.2, 0.999899149, 0.991957605}, - {4.204167, 0.999912739, 0.99197948}, - {4.208333, 0.999926329, 0.992001355}, - {4.2125, 0.999939859, 0.992023051}, - {4.216667, 0.99995327, 0.992044747}, - {4.220833, 0.999966562, 0.992066205}, - {4.225, 0.999979734, 0.992087603}, - {4.229167, 0.999992669, 0.992108822}, - {4.233333, 1.000005484, 0.992130041}, - {4.2375, 1.000018001, 0.992150962}, - {4.241667, 1.00003016, 0.992171884}, - {4.245833, 1.0000422, 0.992192566}, - {4.25, 1.000053763, 0.99221319}, - {4.254167, 1.000065088, 0.992233574}, - {4.258333, 1.000076056, 0.9922539}, - {4.2625, 1.000086665, 0.992273927}, - {4.266667, 1.000096798, 0.992293954}, - {4.270833, 1.000106454, 0.992313683}, - {4.275, 1.000115752, 0.992333353}, - {4.279167, 1.000124574, 0.992352784}, - {4.283333, 1.000133038, 0.992372096}, - {4.2875, 1.000140905, 0.992391169}, - {4.291667, 1.000148177, 0.992410183}, - {4.295833, 1.000155091, 0.992428839}, - {4.3, 1.000161409, 0.992447555}, - {4.304167, 1.000167251, 0.992465854}, - {4.308333, 1.000172496, 0.992484212}, - {4.3125, 1.000177264, 0.992502213}, - {4.316667, 1.000181437, 0.992520213}, - {4.320833, 1.000185013, 0.992537856}, - {4.325, 1.000188112, 0.992555499}, - {4.329167, 1.000190616, 0.992572844}, - {4.333333, 1.000192642, 0.992590189}, - {4.3375, 1.000193954, 0.992607176}, - {4.341667, 1.000194788, 0.992624164}, - {4.345833, 1.000195146, 0.992640913}, - {4.35, 1.000194907, 0.992657602}, - {4.354167, 1.000194073, 0.992673993}, - {4.358333, 1.000192881, 0.992690444}, - {4.3625, 1.000190973, 0.992706597}, - {4.366667, 1.000188708, 0.99272275}, - {4.370833, 1.000185847, 0.992738664}, - {4.375, 1.000182509, 0.992754579}, - {4.379167, 1.000178695, 0.992770255}, - {4.383333, 1.000174522, 0.992785931}, - {4.3875, 1.000169754, 0.992801368}, - {4.391667, 1.000164747, 0.992816865}, - {4.395833, 1.000159144, 0.992832184}, - {4.4, 1.000153303, 0.992847502}, - {4.404167, 1.000146985, 0.992862642}, - {4.408333, 1.000140309, 0.992877781}, - {4.4125, 1.000133276, 0.992892802}, - {4.416667, 1.000126004, 0.992907822}, - {4.420833, 1.000118494, 0.992922723}, - {4.425, 1.000110626, 0.992937624}, - {4.429167, 1.00010252, 0.992952466}, - {4.433333, 1.000094175, 0.992967308}, - {4.4375, 1.000085592, 0.99298209}, - {4.441667, 1.00007689, 0.992996871}, - {4.445833, 1.000067949, 0.993011653}, - {4.45, 1.000058889, 0.993026376}, - {4.454167, 1.00004971, 0.993041158}, - {4.458333, 1.000040531, 0.99305588}, - {4.4625, 1.000031233, 0.993070602}, - {4.466667, 1.000021815, 0.993085384}, - {4.470833, 1.000012517, 0.993100107}, - {4.475, 1.000003099, 0.993114889}, - {4.479167, 0.999993742, 0.99312973}, - {4.483333, 0.999984443, 0.993144512}, - {4.4875, 0.999975204, 0.993159413}, - {4.491667, 0.999966025, 0.993174255}, - {4.495833, 0.999956965, 0.993189216}, - {4.5, 0.999948025, 0.993204176}, - {4.504167, 0.999939263, 0.993219137}, - {4.508333, 0.99993062, 0.993234158}, - {4.5125, 0.999922216, 0.993249297}, - {4.516667, 0.999913991, 0.993264377}, - {4.520833, 0.999906003, 0.993279576}, - {4.525, 0.999898255, 0.993294775}, - {4.529167, 0.999890745, 0.993310034}, - {4.533333, 0.999883533, 0.993325353}, - {4.5375, 0.999876559, 0.993340731}, - {4.541667, 0.999869883, 0.993356109}, - {4.545833, 0.999863565, 0.993371606}, - {4.55, 0.999857545, 0.993387103}, - {4.554167, 0.999851882, 0.993402719}, - {4.558333, 0.999846518, 0.993418276}, - {4.5625, 0.999841511, 0.993434012}, - {4.566667, 0.999836922, 0.993449688}, - {4.570833, 0.99983263, 0.993465483}, - {4.575, 0.999828756, 0.993481219}, - {4.579167, 0.999825239, 0.993497133}, - {4.583333, 0.99982208, 0.993512988}, - {4.5875, 0.999819338, 0.993528962}, - {4.591667, 0.999817014, 0.993544877}, - {4.595833, 0.999815047, 0.99356091}, - {4.6, 0.999813497, 0.993576944}, - {4.604167, 0.999812305, 0.993593037}, - {4.608333, 0.99981153, 0.99360913}, - {4.6125, 0.999811113, 0.993625283}, - {4.616667, 0.999811053, 0.993641496}, - {4.620833, 0.999811411, 0.993657649}, - {4.625, 0.999812186, 0.993673861}, - {4.629167, 0.999813259, 0.993690133}, - {4.633333, 0.999814749, 0.993706405}, - {4.6375, 0.999816537, 0.993722677}, - {4.641667, 0.999818742, 0.993738949}, - {4.645833, 0.999821246, 0.993755221}, - {4.65, 0.999824047, 0.993771493}, - {4.654167, 0.999827206, 0.993787825}, - {4.658333, 0.999830663, 0.993804097}, - {4.6625, 0.999834418, 0.993820429}, - {4.666667, 0.999838471, 0.993836701}, - {4.670833, 0.999842763, 0.993852973}, - {4.675, 0.999847353, 0.993869245}, - {4.679167, 0.999852121, 0.993885517}, - {4.683333, 0.999857187, 0.99390173}, - {4.6875, 0.999862432, 0.993917942}, - {4.691667, 0.999867916, 0.993934095}, - {4.695833, 0.999873579, 0.993950248}, - {4.7, 0.99987936, 0.993966401}, - {4.704167, 0.99988538, 0.993982494}, - {4.708333, 0.99989146, 0.993998528}, - {4.7125, 0.999897718, 0.994014502}, - {4.716667, 0.999904037, 0.994030535}, - {4.720833, 0.999910533, 0.99404639}, - {4.725, 0.99991703, 0.994062304}, - {4.729167, 0.999923587, 0.9940781}, - {4.733333, 0.999930203, 0.994093835}, - {4.7375, 0.999936879, 0.994109511}, - {4.741667, 0.999943554, 0.994125187}, - {4.745833, 0.999950171, 0.994140744}, - {4.75, 0.999956846, 0.994156241}, - {4.754167, 0.999963462, 0.994171679}, - {4.758333, 0.999970019, 0.994187057}, - {4.7625, 0.999976516, 0.994202256}, - {4.766667, 0.999982893, 0.994217515}, - {4.770833, 0.999989212, 0.994232595}, - {4.775, 0.99999547, 0.994247675}, - {4.779167, 1.00000155, 0.994262576}, - {4.783333, 1.00000751, 0.994277477}, - {4.7875, 1.000013351, 0.994292259}, - {4.791667, 1.000018954, 0.994306982}, - {4.795833, 1.000024438, 0.994321525}, - {4.8, 1.000029802, 0.994336069}, - {4.804167, 1.000034928, 0.994350433}, - {4.808333, 1.000039816, 0.994364798}, - {4.8125, 1.000044584, 0.994378984}, - {4.816667, 1.000048995, 0.99439317}, - {4.820833, 1.000053287, 0.994407177}, - {4.825, 1.00005734, 0.994421124}, - {4.829167, 1.000061154, 0.994434953}, - {4.833333, 1.000064611, 0.994448721}, - {4.8375, 1.000067949, 0.994462311}, - {4.841667, 1.000071049, 0.994475901}, - {4.845833, 1.000073791, 0.994489312}, - {4.85, 1.000076294, 0.994502723}, - {4.854167, 1.000078559, 0.994515955}, - {4.858333, 1.000080466, 0.994529188}, - {4.8625, 1.000082254, 0.994542241}, - {4.866667, 1.000083685, 0.994555235}, - {4.870833, 1.000084758, 0.99456811}, - {4.875, 1.000085711, 0.994580984}, - {4.879167, 1.000086308, 0.99459368}, - {4.883333, 1.000086665, 0.994606376}, - {4.8875, 1.000086784, 0.994618893}, - {4.891667, 1.000086546, 0.99463141}, - {4.895833, 1.000086069, 0.994643748}, - {4.9, 1.000085354, 0.994656146}, - {4.904167, 1.0000844, 0.994668365}, - {4.908333, 1.000083208, 0.994680583}, - {4.9125, 1.000081778, 0.994692683}, - {4.916667, 1.000080109, 0.994704783}, - {4.920833, 1.000078201, 0.994716704}, - {4.925, 1.000076056, 0.994728684}, - {4.929167, 1.000073791, 0.994740546}, - {4.933333, 1.000071168, 0.994752407}, - {4.9375, 1.000068426, 0.994764149}, - {4.941667, 1.000065565, 0.994775891}, - {4.945833, 1.000062346, 0.994787514}, - {4.95, 1.000059128, 0.994799197}, - {4.954167, 1.000055671, 0.99481076}, - {4.958333, 1.000052094, 0.994822323}, - {4.9625, 1.000048399, 0.994833887}, - {4.966667, 1.000044465, 0.99484539}, - {4.970833, 1.000040531, 0.994856834}, - {4.975, 1.000036478, 0.994868279}, - {4.979167, 1.000032187, 0.994879723}, - {4.983333, 1.000028014, 0.994891107}, - {4.9875, 1.000023603, 0.994902492}, - {4.991667, 1.000019193, 0.994913876}, - {4.995833, 1.000014782, 0.994925261}, - {5, 1.000010252, 0.994936585}, - {5.004167, 1.000005722, 0.99494797}, - {5.008333, 1.000001192, 0.994959295}, - {5.0125, 0.999996662, 0.99497062}, - {5.016667, 0.999992073, 0.994981945}, - {5.020833, 0.999987543, 0.994993329}, - {5.025, 0.999983072, 0.995004654}, - {5.029167, 0.999978602, 0.995015979}, - {5.033333, 0.999974132, 0.995027363}, - {5.0375, 0.99996978, 0.995038688}, - {5.041667, 0.999965489, 0.995050073}, - {5.045833, 0.999961257, 0.995061457}, - {5.05, 0.999957144, 0.995072842}, - {5.054167, 0.999953091, 0.995084286}, - {5.058333, 0.999949157, 0.99509567}, - {5.0625, 0.999945343, 0.995107114}, - {5.066667, 0.999941587, 0.995118558}, - {5.070833, 0.999938011, 0.995130002}, - {5.075, 0.999934614, 0.995141506}, - {5.079167, 0.999931276, 0.99515301}, - {5.083333, 0.999928117, 0.995164514}, - {5.0875, 0.999925137, 0.995176017}, - {5.091667, 0.999922276, 0.995187581}, - {5.095833, 0.999919593, 0.995199144}, - {5.1, 0.99991709, 0.995210707}, - {5.104167, 0.999914765, 0.99522233}, - {5.108333, 0.99991262, 0.995233953}, - {5.1125, 0.999910653, 0.995245576}, - {5.116667, 0.999908865, 0.995257199}, - {5.120833, 0.999907255, 0.995268881}, - {5.125, 0.999905825, 0.995280504}, - {5.129167, 0.999904573, 0.995292187}, - {5.133333, 0.99990356, 0.995303869}, - {5.1375, 0.999902725, 0.995315611}, - {5.141667, 0.99990201, 0.995327294}, - {5.145833, 0.999901593, 0.995339036}, - {5.15, 0.999901295, 0.995350778}, - {5.154167, 0.999901176, 0.99536252}, - {5.158333, 0.999901295, 0.995374262}, - {5.1625, 0.999901593, 0.995386004}, - {5.166667, 0.99990201, 0.995397747}, - {5.170833, 0.999902666, 0.995409489}, - {5.175, 0.9999035, 0.995421231}, - {5.179167, 0.999904454, 0.995432973}, - {5.183333, 0.999905646, 0.995444715}, - {5.1875, 0.999906957, 0.995456457}, - {5.191667, 0.999908388, 0.995468199}, - {5.195833, 0.999910057, 0.995479882}, - {5.2, 0.999911845, 0.995491624}, - {5.204167, 0.999913752, 0.995503306}, - {5.208333, 0.999915779, 0.995514989}, - {5.2125, 0.999917984, 0.995526671}, - {5.216667, 0.999920249, 0.995538294}, - {5.220833, 0.999922693, 0.995549917}, - {5.225, 0.999925196, 0.99556154}, - {5.229167, 0.999927878, 0.995573103}, - {5.233333, 0.999930561, 0.995584726}, - {5.2375, 0.999933362, 0.99559623}, - {5.241667, 0.999936283, 0.995607734}, - {5.245833, 0.999939263, 0.995619237}, - {5.25, 0.999942303, 0.995630682}, - {5.254167, 0.999945343, 0.995642126}, - {5.258333, 0.999948502, 0.99565351}, - {5.2625, 0.999951661, 0.995664835}, - {5.266667, 0.999954879, 0.99567616}, - {5.270833, 0.999958098, 0.995687425}, - {5.275, 0.999961376, 0.99569869}, - {5.279167, 0.999964654, 0.995709896}, - {5.283333, 0.999967933, 0.995721042}, - {5.2875, 0.999971151, 0.995732129}, - {5.291667, 0.99997443, 0.995743215}, - {5.295833, 0.999977648, 0.995754182}, - {5.3, 0.999980807, 0.995765209}, - {5.304167, 0.999983966, 0.995776117}, - {5.308333, 0.999987125, 0.995787024}, - {5.3125, 0.999990165, 0.995797813}, - {5.316667, 0.999993205, 0.995808601}, - {5.320833, 0.999996126, 0.995819271}, - {5.325, 0.999999046, 0.995829999}, - {5.329167, 1.000001788, 0.995840549}, - {5.333333, 1.00000453, 0.995851159}, - {5.3375, 1.000007153, 0.99586159}, - {5.341667, 1.000009775, 0.99587208}, - {5.345833, 1.000012159, 0.995882452}, - {5.35, 1.000014544, 0.995892823}, - {5.354167, 1.000016809, 0.995903075}, - {5.358333, 1.000018954, 0.995913327}, - {5.3625, 1.000020981, 0.99592346}, - {5.366667, 1.000022888, 0.995933592}, - {5.370833, 1.000024676, 0.995943606}, - {5.375, 1.000026345, 0.995953619}, - {5.379167, 1.000027895, 0.995963573}, - {5.383333, 1.000029325, 0.995973468}, - {5.3875, 1.000030637, 0.995983303}, - {5.391667, 1.000031829, 0.995993078}, - {5.395833, 1.000032783, 0.996002793}, - {5.4, 1.000033736, 0.996012509}, - {5.404167, 1.000034451, 0.996022105}, - {5.408333, 1.000035167, 0.996031642}, - {5.4125, 1.000035644, 0.996041179}, - {5.416667, 1.000036001, 0.996050656}, - {5.420833, 1.00003624, 0.996060073}, - {5.425, 1.000036359, 0.996069431}, - {5.429167, 1.00003624, 0.99607873}, - {5.433333, 1.00003612, 0.996088028}, - {5.4375, 1.000035882, 0.996097267}, - {5.441667, 1.000035405, 0.996106446}, - {5.445833, 1.000034928, 0.996115625}, - {5.45, 1.000034213, 0.996124744}, - {5.454167, 1.000033498, 0.996133745}, - {5.458333, 1.000032663, 0.996142805}, - {5.4625, 1.00003159, 0.996151805}, - {5.466667, 1.000030518, 0.996160746}, - {5.470833, 1.000029325, 0.996169686}, - {5.475, 1.000028014, 0.996178567}, - {5.479167, 1.000026703, 0.996187449}, - {5.483333, 1.000025153, 0.99619627}, - {5.4875, 1.000023603, 0.996205091}, - {5.491667, 1.000022054, 0.996213853}, - {5.495833, 1.000020266, 0.996222615}, - {5.5, 1.000018477, 0.996231318}, - {5.504167, 1.000016689, 0.99624002}, - {5.508333, 1.000014782, 0.996248722}, - {5.5125, 1.000012755, 0.996257365}, - {5.516667, 1.000010729, 0.996266007}, - {5.520833, 1.000008702, 0.99627465}, - {5.525, 1.000006676, 0.996283293}, - {5.529167, 1.00000453, 0.996291876}, - {5.533333, 1.000002384, 0.996300459}, - {5.5375, 1.000000238, 0.996309042}, - {5.541667, 0.999998033, 0.996317625}, - {5.545833, 0.999995828, 0.996326149}, - {5.55, 0.999993622, 0.996334672}, - {5.554167, 0.999991417, 0.996343195}, - {5.558333, 0.999989212, 0.996351779}, - {5.5625, 0.999987006, 0.996360302}, - {5.566667, 0.99998486, 0.996368825}, - {5.570833, 0.999982715, 0.996377289}, - {5.575, 0.999980569, 0.996385813}, - {5.579167, 0.999978483, 0.996394336}, - {5.583333, 0.999976397, 0.99640286}, - {5.5875, 0.99997443, 0.996411324}, - {5.591667, 0.999972463, 0.996419847}, - {5.595833, 0.999970496, 0.99642837}, - {5.6, 0.999968648, 0.996436894}, - {5.604167, 0.99996686, 0.996445358}, - {5.608333, 0.999965072, 0.996453881}, - {5.6125, 0.999963403, 0.996462405}, - {5.616667, 0.999961793, 0.996470869}, - {5.620833, 0.999960244, 0.996479392}, - {5.625, 0.999958754, 0.996487916}, - {5.629167, 0.999957383, 0.996496439}, - {5.633333, 0.999956071, 0.996504962}, - {5.6375, 0.99995482, 0.996513486}, - {5.641667, 0.999953687, 0.996522009}, - {5.645833, 0.999952614, 0.996530533}, - {5.65, 0.999951661, 0.996539056}, - {5.654167, 0.999950767, 0.99654758}, - {5.658333, 0.999949932, 0.996556044}, - {5.6625, 0.999949276, 0.996564627}, - {5.666667, 0.999948621, 0.99657315}, - {5.670833, 0.999948144, 0.996581614}, - {5.675, 0.999947667, 0.996590137}, - {5.679167, 0.999947369, 0.996598661}, - {5.683333, 0.999947131, 0.996607184}, - {5.6875, 0.999946952, 0.996615708}, - {5.691667, 0.999946892, 0.996624231}, - {5.695833, 0.999946952, 0.996632755}, - {5.7, 0.999947071, 0.996641219}, - {5.704167, 0.999947309, 0.996649742}, - {5.708333, 0.999947608, 0.996658266}, - {5.7125, 0.999947965, 0.996666729}, - {5.716667, 0.999948442, 0.996675193}, - {5.720833, 0.999948978, 0.996683657}, - {5.725, 0.999949634, 0.996692121}, - {5.729167, 0.999950349, 0.996700585}, - {5.733333, 0.999951124, 0.996709049}, - {5.7375, 0.999952018, 0.996717453}, - {5.741667, 0.999952912, 0.996725857}, - {5.745833, 0.999953926, 0.996734262}, - {5.75, 0.999954998, 0.996742666}, - {5.754167, 0.999956131, 0.99675101}, - {5.758333, 0.999957263, 0.996759415}, - {5.7625, 0.999958515, 0.9967677}, - {5.766667, 0.999959826, 0.996776044}, - {5.770833, 0.999961138, 0.996784329}, - {5.775, 0.999962509, 0.996792674}, - {5.779167, 0.999963939, 0.9968009}, - {5.783333, 0.99996537, 0.996809185}, - {5.7875, 0.99996686, 0.99681735}, - {5.791667, 0.99996835, 0.996825576}, - {5.795833, 0.9999699, 0.996833742}, - {5.8, 0.999971449, 0.996841908}, - {5.804167, 0.999972999, 0.996850014}, - {5.808333, 0.999974608, 0.99685812}, - {5.8125, 0.999976218, 0.996866167}, - {5.816667, 0.999977827, 0.996874273}, - {5.820833, 0.999979436, 0.99688226}, - {5.825, 0.999980986, 0.996890247}, - {5.829167, 0.999982595, 0.996898234}, - {5.833333, 0.999984205, 0.996906161}, - {5.8375, 0.999985754, 0.996914029}, - {5.841667, 0.999987304, 0.996921897}, - {5.845833, 0.999988854, 0.996929765}, - {5.85, 0.999990344, 0.996937573}, - {5.854167, 0.999991834, 0.996945322}, - {5.858333, 0.999993324, 0.99695307}, - {5.8625, 0.999994755, 0.996960759}, - {5.866667, 0.999996126, 0.996968508}, - {5.870833, 0.999997497, 0.996976137}, - {5.875, 0.999998748, 0.996983767}, - {5.879167, 1, 0.996991277}, - {5.883333, 1.000001311, 0.996998847}, - {5.8875, 1.000002384, 0.997006357}, - {5.891667, 1.000003576, 0.997013867}, - {5.895833, 1.000004649, 0.997021258}, - {5.9, 1.000005603, 0.997028708}, - {5.904167, 1.000006557, 0.99703604}, - {5.908333, 1.00000751, 0.997043431}, - {5.9125, 1.000008345, 0.997050703}, - {5.916667, 1.00000906, 0.997057974}, - {5.920833, 1.000009775, 0.997065246}, - {5.925, 1.00001049, 0.997072458}, - {5.929167, 1.000011086, 0.997079611}, - {5.933333, 1.000011563, 0.997086763}, - {5.9375, 1.00001204, 0.997093856}, - {5.941667, 1.000012398, 0.997100949}, - {5.945833, 1.000012755, 0.997107983}, - {5.95, 1.000012994, 0.997115016}, - {5.954167, 1.000013232, 0.99712199}, - {5.958333, 1.000013351, 0.997128963}, - {5.9625, 1.000013351, 0.997135878}, - {5.966667, 1.000013471, 0.997142792}, - {5.970833, 1.000013351, 0.997149646}, - {5.975, 1.000013232, 0.997156501}, - {5.979167, 1.000013113, 0.997163296}, - {5.983333, 1.000012875, 0.99717015}, - {5.9875, 1.000012517, 0.997176886}, - {5.991667, 1.000012159, 0.997183621}, - {5.995833, 1.000011802, 0.997190356}, - {6, 1.000011325, 0.997197032}, - {6.004167, 1.000010729, 0.997203708}, - {6.008333, 1.000010252, 0.997210383}, - {6.0125, 1.000009656, 0.997217}, - {6.016667, 1.000008941, 0.997223616}, - {6.020833, 1.000008225, 0.997230172}, - {6.025, 1.00000751, 0.997236729}, - {6.029167, 1.000006676, 0.997243285}, - {6.033333, 1.00000596, 0.997249842}, - {6.0375, 1.000005007, 0.997256339}, - {6.041667, 1.000004172, 0.997262836}, - {6.045833, 1.000003219, 0.997269332}, - {6.05, 1.000002265, 0.99727577}, - {6.054167, 1.000001311, 0.997282207}, - {6.058333, 1.000000358, 0.997288644}, - {6.0625, 0.999999344, 0.997295082}, - {6.066667, 0.999998331, 0.997301519}, - {6.070833, 0.999997258, 0.997307897}, - {6.075, 0.999996245, 0.997314274}, - {6.079167, 0.999995172, 0.997320652}, - {6.083333, 0.999994099, 0.99732703}, - {6.0875, 0.999993026, 0.997333407}, - {6.091667, 0.999992013, 0.997339785}, - {6.095833, 0.99999094, 0.997346103}, - {6.1, 0.999989867, 0.997352421}, - {6.104167, 0.999988794, 0.997358739}, - {6.108333, 0.999987781, 0.997365057}, - {6.1125, 0.999986768, 0.997371376}, - {6.116667, 0.999985754, 0.997377694}, - {6.120833, 0.999984741, 0.997384012}, - {6.125, 0.999983788, 0.99739027}, - {6.129167, 0.999982834, 0.997396588}, - {6.133333, 0.99998188, 0.997402847}, - {6.1375, 0.999980986, 0.997409165}, - {6.141667, 0.999980092, 0.997415423}, - {6.145833, 0.999979258, 0.997421682}, - {6.15, 0.999978423, 0.99742794}, - {6.154167, 0.999977648, 0.997434199}, - {6.158333, 0.999976933, 0.997440457}, - {6.1625, 0.999976218, 0.997446716}, - {6.166667, 0.999975562, 0.997452974}, - {6.170833, 0.999974906, 0.997459233}, - {6.175, 0.99997431, 0.997465432}, - {6.179167, 0.999973774, 0.99747169}, - {6.183333, 0.999973238, 0.997477889}, - {6.1875, 0.999972761, 0.997484148}, - {6.191667, 0.999972343, 0.997490346}, - {6.195833, 0.999971986, 0.997496605}, - {6.2, 0.999971628, 0.997502804}, - {6.204167, 0.99997133, 0.997509003}, - {6.208333, 0.999971092, 0.997515202}, - {6.2125, 0.999970913, 0.9975214}, - {6.216667, 0.999970734, 0.997527599}, - {6.220833, 0.999970615, 0.997533798}, - {6.225, 0.999970555, 0.997539937}, - {6.229167, 0.999970555, 0.997546136}, - {6.233333, 0.999970555, 0.997552276}, - {6.2375, 0.999970615, 0.997558475}, - {6.241667, 0.999970734, 0.997564614}, - {6.245833, 0.999970853, 0.997570753}, - {6.25, 0.999971092, 0.997576892}, - {6.254167, 0.99997133, 0.997583032}, - {6.258333, 0.999971569, 0.997589111}, - {6.2625, 0.999971926, 0.997595251}, - {6.266667, 0.999972284, 0.99760133}, - {6.270833, 0.999972641, 0.99760741}, - {6.275, 0.999973059, 0.99761349}, - {6.279167, 0.999973536, 0.997619569}, - {6.283333, 0.999974012, 0.997625649}, - {6.2875, 0.999974549, 0.997631669}, - {6.291667, 0.999975085, 0.997637689}, - {6.295833, 0.999975681, 0.997643709}, - {6.3, 0.999976277, 0.997649729}, - {6.304167, 0.999976933, 0.997655749}, - {6.308333, 0.999977589, 0.99766171}, - {6.3125, 0.999978244, 0.99766767}, - {6.316667, 0.99997896, 0.997673631}, - {6.320833, 0.999979675, 0.997679532}, - {6.325, 0.99998039, 0.997685492}, - {6.329167, 0.999981165, 0.997691393}, - {6.333333, 0.99998188, 0.997697234}, - {6.3375, 0.999982655, 0.997703135}, - {6.341667, 0.99998343, 0.997708976}, - {6.345833, 0.999984205, 0.997714818}, - {6.35, 0.999985039, 0.997720659}, - {6.354167, 0.999985814, 0.99772644}, - {6.358333, 0.999986589, 0.997732222}, - {6.3625, 0.999987364, 0.997737944}, - {6.366667, 0.999988139, 0.997743726}, - {6.370833, 0.999988973, 0.997749448}, - {6.375, 0.999989748, 0.99775517}, - {6.379167, 0.999990463, 0.997760832}, - {6.383333, 0.999991238, 0.997766495}, - {6.3875, 0.999992013, 0.997772098}, - {6.391667, 0.999992728, 0.99777776}, - {6.395833, 0.999993443, 0.997783363}, - {6.4, 0.999994159, 0.997788966}, - {6.404167, 0.999994814, 0.997794509}, - {6.408333, 0.99999547, 0.997800052}, - {6.4125, 0.999996126, 0.997805536}, - {6.416667, 0.999996781, 0.997811079}, - {6.420833, 0.999997377, 0.997816503}, - {6.425, 0.999997973, 0.997821987}, - {6.429167, 0.99999851, 0.997827411}, - {6.433333, 0.999999046, 0.997832835}, - {6.4375, 0.999999523, 0.997838199}, - {6.441667, 1, 0.997843623}, - {6.445833, 1.000000477, 0.997848928}, - {6.45, 1.000000834, 0.997854292}, - {6.454167, 1.000001192, 0.997859597}, - {6.458333, 1.00000155, 0.997864902}, - {6.4625, 1.000001907, 0.997870147}, - {6.466667, 1.000002265, 0.997875392}, - {6.470833, 1.000002503, 0.997880638}, - {6.475, 1.000002742, 0.997885823}, - {6.479167, 1.000002861, 0.997891009}, - {6.483333, 1.000003099, 0.997896194}, - {6.4875, 1.000003219, 0.99790132}, - {6.491667, 1.000003338, 0.997906446}, - {6.495833, 1.000003457, 0.997911572}, - {6.5, 1.000003457, 0.997916639}, - {6.504167, 1.000003457, 0.997921705}, - {6.508333, 1.000003457, 0.997926772}, - {6.5125, 1.000003338, 0.997931838}, - {6.516667, 1.000003338, 0.997936845}, - {6.520833, 1.000003219, 0.997941852}, - {6.525, 1.000003099, 0.997946858}, - {6.529167, 1.000002861, 0.997951806}, - {6.533333, 1.000002742, 0.997956753}, - {6.5375, 1.000002503, 0.9979617}, - {6.541667, 1.000002265, 0.997966647}, - {6.545833, 1.000002027, 0.997971535}, - {6.55, 1.000001669, 0.997976422}, - {6.554167, 1.000001311, 0.99798131}, - {6.558333, 1.000001073, 0.997986197}, - {6.5625, 1.000000715, 0.997991025}, - {6.566667, 1.000000238, 0.997995913}, - {6.570833, 0.999999881, 0.998000741}, - {6.575, 0.999999523, 0.998005509}, - {6.579167, 0.999999046, 0.998010337}, - {6.583333, 0.999998629, 0.998015106}, - {6.5875, 0.999998152, 0.998019934}, - {6.591667, 0.999997735, 0.998024702}, - {6.595833, 0.999997258, 0.998029411}, - {6.6, 0.999996781, 0.998034179}, - {6.604167, 0.999996245, 0.998038948}, - {6.608333, 0.999995768, 0.998043656}, - {6.6125, 0.999995232, 0.998048365}, - {6.616667, 0.999994755, 0.998053074}, - {6.620833, 0.999994218, 0.998057783}, - {6.625, 0.999993742, 0.998062491}, - {6.629167, 0.999993205, 0.998067141}, - {6.633333, 0.999992728, 0.998071849}, - {6.6375, 0.999992192, 0.998076499}, - {6.641667, 0.999991715, 0.998081207}, - {6.645833, 0.999991179, 0.998085856}, - {6.65, 0.999990702, 0.998090506}, - {6.654167, 0.999990225, 0.998095095}, - {6.658333, 0.999989748, 0.998099744}, - {6.6625, 0.999989271, 0.998104393}, - {6.666667, 0.999988794, 0.998108983}, - {6.670833, 0.999988377, 0.998113632}, - {6.675, 0.99998796, 0.998118222}, - {6.679167, 0.999987543, 0.998122811}, - {6.683333, 0.999987125, 0.998127401}, - {6.6875, 0.999986708, 0.99813199}, - {6.691667, 0.999986351, 0.99813658}, - {6.695833, 0.999985993, 0.99814117}, - {6.7, 0.999985635, 0.998145759}, - {6.704167, 0.999985337, 0.998150289}, - {6.708333, 0.999985039, 0.998154879}, - {6.7125, 0.999984741, 0.998159409}, - {6.716667, 0.999984503, 0.998163998}, - {6.720833, 0.999984264, 0.998168528}, - {6.725, 0.999984026, 0.998173058}, - {6.729167, 0.999983847, 0.998177588}, - {6.733333, 0.999983668, 0.998182118}, - {6.7375, 0.99998349, 0.998186648}, - {6.741667, 0.99998337, 0.998191178}, - {6.745833, 0.999983251, 0.998195648}, - {6.75, 0.999983132, 0.998200178}, - {6.754167, 0.999983072, 0.998204648}, - {6.758333, 0.999983072, 0.998209178}, - {6.7625, 0.999983013, 0.998213649}, - {6.766667, 0.999983013, 0.998218119}, - {6.770833, 0.999983013, 0.998222589}, - {6.775, 0.999983072, 0.99822706}, - {6.779167, 0.999983132, 0.99823153}, - {6.783333, 0.999983251, 0.998235941}, - {6.7875, 0.999983311, 0.998240411}, - {6.791667, 0.99998343, 0.998244822}, - {6.795833, 0.999983609, 0.998249233}, - {6.8, 0.999983728, 0.998253644}, - {6.804167, 0.999983907, 0.998258054}, - {6.808333, 0.999984145, 0.998262465}, - {6.8125, 0.999984324, 0.998266876}, - {6.816667, 0.999984562, 0.998271227}, - {6.820833, 0.999984801, 0.998275638}, - {6.825, 0.999985099, 0.998279989}, - {6.829167, 0.999985337, 0.99828434}, - {6.833333, 0.999985635, 0.998288691}, - {6.8375, 0.999985933, 0.998292983}, - {6.841667, 0.999986291, 0.998297334}, - {6.845833, 0.999986589, 0.998301625}, - {6.85, 0.999986947, 0.998305976}, - {6.854167, 0.999987304, 0.998310208}, - {6.858333, 0.999987662, 0.9983145}, - {6.8625, 0.999988019, 0.998318791}, - {6.866667, 0.999988377, 0.998323023}, - {6.870833, 0.999988735, 0.998327315}, - {6.875, 0.999989152, 0.998331547}, - {6.879167, 0.99998951, 0.998335719}, - {6.883333, 0.999989927, 0.998339951}, - {6.8875, 0.999990284, 0.998344183}, - {6.891667, 0.999990702, 0.998348355}, - {6.895833, 0.999991059, 0.998352528}, - {6.9, 0.999991477, 0.9983567}, - {6.904167, 0.999991834, 0.998360813}, - {6.908333, 0.999992251, 0.998364985}, - {6.9125, 0.999992609, 0.998369098}, - {6.916667, 0.999993026, 0.99837321}, - {6.920833, 0.999993384, 0.998377264}, - {6.925, 0.999993742, 0.998381376}, - {6.929167, 0.999994099, 0.998385429}, - {6.933333, 0.999994457, 0.998389482}, - {6.9375, 0.999994814, 0.998393536}, - {6.941667, 0.999995172, 0.998397589}, - {6.945833, 0.99999547, 0.998401582}, - {6.95, 0.999995768, 0.998405576}, - {6.954167, 0.999996126, 0.998409569}, - {6.958333, 0.999996424, 0.998413563}, - {6.9625, 0.999996662, 0.998417497}, - {6.966667, 0.99999696, 0.99842149}, - {6.970833, 0.999997199, 0.998425424}, - {6.975, 0.999997497, 0.998429298}, - {6.979167, 0.999997735, 0.998433232}, - {6.983333, 0.999997914, 0.998437107}, - {6.9875, 0.999998152, 0.998440981}, - {6.991667, 0.999998331, 0.998444855}, - {6.995833, 0.99999851, 0.99844873}, - {7, 0.999998689, 0.998452544}, - {7.004167, 0.999998808, 0.998456359}, - {7.008333, 0.999998927, 0.998460233}, - {7.0125, 0.999999046, 0.998463988}, - {7.016667, 0.999999166, 0.998467803}, - {7.020833, 0.999999225, 0.998471558}, - {7.025, 0.999999344, 0.998475313}, - {7.029167, 0.999999404, 0.998479068}, - {7.033333, 0.999999404, 0.998482823}, - {7.0375, 0.999999464, 0.998486519}, - {7.041667, 0.999999464, 0.998490274}, - {7.045833, 0.999999464, 0.998493969}, - {7.05, 0.999999404, 0.998497665}, - {7.054167, 0.999999404, 0.99850136}, - {7.058333, 0.999999344, 0.998504996}, - {7.0625, 0.999999285, 0.998508692}, - {7.066667, 0.999999225, 0.998512328}, - {7.070833, 0.999999106, 0.998515964}, - {7.075, 0.999998987, 0.998519599}, - {7.079167, 0.999998868, 0.998523176}, - {7.083333, 0.999998748, 0.998526812}, - {7.0875, 0.999998629, 0.998530388}, - {7.091667, 0.99999845, 0.998533964}, - {7.095833, 0.999998331, 0.99853754}, - {7.1, 0.999998152, 0.998541117}, - {7.104167, 0.999997973, 0.998544693}, - {7.108333, 0.999997795, 0.99854821}, - {7.1125, 0.999997616, 0.998551726}, - {7.116667, 0.999997377, 0.998555303}, - {7.120833, 0.999997199, 0.998558819}, - {7.125, 0.99999696, 0.998562336}, - {7.129167, 0.999996722, 0.998565793}, - {7.133333, 0.999996483, 0.99856931}, - {7.1375, 0.999996305, 0.998572826}, - {7.141667, 0.999996066, 0.998576283}, - {7.145833, 0.999995828, 0.998579741}, - {7.15, 0.999995589, 0.998583198}, - {7.154167, 0.999995351, 0.998586655}, - {7.158333, 0.999995053, 0.998590112}, - {7.1625, 0.999994814, 0.998593569}, - {7.166667, 0.999994576, 0.998597026}, - {7.170833, 0.999994338, 0.998600423}, - {7.175, 0.999994099, 0.99860388}, - {7.179167, 0.999993861, 0.998607278}, - {7.183333, 0.999993622, 0.998610675}, - {7.1875, 0.999993384, 0.998614073}, - {7.191667, 0.999993145, 0.99861753}, - {7.195833, 0.999992907, 0.998620868}, - {7.2, 0.999992728, 0.998624265}, - {7.204167, 0.99999249, 0.998627663}, - {7.208333, 0.999992311, 0.99863106}, - {7.2125, 0.999992073, 0.998634398}, - {7.216667, 0.999991894, 0.998637795}, - {7.220833, 0.999991715, 0.998641133}, - {7.225, 0.999991536, 0.998644471}, - {7.229167, 0.999991357, 0.998647809}, - {7.233333, 0.999991179, 0.998651147}, - {7.2375, 0.999991, 0.998654485}, - {7.241667, 0.99999088, 0.998657823}, - {7.245833, 0.999990702, 0.99866116}, - {7.25, 0.999990582, 0.998664498}, - {7.254167, 0.999990463, 0.998667777}, - {7.258333, 0.999990344, 0.998671114}, - {7.2625, 0.999990225, 0.998674393}, - {7.266667, 0.999990165, 0.998677671}, - {7.270833, 0.999990106, 0.998681009}, - {7.275, 0.999989986, 0.998684287}, - {7.279167, 0.999989927, 0.998687565}, - {7.283333, 0.999989927, 0.998690844}, - {7.2875, 0.999989867, 0.998694062}, - {7.291667, 0.999989867, 0.99869734}, - {7.295833, 0.999989808, 0.998700619}, - {7.3, 0.999989808, 0.998703837}, - {7.304167, 0.999989808, 0.998707116}, - {7.308333, 0.999989867, 0.998710334}, - {7.3125, 0.999989867, 0.998713553}, - {7.316667, 0.999989927, 0.998716831}, - {7.320833, 0.999989927, 0.99872005}, - {7.325, 0.999989986, 0.998723269}, - {7.329167, 0.999990046, 0.998726428}, - {7.333333, 0.999990165, 0.998729646}, - {7.3375, 0.999990225, 0.998732865}, - {7.341667, 0.999990344, 0.998736024}, - {7.345833, 0.999990404, 0.998739183}, - {7.35, 0.999990523, 0.998742402}, - {7.354167, 0.999990642, 0.998745561}, - {7.358333, 0.999990761, 0.99874872}, - {7.3625, 0.99999094, 0.998751879}, - {7.366667, 0.999991059, 0.998755038}, - {7.370833, 0.999991238, 0.998758137}, - {7.375, 0.999991357, 0.998761296}, - {7.379167, 0.999991536, 0.998764396}, - {7.383333, 0.999991715, 0.998767495}, - {7.3875, 0.999991834, 0.998770654}, - {7.391667, 0.999992013, 0.998773754}, - {7.395833, 0.999992192, 0.998776793}, - {7.4, 0.999992371, 0.998779893}, - {7.404167, 0.999992549, 0.998782992}, - {7.408333, 0.999992788, 0.998786032}, - {7.4125, 0.999992967, 0.998789132}, - {7.416667, 0.999993145, 0.998792171}, - {7.420833, 0.999993324, 0.998795211}, - {7.425, 0.999993563, 0.998798251}, - {7.429167, 0.999993742, 0.998801291}, - {7.433333, 0.99999392, 0.998804271}, - {7.4375, 0.999994099, 0.998807311}, - {7.441667, 0.999994338, 0.998810291}, - {7.445833, 0.999994516, 0.998813272}, - {7.45, 0.999994695, 0.998816252}, - {7.454167, 0.999994874, 0.998819232}, - {7.458333, 0.999995053, 0.998822212}, - {7.4625, 0.999995232, 0.998825133}, - {7.466667, 0.99999541, 0.998828113}, - {7.470833, 0.999995589, 0.998831034}, - {7.475, 0.999995768, 0.998833954}, - {7.479167, 0.999995947, 0.998836875}, - {7.483333, 0.999996126, 0.998839796}, - {7.4875, 0.999996305, 0.998842716}, - {7.491667, 0.999996424, 0.998845577}, - {7.495833, 0.999996603, 0.998848498}, - {7.5, 0.999996722, 0.998851359}, - {7.504167, 0.999996841, 0.99885422}, - {7.508333, 0.99999696, 0.998857081}, - {7.5125, 0.999997139, 0.998859942}, - {7.516667, 0.999997258, 0.998862803}, - {7.520833, 0.999997318, 0.998865604}, - {7.525, 0.999997437, 0.998868406}, - {7.529167, 0.999997556, 0.998871207}, - {7.533333, 0.999997616, 0.998874068}, - {7.5375, 0.999997735, 0.99887681}, - {7.541667, 0.999997795, 0.998879611}, - {7.545833, 0.999997854, 0.998882413}, - {7.55, 0.999997914, 0.998885155}, - {7.554167, 0.999997973, 0.998887956}, - {7.558333, 0.999998033, 0.998890698}, - {7.5625, 0.999998033, 0.99889344}, - {7.566667, 0.999998093, 0.998896182}, - {7.570833, 0.999998093, 0.998898864}, - {7.575, 0.999998093, 0.998901606}, - {7.579167, 0.999998093, 0.998904347}, - {7.583333, 0.999998093, 0.99890703}, - {7.5875, 0.999998093, 0.998909712}, - {7.591667, 0.999998093, 0.998912394}, - {7.595833, 0.999998093, 0.998915076}, - {7.6, 0.999998033, 0.998917758}, - {7.604167, 0.999998033, 0.998920441}, - {7.608333, 0.999997973, 0.998923063}, - {7.6125, 0.999997914, 0.998925745}, - {7.616667, 0.999997854, 0.998928368}, - {7.620833, 0.999997795, 0.998930991}, - {7.625, 0.999997735, 0.998933613}, - {7.629167, 0.999997675, 0.998936236}, - {7.633333, 0.999997616, 0.998938859}, - {7.6375, 0.999997497, 0.998941481}, - {7.641667, 0.999997437, 0.998944104}, - {7.645833, 0.999997318, 0.998946667}, - {7.65, 0.999997258, 0.998949289}, - {7.654167, 0.999997139, 0.998951852}, - {7.658333, 0.999997079, 0.998954415}, - {7.6625, 0.99999696, 0.998956978}, - {7.666667, 0.999996841, 0.998959541}, - {7.670833, 0.999996722, 0.998962104}, - {7.675, 0.999996662, 0.998964667}, - {7.679167, 0.999996543, 0.99896723}, - {7.683333, 0.999996424, 0.998969734}, - {7.6875, 0.999996305, 0.998972297}, - {7.691667, 0.999996185, 0.9989748}, - {7.695833, 0.999996066, 0.998977304}, - {7.7, 0.999995947, 0.998979867}, - {7.704167, 0.999995828, 0.99898237}, - {7.708333, 0.999995708, 0.998984873}, - {7.7125, 0.999995589, 0.998987377}, - {7.716667, 0.99999547, 0.99898988}, - {7.720833, 0.99999541, 0.998992324}, - {7.725, 0.999995291, 0.998994827}, - {7.729167, 0.999995172, 0.998997331}, - {7.733333, 0.999995053, 0.998999774}, - {7.7375, 0.999994934, 0.999002278}, - {7.741667, 0.999994874, 0.999004722}, - {7.745833, 0.999994755, 0.999007165}, - {7.75, 0.999994636, 0.999009669}, - {7.754167, 0.999994576, 0.999012113}, - {7.758333, 0.999994457, 0.999014556}, - {7.7625, 0.999994397, 0.999017}, - {7.766667, 0.999994338, 0.999019444}, - {7.770833, 0.999994218, 0.999021828}, - {7.775, 0.999994159, 0.999024272}, - {7.779167, 0.999994099, 0.999026716}, - {7.783333, 0.99999404, 0.9990291}, - {7.7875, 0.99999398, 0.999031544}, - {7.791667, 0.99999392, 0.999033928}, - {7.795833, 0.999993861, 0.999036372}, - {7.8, 0.999993801, 0.999038756}, - {7.804167, 0.999993801, 0.99904114}, - {7.808333, 0.999993742, 0.999043524}, - {7.8125, 0.999993742, 0.999045908}, - {7.816667, 0.999993682, 0.999048293}, - {7.820833, 0.999993682, 0.999050677}, - {7.825, 0.999993682, 0.999053061}, - {7.829167, 0.999993682, 0.999055445}, - {7.833333, 0.999993682, 0.99905777}, - {7.8375, 0.999993682, 0.999060154}, - {7.841667, 0.999993682, 0.999062479}, - {7.845833, 0.999993682, 0.999064863}, - {7.85, 0.999993682, 0.999067187}, - {7.854167, 0.999993742, 0.999069512}, - {7.858333, 0.999993742, 0.999071836}, - {7.8625, 0.999993801, 0.999074161}, - {7.866667, 0.999993801, 0.999076486}, - {7.870833, 0.999993861, 0.99907881}, - {7.875, 0.99999392, 0.999081135}, - {7.879167, 0.99999398, 0.999083459}, - {7.883333, 0.99999398, 0.999085724}, - {7.8875, 0.99999404, 0.999088049}, - {7.891667, 0.999994099, 0.999090314}, - {7.895833, 0.999994218, 0.999092638}, - {7.9, 0.999994278, 0.999094903}, - {7.904167, 0.999994338, 0.999097168}, - {7.908333, 0.999994397, 0.999099433}, - {7.9125, 0.999994516, 0.999101698}, - {7.916667, 0.999994576, 0.999103963}, - {7.920833, 0.999994636, 0.999106228}, - {7.925, 0.999994755, 0.999108434}, - {7.929167, 0.999994814, 0.999110699}, - {7.933333, 0.999994934, 0.999112964}, - {7.9375, 0.999994993, 0.999115169}, - {7.941667, 0.999995112, 0.999117374}, - {7.945833, 0.999995232, 0.999119639}, - {7.95, 0.999995291, 0.999121845}, - {7.954167, 0.99999541, 0.99912405}, - {7.958333, 0.99999547, 0.999126256}, - {7.9625, 0.999995589, 0.999128401}, - {7.966667, 0.999995708, 0.999130607}, - {7.970833, 0.999995768, 0.999132812}, - {7.975, 0.999995887, 0.999134958}, - {7.979167, 0.999996006, 0.999137163}, - {7.983333, 0.999996066, 0.999139309}, - {7.9875, 0.999996185, 0.999141455}, - {7.991667, 0.999996245, 0.99914366}, - {7.995833, 0.999996364, 0.999145746}, - {8, 0.999996483, 0.999147892}, - {8.004167, 0.999996543, 0.999150038}, - {8.008333, 0.999996662, 0.999152184}, - {8.0125, 0.999996722, 0.999154329}, - {8.016667, 0.999996781, 0.999156415}, - {8.020833, 0.999996901, 0.999158502}, - {8.025, 0.99999696, 0.999160647}, - {8.029167, 0.99999702, 0.999162734}, - {8.033333, 0.999997139, 0.99916482}, - {8.0375, 0.999997199, 0.999166906}, - {8.041667, 0.999997258, 0.999168992}, - {8.045833, 0.999997318, 0.999171078}, - {8.05, 0.999997377, 0.999173105}, - {8.054167, 0.999997437, 0.999175191}, - {8.058333, 0.999997497, 0.999177277}, - {8.0625, 0.999997556, 0.999179304}, - {8.066667, 0.999997616, 0.99918133}, - {8.070833, 0.999997675, 0.999183357}, - {8.075, 0.999997675, 0.999185443}, - {8.079167, 0.999997735, 0.99918741}, - {8.083333, 0.999997795, 0.999189436}, - {8.0875, 0.999997795, 0.999191463}, - {8.091667, 0.999997854, 0.99919349}, - {8.095833, 0.999997854, 0.999195457}, - {8.1, 0.999997854, 0.999197483}, - {8.104167, 0.999997914, 0.99919945}, - {8.108333, 0.999997914, 0.999201477}, - {8.1125, 0.999997914, 0.999203444}, - {8.116667, 0.999997914, 0.99920541}, - {8.120833, 0.999997914, 0.999207377}, - {8.125, 0.999997914, 0.999209344}, - {8.129167, 0.999997914, 0.999211311}, - {8.133333, 0.999997914, 0.999213278}, - {8.1375, 0.999997914, 0.999215186}, - {8.141667, 0.999997854, 0.999217153}, - {8.145833, 0.999997854, 0.99921906}, - {8.15, 0.999997854, 0.999221027}, - {8.154167, 0.999997795, 0.999222934}, - {8.158333, 0.999997795, 0.999224842}, - {8.1625, 0.999997735, 0.999226749}, - {8.166667, 0.999997735, 0.999228716}, - {8.170833, 0.999997675, 0.999230564}, - {8.175, 0.999997675, 0.999232471}, - {8.179167, 0.999997616, 0.999234378}, - {8.183333, 0.999997556, 0.999236286}, - {8.1875, 0.999997556, 0.999238193}, - {8.191667, 0.999997497, 0.999240041}, - {8.195833, 0.999997437, 0.999241948}, - {8.2, 0.999997377, 0.999243796}, - {8.204167, 0.999997318, 0.999245644}, - {8.208333, 0.999997318, 0.999247551}, - {8.2125, 0.999997258, 0.999249399}, - {8.216667, 0.999997199, 0.999251246}, - {8.220833, 0.999997139, 0.999253094}, - {8.225, 0.999997079, 0.999254942}, - {8.229167, 0.99999702, 0.99925679}, - {8.233333, 0.99999696, 0.999258637}, - {8.2375, 0.999996901, 0.999260485}, - {8.241667, 0.999996901, 0.999262273}, - {8.245833, 0.999996841, 0.999264121}, - {8.25, 0.999996781, 0.999265969}, - {8.254167, 0.999996722, 0.999267757}, - {8.258333, 0.999996662, 0.999269605}, - {8.2625, 0.999996603, 0.999271393}, - {8.266667, 0.999996543, 0.999273181}, - {8.270833, 0.999996483, 0.999274969}, - {8.275, 0.999996483, 0.999276817}, - {8.279167, 0.999996424, 0.999278605}, - {8.283333, 0.999996364, 0.999280393}, - {8.2875, 0.999996305, 0.999282181}, - {8.291667, 0.999996305, 0.999283969}, - {8.295833, 0.999996245, 0.999285758}, - {8.3, 0.999996185, 0.999287486}, - {8.304167, 0.999996185, 0.999289274}, - {8.308333, 0.999996126, 0.999291062}, - {8.3125, 0.999996126, 0.999292791}, - {8.316667, 0.999996066, 0.999294579}, - {8.320833, 0.999996066, 0.999296308}, - {8.325, 0.999996006, 0.999298096}, - {8.329167, 0.999996006, 0.999299824}, - {8.333333, 0.999996006, 0.999301553}, - {8.3375, 0.999995947, 0.999303341}, - {8.341667, 0.999995947, 0.999305069}, - {8.345833, 0.999995947, 0.999306798}, - {8.35, 0.999995947, 0.999308527}, - {8.354167, 0.999995887, 0.999310255}, - {8.358333, 0.999995887, 0.999311984}, - {8.3625, 0.999995887, 0.999313712}, - {8.366667, 0.999995887, 0.999315381}, - {8.370833, 0.999995887, 0.99931711}, - {8.375, 0.999995887, 0.999318838}, - {8.379167, 0.999995887, 0.999320507}, - {8.383333, 0.999995947, 0.999322236}, - {8.3875, 0.999995947, 0.999323905}, - {8.391667, 0.999995947, 0.999325633}, - {8.395833, 0.999995947, 0.999327302}, - {8.4, 0.999996006, 0.999329031}, - {8.404167, 0.999996006, 0.999330699}, - {8.408333, 0.999996006, 0.999332368}, - {8.4125, 0.999996066, 0.999334037}, - {8.416667, 0.999996066, 0.999335706}, - {8.420833, 0.999996126, 0.999337375}, - {8.425, 0.999996126, 0.999339044}, - {8.429167, 0.999996185, 0.999340713}, - {8.433333, 0.999996185, 0.999342322}, - {8.4375, 0.999996245, 0.999343991}, - {8.441667, 0.999996305, 0.99934566}, - {8.445833, 0.999996305, 0.99934727}, - {8.45, 0.999996364, 0.999348938}, - {8.454167, 0.999996424, 0.999350548}, - {8.458333, 0.999996483, 0.999352217}, - {8.4625, 0.999996483, 0.999353826}, - {8.466667, 0.999996543, 0.999355435}, - {8.470833, 0.999996603, 0.999357045}, - {8.475, 0.999996662, 0.999358654}, - {8.479167, 0.999996662, 0.999360263}, - {8.483333, 0.999996722, 0.999361873}, - {8.4875, 0.999996781, 0.999363482}, - {8.491667, 0.999996841, 0.999365091}, - {8.495833, 0.999996901, 0.999366701}, - {8.5, 0.99999696, 0.99936825}, - {8.504167, 0.99999696, 0.99936986}, - {8.508333, 0.99999702, 0.999371409}, - {8.5125, 0.999997079, 0.999373019}, - {8.516667, 0.999997139, 0.999374568}, - {8.520833, 0.999997199, 0.999376178}, - {8.525, 0.999997258, 0.999377728}, - {8.529167, 0.999997258, 0.999379277}, - {8.533333, 0.999997318, 0.999380827}, - {8.5375, 0.999997377, 0.999382377}, - {8.541667, 0.999997437, 0.999383926}, - {8.545833, 0.999997497, 0.999385476}, - {8.55, 0.999997497, 0.999387026}, - {8.554167, 0.999997556, 0.999388516}, - {8.558333, 0.999997616, 0.999390066}, - {8.5625, 0.999997616, 0.999391615}, - {8.566667, 0.999997675, 0.999393106}, - {8.570833, 0.999997735, 0.999394655}, - {8.575, 0.999997735, 0.999396145}, - {8.579167, 0.999997795, 0.999397635}, - {8.583333, 0.999997795, 0.999399185}, - {8.5875, 0.999997854, 0.999400675}, - {8.591667, 0.999997914, 0.999402165}, - {8.595833, 0.999997914, 0.999403656}, - {8.6, 0.999997914, 0.999405146}, - {8.604167, 0.999997973, 0.999406636}, - {8.608333, 0.999997973, 0.999408126}, - {8.6125, 0.999998033, 0.999409556}, - {8.616667, 0.999998033, 0.999411047}, - {8.620833, 0.999998033, 0.999412537}, - {8.625, 0.999998093, 0.999413967}, - {8.629167, 0.999998093, 0.999415457}, - {8.633333, 0.999998093, 0.999416888}, - {8.6375, 0.999998093, 0.999418318}, - {8.641667, 0.999998093, 0.999419808}, - {8.645833, 0.999998152, 0.999421239}, - {8.65, 0.999998152, 0.999422669}, - {8.654167, 0.999998152, 0.9994241}, - {8.658333, 0.999998152, 0.99942553}, - {8.6625, 0.999998152, 0.999426961}, - {8.666667, 0.999998152, 0.999428391}, - {8.670833, 0.999998152, 0.999429822}, - {8.675, 0.999998152, 0.999431252}, - {8.679167, 0.999998152, 0.999432623}, - {8.683333, 0.999998093, 0.999434054}, - {8.6875, 0.999998093, 0.999435425}, - {8.691667, 0.999998093, 0.999436855}, - {8.695833, 0.999998093, 0.999438226}, - {8.7, 0.999998093, 0.999439657}, - {8.704167, 0.999998033, 0.999441028}, - {8.708333, 0.999998033, 0.999442399}, - {8.7125, 0.999998033, 0.999443829}, - {8.716667, 0.999998033, 0.9994452}, - {8.720833, 0.999997973, 0.999446571}, - {8.725, 0.999997973, 0.999447942}, - {8.729167, 0.999997973, 0.999449313}, - {8.733333, 0.999997914, 0.999450684}, - {8.7375, 0.999997914, 0.999452055}, - {8.741667, 0.999997914, 0.999453425}, - {8.745833, 0.999997854, 0.999454737}, - {8.75, 0.999997854, 0.999456108}, - {8.754167, 0.999997795, 0.999457479}, - {8.758333, 0.999997795, 0.99945879}, - {8.7625, 0.999997795, 0.999460161}, - {8.766667, 0.999997735, 0.999461472}, - {8.770833, 0.999997735, 0.999462843}, - {8.775, 0.999997675, 0.999464154}, - {8.779167, 0.999997675, 0.999465525}, - {8.783333, 0.999997675, 0.999466836}, - {8.7875, 0.999997616, 0.999468148}, - {8.791667, 0.999997616, 0.999469459}, - {8.795833, 0.999997616, 0.99947077}, - {8.8, 0.999997556, 0.999472082}, - {8.804167, 0.999997556, 0.999473393}, - {8.808333, 0.999997497, 0.999474704}, - {8.8125, 0.999997497, 0.999476016}, - {8.816667, 0.999997497, 0.999477327}, - {8.820833, 0.999997437, 0.999478638}, - {8.825, 0.999997437, 0.999479949}, - {8.829167, 0.999997437, 0.999481261}, - {8.833333, 0.999997377, 0.999482512}, - {8.8375, 0.999997377, 0.999483824}, - {8.841667, 0.999997377, 0.999485135}, - {8.845833, 0.999997377, 0.999486387}, - {8.85, 0.999997318, 0.999487698}, - {8.854167, 0.999997318, 0.99948895}, - {8.858333, 0.999997318, 0.999490201}, - {8.8625, 0.999997318, 0.999491513}, - {8.866667, 0.999997318, 0.999492764}, - {8.870833, 0.999997318, 0.999494016}, - {8.875, 0.999997258, 0.999495268}, - {8.879167, 0.999997258, 0.999496579}, - {8.883333, 0.999997258, 0.999497831}, - {8.8875, 0.999997258, 0.999499083}, - {8.891667, 0.999997258, 0.999500334}, - {8.895833, 0.999997258, 0.999501586}, - {8.9, 0.999997258, 0.999502838}, - {8.904167, 0.999997258, 0.999504089}, - {8.908333, 0.999997258, 0.999505281}, - {8.9125, 0.999997258, 0.999506533}, - {8.916667, 0.999997258, 0.999507785}, - {8.920833, 0.999997318, 0.999509037}, - {8.925, 0.999997318, 0.999510229}, - {8.929167, 0.999997318, 0.99951148}, - {8.933333, 0.999997318, 0.999512672}, - {8.9375, 0.999997318, 0.999513924}, - {8.941667, 0.999997318, 0.999515116}, - {8.945833, 0.999997377, 0.999516368}, - {8.95, 0.999997377, 0.99951756}, - {8.954167, 0.999997377, 0.999518752}, - {8.958333, 0.999997377, 0.999520004}, - {8.9625, 0.999997437, 0.999521196}, - {8.966667, 0.999997437, 0.999522388}, - {8.970833, 0.999997437, 0.99952358}, - {8.975, 0.999997497, 0.999524772}, - {8.979167, 0.999997497, 0.999525964}, - {8.983333, 0.999997497, 0.999527156}, - {8.9875, 0.999997556, 0.999528348}, - {8.991667, 0.999997556, 0.999529541}, - {8.995833, 0.999997616, 0.999530733}, - {9, 0.999997616, 0.999531865}, - {9.004167, 0.999997616, 0.999533057}, - {9.008333, 0.999997675, 0.999534249}, - {9.0125, 0.999997675, 0.999535382}, - {9.016667, 0.999997735, 0.999536574}, - {9.020833, 0.999997735, 0.999537706}, - {9.025, 0.999997735, 0.999538898}, - {9.029167, 0.999997795, 0.999540031}, - {9.033333, 0.999997795, 0.999541223}, - {9.0375, 0.999997854, 0.999542356}, - {9.041667, 0.999997854, 0.999543488}, - {9.045833, 0.999997914, 0.999544621}, - {9.05, 0.999997914, 0.999545753}, - {9.054167, 0.999997973, 0.999546945}, - {9.058333, 0.999997973, 0.999548078}, - {9.0625, 0.999997973, 0.99954921}, - {9.066667, 0.999998033, 0.999550343}, - {9.070833, 0.999998033, 0.999551415}, - {9.075, 0.999998093, 0.999552548}, - {9.079167, 0.999998093, 0.99955368}, - {9.083333, 0.999998093, 0.999554813}, - {9.0875, 0.999998152, 0.999555945}, - {9.091667, 0.999998152, 0.999557018}, - {9.095833, 0.999998212, 0.999558151}, - {9.1, 0.999998212, 0.999559224}, - {9.104167, 0.999998212, 0.999560356}, - {9.108333, 0.999998271, 0.999561429}, - {9.1125, 0.999998271, 0.999562562}, - {9.116667, 0.999998271, 0.999563634}, - {9.120833, 0.999998331, 0.999564707}, - {9.125, 0.999998331, 0.99956584}, - {9.129167, 0.999998331, 0.999566913}, - {9.133333, 0.999998331, 0.999567986}, - {9.1375, 0.999998391, 0.999569058}, - {9.141667, 0.999998391, 0.999570131}, - {9.145833, 0.999998391, 0.999571204}, - {9.15, 0.999998391, 0.999572277}, - {9.154167, 0.999998391, 0.99957335}, - {9.158333, 0.99999845, 0.999574423}, - {9.1625, 0.99999845, 0.999575496}, - {9.166667, 0.99999845, 0.999576569}, - {9.170833, 0.99999845, 0.999577582}, - {9.175, 0.99999845, 0.999578655}, - {9.179167, 0.99999845, 0.999579728}, - {9.183333, 0.99999845, 0.999580741}, - {9.1875, 0.99999845, 0.999581814}, - {9.191667, 0.99999845, 0.999582827}, - {9.195833, 0.99999851, 0.9995839}, - {9.2, 0.99999851, 0.999584913}, - {9.204167, 0.99999851, 0.999585927}, - {9.208333, 0.99999851, 0.999586999}, - {9.2125, 0.99999851, 0.999588013}, - {9.216667, 0.99999851, 0.999589026}, - {9.220833, 0.99999845, 0.999590039}, - {9.225, 0.99999845, 0.999591053}, - {9.229167, 0.99999845, 0.999592125}, - {9.233333, 0.99999845, 0.999593139}, - {9.2375, 0.99999845, 0.999594152}, - {9.241667, 0.99999845, 0.999595165}, - {9.245833, 0.99999845, 0.999596119}, - {9.25, 0.99999845, 0.999597132}, - {9.254167, 0.99999845, 0.999598145}, - {9.258333, 0.99999845, 0.999599159}, - {9.2625, 0.99999845, 0.999600172}, - {9.266667, 0.999998391, 0.999601126}, - {9.270833, 0.999998391, 0.999602139}, - {9.275, 0.999998391, 0.999603152}, - {9.279167, 0.999998391, 0.999604106}, - {9.283333, 0.999998391, 0.999605119}, - {9.2875, 0.999998391, 0.999606073}, - {9.291667, 0.999998331, 0.999607086}, - {9.295833, 0.999998331, 0.99960804}, - {9.3, 0.999998331, 0.999609053}, - {9.304167, 0.999998331, 0.999610007}, - {9.308333, 0.999998331, 0.99961096}, - {9.3125, 0.999998331, 0.999611914}, - {9.316667, 0.999998271, 0.999612927}, - {9.320833, 0.999998271, 0.999613881}, - {9.325, 0.999998271, 0.999614835}, - {9.329167, 0.999998271, 0.999615788}, - {9.333333, 0.999998271, 0.999616742}, - {9.3375, 0.999998271, 0.999617696}, - {9.341667, 0.999998212, 0.999618649}, - {9.345833, 0.999998212, 0.999619603}, - {9.35, 0.999998212, 0.999620557}, - {9.354167, 0.999998212, 0.999621511}, - {9.358333, 0.999998212, 0.999622464}, - {9.3625, 0.999998212, 0.999623418}, - {9.366667, 0.999998212, 0.999624312}, - {9.370833, 0.999998152, 0.999625266}, - {9.375, 0.999998152, 0.999626219}, - {9.379167, 0.999998152, 0.999627173}, - {9.383333, 0.999998152, 0.999628067}, - {9.3875, 0.999998152, 0.999629021}, - {9.391667, 0.999998152, 0.999629915}, - {9.395833, 0.999998152, 0.999630868}, - {9.4, 0.999998152, 0.999631763}, - {9.404167, 0.999998152, 0.999632716}, - {9.408333, 0.999998152, 0.99963361}, - {9.4125, 0.999998152, 0.999634564}, - {9.416667, 0.999998152, 0.999635458}, - {9.420833, 0.999998152, 0.999636352}, - {9.425, 0.999998152, 0.999637246}, - {9.429167, 0.999998152, 0.9996382}, - {9.433333, 0.999998152, 0.999639094}, - {9.4375, 0.999998152, 0.999639988}, - {9.441667, 0.999998152, 0.999640882}, - {9.445833, 0.999998152, 0.999641776}, - {9.45, 0.999998152, 0.99964267}, - {9.454167, 0.999998152, 0.999643564}, - {9.458333, 0.999998152, 0.999644458}, - {9.4625, 0.999998152, 0.999645352}, - {9.466667, 0.999998152, 0.999646246}, - {9.470833, 0.999998152, 0.999647141}, - {9.475, 0.999998212, 0.999648035}, - {9.479167, 0.999998212, 0.999648929}, - {9.483333, 0.999998212, 0.999649763}, - {9.4875, 0.999998212, 0.999650657}, - {9.491667, 0.999998212, 0.999651551}, - {9.495833, 0.999998212, 0.999652445}, - {9.5, 0.999998212, 0.99965328}, - {9.504167, 0.999998271, 0.999654174}, - {9.508333, 0.999998271, 0.999655008}, - {9.5125, 0.999998271, 0.999655902}, - {9.516667, 0.999998271, 0.999656737}, - {9.520833, 0.999998271, 0.999657631}, - {9.525, 0.999998331, 0.999658465}, - {9.529167, 0.999998331, 0.999659359}, - {9.533333, 0.999998331, 0.999660194}, - {9.5375, 0.999998331, 0.999661028}, - {9.541667, 0.999998331, 0.999661863}, - {9.545833, 0.999998391, 0.999662757}, - {9.55, 0.999998391, 0.999663591}, - {9.554167, 0.999998391, 0.999664426}, - {9.558333, 0.999998391, 0.99966526}, - {9.5625, 0.99999845, 0.999666095}, - {9.566667, 0.99999845, 0.999666929}, - {9.570833, 0.99999845, 0.999667764}, - {9.575, 0.99999845, 0.999668598}, - {9.579167, 0.99999845, 0.999669433}, - {9.583333, 0.99999851, 0.999670267}, - {9.5875, 0.99999851, 0.999671102}, - {9.591667, 0.99999851, 0.999671936}, - {9.595833, 0.99999851, 0.999672771}, - {9.6, 0.999998569, 0.999673545}, - {9.604167, 0.999998569, 0.99967438}, - {9.608333, 0.999998569, 0.999675214}, - {9.6125, 0.999998569, 0.999676049}, - {9.616667, 0.999998629, 0.999676824}, - {9.620833, 0.999998629, 0.999677658}, - {9.625, 0.999998629, 0.999678433}, - {9.629167, 0.999998629, 0.999679267}, - {9.633333, 0.999998629, 0.999680042}, - {9.6375, 0.999998689, 0.999680877}, - {9.641667, 0.999998689, 0.999681652}, - {9.645833, 0.999998689, 0.999682486}, - {9.65, 0.999998689, 0.999683261}, - {9.654167, 0.999998689, 0.999684036}, - {9.658333, 0.999998689, 0.999684811}, - {9.6625, 0.999998748, 0.999685645}, - {9.666667, 0.999998748, 0.99968642}, - {9.670833, 0.999998748, 0.999687195}, - {9.675, 0.999998748, 0.99968797}, - {9.679167, 0.999998748, 0.999688745}, - {9.683333, 0.999998748, 0.999689519}, - {9.6875, 0.999998748, 0.999690294}, - {9.691667, 0.999998748, 0.999691069}, - {9.695833, 0.999998808, 0.999691844}, - {9.7, 0.999998808, 0.999692619}, - {9.704167, 0.999998808, 0.999693394}, - {9.708333, 0.999998808, 0.999694169}, - {9.7125, 0.999998808, 0.999694943}, - {9.716667, 0.999998808, 0.999695718}, - {9.720833, 0.999998808, 0.999696434}, - {9.725, 0.999998808, 0.999697208}, - {9.729167, 0.999998808, 0.999697983}, - {9.733333, 0.999998808, 0.999698699}, - {9.7375, 0.999998808, 0.999699473}, - {9.741667, 0.999998808, 0.999700248}, - {9.745833, 0.999998808, 0.999700963}, - {9.75, 0.999998808, 0.999701738}, - {9.754167, 0.999998808, 0.999702454}, - {9.758333, 0.999998808, 0.999703228}, - {9.7625, 0.999998808, 0.999703944}, - {9.766667, 0.999998808, 0.999704719}, - {9.770833, 0.999998808, 0.999705434}, - {9.775, 0.999998808, 0.999706149}, - {9.779167, 0.999998808, 0.999706924}, - {9.783333, 0.999998808, 0.999707639}, - {9.7875, 0.999998808, 0.999708354}, - {9.791667, 0.999998808, 0.99970907}, - {9.795833, 0.999998808, 0.999709845}, - {9.8, 0.999998808, 0.99971056}, - {9.804167, 0.999998808, 0.999711275}, - {9.808333, 0.999998808, 0.99971199}, - {9.8125, 0.999998808, 0.999712706}, - {9.816667, 0.999998808, 0.999713421}, - {9.820833, 0.999998808, 0.999714136}, - {9.825, 0.999998808, 0.999714851}, - {9.829167, 0.999998808, 0.999715567}, - {9.833333, 0.999998748, 0.999716282}, - {9.8375, 0.999998748, 0.999716997}, - {9.841667, 0.999998748, 0.999717712}, - {9.845833, 0.999998748, 0.999718368}, - {9.85, 0.999998748, 0.999719083}, - {9.854167, 0.999998748, 0.999719799}, - {9.858333, 0.999998748, 0.999720514}, - {9.8625, 0.999998748, 0.999721169}, - {9.866667, 0.999998748, 0.999721885}, - {9.870833, 0.999998748, 0.9997226}, - {9.875, 0.999998748, 0.999723256}, - {9.879167, 0.999998748, 0.999723971}, - {9.883333, 0.999998748, 0.999724686}, - {9.8875, 0.999998748, 0.999725342}, - {9.891667, 0.999998748, 0.999726057}, - {9.895833, 0.999998748, 0.999726713}, - {9.9, 0.999998689, 0.999727428}, - {9.904167, 0.999998689, 0.999728084}, - {9.908333, 0.999998689, 0.999728799}, - {9.9125, 0.999998689, 0.999729455}, - {9.916667, 0.999998689, 0.99973011}, - {9.920833, 0.999998689, 0.999730825}, - {9.925, 0.999998689, 0.999731481}, - {9.929167, 0.999998689, 0.999732137}, - {9.933333, 0.999998689, 0.999732792}, - {9.9375, 0.999998689, 0.999733508}, - {9.941667, 0.999998689, 0.999734163}, - {9.945833, 0.999998689, 0.999734819}, - {9.95, 0.999998689, 0.999735475}, - {9.954167, 0.999998689, 0.99973613}, - {9.958333, 0.999998689, 0.999736786}, - {9.9625, 0.999998689, 0.999737501}, - {9.966667, 0.999998689, 0.999738157}, - {9.970833, 0.999998689, 0.999738812}, - {9.975, 0.999998689, 0.999739468}, - {9.979167, 0.999998689, 0.999740124}, - {9.983333, 0.999998689, 0.99974072}, - {9.9875, 0.999998689, 0.999741375}, - {9.991667, 0.999998748, 0.999742031}, - {9.995833, 0.999998748, 0.999742687}, - {10, 0.999998748, 0.999743342}}; +namespace Example1 +{ + std::vector> reference_solution = + {{0, 1, 0}, // It should be {0,1,1.000000477} but something is wrong in GridKit + {0.004167, 1, 1.000000477}, + {0.008333, 1, 1.000000477}, + {0.0125, 0.99999994, 1.000000477}, + {0.016667, 0.99999994, 1.000000477}, + {0.020833, 0.99999994, 1.000000477}, + {0.025, 0.99999994, 1.000000477}, + {0.029167, 0.99999994, 1.000000477}, + {0.033333, 0.99999994, 1.000000477}, + {0.0375, 0.99999994, 1.000000477}, + {0.041667, 0.99999994, 1.000000477}, + {0.045833, 0.99999994, 1.000000477}, + {0.05, 0.999999881, 1.000000477}, + {0.054167, 0.999999881, 1.000000477}, + {0.058333, 0.999999881, 1.000000477}, + {0.0625, 0.999999881, 1.000000477}, + {0.066667, 0.999999881, 1.000000477}, + {0.070833, 0.999999881, 1.000000477}, + {0.075, 0.999999881, 1.000000477}, + {0.079167, 0.999999881, 1.000000477}, + {0.083333, 0.999999881, 1.000000477}, + {0.0875, 0.999999881, 1.000000477}, + {0.091667, 0.999999881, 1.000000477}, + {0.095833, 0.999999881, 1.000000477}, + {0.1, 0.999999881, 1.000000477}, + {0.104167, 0.999999881, 1.000000477}, + {0.108333, 0.999999881, 1.000000477}, + {0.1125, 0.999999881, 1.000000477}, + {0.116667, 0.999999881, 1.000000477}, + {0.120833, 0.999999881, 1.000000477}, + {0.125, 0.999999881, 1.000000477}, + {0.129167, 0.999999881, 1.000000477}, + {0.133333, 0.999999881, 1.000000477}, + {0.1375, 0.99999994, 1.000000477}, + {0.141667, 0.99999994, 1.000000477}, + {0.145833, 0.99999994, 1.000000477}, + {0.15, 0.99999994, 1.000000477}, + {0.154167, 0.99999994, 1.000000477}, + {0.158333, 0.99999994, 1.000000477}, + {0.1625, 0.99999994, 1.000000477}, + {0.166667, 0.99999994, 1.000000477}, + {0.170833, 0.99999994, 1.000000477}, + {0.175, 0.99999994, 1.000000477}, + {0.179167, 0.99999994, 1.000000477}, + {0.183333, 0.99999994, 1.000000477}, + {0.1875, 0.99999994, 1.000000477}, + {0.191667, 0.99999994, 1.000000477}, + {0.195833, 1, 1.000000477}, + {0.2, 1, 1.000000477}, + {0.204167, 1, 1.000000477}, + {0.208333, 1, 1.000000477}, + {0.2125, 1, 1.000000477}, + {0.216667, 1, 1.000000477}, + {0.220833, 1, 1.000000477}, + {0.225, 1, 1.000000477}, + {0.229167, 1, 1.000000477}, + {0.233333, 1, 1.000000477}, + {0.2375, 1, 1.000000477}, + {0.241667, 1, 1.000000477}, + {0.245833, 1, 1.000000477}, + {0.25, 1, 1.000000477}, + {0.254167, 1, 1.000000477}, + {0.258333, 1, 1.000000477}, + {0.2625, 1, 1.000000477}, + {0.266667, 1, 1.000000477}, + {0.270833, 1, 1.000000477}, + {0.275, 1, 1.000000477}, + {0.279167, 1, 1.000000477}, + {0.283333, 1, 1.000000477}, + {0.2875, 1, 1.000000477}, + {0.291667, 1, 1.000000477}, + {0.295833, 1.000000119, 1.000000477}, + {0.3, 1.000000119, 1.000000477}, + {0.304167, 1.000000119, 1.000000477}, + {0.308333, 1.000000119, 1.000000477}, + {0.3125, 1.000000119, 1.000000477}, + {0.316667, 1.000000119, 1.000000477}, + {0.320833, 1.000000119, 1.000000477}, + {0.325, 1.000000119, 1.000000477}, + {0.329167, 1.000000119, 1.000000477}, + {0.333333, 1.000000119, 1.000000477}, + {0.3375, 1.000000119, 1.000000477}, + {0.341667, 1.000000119, 1.000000477}, + {0.345833, 1.000000119, 1.000000477}, + {0.35, 1.000000119, 1.000000477}, + {0.354167, 1.000000119, 1.000000477}, + {0.358333, 1.000000119, 1.000000477}, + {0.3625, 1, 1.000000477}, + {0.366667, 1, 1.000000477}, + {0.370833, 1, 1.000000477}, + {0.375, 1, 1.000000477}, + {0.379167, 1, 1.000000477}, + {0.383333, 1, 1.000000477}, + {0.3875, 1, 1.000000477}, + {0.391667, 1, 1.000000477}, + {0.395833, 1, 1.000000477}, + {0.4, 1, 1.000000477}, + {0.404167, 1, 1.000000477}, + {0.408333, 1, 1.000000477}, + {0.4125, 1, 1.000000477}, + {0.416667, 1, 1.000000477}, + {0.420833, 1, 1.000000477}, + {0.425, 1, 1.000000477}, + {0.429167, 1, 1.000000477}, + {0.433333, 1, 1.000000477}, + {0.4375, 1, 1.000000477}, + {0.441667, 1, 1.000000477}, + {0.445833, 1, 1.000000477}, + {0.45, 1, 1.000000477}, + {0.454167, 1, 1.000000477}, + {0.458333, 1, 1.000000477}, + {0.4625, 1, 1.000000477}, + {0.466667, 1, 1.000000477}, + {0.470833, 1, 1.000000477}, + {0.475, 1, 1.000000477}, + {0.479167, 1, 1.000000477}, + {0.483333, 1, 1.000000477}, + {0.4875, 1, 1.000000477}, + {0.491667, 1, 1.000000477}, + {0.495833, 1, 1.000000477}, + {0.5, 1, 1.000000477}, + {0.504167, 1, 1.000000477}, + {0.508333, 1, 1.000000477}, + {0.5125, 0.99999994, 1.000000477}, + {0.516667, 0.99999994, 1.000000477}, + {0.520833, 0.99999994, 1.000000477}, + {0.525, 0.99999994, 1.000000477}, + {0.529167, 0.99999994, 1.000000477}, + {0.533333, 0.99999994, 1.000000477}, + {0.5375, 0.99999994, 1.000000477}, + {0.541667, 0.99999994, 1.000000477}, + {0.545833, 0.99999994, 1.000000477}, + {0.55, 0.99999994, 1.000000477}, + {0.554167, 0.99999994, 1.000000477}, + {0.558333, 0.99999994, 1.000000477}, + {0.5625, 0.99999994, 1.000000477}, + {0.566667, 0.99999994, 1.000000477}, + {0.570833, 0.99999994, 1.000000477}, + {0.575, 0.99999994, 1.000000477}, + {0.579167, 0.99999994, 1.000000477}, + {0.583333, 0.99999994, 1.000000477}, + {0.5875, 0.99999994, 1.000000477}, + {0.591667, 0.99999994, 1.000000477}, + {0.595833, 0.99999994, 1.000000477}, + {0.6, 0.99999994, 1.000000477}, + {0.604167, 0.99999994, 1.000000477}, + {0.608333, 0.99999994, 1.000000477}, + {0.6125, 0.99999994, 1.000000477}, + {0.616667, 0.99999994, 1.000000477}, + {0.620833, 1, 1.000000477}, + {0.625, 1, 1.000000477}, + {0.629167, 1, 1.000000477}, + {0.633333, 1, 1.000000477}, + {0.6375, 1, 1.000000477}, + {0.641667, 1, 1.000000477}, + {0.645833, 1, 1.000000477}, + {0.65, 1, 1.000000477}, + {0.654167, 1, 1.000000477}, + {0.658333, 1, 1.000000477}, + {0.6625, 1, 1.000000477}, + {0.666667, 1, 1.000000477}, + {0.670833, 1, 1.000000477}, + {0.675, 1, 1.000000477}, + {0.679167, 1, 1.000000477}, + {0.683333, 1, 1.000000477}, + {0.6875, 1, 1.000000477}, + {0.691667, 1, 1.000000477}, + {0.695833, 1, 1.000000477}, + {0.7, 1, 1.000000477}, + {0.704167, 1, 1.000000477}, + {0.708333, 1, 1.000000477}, + {0.7125, 1, 1.000000477}, + {0.716667, 1, 1.000000477}, + {0.720833, 1, 1.000000477}, + {0.725, 1, 1.000000477}, + {0.729167, 1, 1.000000477}, + {0.733333, 1, 1.000000477}, + {0.7375, 1, 1.000000477}, + {0.741667, 1, 1.000000477}, + {0.745833, 1, 1.000000477}, + {0.75, 1, 1.000000477}, + {0.754167, 1, 1.000000477}, + {0.758333, 1, 1.000000477}, + {0.7625, 1, 1.000000477}, + {0.766667, 1, 1.000000477}, + {0.770833, 1, 1.000000477}, + {0.775, 1, 1.000000477}, + {0.779167, 1, 1.000000477}, + {0.783333, 1, 1.000000477}, + {0.7875, 1, 1.000000477}, + {0.791667, 1, 1.000000477}, + {0.795833, 1, 1.000000477}, + {0.8, 1, 1.000000477}, + {0.804167, 1, 1.000000477}, + {0.808333, 1, 1.000000477}, + {0.8125, 1, 1.000000477}, + {0.816667, 1, 1.000000477}, + {0.820833, 1, 1.000000477}, + {0.825, 1, 1.000000477}, + {0.829167, 1, 1.000000477}, + {0.833333, 1, 1.000000477}, + {0.8375, 1, 1.000000477}, + {0.841667, 1, 1.000000477}, + {0.845833, 1, 1.000000477}, + {0.85, 1, 1.000000477}, + {0.854167, 1, 1.000000477}, + {0.858333, 1, 1.000000477}, + {0.8625, 1, 1.000000477}, + {0.866667, 1, 1.000000477}, + {0.870833, 1, 1.000000477}, + {0.875, 1, 1.000000477}, + {0.879167, 1, 1.000000477}, + {0.883333, 1, 1.000000477}, + {0.8875, 1, 1.000000477}, + {0.891667, 1, 1.000000477}, + {0.895833, 1, 1.000000477}, + {0.9, 1, 1.000000477}, + {0.904167, 1, 1.000000477}, + {0.908333, 1, 1.000000477}, + {0.9125, 1, 1.000000477}, + {0.916667, 1, 1.000000477}, + {0.920833, 1, 1.000000477}, + {0.925, 1, 1.000000477}, + {0.929167, 1, 1.000000477}, + {0.933333, 1, 1.000000477}, + {0.9375, 1, 1.000000477}, + {0.941667, 1, 1.000000477}, + {0.945833, 1, 1.000000477}, + {0.95, 1, 1.000000477}, + {0.954167, 1, 1.000000477}, + {0.958333, 1, 1.000000477}, + {0.9625, 1, 1.000000477}, + {0.966667, 1, 1.000000477}, + {0.970833, 1, 1.000000477}, + {0.975, 1, 1.000000477}, + {0.979167, 1, 1.000000477}, + {0.983333, 1, 1.000000477}, + {0.9875, 1, 1.000000477}, + {0.991667, 1, 1.000000477}, + {0.995833, 1, 1.000000477}, + {1, 1, 1.000000477}, + {1.004167, 1.000682712, 0.015128844}, + {1.008333, 1.001363397, 0.014973078}, + {1.0125, 1.002042532, 0.014841928}, + {1.016667, 1.002720356, 0.014729479}, + {1.020833, 1.00339675, 0.014631276}, + {1.025, 1.004072189, 0.014543867}, + {1.029167, 1.004746675, 0.01446466}, + {1.033333, 1.00541997, 0.014391631}, + {1.0375, 1.006092548, 0.01432314}, + {1.041667, 1.006764412, 0.014257919}, + {1.045833, 1.007435203, 0.014194945}, + {1.05, 1.008105278, 0.014133334}, + {1.054167, 1.008774638, 0.014072391}, + {1.058333, 1.009443045, 0.014011139}, + {1.0625, 1.010110855, 0.01395021}, + {1.066667, 1.010777831, 0.013887996}, + {1.070833, 1.011443853, 0.013824509}, + {1.075, 1.01210916, 0.013759368}, + {1.079167, 1.012773633, 0.013692267}, + {1.083333, 1.013437271, 0.013622929}, + {1.0875, 1.014100075, 0.013551049}, + {1.091667, 1.014762163, 0.013476389}, + {1.095833, 1.015423179, 0.013398723}, + {1.1, 1.016083598, 0.013398723}, + {1.104167, 1.015262365, 0.88047874}, + {1.108333, 1.014493585, 0.89023459}, + {1.1125, 1.013762116, 0.898759723}, + {1.116667, 1.013056278, 0.906125188}, + {1.120833, 1.012367129, 0.912427425}, + {1.125, 1.01168704, 0.917777061}, + {1.129167, 1.011010766, 0.922281682}, + {1.133333, 1.010334253, 0.926045954}, + {1.1375, 1.009654403, 0.929170609}, + {1.141667, 1.008969307, 0.931745946}, + {1.145833, 1.008277893, 0.93385452}, + {1.15, 1.007579207, 0.935571969}, + {1.154167, 1.006873131, 0.936964393}, + {1.158333, 1.006160259, 0.938090801}, + {1.1625, 1.005440712, 0.939003944}, + {1.166667, 1.0047158, 0.9397493}, + {1.170833, 1.003986597, 0.940366805}, + {1.175, 1.003253937, 0.940891325}, + {1.179167, 1.002519608, 0.941352487}, + {1.183333, 1.001785278, 0.94177556}, + {1.1875, 1.001052022, 0.942182004}, + {1.191667, 1.000321627, 0.942589283}, + {1.195833, 0.999596179, 0.943011642}, + {1.2, 0.998876929, 0.943460345}, + {1.204167, 0.998165727, 0.943943799}, + {1.208333, 0.997464538, 0.944467604}, + {1.2125, 0.996774673, 0.945035696}, + {1.216667, 0.996098042, 0.945649385}, + {1.220833, 0.995436549, 0.946308196}, + {1.225, 0.994791448, 0.947010458}, + {1.229167, 0.994164526, 0.947752595}, + {1.233333, 0.993557453, 0.948529899}, + {1.2375, 0.99297154, 0.949337125}, + {1.241667, 0.992408335, 0.950167537}, + {1.245833, 0.99186933, 0.951014042}, + {1.25, 0.991355598, 0.951869369}, + {1.254167, 0.990868449, 0.952725708}, + {1.258333, 0.990409136, 0.953574955}, + {1.2625, 0.989978492, 0.954409778}, + {1.266667, 0.989577591, 0.955215633}, + {1.270833, 0.989207327, 0.956005096}, + {1.275, 0.988868177, 0.956751525}, + {1.279167, 0.988560915, 0.957458079}, + {1.283333, 0.988285899, 0.958120406}, + {1.2875, 0.988043547, 0.958723307}, + {1.291667, 0.987834036, 0.959283113}, + {1.295833, 0.987657607, 0.959768534}, + {1.3, 0.987514019, 0.960213661}, + {1.304167, 0.987403274, 0.96057564}, + {1.308333, 0.987325132, 0.96090132}, + {1.3125, 0.987279058, 0.961140752}, + {1.316667, 0.987264812, 0.961349428}, + {1.320833, 0.987281561, 0.961474001}, + {1.325, 0.987328827, 0.961574197}, + {1.329167, 0.987405658, 0.961597323}, + {1.333333, 0.987511337, 0.961602867}, + {1.3375, 0.987644792, 0.96154201}, + {1.341667, 0.987805247, 0.961470485}, + {1.345833, 0.987991393, 0.961345851}, + {1.35, 0.988202393, 0.961207449}, + {1.354167, 0.988437057, 0.961049318}, + {1.358333, 0.988694072, 0.960876703}, + {1.3625, 0.988972366, 0.960694611}, + {1.366667, 0.989270747, 0.960507751}, + {1.370833, 0.989587843, 0.96032083}, + {1.375, 0.989922643, 0.960137904}, + {1.379167, 0.990273893, 0.959962845}, + {1.383333, 0.990640223, 0.95979917}, + {1.3875, 0.991020679, 0.959649861}, + {1.391667, 0.991413951, 0.959517598}, + {1.395833, 0.991818845, 0.959404588}, + {1.4, 0.992234349, 0.959312677}, + {1.404167, 0.99265933, 0.959243178}, + {1.408333, 0.993092477, 0.959197223}, + {1.4125, 0.993533015, 0.959175408}, + {1.416667, 0.993979812, 0.95917803}, + {1.420833, 0.994431734, 0.959205091}, + {1.425, 0.994888008, 0.959256351}, + {1.429167, 0.995347559, 0.959331334}, + {1.433333, 0.995809376, 0.959429204}, + {1.4375, 0.996272743, 0.959549129}, + {1.441667, 0.996736646, 0.95968461}, + {1.445833, 0.997200072, 0.959850907}, + {1.45, 0.997662604, 0.960024655}, + {1.454167, 0.998123169, 0.960226417}, + {1.458333, 0.998580933, 0.960433066}, + {1.4625, 0.999035299, 0.960664332}, + {1.466667, 0.999485552, 0.96089834}, + {1.470833, 0.99993068, 0.961153209}, + {1.475, 1.000370383, 0.961408794}, + {1.479167, 1.000803709, 0.961681604}, + {1.483333, 1.001230001, 0.961953163}, + {1.4875, 1.001648784, 0.962238312}, + {1.491667, 1.00205946, 0.962520778}, + {1.495833, 1.002461076, 0.962813199}, + {1.5, 1.002853513, 0.963101745}, + {1.504167, 1.003236055, 0.963396966}, + {1.508333, 1.003607988, 0.96368736}, + {1.5125, 1.003968954, 0.963981271}, + {1.516667, 1.004318357, 0.964269757}, + {1.520833, 1.004655838, 0.964558721}, + {1.525, 1.004980803, 0.964841962}, + {1.529167, 1.005292892, 0.965122938}, + {1.533333, 1.005591631, 0.965397894}, + {1.5375, 1.00587666, 0.965667963}, + {1.541667, 1.006147623, 0.96593219}, + {1.545833, 1.006403923, 0.966188729}, + {1.55, 1.006645441, 0.966439664}, + {1.554167, 1.00687182, 0.966680348}, + {1.558333, 1.007082582, 0.966915607}, + {1.5625, 1.007277608, 0.967138052}, + {1.566667, 1.00745666, 0.967355549}, + {1.570833, 1.007619381, 0.96755743}, + {1.575, 1.007765532, 0.967754841}, + {1.579167, 1.007894993, 0.967934012}, + {1.583333, 1.008007526, 0.968109071}, + {1.5875, 1.008103132, 0.968263447}, + {1.591667, 1.008181453, 0.968414128}, + {1.595833, 1.008242607, 0.968541622}, + {1.6, 1.008286357, 0.968665838}, + {1.604167, 1.008312702, 0.968764782}, + {1.608333, 1.008321762, 0.968860805}, + {1.6125, 1.008313417, 0.968929827}, + {1.616667, 1.008287787, 0.968996286}, + {1.620833, 1.008244872, 0.969034612}, + {1.625, 1.00818491, 0.969070733}, + {1.629167, 1.00810802, 0.969078183}, + {1.633333, 1.008014202, 0.969083905}, + {1.6375, 1.007904053, 0.969061136}, + {1.641667, 1.007777452, 0.969037175}, + {1.645833, 1.007634878, 0.968985915}, + {1.65, 1.007476687, 0.96893394}, + {1.654167, 1.007303119, 0.968856812}, + {1.658333, 1.007114768, 0.968779624}, + {1.6625, 1.006911874, 0.968680382}, + {1.666667, 1.006694913, 0.968581617}, + {1.670833, 1.00646472, 0.968464911}, + {1.675, 1.006221414, 0.968349338}, + {1.679167, 1.005965829, 0.968220592}, + {1.683333, 1.005698442, 0.968093693}, + {1.6875, 1.005420089, 0.967959166}, + {1.691667, 1.005131125, 0.967827022}, + {1.695833, 1.004832625, 0.967693269}, + {1.7, 1.004525065, 0.967562377}, + {1.704167, 1.00420928, 0.967436075}, + {1.708333, 1.003885984, 0.967313051}, + {1.7125, 1.003556132, 0.967200637}, + {1.716667, 1.003220201, 0.967091799}, + {1.720833, 1.0028795, 0.966999233}, + {1.725, 1.00253439, 0.966910303}, + {1.729167, 1.00218606, 0.966842711}, + {1.733333, 1.001835227, 0.966778576}, + {1.7375, 1.001482844, 0.966739953}, + {1.741667, 1.001129627, 0.966711283}, + {1.745833, 1.000776529, 0.966690898}, + {1.75, 1.000424623, 0.966700375}, + {1.754167, 1.000074387, 0.96671176}, + {1.758333, 0.999727011, 0.966754198}, + {1.7625, 0.999383092, 0.966797709}, + {1.766667, 0.999043643, 0.966872096}, + {1.770833, 0.998709381, 0.966946483}, + {1.775, 0.998381138, 0.967050433}, + {1.779167, 0.99805963, 0.967153192}, + {1.783333, 0.997745872, 0.96728301}, + {1.7875, 0.997440159, 0.967410386}, + {1.791667, 0.997143567, 0.967561364}, + {1.795833, 0.99685663, 0.967714787}, + {1.8, 0.996579885, 0.967869997}, + {1.804167, 0.996314168, 0.968042195}, + {1.808333, 0.996059835, 0.968208969}, + {1.8125, 0.995817542, 0.968387842}, + {1.816667, 0.995587707, 0.968560398}, + {1.820833, 0.995370924, 0.968739927}, + {1.825, 0.995167375, 0.968912601}, + {1.829167, 0.994977593, 0.969087243}, + {1.833333, 0.994801879, 0.969254494}, + {1.8375, 0.99464041, 0.96941936}, + {1.841667, 0.994493544, 0.969576657}, + {1.845833, 0.994361401, 0.969727576}, + {1.85, 0.994244099, 0.969871104}, + {1.854167, 0.994141817, 0.970005214}, + {1.858333, 0.994054556, 0.970132172}, + {1.8625, 0.993982315, 0.970247447}, + {1.866667, 0.993925095, 0.970356286}, + {1.870833, 0.993882775, 0.97045207}, + {1.875, 0.993855238, 0.970542192}, + {1.879167, 0.993842363, 0.970618844}, + {1.883333, 0.993843973, 0.970690787}, + {1.8875, 0.993859708, 0.970749676}, + {1.891667, 0.993889451, 0.97080493}, + {1.895833, 0.993932843, 0.970848203}, + {1.9, 0.993989527, 0.970888972}, + {1.904167, 0.994059205, 0.97091943}, + {1.908333, 0.994141459, 0.970948577}, + {1.9125, 0.994235873, 0.970969498}, + {1.916667, 0.994342029, 0.970990121}, + {1.920833, 0.99445945, 0.971004903}, + {1.925, 0.994587719, 0.971020401}, + {1.929167, 0.9947263, 0.971032619}, + {1.933333, 0.994874775, 0.971046269}, + {1.9375, 0.995032549, 0.971059203}, + {1.941667, 0.995199144, 0.971074224}, + {1.945833, 0.995373964, 0.971090853}, + {1.95, 0.995556593, 0.971110106}, + {1.954167, 0.995746374, 0.971133053}, + {1.958333, 0.995942831, 0.971158922}, + {1.9625, 0.996145368, 0.971190274}, + {1.966667, 0.996353567, 0.971224725}, + {1.970833, 0.996566653, 0.97126615}, + {1.975, 0.996784389, 0.971310556}, + {1.979167, 0.997005939, 0.971363068}, + {1.983333, 0.997230887, 0.971418381}, + {1.9875, 0.997458696, 0.971482456}, + {1.991667, 0.997688949, 0.971549094}, + {1.995833, 0.997920871, 0.971624851}, + {2, 0.998154223, 0.971702695}, + {2.004167, 0.99838829, 0.971789718}, + {2.008333, 0.998622656, 0.971878409}, + {2.0125, 0.998856843, 0.971975863}, + {2.016667, 0.999090433, 0.972074568}, + {2.020833, 0.999322772, 0.972181499}, + {2.025, 0.999553561, 0.972289145}, + {2.029167, 0.999782324, 0.972404182}, + {2.033333, 1.000008583, 0.972519457}, + {2.0375, 1.000231862, 0.97264123}, + {2.041667, 1.000451922, 0.972762704}, + {2.045833, 1.000668168, 0.972889543}, + {2.05, 1.000880361, 0.973015666}, + {2.054167, 1.001088023, 0.973146021}, + {2.058333, 1.001290798, 0.973275185}, + {2.0625, 1.001488328, 0.973407388}, + {2.066667, 1.001680374, 0.973538041}, + {2.070833, 1.00186646, 0.973670363}, + {2.075, 1.002046466, 0.973800957}, + {2.079167, 1.002219915, 0.973931909}, + {2.083333, 1.002386689, 0.974060893}, + {2.0875, 1.00254631, 0.974188983}, + {2.091667, 1.002698779, 0.974314928}, + {2.095833, 1.002843618, 0.974438667}, + {2.1, 1.002980828, 0.974560261}, + {2.104167, 1.003109932, 0.974678457}, + {2.108333, 1.003231049, 0.974794388}, + {2.1125, 1.003343701, 0.974905789}, + {2.116667, 1.003448009, 0.975015044}, + {2.120833, 1.003543615, 0.975118697}, + {2.125, 1.003630638, 0.975220263}, + {2.129167, 1.00370872, 0.975315332}, + {2.133333, 1.003777862, 0.975408375}, + {2.1375, 1.003837943, 0.975494087}, + {2.141667, 1.003889084, 0.97557801}, + {2.145833, 1.003931046, 0.975653946}, + {2.15, 1.003963828, 0.975728214}, + {2.154167, 1.003987551, 0.975794077}, + {2.158333, 1.004002213, 0.97585845}, + {2.1625, 1.004007816, 0.975914061}, + {2.166667, 1.00400424, 0.97596848}, + {2.170833, 1.003991842, 0.976014078}, + {2.175, 1.003970623, 0.976058662}, + {2.179167, 1.003940463, 0.976094544}, + {2.183333, 1.003901839, 0.976129651}, + {2.1875, 1.003854632, 0.976156354}, + {2.191667, 1.003799081, 0.97618264}, + {2.195833, 1.003735423, 0.976201057}, + {2.2, 1.003663778, 0.976219237}, + {2.204167, 1.003584385, 0.976230323}, + {2.208333, 1.003497481, 0.97624141}, + {2.2125, 1.003403306, 0.976246357}, + {2.216667, 1.003302097, 0.976251602}, + {2.220833, 1.003194094, 0.976251721}, + {2.225, 1.003079653, 0.976252377}, + {2.229167, 1.002959013, 0.976249218}, + {2.233333, 1.002832532, 0.976246715}, + {2.2375, 1.002700567, 0.976241708}, + {2.241667, 1.002563357, 0.976237595}, + {2.245833, 1.002421498, 0.97623235}, + {2.25, 1.00227499, 0.976228058}, + {2.254167, 1.002124429, 0.976224005}, + {2.258333, 1.001970172, 0.976221025}, + {2.2625, 1.001812577, 0.976219654}, + {2.266667, 1.001652002, 0.976219356}, + {2.270833, 1.001489043, 0.976221859}, + {2.275, 1.001323819, 0.976225436}, + {2.279167, 1.001156807, 0.976232946}, + {2.283333, 1.000988603, 0.976241529}, + {2.2875, 1.000819445, 0.97625488}, + {2.291667, 1.000649691, 0.976269126}, + {2.295833, 1.000480056, 0.976288915}, + {2.3, 1.00031054, 0.976309478}, + {2.304167, 1.00014174, 0.976336062}, + {2.308333, 0.999974132, 0.976363182}, + {2.3125, 0.999808013, 0.97639662}, + {2.316667, 0.999643743, 0.976430357}, + {2.320833, 0.999481857, 0.976470292}, + {2.325, 0.999322474, 0.976510406}, + {2.329167, 0.999166131, 0.97655654}, + {2.333333, 0.999013186, 0.976602495}, + {2.3375, 0.998863876, 0.976654112}, + {2.341667, 0.998718619, 0.976705313}, + {2.345833, 0.998577714, 0.97676152}, + {2.35, 0.998441339, 0.976817131}, + {2.354167, 0.99830997, 0.976876974}, + {2.358333, 0.998183727, 0.976935983}, + {2.3625, 0.998062968, 0.976998508}, + {2.366667, 0.997947812, 0.97706002}, + {2.370833, 0.997838557, 0.977124095}, + {2.375, 0.997735381, 0.977187037}, + {2.379167, 0.997638524, 0.977251768}, + {2.383333, 0.997548044, 0.977315128}, + {2.3875, 0.99746418, 0.97737956}, + {2.391667, 0.997386992, 0.977442563}, + {2.395833, 0.997316659, 0.977505863}, + {2.4, 0.99725318, 0.977567792}, + {2.404167, 0.997196674, 0.977629304}, + {2.408333, 0.997147202, 0.977689505}, + {2.4125, 0.997104764, 0.977748811}, + {2.416667, 0.997069418, 0.977806926}, + {2.420833, 0.997041106, 0.977863729}, + {2.425, 0.997019887, 0.977919519}, + {2.429167, 0.997005641, 0.977973759}, + {2.433333, 0.99699831, 0.978027105}, + {2.4375, 0.996997893, 0.978078902}, + {2.441667, 0.997004211, 0.978129923}, + {2.445833, 0.997017264, 0.978179455}, + {2.45, 0.997036815, 0.97822845}, + {2.454167, 0.997062802, 0.978276134}, + {2.458333, 0.997095108, 0.97832346}, + {2.4625, 0.997133493, 0.978369713}, + {2.466667, 0.997177839, 0.978415847}, + {2.470833, 0.997227907, 0.978461266}, + {2.475, 0.997283578, 0.978506744}, + {2.479167, 0.997344553, 0.978551865}, + {2.483333, 0.997410715, 0.978597224}, + {2.4875, 0.997481763, 0.978642642}, + {2.491667, 0.99755758, 0.978688478}, + {2.495833, 0.997637749, 0.978734732}, + {2.5, 0.997722149, 0.978781521}, + {2.504167, 0.997810483, 0.978829205}, + {2.508333, 0.997902572, 0.978877366}, + {2.5125, 0.997998059, 0.978926837}, + {2.516667, 0.998096764, 0.978976846}, + {2.520833, 0.99819833, 0.979028463}, + {2.525, 0.998302639, 0.979080617}, + {2.529167, 0.998409212, 0.97913456}, + {2.533333, 0.998517931, 0.979189098}, + {2.5375, 0.998628497, 0.979245543}, + {2.541667, 0.998740673, 0.979302526}, + {2.545833, 0.998854041, 0.979361534}, + {2.55, 0.998968482, 0.97942096}, + {2.554167, 0.999083698, 0.979482412}, + {2.558333, 0.99919939, 0.979544222}, + {2.5625, 0.999315321, 0.97960794}, + {2.566667, 0.999431312, 0.979671896}, + {2.570833, 0.999546885, 0.979737639}, + {2.575, 0.999662042, 0.979803562}, + {2.579167, 0.999776363, 0.979871035}, + {2.583333, 0.999889672, 0.979938447}, + {2.5875, 1.000001788, 0.980007231}, + {2.591667, 1.000112414, 0.980075896}, + {2.595833, 1.000221252, 0.980145454}, + {2.6, 1.000328302, 0.980214894}, + {2.604167, 1.000433087, 0.98028487}, + {2.608333, 1.000535607, 0.980354488}, + {2.6125, 1.000635624, 0.980424404}, + {2.616667, 1.000732899, 0.980493844}, + {2.620833, 1.000827312, 0.980563104}, + {2.625, 1.000918627, 0.980631888}, + {2.629167, 1.001006722, 0.980700076}, + {2.633333, 1.001091361, 0.980767667}, + {2.6375, 1.001172543, 0.980834305}, + {2.641667, 1.001250029, 0.980900288}, + {2.645833, 1.001323581, 0.980964839}, + {2.65, 1.001393318, 0.981028795}, + {2.654167, 1.001459002, 0.981091022}, + {2.658333, 1.001520634, 0.981152534}, + {2.6625, 1.001577854, 0.98121196}, + {2.666667, 1.001630902, 0.98127073}, + {2.670833, 1.00167942, 0.981327116}, + {2.675, 1.001723647, 0.981382847}, + {2.679167, 1.001763225, 0.981435895}, + {2.683333, 1.001798391, 0.981488407}, + {2.6875, 1.001828909, 0.981538057}, + {2.691667, 1.001854777, 0.981587112}, + {2.695833, 1.001875997, 0.981633246}, + {2.7, 1.001892686, 0.981678843}, + {2.704167, 1.001904726, 0.981721342}, + {2.708333, 1.001912117, 0.981763482}, + {2.7125, 1.001914978, 0.981802464}, + {2.716667, 1.001913309, 0.981841147}, + {2.720833, 1.00190711, 0.981876731}, + {2.725, 1.001896501, 0.981912136}, + {2.729167, 1.00188148, 0.981944501}, + {2.733333, 1.001862168, 0.981976748}, + {2.7375, 1.001838684, 0.982006192}, + {2.741667, 1.001811028, 0.982035518}, + {2.745833, 1.001779318, 0.98206234}, + {2.75, 1.001743793, 0.982089102}, + {2.754167, 1.001704335, 0.98211354}, + {2.758333, 1.001661181, 0.982138097}, + {2.7625, 1.001614571, 0.982160687}, + {2.766667, 1.001564503, 0.982183337}, + {2.770833, 1.001511216, 0.982204437}, + {2.775, 1.001454711, 0.982225657}, + {2.779167, 1.001395345, 0.982245624}, + {2.783333, 1.001333117, 0.98226589}, + {2.7875, 1.001268268, 0.982285261}, + {2.791667, 1.001200914, 0.982304871}, + {2.795833, 1.001131415, 0.982324004}, + {2.8, 1.001059771, 0.982343495}, + {2.804167, 1.000986099, 0.982362807}, + {2.808333, 1.000910878, 0.982382476}, + {2.8125, 1.000833988, 0.982402384}, + {2.816667, 1.000755906, 0.98242265}, + {2.820833, 1.000676632, 0.982443452}, + {2.825, 1.000596285, 0.982464552}, + {2.829167, 1.000515342, 0.982486546}, + {2.833333, 1.000433803, 0.982508838}, + {2.8375, 1.000351906, 0.982532263}, + {2.841667, 1.000269771, 0.982555926}, + {2.845833, 1.000187874, 0.9825809}, + {2.85, 1.000106096, 0.982606173}, + {2.854167, 1.000024676, 0.982632816}, + {2.858333, 0.999943972, 0.982659698}, + {2.8625, 0.999864042, 0.982688129}, + {2.866667, 0.999785066, 0.98271668}, + {2.870833, 0.999707282, 0.98274678}, + {2.875, 0.999630749, 0.982777059}, + {2.879167, 0.999555767, 0.982808828}, + {2.883333, 0.999482453, 0.982840717}, + {2.8875, 0.999410987, 0.982874095}, + {2.891667, 0.999341428, 0.982907474}, + {2.895833, 0.999274015, 0.982942283}, + {2.9, 0.999208868, 0.982977033}, + {2.904167, 0.999146104, 0.983013093}, + {2.908333, 0.999085844, 0.983049035}, + {2.9125, 0.999028206, 0.983086228}, + {2.916667, 0.99897325, 0.983123243}, + {2.920833, 0.998921216, 0.98316133}, + {2.925, 0.998872042, 0.983199179}, + {2.929167, 0.998825967, 0.983237982}, + {2.933333, 0.998782873, 0.983276546}, + {2.9375, 0.998742998, 0.983315885}, + {2.941667, 0.998706341, 0.983354986}, + {2.945833, 0.998672962, 0.983394682}, + {2.95, 0.998642862, 0.9834342}, + {2.954167, 0.998616099, 0.983474135}, + {2.958333, 0.998592734, 0.983513892}, + {2.9625, 0.998572767, 0.983554006}, + {2.966667, 0.998556137, 0.983593881}, + {2.970833, 0.998542905, 0.983634114}, + {2.975, 0.99853307, 0.983674109}, + {2.979167, 0.998526633, 0.983714342}, + {2.983333, 0.998523533, 0.983754396}, + {2.9875, 0.998523712, 0.98379463}, + {2.991667, 0.998527169, 0.983834684}, + {2.995833, 0.998533845, 0.983874977}, + {3, 0.998543739, 0.983915091}, + {3.004167, 0.998556674, 0.983955443}, + {3.008333, 0.998572707, 0.983995676}, + {3.0125, 0.998591661, 0.984036088}, + {3.016667, 0.998613536, 0.98407644}, + {3.020833, 0.998638153, 0.984117031}, + {3.025, 0.998665512, 0.984157622}, + {3.029167, 0.998695493, 0.984198391}, + {3.033333, 0.998727977, 0.984239221}, + {3.0375, 0.998762906, 0.984280348}, + {3.041667, 0.998800099, 0.984321475}, + {3.045833, 0.998839438, 0.9843629}, + {3.05, 0.998880863, 0.984404445}, + {3.054167, 0.998924255, 0.984446287}, + {3.058333, 0.998969436, 0.984488249}, + {3.0625, 0.999016345, 0.984530509}, + {3.066667, 0.999064803, 0.984572887}, + {3.070833, 0.999114692, 0.984615624}, + {3.075, 0.999165893, 0.98465848}, + {3.079167, 0.999218225, 0.984701633}, + {3.083333, 0.999271631, 0.984744906}, + {3.0875, 0.999325931, 0.984788537}, + {3.091667, 0.999381006, 0.984832227}, + {3.095833, 0.999436736, 0.984876215}, + {3.1, 0.999492943, 0.984920263}, + {3.104167, 0.999549508, 0.984964609}, + {3.108333, 0.999606311, 0.985008955}, + {3.1125, 0.999663234, 0.98505348}, + {3.116667, 0.999720097, 0.985098004}, + {3.120833, 0.99977684, 0.985142648}, + {3.125, 0.999833286, 0.985187292}, + {3.129167, 0.999889314, 0.985231936}, + {3.133333, 0.999944806, 0.98527652}, + {3.1375, 0.999999642, 0.985321045}, + {3.141667, 1.000053763, 0.98536545}, + {3.145833, 1.000106931, 0.985409677}, + {3.15, 1.000159144, 0.985453784}, + {3.154167, 1.000210285, 0.985497534}, + {3.158333, 1.000260115, 0.985541224}, + {3.1625, 1.000308752, 0.985584378}, + {3.166667, 1.000355959, 0.985627472}, + {3.170833, 1.000401735, 0.985669911}, + {3.175, 1.000445843, 0.98571223}, + {3.179167, 1.0004884, 0.985753834}, + {3.183333, 1.00052917, 0.985795259}, + {3.1875, 1.000568032, 0.98583585}, + {3.191667, 1.000605226, 0.985876262}, + {3.195833, 1.000640273, 0.98591572}, + {3.2, 1.000673413, 0.985955}, + {3.204167, 1.000704527, 0.985993266}, + {3.208333, 1.000733614, 0.986031294}, + {3.2125, 1.000760436, 0.986068249}, + {3.216667, 1.000785112, 0.986105025}, + {3.220833, 1.000807524, 0.986140609}, + {3.225, 1.000827789, 0.986176014}, + {3.229167, 1.00084579, 0.986210167}, + {3.233333, 1.000861406, 0.986244142}, + {3.2375, 1.000874758, 0.986276925}, + {3.241667, 1.000885844, 0.986309528}, + {3.245833, 1.000894666, 0.986340821}, + {3.25, 1.000901222, 0.986372054}, + {3.254167, 1.000905395, 0.986401975}, + {3.258333, 1.000907302, 0.986431777}, + {3.2625, 1.000906944, 0.986460388}, + {3.266667, 1.000904441, 0.986488879}, + {3.270833, 1.000899673, 0.986516178}, + {3.275, 1.000892639, 0.986543477}, + {3.279167, 1.000883579, 0.986569583}, + {3.283333, 1.000872493, 0.98659569}, + {3.2875, 1.000859261, 0.986620784}, + {3.291667, 1.000844121, 0.986645818}, + {3.295833, 1.000826955, 0.986669898}, + {3.3, 1.000807881, 0.986694038}, + {3.304167, 1.000787139, 0.986717284}, + {3.308333, 1.000764608, 0.986740589}, + {3.3125, 1.00074029, 0.986763179}, + {3.316667, 1.000714421, 0.986785829}, + {3.320833, 1.000687122, 0.986807883}, + {3.325, 1.000658274, 0.986829996}, + {3.329167, 1.000628114, 0.986851633}, + {3.333333, 1.000596523, 0.986873388}, + {3.3375, 1.00056386, 0.986894786}, + {3.341667, 1.000530124, 0.986916244}, + {3.345833, 1.000495315, 0.986937523}, + {3.35, 1.000459552, 0.986958921}, + {3.354167, 1.000423074, 0.986980259}, + {3.358333, 1.000385761, 0.987001657}, + {3.3625, 1.000347853, 0.987023056}, + {3.366667, 1.000309348, 0.987044632}, + {3.370833, 1.000270367, 0.987066269}, + {3.375, 1.000231028, 0.987088084}, + {3.379167, 1.000191569, 0.987110138}, + {3.383333, 1.000151753, 0.987132251}, + {3.3875, 1.000112057, 0.987154663}, + {3.391667, 1.000072241, 0.987177193}, + {3.395833, 1.000032663, 0.987200141}, + {3.4, 0.999993145, 0.987223148}, + {3.404167, 0.999954045, 0.987246573}, + {3.408333, 0.999915302, 0.987270117}, + {3.4125, 0.999877036, 0.987294137}, + {3.416667, 0.999839365, 0.987318218}, + {3.420833, 0.999802351, 0.987342775}, + {3.425, 0.999765992, 0.987367451}, + {3.429167, 0.999730527, 0.987392604}, + {3.433333, 0.999695897, 0.987417817}, + {3.4375, 0.99966222, 0.987443566}, + {3.441667, 0.999629617, 0.987469375}, + {3.445833, 0.999598086, 0.98749572}, + {3.45, 0.999567688, 0.987522006}, + {3.454167, 0.999538481, 0.987548888}, + {3.458333, 0.999510586, 0.98757571}, + {3.4625, 0.999484062, 0.987603068}, + {3.466667, 0.999458849, 0.987630427}, + {3.470833, 0.999435067, 0.987658262}, + {3.475, 0.999412715, 0.987686098}, + {3.479167, 0.999391854, 0.98771435}, + {3.483333, 0.999372542, 0.987742543}, + {3.4875, 0.999354839, 0.987771213}, + {3.491667, 0.999338627, 0.987799883}, + {3.495833, 0.999324083, 0.987828851}, + {3.5, 0.999311149, 0.987857878}, + {3.504167, 0.999299824, 0.987887204}, + {3.508333, 0.999290168, 0.987916529}, + {3.5125, 0.999282122, 0.987946153}, + {3.516667, 0.999275744, 0.987975776}, + {3.520833, 0.999270976, 0.988005638}, + {3.525, 0.999267876, 0.9880355}, + {3.529167, 0.999266386, 0.98806566}, + {3.533333, 0.999266505, 0.98809576}, + {3.5375, 0.999268234, 0.988126099}, + {3.541667, 0.999271512, 0.988156438}, + {3.545833, 0.99927634, 0.988187015}, + {3.55, 0.999282718, 0.988217533}, + {3.554167, 0.999290526, 0.988248229}, + {3.558333, 0.999299765, 0.988278985}, + {3.5625, 0.999310493, 0.98830986}, + {3.566667, 0.999322534, 0.988340735}, + {3.570833, 0.999335885, 0.988371789}, + {3.575, 0.999350548, 0.988402784}, + {3.579167, 0.999366403, 0.988433957}, + {3.583333, 0.99938345, 0.98846513}, + {3.5875, 0.999401629, 0.988496423}, + {3.591667, 0.999420881, 0.988527715}, + {3.595833, 0.999441147, 0.988559127}, + {3.6, 0.999462366, 0.988590479}, + {3.604167, 0.999484479, 0.98862195}, + {3.608333, 0.999507427, 0.988653421}, + {3.6125, 0.99953115, 0.988684893}, + {3.616667, 0.999555588, 0.988716424}, + {3.620833, 0.999580622, 0.988747954}, + {3.625, 0.999606252, 0.988779485}, + {3.629167, 0.999632418, 0.988810956}, + {3.633333, 0.999659002, 0.988842487}, + {3.6375, 0.999685943, 0.988873959}, + {3.641667, 0.999713242, 0.98890543}, + {3.645833, 0.99974072, 0.988936782}, + {3.65, 0.999768436, 0.988968134}, + {3.654167, 0.999796212, 0.988999367}, + {3.658333, 0.999824107, 0.9890306}, + {3.6625, 0.999851942, 0.989061654}, + {3.666667, 0.999879658, 0.989092648}, + {3.670833, 0.999907255, 0.989123464}, + {3.675, 0.999934673, 0.989154279}, + {3.679167, 0.999961793, 0.989184797}, + {3.683333, 0.999988556, 0.989215255}, + {3.6875, 1.00001502, 0.989245474}, + {3.691667, 1.000041008, 0.989275634}, + {3.695833, 1.0000664, 0.989305437}, + {3.7, 1.000091314, 0.989335179}, + {3.704167, 1.000115633, 0.989364564}, + {3.708333, 1.000139356, 0.98939383}, + {3.7125, 1.000162244, 0.989422739}, + {3.716667, 1.000184536, 0.989451587}, + {3.720833, 1.000205874, 0.989479899}, + {3.725, 1.000226498, 0.989508212}, + {3.729167, 1.000246286, 0.989535987}, + {3.733333, 1.000265121, 0.989563704}, + {3.7375, 1.000283003, 0.989590943}, + {3.741667, 1.000299931, 0.989618063}, + {3.745833, 1.000315905, 0.989644587}, + {3.75, 1.000330806, 0.989671111}, + {3.754167, 1.000344634, 0.989697039}, + {3.758333, 1.000357509, 0.989722848}, + {3.7625, 1.000369191, 0.98974812}, + {3.766667, 1.000379801, 0.989773333}, + {3.770833, 1.000389338, 0.98979789}, + {3.775, 1.000397801, 0.989822447}, + {3.779167, 1.000405073, 0.989846408}, + {3.783333, 1.000411153, 0.98987025}, + {3.7875, 1.00041616, 0.989893556}, + {3.791667, 1.000419974, 0.989916801}, + {3.795833, 1.000422716, 0.989939451}, + {3.8, 1.000424385, 0.989962041}, + {3.804167, 1.000424862, 0.989984095}, + {3.808333, 1.000424266, 0.990006089}, + {3.8125, 1.000422597, 0.990027547}, + {3.816667, 1.000419736, 0.990049005}, + {3.820833, 1.000415921, 0.990069926}, + {3.825, 1.000411034, 0.990090847}, + {3.829167, 1.000405192, 0.990111291}, + {3.833333, 1.000398278, 0.990131736}, + {3.8375, 1.00039053, 0.990151703}, + {3.841667, 1.000381708, 0.990171731}, + {3.845833, 1.000372052, 0.99019134}, + {3.85, 1.000361443, 0.99021095}, + {3.854167, 1.000350118, 0.990230203}, + {3.858333, 1.000337839, 0.990249455}, + {3.8625, 1.000324965, 0.990268469}, + {3.866667, 1.000311255, 0.990287483}, + {3.870833, 1.000296831, 0.990306258}, + {3.875, 1.000281811, 0.990325034}, + {3.879167, 1.000266194, 0.99034363}, + {3.883333, 1.000249982, 0.990362227}, + {3.8875, 1.000233293, 0.990380764}, + {3.891667, 1.000216126, 0.990399241}, + {3.895833, 1.000198603, 0.990417659}, + {3.9, 1.000180602, 0.990436137}, + {3.904167, 1.000162244, 0.990454555}, + {3.908333, 1.000143766, 0.990473032}, + {3.9125, 1.000124931, 0.990491509}, + {3.916667, 1.000105858, 0.990509987}, + {3.920833, 1.000086665, 0.990528524}, + {3.925, 1.000067472, 0.990547061}, + {3.929167, 1.000048161, 0.990565717}, + {3.933333, 1.000028849, 0.990584433}, + {3.9375, 1.000009537, 0.990603209}, + {3.941667, 0.999990344, 0.990622103}, + {3.945833, 0.999971271, 0.990641057}, + {3.95, 0.999952376, 0.990660071}, + {3.954167, 0.99993372, 0.990679264}, + {3.958333, 0.999915302, 0.990698457}, + {3.9625, 0.999897242, 0.990717828}, + {3.966667, 0.999879479, 0.990737259}, + {3.970833, 0.999862075, 0.990756929}, + {3.975, 0.999845088, 0.990776539}, + {3.979167, 0.999828577, 0.990796447}, + {3.983333, 0.999812543, 0.990816295}, + {3.9875, 0.999797046, 0.990836442}, + {3.991667, 0.999782085, 0.990856528}, + {3.995833, 0.999767721, 0.990876913}, + {4, 0.999753952, 0.990897238}, + {4.004167, 0.999740779, 0.990917861}, + {4.008333, 0.999728322, 0.990938425}, + {4.0125, 0.99971652, 0.990959287}, + {4.016667, 0.999705434, 0.990980089}, + {4.020833, 0.999695063, 0.991001189}, + {4.025, 0.999685407, 0.991022229}, + {4.029167, 0.999676526, 0.991043508}, + {4.033333, 0.999668419, 0.991064787}, + {4.0375, 0.999661088, 0.991086245}, + {4.041667, 0.999654531, 0.991107702}, + {4.045833, 0.99964875, 0.991129398}, + {4.05, 0.999643803, 0.991151035}, + {4.054167, 0.99963963, 0.99117291}, + {4.058333, 0.999636233, 0.991194725}, + {4.0625, 0.99963367, 0.991216719}, + {4.066667, 0.999631941, 0.991238713}, + {4.070833, 0.999630928, 0.991260886}, + {4.075, 0.999630749, 0.991283059}, + {4.079167, 0.999631345, 0.991305292}, + {4.083333, 0.999632716, 0.991327584}, + {4.0875, 0.999634802, 0.991349995}, + {4.091667, 0.999637663, 0.991372347}, + {4.095833, 0.999641299, 0.991394877}, + {4.1, 0.999645591, 0.991417348}, + {4.104167, 0.999650598, 0.991439939}, + {4.108333, 0.99965626, 0.991462469}, + {4.1125, 0.999662578, 0.991485119}, + {4.116667, 0.999669552, 0.991507709}, + {4.120833, 0.999677122, 0.991530359}, + {4.125, 0.999685287, 0.991553009}, + {4.129167, 0.99969399, 0.991575718}, + {4.133333, 0.999703228, 0.991598368}, + {4.1375, 0.999713004, 0.991621077}, + {4.141667, 0.999723196, 0.991643786}, + {4.145833, 0.999733865, 0.991666436}, + {4.15, 0.999745011, 0.991689086}, + {4.154167, 0.999756455, 0.991711676}, + {4.158333, 0.999768317, 0.991734326}, + {4.1625, 0.999780476, 0.991756856}, + {4.166667, 0.999792933, 0.991779447}, + {4.170833, 0.999805629, 0.991801858}, + {4.175, 0.999818563, 0.991824329}, + {4.179167, 0.999831676, 0.991846681}, + {4.183333, 0.999844968, 0.991869032}, + {4.1875, 0.999858439, 0.991891265}, + {4.191667, 0.999871969, 0.991913497}, + {4.195833, 0.999885499, 0.991935551}, + {4.2, 0.999899149, 0.991957605}, + {4.204167, 0.999912739, 0.99197948}, + {4.208333, 0.999926329, 0.992001355}, + {4.2125, 0.999939859, 0.992023051}, + {4.216667, 0.99995327, 0.992044747}, + {4.220833, 0.999966562, 0.992066205}, + {4.225, 0.999979734, 0.992087603}, + {4.229167, 0.999992669, 0.992108822}, + {4.233333, 1.000005484, 0.992130041}, + {4.2375, 1.000018001, 0.992150962}, + {4.241667, 1.00003016, 0.992171884}, + {4.245833, 1.0000422, 0.992192566}, + {4.25, 1.000053763, 0.99221319}, + {4.254167, 1.000065088, 0.992233574}, + {4.258333, 1.000076056, 0.9922539}, + {4.2625, 1.000086665, 0.992273927}, + {4.266667, 1.000096798, 0.992293954}, + {4.270833, 1.000106454, 0.992313683}, + {4.275, 1.000115752, 0.992333353}, + {4.279167, 1.000124574, 0.992352784}, + {4.283333, 1.000133038, 0.992372096}, + {4.2875, 1.000140905, 0.992391169}, + {4.291667, 1.000148177, 0.992410183}, + {4.295833, 1.000155091, 0.992428839}, + {4.3, 1.000161409, 0.992447555}, + {4.304167, 1.000167251, 0.992465854}, + {4.308333, 1.000172496, 0.992484212}, + {4.3125, 1.000177264, 0.992502213}, + {4.316667, 1.000181437, 0.992520213}, + {4.320833, 1.000185013, 0.992537856}, + {4.325, 1.000188112, 0.992555499}, + {4.329167, 1.000190616, 0.992572844}, + {4.333333, 1.000192642, 0.992590189}, + {4.3375, 1.000193954, 0.992607176}, + {4.341667, 1.000194788, 0.992624164}, + {4.345833, 1.000195146, 0.992640913}, + {4.35, 1.000194907, 0.992657602}, + {4.354167, 1.000194073, 0.992673993}, + {4.358333, 1.000192881, 0.992690444}, + {4.3625, 1.000190973, 0.992706597}, + {4.366667, 1.000188708, 0.99272275}, + {4.370833, 1.000185847, 0.992738664}, + {4.375, 1.000182509, 0.992754579}, + {4.379167, 1.000178695, 0.992770255}, + {4.383333, 1.000174522, 0.992785931}, + {4.3875, 1.000169754, 0.992801368}, + {4.391667, 1.000164747, 0.992816865}, + {4.395833, 1.000159144, 0.992832184}, + {4.4, 1.000153303, 0.992847502}, + {4.404167, 1.000146985, 0.992862642}, + {4.408333, 1.000140309, 0.992877781}, + {4.4125, 1.000133276, 0.992892802}, + {4.416667, 1.000126004, 0.992907822}, + {4.420833, 1.000118494, 0.992922723}, + {4.425, 1.000110626, 0.992937624}, + {4.429167, 1.00010252, 0.992952466}, + {4.433333, 1.000094175, 0.992967308}, + {4.4375, 1.000085592, 0.99298209}, + {4.441667, 1.00007689, 0.992996871}, + {4.445833, 1.000067949, 0.993011653}, + {4.45, 1.000058889, 0.993026376}, + {4.454167, 1.00004971, 0.993041158}, + {4.458333, 1.000040531, 0.99305588}, + {4.4625, 1.000031233, 0.993070602}, + {4.466667, 1.000021815, 0.993085384}, + {4.470833, 1.000012517, 0.993100107}, + {4.475, 1.000003099, 0.993114889}, + {4.479167, 0.999993742, 0.99312973}, + {4.483333, 0.999984443, 0.993144512}, + {4.4875, 0.999975204, 0.993159413}, + {4.491667, 0.999966025, 0.993174255}, + {4.495833, 0.999956965, 0.993189216}, + {4.5, 0.999948025, 0.993204176}, + {4.504167, 0.999939263, 0.993219137}, + {4.508333, 0.99993062, 0.993234158}, + {4.5125, 0.999922216, 0.993249297}, + {4.516667, 0.999913991, 0.993264377}, + {4.520833, 0.999906003, 0.993279576}, + {4.525, 0.999898255, 0.993294775}, + {4.529167, 0.999890745, 0.993310034}, + {4.533333, 0.999883533, 0.993325353}, + {4.5375, 0.999876559, 0.993340731}, + {4.541667, 0.999869883, 0.993356109}, + {4.545833, 0.999863565, 0.993371606}, + {4.55, 0.999857545, 0.993387103}, + {4.554167, 0.999851882, 0.993402719}, + {4.558333, 0.999846518, 0.993418276}, + {4.5625, 0.999841511, 0.993434012}, + {4.566667, 0.999836922, 0.993449688}, + {4.570833, 0.99983263, 0.993465483}, + {4.575, 0.999828756, 0.993481219}, + {4.579167, 0.999825239, 0.993497133}, + {4.583333, 0.99982208, 0.993512988}, + {4.5875, 0.999819338, 0.993528962}, + {4.591667, 0.999817014, 0.993544877}, + {4.595833, 0.999815047, 0.99356091}, + {4.6, 0.999813497, 0.993576944}, + {4.604167, 0.999812305, 0.993593037}, + {4.608333, 0.99981153, 0.99360913}, + {4.6125, 0.999811113, 0.993625283}, + {4.616667, 0.999811053, 0.993641496}, + {4.620833, 0.999811411, 0.993657649}, + {4.625, 0.999812186, 0.993673861}, + {4.629167, 0.999813259, 0.993690133}, + {4.633333, 0.999814749, 0.993706405}, + {4.6375, 0.999816537, 0.993722677}, + {4.641667, 0.999818742, 0.993738949}, + {4.645833, 0.999821246, 0.993755221}, + {4.65, 0.999824047, 0.993771493}, + {4.654167, 0.999827206, 0.993787825}, + {4.658333, 0.999830663, 0.993804097}, + {4.6625, 0.999834418, 0.993820429}, + {4.666667, 0.999838471, 0.993836701}, + {4.670833, 0.999842763, 0.993852973}, + {4.675, 0.999847353, 0.993869245}, + {4.679167, 0.999852121, 0.993885517}, + {4.683333, 0.999857187, 0.99390173}, + {4.6875, 0.999862432, 0.993917942}, + {4.691667, 0.999867916, 0.993934095}, + {4.695833, 0.999873579, 0.993950248}, + {4.7, 0.99987936, 0.993966401}, + {4.704167, 0.99988538, 0.993982494}, + {4.708333, 0.99989146, 0.993998528}, + {4.7125, 0.999897718, 0.994014502}, + {4.716667, 0.999904037, 0.994030535}, + {4.720833, 0.999910533, 0.99404639}, + {4.725, 0.99991703, 0.994062304}, + {4.729167, 0.999923587, 0.9940781}, + {4.733333, 0.999930203, 0.994093835}, + {4.7375, 0.999936879, 0.994109511}, + {4.741667, 0.999943554, 0.994125187}, + {4.745833, 0.999950171, 0.994140744}, + {4.75, 0.999956846, 0.994156241}, + {4.754167, 0.999963462, 0.994171679}, + {4.758333, 0.999970019, 0.994187057}, + {4.7625, 0.999976516, 0.994202256}, + {4.766667, 0.999982893, 0.994217515}, + {4.770833, 0.999989212, 0.994232595}, + {4.775, 0.99999547, 0.994247675}, + {4.779167, 1.00000155, 0.994262576}, + {4.783333, 1.00000751, 0.994277477}, + {4.7875, 1.000013351, 0.994292259}, + {4.791667, 1.000018954, 0.994306982}, + {4.795833, 1.000024438, 0.994321525}, + {4.8, 1.000029802, 0.994336069}, + {4.804167, 1.000034928, 0.994350433}, + {4.808333, 1.000039816, 0.994364798}, + {4.8125, 1.000044584, 0.994378984}, + {4.816667, 1.000048995, 0.99439317}, + {4.820833, 1.000053287, 0.994407177}, + {4.825, 1.00005734, 0.994421124}, + {4.829167, 1.000061154, 0.994434953}, + {4.833333, 1.000064611, 0.994448721}, + {4.8375, 1.000067949, 0.994462311}, + {4.841667, 1.000071049, 0.994475901}, + {4.845833, 1.000073791, 0.994489312}, + {4.85, 1.000076294, 0.994502723}, + {4.854167, 1.000078559, 0.994515955}, + {4.858333, 1.000080466, 0.994529188}, + {4.8625, 1.000082254, 0.994542241}, + {4.866667, 1.000083685, 0.994555235}, + {4.870833, 1.000084758, 0.99456811}, + {4.875, 1.000085711, 0.994580984}, + {4.879167, 1.000086308, 0.99459368}, + {4.883333, 1.000086665, 0.994606376}, + {4.8875, 1.000086784, 0.994618893}, + {4.891667, 1.000086546, 0.99463141}, + {4.895833, 1.000086069, 0.994643748}, + {4.9, 1.000085354, 0.994656146}, + {4.904167, 1.0000844, 0.994668365}, + {4.908333, 1.000083208, 0.994680583}, + {4.9125, 1.000081778, 0.994692683}, + {4.916667, 1.000080109, 0.994704783}, + {4.920833, 1.000078201, 0.994716704}, + {4.925, 1.000076056, 0.994728684}, + {4.929167, 1.000073791, 0.994740546}, + {4.933333, 1.000071168, 0.994752407}, + {4.9375, 1.000068426, 0.994764149}, + {4.941667, 1.000065565, 0.994775891}, + {4.945833, 1.000062346, 0.994787514}, + {4.95, 1.000059128, 0.994799197}, + {4.954167, 1.000055671, 0.99481076}, + {4.958333, 1.000052094, 0.994822323}, + {4.9625, 1.000048399, 0.994833887}, + {4.966667, 1.000044465, 0.99484539}, + {4.970833, 1.000040531, 0.994856834}, + {4.975, 1.000036478, 0.994868279}, + {4.979167, 1.000032187, 0.994879723}, + {4.983333, 1.000028014, 0.994891107}, + {4.9875, 1.000023603, 0.994902492}, + {4.991667, 1.000019193, 0.994913876}, + {4.995833, 1.000014782, 0.994925261}, + {5, 1.000010252, 0.994936585}, + {5.004167, 1.000005722, 0.99494797}, + {5.008333, 1.000001192, 0.994959295}, + {5.0125, 0.999996662, 0.99497062}, + {5.016667, 0.999992073, 0.994981945}, + {5.020833, 0.999987543, 0.994993329}, + {5.025, 0.999983072, 0.995004654}, + {5.029167, 0.999978602, 0.995015979}, + {5.033333, 0.999974132, 0.995027363}, + {5.0375, 0.99996978, 0.995038688}, + {5.041667, 0.999965489, 0.995050073}, + {5.045833, 0.999961257, 0.995061457}, + {5.05, 0.999957144, 0.995072842}, + {5.054167, 0.999953091, 0.995084286}, + {5.058333, 0.999949157, 0.99509567}, + {5.0625, 0.999945343, 0.995107114}, + {5.066667, 0.999941587, 0.995118558}, + {5.070833, 0.999938011, 0.995130002}, + {5.075, 0.999934614, 0.995141506}, + {5.079167, 0.999931276, 0.99515301}, + {5.083333, 0.999928117, 0.995164514}, + {5.0875, 0.999925137, 0.995176017}, + {5.091667, 0.999922276, 0.995187581}, + {5.095833, 0.999919593, 0.995199144}, + {5.1, 0.99991709, 0.995210707}, + {5.104167, 0.999914765, 0.99522233}, + {5.108333, 0.99991262, 0.995233953}, + {5.1125, 0.999910653, 0.995245576}, + {5.116667, 0.999908865, 0.995257199}, + {5.120833, 0.999907255, 0.995268881}, + {5.125, 0.999905825, 0.995280504}, + {5.129167, 0.999904573, 0.995292187}, + {5.133333, 0.99990356, 0.995303869}, + {5.1375, 0.999902725, 0.995315611}, + {5.141667, 0.99990201, 0.995327294}, + {5.145833, 0.999901593, 0.995339036}, + {5.15, 0.999901295, 0.995350778}, + {5.154167, 0.999901176, 0.99536252}, + {5.158333, 0.999901295, 0.995374262}, + {5.1625, 0.999901593, 0.995386004}, + {5.166667, 0.99990201, 0.995397747}, + {5.170833, 0.999902666, 0.995409489}, + {5.175, 0.9999035, 0.995421231}, + {5.179167, 0.999904454, 0.995432973}, + {5.183333, 0.999905646, 0.995444715}, + {5.1875, 0.999906957, 0.995456457}, + {5.191667, 0.999908388, 0.995468199}, + {5.195833, 0.999910057, 0.995479882}, + {5.2, 0.999911845, 0.995491624}, + {5.204167, 0.999913752, 0.995503306}, + {5.208333, 0.999915779, 0.995514989}, + {5.2125, 0.999917984, 0.995526671}, + {5.216667, 0.999920249, 0.995538294}, + {5.220833, 0.999922693, 0.995549917}, + {5.225, 0.999925196, 0.99556154}, + {5.229167, 0.999927878, 0.995573103}, + {5.233333, 0.999930561, 0.995584726}, + {5.2375, 0.999933362, 0.99559623}, + {5.241667, 0.999936283, 0.995607734}, + {5.245833, 0.999939263, 0.995619237}, + {5.25, 0.999942303, 0.995630682}, + {5.254167, 0.999945343, 0.995642126}, + {5.258333, 0.999948502, 0.99565351}, + {5.2625, 0.999951661, 0.995664835}, + {5.266667, 0.999954879, 0.99567616}, + {5.270833, 0.999958098, 0.995687425}, + {5.275, 0.999961376, 0.99569869}, + {5.279167, 0.999964654, 0.995709896}, + {5.283333, 0.999967933, 0.995721042}, + {5.2875, 0.999971151, 0.995732129}, + {5.291667, 0.99997443, 0.995743215}, + {5.295833, 0.999977648, 0.995754182}, + {5.3, 0.999980807, 0.995765209}, + {5.304167, 0.999983966, 0.995776117}, + {5.308333, 0.999987125, 0.995787024}, + {5.3125, 0.999990165, 0.995797813}, + {5.316667, 0.999993205, 0.995808601}, + {5.320833, 0.999996126, 0.995819271}, + {5.325, 0.999999046, 0.995829999}, + {5.329167, 1.000001788, 0.995840549}, + {5.333333, 1.00000453, 0.995851159}, + {5.3375, 1.000007153, 0.99586159}, + {5.341667, 1.000009775, 0.99587208}, + {5.345833, 1.000012159, 0.995882452}, + {5.35, 1.000014544, 0.995892823}, + {5.354167, 1.000016809, 0.995903075}, + {5.358333, 1.000018954, 0.995913327}, + {5.3625, 1.000020981, 0.99592346}, + {5.366667, 1.000022888, 0.995933592}, + {5.370833, 1.000024676, 0.995943606}, + {5.375, 1.000026345, 0.995953619}, + {5.379167, 1.000027895, 0.995963573}, + {5.383333, 1.000029325, 0.995973468}, + {5.3875, 1.000030637, 0.995983303}, + {5.391667, 1.000031829, 0.995993078}, + {5.395833, 1.000032783, 0.996002793}, + {5.4, 1.000033736, 0.996012509}, + {5.404167, 1.000034451, 0.996022105}, + {5.408333, 1.000035167, 0.996031642}, + {5.4125, 1.000035644, 0.996041179}, + {5.416667, 1.000036001, 0.996050656}, + {5.420833, 1.00003624, 0.996060073}, + {5.425, 1.000036359, 0.996069431}, + {5.429167, 1.00003624, 0.99607873}, + {5.433333, 1.00003612, 0.996088028}, + {5.4375, 1.000035882, 0.996097267}, + {5.441667, 1.000035405, 0.996106446}, + {5.445833, 1.000034928, 0.996115625}, + {5.45, 1.000034213, 0.996124744}, + {5.454167, 1.000033498, 0.996133745}, + {5.458333, 1.000032663, 0.996142805}, + {5.4625, 1.00003159, 0.996151805}, + {5.466667, 1.000030518, 0.996160746}, + {5.470833, 1.000029325, 0.996169686}, + {5.475, 1.000028014, 0.996178567}, + {5.479167, 1.000026703, 0.996187449}, + {5.483333, 1.000025153, 0.99619627}, + {5.4875, 1.000023603, 0.996205091}, + {5.491667, 1.000022054, 0.996213853}, + {5.495833, 1.000020266, 0.996222615}, + {5.5, 1.000018477, 0.996231318}, + {5.504167, 1.000016689, 0.99624002}, + {5.508333, 1.000014782, 0.996248722}, + {5.5125, 1.000012755, 0.996257365}, + {5.516667, 1.000010729, 0.996266007}, + {5.520833, 1.000008702, 0.99627465}, + {5.525, 1.000006676, 0.996283293}, + {5.529167, 1.00000453, 0.996291876}, + {5.533333, 1.000002384, 0.996300459}, + {5.5375, 1.000000238, 0.996309042}, + {5.541667, 0.999998033, 0.996317625}, + {5.545833, 0.999995828, 0.996326149}, + {5.55, 0.999993622, 0.996334672}, + {5.554167, 0.999991417, 0.996343195}, + {5.558333, 0.999989212, 0.996351779}, + {5.5625, 0.999987006, 0.996360302}, + {5.566667, 0.99998486, 0.996368825}, + {5.570833, 0.999982715, 0.996377289}, + {5.575, 0.999980569, 0.996385813}, + {5.579167, 0.999978483, 0.996394336}, + {5.583333, 0.999976397, 0.99640286}, + {5.5875, 0.99997443, 0.996411324}, + {5.591667, 0.999972463, 0.996419847}, + {5.595833, 0.999970496, 0.99642837}, + {5.6, 0.999968648, 0.996436894}, + {5.604167, 0.99996686, 0.996445358}, + {5.608333, 0.999965072, 0.996453881}, + {5.6125, 0.999963403, 0.996462405}, + {5.616667, 0.999961793, 0.996470869}, + {5.620833, 0.999960244, 0.996479392}, + {5.625, 0.999958754, 0.996487916}, + {5.629167, 0.999957383, 0.996496439}, + {5.633333, 0.999956071, 0.996504962}, + {5.6375, 0.99995482, 0.996513486}, + {5.641667, 0.999953687, 0.996522009}, + {5.645833, 0.999952614, 0.996530533}, + {5.65, 0.999951661, 0.996539056}, + {5.654167, 0.999950767, 0.99654758}, + {5.658333, 0.999949932, 0.996556044}, + {5.6625, 0.999949276, 0.996564627}, + {5.666667, 0.999948621, 0.99657315}, + {5.670833, 0.999948144, 0.996581614}, + {5.675, 0.999947667, 0.996590137}, + {5.679167, 0.999947369, 0.996598661}, + {5.683333, 0.999947131, 0.996607184}, + {5.6875, 0.999946952, 0.996615708}, + {5.691667, 0.999946892, 0.996624231}, + {5.695833, 0.999946952, 0.996632755}, + {5.7, 0.999947071, 0.996641219}, + {5.704167, 0.999947309, 0.996649742}, + {5.708333, 0.999947608, 0.996658266}, + {5.7125, 0.999947965, 0.996666729}, + {5.716667, 0.999948442, 0.996675193}, + {5.720833, 0.999948978, 0.996683657}, + {5.725, 0.999949634, 0.996692121}, + {5.729167, 0.999950349, 0.996700585}, + {5.733333, 0.999951124, 0.996709049}, + {5.7375, 0.999952018, 0.996717453}, + {5.741667, 0.999952912, 0.996725857}, + {5.745833, 0.999953926, 0.996734262}, + {5.75, 0.999954998, 0.996742666}, + {5.754167, 0.999956131, 0.99675101}, + {5.758333, 0.999957263, 0.996759415}, + {5.7625, 0.999958515, 0.9967677}, + {5.766667, 0.999959826, 0.996776044}, + {5.770833, 0.999961138, 0.996784329}, + {5.775, 0.999962509, 0.996792674}, + {5.779167, 0.999963939, 0.9968009}, + {5.783333, 0.99996537, 0.996809185}, + {5.7875, 0.99996686, 0.99681735}, + {5.791667, 0.99996835, 0.996825576}, + {5.795833, 0.9999699, 0.996833742}, + {5.8, 0.999971449, 0.996841908}, + {5.804167, 0.999972999, 0.996850014}, + {5.808333, 0.999974608, 0.99685812}, + {5.8125, 0.999976218, 0.996866167}, + {5.816667, 0.999977827, 0.996874273}, + {5.820833, 0.999979436, 0.99688226}, + {5.825, 0.999980986, 0.996890247}, + {5.829167, 0.999982595, 0.996898234}, + {5.833333, 0.999984205, 0.996906161}, + {5.8375, 0.999985754, 0.996914029}, + {5.841667, 0.999987304, 0.996921897}, + {5.845833, 0.999988854, 0.996929765}, + {5.85, 0.999990344, 0.996937573}, + {5.854167, 0.999991834, 0.996945322}, + {5.858333, 0.999993324, 0.99695307}, + {5.8625, 0.999994755, 0.996960759}, + {5.866667, 0.999996126, 0.996968508}, + {5.870833, 0.999997497, 0.996976137}, + {5.875, 0.999998748, 0.996983767}, + {5.879167, 1, 0.996991277}, + {5.883333, 1.000001311, 0.996998847}, + {5.8875, 1.000002384, 0.997006357}, + {5.891667, 1.000003576, 0.997013867}, + {5.895833, 1.000004649, 0.997021258}, + {5.9, 1.000005603, 0.997028708}, + {5.904167, 1.000006557, 0.99703604}, + {5.908333, 1.00000751, 0.997043431}, + {5.9125, 1.000008345, 0.997050703}, + {5.916667, 1.00000906, 0.997057974}, + {5.920833, 1.000009775, 0.997065246}, + {5.925, 1.00001049, 0.997072458}, + {5.929167, 1.000011086, 0.997079611}, + {5.933333, 1.000011563, 0.997086763}, + {5.9375, 1.00001204, 0.997093856}, + {5.941667, 1.000012398, 0.997100949}, + {5.945833, 1.000012755, 0.997107983}, + {5.95, 1.000012994, 0.997115016}, + {5.954167, 1.000013232, 0.99712199}, + {5.958333, 1.000013351, 0.997128963}, + {5.9625, 1.000013351, 0.997135878}, + {5.966667, 1.000013471, 0.997142792}, + {5.970833, 1.000013351, 0.997149646}, + {5.975, 1.000013232, 0.997156501}, + {5.979167, 1.000013113, 0.997163296}, + {5.983333, 1.000012875, 0.99717015}, + {5.9875, 1.000012517, 0.997176886}, + {5.991667, 1.000012159, 0.997183621}, + {5.995833, 1.000011802, 0.997190356}, + {6, 1.000011325, 0.997197032}, + {6.004167, 1.000010729, 0.997203708}, + {6.008333, 1.000010252, 0.997210383}, + {6.0125, 1.000009656, 0.997217}, + {6.016667, 1.000008941, 0.997223616}, + {6.020833, 1.000008225, 0.997230172}, + {6.025, 1.00000751, 0.997236729}, + {6.029167, 1.000006676, 0.997243285}, + {6.033333, 1.00000596, 0.997249842}, + {6.0375, 1.000005007, 0.997256339}, + {6.041667, 1.000004172, 0.997262836}, + {6.045833, 1.000003219, 0.997269332}, + {6.05, 1.000002265, 0.99727577}, + {6.054167, 1.000001311, 0.997282207}, + {6.058333, 1.000000358, 0.997288644}, + {6.0625, 0.999999344, 0.997295082}, + {6.066667, 0.999998331, 0.997301519}, + {6.070833, 0.999997258, 0.997307897}, + {6.075, 0.999996245, 0.997314274}, + {6.079167, 0.999995172, 0.997320652}, + {6.083333, 0.999994099, 0.99732703}, + {6.0875, 0.999993026, 0.997333407}, + {6.091667, 0.999992013, 0.997339785}, + {6.095833, 0.99999094, 0.997346103}, + {6.1, 0.999989867, 0.997352421}, + {6.104167, 0.999988794, 0.997358739}, + {6.108333, 0.999987781, 0.997365057}, + {6.1125, 0.999986768, 0.997371376}, + {6.116667, 0.999985754, 0.997377694}, + {6.120833, 0.999984741, 0.997384012}, + {6.125, 0.999983788, 0.99739027}, + {6.129167, 0.999982834, 0.997396588}, + {6.133333, 0.99998188, 0.997402847}, + {6.1375, 0.999980986, 0.997409165}, + {6.141667, 0.999980092, 0.997415423}, + {6.145833, 0.999979258, 0.997421682}, + {6.15, 0.999978423, 0.99742794}, + {6.154167, 0.999977648, 0.997434199}, + {6.158333, 0.999976933, 0.997440457}, + {6.1625, 0.999976218, 0.997446716}, + {6.166667, 0.999975562, 0.997452974}, + {6.170833, 0.999974906, 0.997459233}, + {6.175, 0.99997431, 0.997465432}, + {6.179167, 0.999973774, 0.99747169}, + {6.183333, 0.999973238, 0.997477889}, + {6.1875, 0.999972761, 0.997484148}, + {6.191667, 0.999972343, 0.997490346}, + {6.195833, 0.999971986, 0.997496605}, + {6.2, 0.999971628, 0.997502804}, + {6.204167, 0.99997133, 0.997509003}, + {6.208333, 0.999971092, 0.997515202}, + {6.2125, 0.999970913, 0.9975214}, + {6.216667, 0.999970734, 0.997527599}, + {6.220833, 0.999970615, 0.997533798}, + {6.225, 0.999970555, 0.997539937}, + {6.229167, 0.999970555, 0.997546136}, + {6.233333, 0.999970555, 0.997552276}, + {6.2375, 0.999970615, 0.997558475}, + {6.241667, 0.999970734, 0.997564614}, + {6.245833, 0.999970853, 0.997570753}, + {6.25, 0.999971092, 0.997576892}, + {6.254167, 0.99997133, 0.997583032}, + {6.258333, 0.999971569, 0.997589111}, + {6.2625, 0.999971926, 0.997595251}, + {6.266667, 0.999972284, 0.99760133}, + {6.270833, 0.999972641, 0.99760741}, + {6.275, 0.999973059, 0.99761349}, + {6.279167, 0.999973536, 0.997619569}, + {6.283333, 0.999974012, 0.997625649}, + {6.2875, 0.999974549, 0.997631669}, + {6.291667, 0.999975085, 0.997637689}, + {6.295833, 0.999975681, 0.997643709}, + {6.3, 0.999976277, 0.997649729}, + {6.304167, 0.999976933, 0.997655749}, + {6.308333, 0.999977589, 0.99766171}, + {6.3125, 0.999978244, 0.99766767}, + {6.316667, 0.99997896, 0.997673631}, + {6.320833, 0.999979675, 0.997679532}, + {6.325, 0.99998039, 0.997685492}, + {6.329167, 0.999981165, 0.997691393}, + {6.333333, 0.99998188, 0.997697234}, + {6.3375, 0.999982655, 0.997703135}, + {6.341667, 0.99998343, 0.997708976}, + {6.345833, 0.999984205, 0.997714818}, + {6.35, 0.999985039, 0.997720659}, + {6.354167, 0.999985814, 0.99772644}, + {6.358333, 0.999986589, 0.997732222}, + {6.3625, 0.999987364, 0.997737944}, + {6.366667, 0.999988139, 0.997743726}, + {6.370833, 0.999988973, 0.997749448}, + {6.375, 0.999989748, 0.99775517}, + {6.379167, 0.999990463, 0.997760832}, + {6.383333, 0.999991238, 0.997766495}, + {6.3875, 0.999992013, 0.997772098}, + {6.391667, 0.999992728, 0.99777776}, + {6.395833, 0.999993443, 0.997783363}, + {6.4, 0.999994159, 0.997788966}, + {6.404167, 0.999994814, 0.997794509}, + {6.408333, 0.99999547, 0.997800052}, + {6.4125, 0.999996126, 0.997805536}, + {6.416667, 0.999996781, 0.997811079}, + {6.420833, 0.999997377, 0.997816503}, + {6.425, 0.999997973, 0.997821987}, + {6.429167, 0.99999851, 0.997827411}, + {6.433333, 0.999999046, 0.997832835}, + {6.4375, 0.999999523, 0.997838199}, + {6.441667, 1, 0.997843623}, + {6.445833, 1.000000477, 0.997848928}, + {6.45, 1.000000834, 0.997854292}, + {6.454167, 1.000001192, 0.997859597}, + {6.458333, 1.00000155, 0.997864902}, + {6.4625, 1.000001907, 0.997870147}, + {6.466667, 1.000002265, 0.997875392}, + {6.470833, 1.000002503, 0.997880638}, + {6.475, 1.000002742, 0.997885823}, + {6.479167, 1.000002861, 0.997891009}, + {6.483333, 1.000003099, 0.997896194}, + {6.4875, 1.000003219, 0.99790132}, + {6.491667, 1.000003338, 0.997906446}, + {6.495833, 1.000003457, 0.997911572}, + {6.5, 1.000003457, 0.997916639}, + {6.504167, 1.000003457, 0.997921705}, + {6.508333, 1.000003457, 0.997926772}, + {6.5125, 1.000003338, 0.997931838}, + {6.516667, 1.000003338, 0.997936845}, + {6.520833, 1.000003219, 0.997941852}, + {6.525, 1.000003099, 0.997946858}, + {6.529167, 1.000002861, 0.997951806}, + {6.533333, 1.000002742, 0.997956753}, + {6.5375, 1.000002503, 0.9979617}, + {6.541667, 1.000002265, 0.997966647}, + {6.545833, 1.000002027, 0.997971535}, + {6.55, 1.000001669, 0.997976422}, + {6.554167, 1.000001311, 0.99798131}, + {6.558333, 1.000001073, 0.997986197}, + {6.5625, 1.000000715, 0.997991025}, + {6.566667, 1.000000238, 0.997995913}, + {6.570833, 0.999999881, 0.998000741}, + {6.575, 0.999999523, 0.998005509}, + {6.579167, 0.999999046, 0.998010337}, + {6.583333, 0.999998629, 0.998015106}, + {6.5875, 0.999998152, 0.998019934}, + {6.591667, 0.999997735, 0.998024702}, + {6.595833, 0.999997258, 0.998029411}, + {6.6, 0.999996781, 0.998034179}, + {6.604167, 0.999996245, 0.998038948}, + {6.608333, 0.999995768, 0.998043656}, + {6.6125, 0.999995232, 0.998048365}, + {6.616667, 0.999994755, 0.998053074}, + {6.620833, 0.999994218, 0.998057783}, + {6.625, 0.999993742, 0.998062491}, + {6.629167, 0.999993205, 0.998067141}, + {6.633333, 0.999992728, 0.998071849}, + {6.6375, 0.999992192, 0.998076499}, + {6.641667, 0.999991715, 0.998081207}, + {6.645833, 0.999991179, 0.998085856}, + {6.65, 0.999990702, 0.998090506}, + {6.654167, 0.999990225, 0.998095095}, + {6.658333, 0.999989748, 0.998099744}, + {6.6625, 0.999989271, 0.998104393}, + {6.666667, 0.999988794, 0.998108983}, + {6.670833, 0.999988377, 0.998113632}, + {6.675, 0.99998796, 0.998118222}, + {6.679167, 0.999987543, 0.998122811}, + {6.683333, 0.999987125, 0.998127401}, + {6.6875, 0.999986708, 0.99813199}, + {6.691667, 0.999986351, 0.99813658}, + {6.695833, 0.999985993, 0.99814117}, + {6.7, 0.999985635, 0.998145759}, + {6.704167, 0.999985337, 0.998150289}, + {6.708333, 0.999985039, 0.998154879}, + {6.7125, 0.999984741, 0.998159409}, + {6.716667, 0.999984503, 0.998163998}, + {6.720833, 0.999984264, 0.998168528}, + {6.725, 0.999984026, 0.998173058}, + {6.729167, 0.999983847, 0.998177588}, + {6.733333, 0.999983668, 0.998182118}, + {6.7375, 0.99998349, 0.998186648}, + {6.741667, 0.99998337, 0.998191178}, + {6.745833, 0.999983251, 0.998195648}, + {6.75, 0.999983132, 0.998200178}, + {6.754167, 0.999983072, 0.998204648}, + {6.758333, 0.999983072, 0.998209178}, + {6.7625, 0.999983013, 0.998213649}, + {6.766667, 0.999983013, 0.998218119}, + {6.770833, 0.999983013, 0.998222589}, + {6.775, 0.999983072, 0.99822706}, + {6.779167, 0.999983132, 0.99823153}, + {6.783333, 0.999983251, 0.998235941}, + {6.7875, 0.999983311, 0.998240411}, + {6.791667, 0.99998343, 0.998244822}, + {6.795833, 0.999983609, 0.998249233}, + {6.8, 0.999983728, 0.998253644}, + {6.804167, 0.999983907, 0.998258054}, + {6.808333, 0.999984145, 0.998262465}, + {6.8125, 0.999984324, 0.998266876}, + {6.816667, 0.999984562, 0.998271227}, + {6.820833, 0.999984801, 0.998275638}, + {6.825, 0.999985099, 0.998279989}, + {6.829167, 0.999985337, 0.99828434}, + {6.833333, 0.999985635, 0.998288691}, + {6.8375, 0.999985933, 0.998292983}, + {6.841667, 0.999986291, 0.998297334}, + {6.845833, 0.999986589, 0.998301625}, + {6.85, 0.999986947, 0.998305976}, + {6.854167, 0.999987304, 0.998310208}, + {6.858333, 0.999987662, 0.9983145}, + {6.8625, 0.999988019, 0.998318791}, + {6.866667, 0.999988377, 0.998323023}, + {6.870833, 0.999988735, 0.998327315}, + {6.875, 0.999989152, 0.998331547}, + {6.879167, 0.99998951, 0.998335719}, + {6.883333, 0.999989927, 0.998339951}, + {6.8875, 0.999990284, 0.998344183}, + {6.891667, 0.999990702, 0.998348355}, + {6.895833, 0.999991059, 0.998352528}, + {6.9, 0.999991477, 0.9983567}, + {6.904167, 0.999991834, 0.998360813}, + {6.908333, 0.999992251, 0.998364985}, + {6.9125, 0.999992609, 0.998369098}, + {6.916667, 0.999993026, 0.99837321}, + {6.920833, 0.999993384, 0.998377264}, + {6.925, 0.999993742, 0.998381376}, + {6.929167, 0.999994099, 0.998385429}, + {6.933333, 0.999994457, 0.998389482}, + {6.9375, 0.999994814, 0.998393536}, + {6.941667, 0.999995172, 0.998397589}, + {6.945833, 0.99999547, 0.998401582}, + {6.95, 0.999995768, 0.998405576}, + {6.954167, 0.999996126, 0.998409569}, + {6.958333, 0.999996424, 0.998413563}, + {6.9625, 0.999996662, 0.998417497}, + {6.966667, 0.99999696, 0.99842149}, + {6.970833, 0.999997199, 0.998425424}, + {6.975, 0.999997497, 0.998429298}, + {6.979167, 0.999997735, 0.998433232}, + {6.983333, 0.999997914, 0.998437107}, + {6.9875, 0.999998152, 0.998440981}, + {6.991667, 0.999998331, 0.998444855}, + {6.995833, 0.99999851, 0.99844873}, + {7, 0.999998689, 0.998452544}, + {7.004167, 0.999998808, 0.998456359}, + {7.008333, 0.999998927, 0.998460233}, + {7.0125, 0.999999046, 0.998463988}, + {7.016667, 0.999999166, 0.998467803}, + {7.020833, 0.999999225, 0.998471558}, + {7.025, 0.999999344, 0.998475313}, + {7.029167, 0.999999404, 0.998479068}, + {7.033333, 0.999999404, 0.998482823}, + {7.0375, 0.999999464, 0.998486519}, + {7.041667, 0.999999464, 0.998490274}, + {7.045833, 0.999999464, 0.998493969}, + {7.05, 0.999999404, 0.998497665}, + {7.054167, 0.999999404, 0.99850136}, + {7.058333, 0.999999344, 0.998504996}, + {7.0625, 0.999999285, 0.998508692}, + {7.066667, 0.999999225, 0.998512328}, + {7.070833, 0.999999106, 0.998515964}, + {7.075, 0.999998987, 0.998519599}, + {7.079167, 0.999998868, 0.998523176}, + {7.083333, 0.999998748, 0.998526812}, + {7.0875, 0.999998629, 0.998530388}, + {7.091667, 0.99999845, 0.998533964}, + {7.095833, 0.999998331, 0.99853754}, + {7.1, 0.999998152, 0.998541117}, + {7.104167, 0.999997973, 0.998544693}, + {7.108333, 0.999997795, 0.99854821}, + {7.1125, 0.999997616, 0.998551726}, + {7.116667, 0.999997377, 0.998555303}, + {7.120833, 0.999997199, 0.998558819}, + {7.125, 0.99999696, 0.998562336}, + {7.129167, 0.999996722, 0.998565793}, + {7.133333, 0.999996483, 0.99856931}, + {7.1375, 0.999996305, 0.998572826}, + {7.141667, 0.999996066, 0.998576283}, + {7.145833, 0.999995828, 0.998579741}, + {7.15, 0.999995589, 0.998583198}, + {7.154167, 0.999995351, 0.998586655}, + {7.158333, 0.999995053, 0.998590112}, + {7.1625, 0.999994814, 0.998593569}, + {7.166667, 0.999994576, 0.998597026}, + {7.170833, 0.999994338, 0.998600423}, + {7.175, 0.999994099, 0.99860388}, + {7.179167, 0.999993861, 0.998607278}, + {7.183333, 0.999993622, 0.998610675}, + {7.1875, 0.999993384, 0.998614073}, + {7.191667, 0.999993145, 0.99861753}, + {7.195833, 0.999992907, 0.998620868}, + {7.2, 0.999992728, 0.998624265}, + {7.204167, 0.99999249, 0.998627663}, + {7.208333, 0.999992311, 0.99863106}, + {7.2125, 0.999992073, 0.998634398}, + {7.216667, 0.999991894, 0.998637795}, + {7.220833, 0.999991715, 0.998641133}, + {7.225, 0.999991536, 0.998644471}, + {7.229167, 0.999991357, 0.998647809}, + {7.233333, 0.999991179, 0.998651147}, + {7.2375, 0.999991, 0.998654485}, + {7.241667, 0.99999088, 0.998657823}, + {7.245833, 0.999990702, 0.99866116}, + {7.25, 0.999990582, 0.998664498}, + {7.254167, 0.999990463, 0.998667777}, + {7.258333, 0.999990344, 0.998671114}, + {7.2625, 0.999990225, 0.998674393}, + {7.266667, 0.999990165, 0.998677671}, + {7.270833, 0.999990106, 0.998681009}, + {7.275, 0.999989986, 0.998684287}, + {7.279167, 0.999989927, 0.998687565}, + {7.283333, 0.999989927, 0.998690844}, + {7.2875, 0.999989867, 0.998694062}, + {7.291667, 0.999989867, 0.99869734}, + {7.295833, 0.999989808, 0.998700619}, + {7.3, 0.999989808, 0.998703837}, + {7.304167, 0.999989808, 0.998707116}, + {7.308333, 0.999989867, 0.998710334}, + {7.3125, 0.999989867, 0.998713553}, + {7.316667, 0.999989927, 0.998716831}, + {7.320833, 0.999989927, 0.99872005}, + {7.325, 0.999989986, 0.998723269}, + {7.329167, 0.999990046, 0.998726428}, + {7.333333, 0.999990165, 0.998729646}, + {7.3375, 0.999990225, 0.998732865}, + {7.341667, 0.999990344, 0.998736024}, + {7.345833, 0.999990404, 0.998739183}, + {7.35, 0.999990523, 0.998742402}, + {7.354167, 0.999990642, 0.998745561}, + {7.358333, 0.999990761, 0.99874872}, + {7.3625, 0.99999094, 0.998751879}, + {7.366667, 0.999991059, 0.998755038}, + {7.370833, 0.999991238, 0.998758137}, + {7.375, 0.999991357, 0.998761296}, + {7.379167, 0.999991536, 0.998764396}, + {7.383333, 0.999991715, 0.998767495}, + {7.3875, 0.999991834, 0.998770654}, + {7.391667, 0.999992013, 0.998773754}, + {7.395833, 0.999992192, 0.998776793}, + {7.4, 0.999992371, 0.998779893}, + {7.404167, 0.999992549, 0.998782992}, + {7.408333, 0.999992788, 0.998786032}, + {7.4125, 0.999992967, 0.998789132}, + {7.416667, 0.999993145, 0.998792171}, + {7.420833, 0.999993324, 0.998795211}, + {7.425, 0.999993563, 0.998798251}, + {7.429167, 0.999993742, 0.998801291}, + {7.433333, 0.99999392, 0.998804271}, + {7.4375, 0.999994099, 0.998807311}, + {7.441667, 0.999994338, 0.998810291}, + {7.445833, 0.999994516, 0.998813272}, + {7.45, 0.999994695, 0.998816252}, + {7.454167, 0.999994874, 0.998819232}, + {7.458333, 0.999995053, 0.998822212}, + {7.4625, 0.999995232, 0.998825133}, + {7.466667, 0.99999541, 0.998828113}, + {7.470833, 0.999995589, 0.998831034}, + {7.475, 0.999995768, 0.998833954}, + {7.479167, 0.999995947, 0.998836875}, + {7.483333, 0.999996126, 0.998839796}, + {7.4875, 0.999996305, 0.998842716}, + {7.491667, 0.999996424, 0.998845577}, + {7.495833, 0.999996603, 0.998848498}, + {7.5, 0.999996722, 0.998851359}, + {7.504167, 0.999996841, 0.99885422}, + {7.508333, 0.99999696, 0.998857081}, + {7.5125, 0.999997139, 0.998859942}, + {7.516667, 0.999997258, 0.998862803}, + {7.520833, 0.999997318, 0.998865604}, + {7.525, 0.999997437, 0.998868406}, + {7.529167, 0.999997556, 0.998871207}, + {7.533333, 0.999997616, 0.998874068}, + {7.5375, 0.999997735, 0.99887681}, + {7.541667, 0.999997795, 0.998879611}, + {7.545833, 0.999997854, 0.998882413}, + {7.55, 0.999997914, 0.998885155}, + {7.554167, 0.999997973, 0.998887956}, + {7.558333, 0.999998033, 0.998890698}, + {7.5625, 0.999998033, 0.99889344}, + {7.566667, 0.999998093, 0.998896182}, + {7.570833, 0.999998093, 0.998898864}, + {7.575, 0.999998093, 0.998901606}, + {7.579167, 0.999998093, 0.998904347}, + {7.583333, 0.999998093, 0.99890703}, + {7.5875, 0.999998093, 0.998909712}, + {7.591667, 0.999998093, 0.998912394}, + {7.595833, 0.999998093, 0.998915076}, + {7.6, 0.999998033, 0.998917758}, + {7.604167, 0.999998033, 0.998920441}, + {7.608333, 0.999997973, 0.998923063}, + {7.6125, 0.999997914, 0.998925745}, + {7.616667, 0.999997854, 0.998928368}, + {7.620833, 0.999997795, 0.998930991}, + {7.625, 0.999997735, 0.998933613}, + {7.629167, 0.999997675, 0.998936236}, + {7.633333, 0.999997616, 0.998938859}, + {7.6375, 0.999997497, 0.998941481}, + {7.641667, 0.999997437, 0.998944104}, + {7.645833, 0.999997318, 0.998946667}, + {7.65, 0.999997258, 0.998949289}, + {7.654167, 0.999997139, 0.998951852}, + {7.658333, 0.999997079, 0.998954415}, + {7.6625, 0.99999696, 0.998956978}, + {7.666667, 0.999996841, 0.998959541}, + {7.670833, 0.999996722, 0.998962104}, + {7.675, 0.999996662, 0.998964667}, + {7.679167, 0.999996543, 0.99896723}, + {7.683333, 0.999996424, 0.998969734}, + {7.6875, 0.999996305, 0.998972297}, + {7.691667, 0.999996185, 0.9989748}, + {7.695833, 0.999996066, 0.998977304}, + {7.7, 0.999995947, 0.998979867}, + {7.704167, 0.999995828, 0.99898237}, + {7.708333, 0.999995708, 0.998984873}, + {7.7125, 0.999995589, 0.998987377}, + {7.716667, 0.99999547, 0.99898988}, + {7.720833, 0.99999541, 0.998992324}, + {7.725, 0.999995291, 0.998994827}, + {7.729167, 0.999995172, 0.998997331}, + {7.733333, 0.999995053, 0.998999774}, + {7.7375, 0.999994934, 0.999002278}, + {7.741667, 0.999994874, 0.999004722}, + {7.745833, 0.999994755, 0.999007165}, + {7.75, 0.999994636, 0.999009669}, + {7.754167, 0.999994576, 0.999012113}, + {7.758333, 0.999994457, 0.999014556}, + {7.7625, 0.999994397, 0.999017}, + {7.766667, 0.999994338, 0.999019444}, + {7.770833, 0.999994218, 0.999021828}, + {7.775, 0.999994159, 0.999024272}, + {7.779167, 0.999994099, 0.999026716}, + {7.783333, 0.99999404, 0.9990291}, + {7.7875, 0.99999398, 0.999031544}, + {7.791667, 0.99999392, 0.999033928}, + {7.795833, 0.999993861, 0.999036372}, + {7.8, 0.999993801, 0.999038756}, + {7.804167, 0.999993801, 0.99904114}, + {7.808333, 0.999993742, 0.999043524}, + {7.8125, 0.999993742, 0.999045908}, + {7.816667, 0.999993682, 0.999048293}, + {7.820833, 0.999993682, 0.999050677}, + {7.825, 0.999993682, 0.999053061}, + {7.829167, 0.999993682, 0.999055445}, + {7.833333, 0.999993682, 0.99905777}, + {7.8375, 0.999993682, 0.999060154}, + {7.841667, 0.999993682, 0.999062479}, + {7.845833, 0.999993682, 0.999064863}, + {7.85, 0.999993682, 0.999067187}, + {7.854167, 0.999993742, 0.999069512}, + {7.858333, 0.999993742, 0.999071836}, + {7.8625, 0.999993801, 0.999074161}, + {7.866667, 0.999993801, 0.999076486}, + {7.870833, 0.999993861, 0.99907881}, + {7.875, 0.99999392, 0.999081135}, + {7.879167, 0.99999398, 0.999083459}, + {7.883333, 0.99999398, 0.999085724}, + {7.8875, 0.99999404, 0.999088049}, + {7.891667, 0.999994099, 0.999090314}, + {7.895833, 0.999994218, 0.999092638}, + {7.9, 0.999994278, 0.999094903}, + {7.904167, 0.999994338, 0.999097168}, + {7.908333, 0.999994397, 0.999099433}, + {7.9125, 0.999994516, 0.999101698}, + {7.916667, 0.999994576, 0.999103963}, + {7.920833, 0.999994636, 0.999106228}, + {7.925, 0.999994755, 0.999108434}, + {7.929167, 0.999994814, 0.999110699}, + {7.933333, 0.999994934, 0.999112964}, + {7.9375, 0.999994993, 0.999115169}, + {7.941667, 0.999995112, 0.999117374}, + {7.945833, 0.999995232, 0.999119639}, + {7.95, 0.999995291, 0.999121845}, + {7.954167, 0.99999541, 0.99912405}, + {7.958333, 0.99999547, 0.999126256}, + {7.9625, 0.999995589, 0.999128401}, + {7.966667, 0.999995708, 0.999130607}, + {7.970833, 0.999995768, 0.999132812}, + {7.975, 0.999995887, 0.999134958}, + {7.979167, 0.999996006, 0.999137163}, + {7.983333, 0.999996066, 0.999139309}, + {7.9875, 0.999996185, 0.999141455}, + {7.991667, 0.999996245, 0.99914366}, + {7.995833, 0.999996364, 0.999145746}, + {8, 0.999996483, 0.999147892}, + {8.004167, 0.999996543, 0.999150038}, + {8.008333, 0.999996662, 0.999152184}, + {8.0125, 0.999996722, 0.999154329}, + {8.016667, 0.999996781, 0.999156415}, + {8.020833, 0.999996901, 0.999158502}, + {8.025, 0.99999696, 0.999160647}, + {8.029167, 0.99999702, 0.999162734}, + {8.033333, 0.999997139, 0.99916482}, + {8.0375, 0.999997199, 0.999166906}, + {8.041667, 0.999997258, 0.999168992}, + {8.045833, 0.999997318, 0.999171078}, + {8.05, 0.999997377, 0.999173105}, + {8.054167, 0.999997437, 0.999175191}, + {8.058333, 0.999997497, 0.999177277}, + {8.0625, 0.999997556, 0.999179304}, + {8.066667, 0.999997616, 0.99918133}, + {8.070833, 0.999997675, 0.999183357}, + {8.075, 0.999997675, 0.999185443}, + {8.079167, 0.999997735, 0.99918741}, + {8.083333, 0.999997795, 0.999189436}, + {8.0875, 0.999997795, 0.999191463}, + {8.091667, 0.999997854, 0.99919349}, + {8.095833, 0.999997854, 0.999195457}, + {8.1, 0.999997854, 0.999197483}, + {8.104167, 0.999997914, 0.99919945}, + {8.108333, 0.999997914, 0.999201477}, + {8.1125, 0.999997914, 0.999203444}, + {8.116667, 0.999997914, 0.99920541}, + {8.120833, 0.999997914, 0.999207377}, + {8.125, 0.999997914, 0.999209344}, + {8.129167, 0.999997914, 0.999211311}, + {8.133333, 0.999997914, 0.999213278}, + {8.1375, 0.999997914, 0.999215186}, + {8.141667, 0.999997854, 0.999217153}, + {8.145833, 0.999997854, 0.99921906}, + {8.15, 0.999997854, 0.999221027}, + {8.154167, 0.999997795, 0.999222934}, + {8.158333, 0.999997795, 0.999224842}, + {8.1625, 0.999997735, 0.999226749}, + {8.166667, 0.999997735, 0.999228716}, + {8.170833, 0.999997675, 0.999230564}, + {8.175, 0.999997675, 0.999232471}, + {8.179167, 0.999997616, 0.999234378}, + {8.183333, 0.999997556, 0.999236286}, + {8.1875, 0.999997556, 0.999238193}, + {8.191667, 0.999997497, 0.999240041}, + {8.195833, 0.999997437, 0.999241948}, + {8.2, 0.999997377, 0.999243796}, + {8.204167, 0.999997318, 0.999245644}, + {8.208333, 0.999997318, 0.999247551}, + {8.2125, 0.999997258, 0.999249399}, + {8.216667, 0.999997199, 0.999251246}, + {8.220833, 0.999997139, 0.999253094}, + {8.225, 0.999997079, 0.999254942}, + {8.229167, 0.99999702, 0.99925679}, + {8.233333, 0.99999696, 0.999258637}, + {8.2375, 0.999996901, 0.999260485}, + {8.241667, 0.999996901, 0.999262273}, + {8.245833, 0.999996841, 0.999264121}, + {8.25, 0.999996781, 0.999265969}, + {8.254167, 0.999996722, 0.999267757}, + {8.258333, 0.999996662, 0.999269605}, + {8.2625, 0.999996603, 0.999271393}, + {8.266667, 0.999996543, 0.999273181}, + {8.270833, 0.999996483, 0.999274969}, + {8.275, 0.999996483, 0.999276817}, + {8.279167, 0.999996424, 0.999278605}, + {8.283333, 0.999996364, 0.999280393}, + {8.2875, 0.999996305, 0.999282181}, + {8.291667, 0.999996305, 0.999283969}, + {8.295833, 0.999996245, 0.999285758}, + {8.3, 0.999996185, 0.999287486}, + {8.304167, 0.999996185, 0.999289274}, + {8.308333, 0.999996126, 0.999291062}, + {8.3125, 0.999996126, 0.999292791}, + {8.316667, 0.999996066, 0.999294579}, + {8.320833, 0.999996066, 0.999296308}, + {8.325, 0.999996006, 0.999298096}, + {8.329167, 0.999996006, 0.999299824}, + {8.333333, 0.999996006, 0.999301553}, + {8.3375, 0.999995947, 0.999303341}, + {8.341667, 0.999995947, 0.999305069}, + {8.345833, 0.999995947, 0.999306798}, + {8.35, 0.999995947, 0.999308527}, + {8.354167, 0.999995887, 0.999310255}, + {8.358333, 0.999995887, 0.999311984}, + {8.3625, 0.999995887, 0.999313712}, + {8.366667, 0.999995887, 0.999315381}, + {8.370833, 0.999995887, 0.99931711}, + {8.375, 0.999995887, 0.999318838}, + {8.379167, 0.999995887, 0.999320507}, + {8.383333, 0.999995947, 0.999322236}, + {8.3875, 0.999995947, 0.999323905}, + {8.391667, 0.999995947, 0.999325633}, + {8.395833, 0.999995947, 0.999327302}, + {8.4, 0.999996006, 0.999329031}, + {8.404167, 0.999996006, 0.999330699}, + {8.408333, 0.999996006, 0.999332368}, + {8.4125, 0.999996066, 0.999334037}, + {8.416667, 0.999996066, 0.999335706}, + {8.420833, 0.999996126, 0.999337375}, + {8.425, 0.999996126, 0.999339044}, + {8.429167, 0.999996185, 0.999340713}, + {8.433333, 0.999996185, 0.999342322}, + {8.4375, 0.999996245, 0.999343991}, + {8.441667, 0.999996305, 0.99934566}, + {8.445833, 0.999996305, 0.99934727}, + {8.45, 0.999996364, 0.999348938}, + {8.454167, 0.999996424, 0.999350548}, + {8.458333, 0.999996483, 0.999352217}, + {8.4625, 0.999996483, 0.999353826}, + {8.466667, 0.999996543, 0.999355435}, + {8.470833, 0.999996603, 0.999357045}, + {8.475, 0.999996662, 0.999358654}, + {8.479167, 0.999996662, 0.999360263}, + {8.483333, 0.999996722, 0.999361873}, + {8.4875, 0.999996781, 0.999363482}, + {8.491667, 0.999996841, 0.999365091}, + {8.495833, 0.999996901, 0.999366701}, + {8.5, 0.99999696, 0.99936825}, + {8.504167, 0.99999696, 0.99936986}, + {8.508333, 0.99999702, 0.999371409}, + {8.5125, 0.999997079, 0.999373019}, + {8.516667, 0.999997139, 0.999374568}, + {8.520833, 0.999997199, 0.999376178}, + {8.525, 0.999997258, 0.999377728}, + {8.529167, 0.999997258, 0.999379277}, + {8.533333, 0.999997318, 0.999380827}, + {8.5375, 0.999997377, 0.999382377}, + {8.541667, 0.999997437, 0.999383926}, + {8.545833, 0.999997497, 0.999385476}, + {8.55, 0.999997497, 0.999387026}, + {8.554167, 0.999997556, 0.999388516}, + {8.558333, 0.999997616, 0.999390066}, + {8.5625, 0.999997616, 0.999391615}, + {8.566667, 0.999997675, 0.999393106}, + {8.570833, 0.999997735, 0.999394655}, + {8.575, 0.999997735, 0.999396145}, + {8.579167, 0.999997795, 0.999397635}, + {8.583333, 0.999997795, 0.999399185}, + {8.5875, 0.999997854, 0.999400675}, + {8.591667, 0.999997914, 0.999402165}, + {8.595833, 0.999997914, 0.999403656}, + {8.6, 0.999997914, 0.999405146}, + {8.604167, 0.999997973, 0.999406636}, + {8.608333, 0.999997973, 0.999408126}, + {8.6125, 0.999998033, 0.999409556}, + {8.616667, 0.999998033, 0.999411047}, + {8.620833, 0.999998033, 0.999412537}, + {8.625, 0.999998093, 0.999413967}, + {8.629167, 0.999998093, 0.999415457}, + {8.633333, 0.999998093, 0.999416888}, + {8.6375, 0.999998093, 0.999418318}, + {8.641667, 0.999998093, 0.999419808}, + {8.645833, 0.999998152, 0.999421239}, + {8.65, 0.999998152, 0.999422669}, + {8.654167, 0.999998152, 0.9994241}, + {8.658333, 0.999998152, 0.99942553}, + {8.6625, 0.999998152, 0.999426961}, + {8.666667, 0.999998152, 0.999428391}, + {8.670833, 0.999998152, 0.999429822}, + {8.675, 0.999998152, 0.999431252}, + {8.679167, 0.999998152, 0.999432623}, + {8.683333, 0.999998093, 0.999434054}, + {8.6875, 0.999998093, 0.999435425}, + {8.691667, 0.999998093, 0.999436855}, + {8.695833, 0.999998093, 0.999438226}, + {8.7, 0.999998093, 0.999439657}, + {8.704167, 0.999998033, 0.999441028}, + {8.708333, 0.999998033, 0.999442399}, + {8.7125, 0.999998033, 0.999443829}, + {8.716667, 0.999998033, 0.9994452}, + {8.720833, 0.999997973, 0.999446571}, + {8.725, 0.999997973, 0.999447942}, + {8.729167, 0.999997973, 0.999449313}, + {8.733333, 0.999997914, 0.999450684}, + {8.7375, 0.999997914, 0.999452055}, + {8.741667, 0.999997914, 0.999453425}, + {8.745833, 0.999997854, 0.999454737}, + {8.75, 0.999997854, 0.999456108}, + {8.754167, 0.999997795, 0.999457479}, + {8.758333, 0.999997795, 0.99945879}, + {8.7625, 0.999997795, 0.999460161}, + {8.766667, 0.999997735, 0.999461472}, + {8.770833, 0.999997735, 0.999462843}, + {8.775, 0.999997675, 0.999464154}, + {8.779167, 0.999997675, 0.999465525}, + {8.783333, 0.999997675, 0.999466836}, + {8.7875, 0.999997616, 0.999468148}, + {8.791667, 0.999997616, 0.999469459}, + {8.795833, 0.999997616, 0.99947077}, + {8.8, 0.999997556, 0.999472082}, + {8.804167, 0.999997556, 0.999473393}, + {8.808333, 0.999997497, 0.999474704}, + {8.8125, 0.999997497, 0.999476016}, + {8.816667, 0.999997497, 0.999477327}, + {8.820833, 0.999997437, 0.999478638}, + {8.825, 0.999997437, 0.999479949}, + {8.829167, 0.999997437, 0.999481261}, + {8.833333, 0.999997377, 0.999482512}, + {8.8375, 0.999997377, 0.999483824}, + {8.841667, 0.999997377, 0.999485135}, + {8.845833, 0.999997377, 0.999486387}, + {8.85, 0.999997318, 0.999487698}, + {8.854167, 0.999997318, 0.99948895}, + {8.858333, 0.999997318, 0.999490201}, + {8.8625, 0.999997318, 0.999491513}, + {8.866667, 0.999997318, 0.999492764}, + {8.870833, 0.999997318, 0.999494016}, + {8.875, 0.999997258, 0.999495268}, + {8.879167, 0.999997258, 0.999496579}, + {8.883333, 0.999997258, 0.999497831}, + {8.8875, 0.999997258, 0.999499083}, + {8.891667, 0.999997258, 0.999500334}, + {8.895833, 0.999997258, 0.999501586}, + {8.9, 0.999997258, 0.999502838}, + {8.904167, 0.999997258, 0.999504089}, + {8.908333, 0.999997258, 0.999505281}, + {8.9125, 0.999997258, 0.999506533}, + {8.916667, 0.999997258, 0.999507785}, + {8.920833, 0.999997318, 0.999509037}, + {8.925, 0.999997318, 0.999510229}, + {8.929167, 0.999997318, 0.99951148}, + {8.933333, 0.999997318, 0.999512672}, + {8.9375, 0.999997318, 0.999513924}, + {8.941667, 0.999997318, 0.999515116}, + {8.945833, 0.999997377, 0.999516368}, + {8.95, 0.999997377, 0.99951756}, + {8.954167, 0.999997377, 0.999518752}, + {8.958333, 0.999997377, 0.999520004}, + {8.9625, 0.999997437, 0.999521196}, + {8.966667, 0.999997437, 0.999522388}, + {8.970833, 0.999997437, 0.99952358}, + {8.975, 0.999997497, 0.999524772}, + {8.979167, 0.999997497, 0.999525964}, + {8.983333, 0.999997497, 0.999527156}, + {8.9875, 0.999997556, 0.999528348}, + {8.991667, 0.999997556, 0.999529541}, + {8.995833, 0.999997616, 0.999530733}, + {9, 0.999997616, 0.999531865}, + {9.004167, 0.999997616, 0.999533057}, + {9.008333, 0.999997675, 0.999534249}, + {9.0125, 0.999997675, 0.999535382}, + {9.016667, 0.999997735, 0.999536574}, + {9.020833, 0.999997735, 0.999537706}, + {9.025, 0.999997735, 0.999538898}, + {9.029167, 0.999997795, 0.999540031}, + {9.033333, 0.999997795, 0.999541223}, + {9.0375, 0.999997854, 0.999542356}, + {9.041667, 0.999997854, 0.999543488}, + {9.045833, 0.999997914, 0.999544621}, + {9.05, 0.999997914, 0.999545753}, + {9.054167, 0.999997973, 0.999546945}, + {9.058333, 0.999997973, 0.999548078}, + {9.0625, 0.999997973, 0.99954921}, + {9.066667, 0.999998033, 0.999550343}, + {9.070833, 0.999998033, 0.999551415}, + {9.075, 0.999998093, 0.999552548}, + {9.079167, 0.999998093, 0.99955368}, + {9.083333, 0.999998093, 0.999554813}, + {9.0875, 0.999998152, 0.999555945}, + {9.091667, 0.999998152, 0.999557018}, + {9.095833, 0.999998212, 0.999558151}, + {9.1, 0.999998212, 0.999559224}, + {9.104167, 0.999998212, 0.999560356}, + {9.108333, 0.999998271, 0.999561429}, + {9.1125, 0.999998271, 0.999562562}, + {9.116667, 0.999998271, 0.999563634}, + {9.120833, 0.999998331, 0.999564707}, + {9.125, 0.999998331, 0.99956584}, + {9.129167, 0.999998331, 0.999566913}, + {9.133333, 0.999998331, 0.999567986}, + {9.1375, 0.999998391, 0.999569058}, + {9.141667, 0.999998391, 0.999570131}, + {9.145833, 0.999998391, 0.999571204}, + {9.15, 0.999998391, 0.999572277}, + {9.154167, 0.999998391, 0.99957335}, + {9.158333, 0.99999845, 0.999574423}, + {9.1625, 0.99999845, 0.999575496}, + {9.166667, 0.99999845, 0.999576569}, + {9.170833, 0.99999845, 0.999577582}, + {9.175, 0.99999845, 0.999578655}, + {9.179167, 0.99999845, 0.999579728}, + {9.183333, 0.99999845, 0.999580741}, + {9.1875, 0.99999845, 0.999581814}, + {9.191667, 0.99999845, 0.999582827}, + {9.195833, 0.99999851, 0.9995839}, + {9.2, 0.99999851, 0.999584913}, + {9.204167, 0.99999851, 0.999585927}, + {9.208333, 0.99999851, 0.999586999}, + {9.2125, 0.99999851, 0.999588013}, + {9.216667, 0.99999851, 0.999589026}, + {9.220833, 0.99999845, 0.999590039}, + {9.225, 0.99999845, 0.999591053}, + {9.229167, 0.99999845, 0.999592125}, + {9.233333, 0.99999845, 0.999593139}, + {9.2375, 0.99999845, 0.999594152}, + {9.241667, 0.99999845, 0.999595165}, + {9.245833, 0.99999845, 0.999596119}, + {9.25, 0.99999845, 0.999597132}, + {9.254167, 0.99999845, 0.999598145}, + {9.258333, 0.99999845, 0.999599159}, + {9.2625, 0.99999845, 0.999600172}, + {9.266667, 0.999998391, 0.999601126}, + {9.270833, 0.999998391, 0.999602139}, + {9.275, 0.999998391, 0.999603152}, + {9.279167, 0.999998391, 0.999604106}, + {9.283333, 0.999998391, 0.999605119}, + {9.2875, 0.999998391, 0.999606073}, + {9.291667, 0.999998331, 0.999607086}, + {9.295833, 0.999998331, 0.99960804}, + {9.3, 0.999998331, 0.999609053}, + {9.304167, 0.999998331, 0.999610007}, + {9.308333, 0.999998331, 0.99961096}, + {9.3125, 0.999998331, 0.999611914}, + {9.316667, 0.999998271, 0.999612927}, + {9.320833, 0.999998271, 0.999613881}, + {9.325, 0.999998271, 0.999614835}, + {9.329167, 0.999998271, 0.999615788}, + {9.333333, 0.999998271, 0.999616742}, + {9.3375, 0.999998271, 0.999617696}, + {9.341667, 0.999998212, 0.999618649}, + {9.345833, 0.999998212, 0.999619603}, + {9.35, 0.999998212, 0.999620557}, + {9.354167, 0.999998212, 0.999621511}, + {9.358333, 0.999998212, 0.999622464}, + {9.3625, 0.999998212, 0.999623418}, + {9.366667, 0.999998212, 0.999624312}, + {9.370833, 0.999998152, 0.999625266}, + {9.375, 0.999998152, 0.999626219}, + {9.379167, 0.999998152, 0.999627173}, + {9.383333, 0.999998152, 0.999628067}, + {9.3875, 0.999998152, 0.999629021}, + {9.391667, 0.999998152, 0.999629915}, + {9.395833, 0.999998152, 0.999630868}, + {9.4, 0.999998152, 0.999631763}, + {9.404167, 0.999998152, 0.999632716}, + {9.408333, 0.999998152, 0.99963361}, + {9.4125, 0.999998152, 0.999634564}, + {9.416667, 0.999998152, 0.999635458}, + {9.420833, 0.999998152, 0.999636352}, + {9.425, 0.999998152, 0.999637246}, + {9.429167, 0.999998152, 0.9996382}, + {9.433333, 0.999998152, 0.999639094}, + {9.4375, 0.999998152, 0.999639988}, + {9.441667, 0.999998152, 0.999640882}, + {9.445833, 0.999998152, 0.999641776}, + {9.45, 0.999998152, 0.99964267}, + {9.454167, 0.999998152, 0.999643564}, + {9.458333, 0.999998152, 0.999644458}, + {9.4625, 0.999998152, 0.999645352}, + {9.466667, 0.999998152, 0.999646246}, + {9.470833, 0.999998152, 0.999647141}, + {9.475, 0.999998212, 0.999648035}, + {9.479167, 0.999998212, 0.999648929}, + {9.483333, 0.999998212, 0.999649763}, + {9.4875, 0.999998212, 0.999650657}, + {9.491667, 0.999998212, 0.999651551}, + {9.495833, 0.999998212, 0.999652445}, + {9.5, 0.999998212, 0.99965328}, + {9.504167, 0.999998271, 0.999654174}, + {9.508333, 0.999998271, 0.999655008}, + {9.5125, 0.999998271, 0.999655902}, + {9.516667, 0.999998271, 0.999656737}, + {9.520833, 0.999998271, 0.999657631}, + {9.525, 0.999998331, 0.999658465}, + {9.529167, 0.999998331, 0.999659359}, + {9.533333, 0.999998331, 0.999660194}, + {9.5375, 0.999998331, 0.999661028}, + {9.541667, 0.999998331, 0.999661863}, + {9.545833, 0.999998391, 0.999662757}, + {9.55, 0.999998391, 0.999663591}, + {9.554167, 0.999998391, 0.999664426}, + {9.558333, 0.999998391, 0.99966526}, + {9.5625, 0.99999845, 0.999666095}, + {9.566667, 0.99999845, 0.999666929}, + {9.570833, 0.99999845, 0.999667764}, + {9.575, 0.99999845, 0.999668598}, + {9.579167, 0.99999845, 0.999669433}, + {9.583333, 0.99999851, 0.999670267}, + {9.5875, 0.99999851, 0.999671102}, + {9.591667, 0.99999851, 0.999671936}, + {9.595833, 0.99999851, 0.999672771}, + {9.6, 0.999998569, 0.999673545}, + {9.604167, 0.999998569, 0.99967438}, + {9.608333, 0.999998569, 0.999675214}, + {9.6125, 0.999998569, 0.999676049}, + {9.616667, 0.999998629, 0.999676824}, + {9.620833, 0.999998629, 0.999677658}, + {9.625, 0.999998629, 0.999678433}, + {9.629167, 0.999998629, 0.999679267}, + {9.633333, 0.999998629, 0.999680042}, + {9.6375, 0.999998689, 0.999680877}, + {9.641667, 0.999998689, 0.999681652}, + {9.645833, 0.999998689, 0.999682486}, + {9.65, 0.999998689, 0.999683261}, + {9.654167, 0.999998689, 0.999684036}, + {9.658333, 0.999998689, 0.999684811}, + {9.6625, 0.999998748, 0.999685645}, + {9.666667, 0.999998748, 0.99968642}, + {9.670833, 0.999998748, 0.999687195}, + {9.675, 0.999998748, 0.99968797}, + {9.679167, 0.999998748, 0.999688745}, + {9.683333, 0.999998748, 0.999689519}, + {9.6875, 0.999998748, 0.999690294}, + {9.691667, 0.999998748, 0.999691069}, + {9.695833, 0.999998808, 0.999691844}, + {9.7, 0.999998808, 0.999692619}, + {9.704167, 0.999998808, 0.999693394}, + {9.708333, 0.999998808, 0.999694169}, + {9.7125, 0.999998808, 0.999694943}, + {9.716667, 0.999998808, 0.999695718}, + {9.720833, 0.999998808, 0.999696434}, + {9.725, 0.999998808, 0.999697208}, + {9.729167, 0.999998808, 0.999697983}, + {9.733333, 0.999998808, 0.999698699}, + {9.7375, 0.999998808, 0.999699473}, + {9.741667, 0.999998808, 0.999700248}, + {9.745833, 0.999998808, 0.999700963}, + {9.75, 0.999998808, 0.999701738}, + {9.754167, 0.999998808, 0.999702454}, + {9.758333, 0.999998808, 0.999703228}, + {9.7625, 0.999998808, 0.999703944}, + {9.766667, 0.999998808, 0.999704719}, + {9.770833, 0.999998808, 0.999705434}, + {9.775, 0.999998808, 0.999706149}, + {9.779167, 0.999998808, 0.999706924}, + {9.783333, 0.999998808, 0.999707639}, + {9.7875, 0.999998808, 0.999708354}, + {9.791667, 0.999998808, 0.99970907}, + {9.795833, 0.999998808, 0.999709845}, + {9.8, 0.999998808, 0.99971056}, + {9.804167, 0.999998808, 0.999711275}, + {9.808333, 0.999998808, 0.99971199}, + {9.8125, 0.999998808, 0.999712706}, + {9.816667, 0.999998808, 0.999713421}, + {9.820833, 0.999998808, 0.999714136}, + {9.825, 0.999998808, 0.999714851}, + {9.829167, 0.999998808, 0.999715567}, + {9.833333, 0.999998748, 0.999716282}, + {9.8375, 0.999998748, 0.999716997}, + {9.841667, 0.999998748, 0.999717712}, + {9.845833, 0.999998748, 0.999718368}, + {9.85, 0.999998748, 0.999719083}, + {9.854167, 0.999998748, 0.999719799}, + {9.858333, 0.999998748, 0.999720514}, + {9.8625, 0.999998748, 0.999721169}, + {9.866667, 0.999998748, 0.999721885}, + {9.870833, 0.999998748, 0.9997226}, + {9.875, 0.999998748, 0.999723256}, + {9.879167, 0.999998748, 0.999723971}, + {9.883333, 0.999998748, 0.999724686}, + {9.8875, 0.999998748, 0.999725342}, + {9.891667, 0.999998748, 0.999726057}, + {9.895833, 0.999998748, 0.999726713}, + {9.9, 0.999998689, 0.999727428}, + {9.904167, 0.999998689, 0.999728084}, + {9.908333, 0.999998689, 0.999728799}, + {9.9125, 0.999998689, 0.999729455}, + {9.916667, 0.999998689, 0.99973011}, + {9.920833, 0.999998689, 0.999730825}, + {9.925, 0.999998689, 0.999731481}, + {9.929167, 0.999998689, 0.999732137}, + {9.933333, 0.999998689, 0.999732792}, + {9.9375, 0.999998689, 0.999733508}, + {9.941667, 0.999998689, 0.999734163}, + {9.945833, 0.999998689, 0.999734819}, + {9.95, 0.999998689, 0.999735475}, + {9.954167, 0.999998689, 0.99973613}, + {9.958333, 0.999998689, 0.999736786}, + {9.9625, 0.999998689, 0.999737501}, + {9.966667, 0.999998689, 0.999738157}, + {9.970833, 0.999998689, 0.999738812}, + {9.975, 0.999998689, 0.999739468}, + {9.979167, 0.999998689, 0.999740124}, + {9.983333, 0.999998689, 0.99974072}, + {9.9875, 0.999998689, 0.999741375}, + {9.991667, 0.999998748, 0.999742031}, + {9.995833, 0.999998748, 0.999742687}, + {10, 0.999998748, 0.999743342}}; +} // namespace Example1 diff --git a/examples/PhasorDynamics/Example2/example2.cpp b/examples/PhasorDynamics/Example2/example2.cpp index c7939ead1..3b7eeb68d 100644 --- a/examples/PhasorDynamics/Example2/example2.cpp +++ b/examples/PhasorDynamics/Example2/example2.cpp @@ -16,12 +16,18 @@ #include #include +#include #include +#include #include #include +#include #include +#include #include +#include #include +#include #include #include @@ -39,7 +45,7 @@ struct OutputData OutputData& operator-=(const OutputData& other) { - assert(t == other.t); + assert(GridKit::Testing::isEqual(t, other.t, Example2::reference_tol)); gen2speed -= other.gen2speed; gen3speed -= other.gen3speed; v2mag -= other.v2mag; @@ -82,45 +88,146 @@ int main() std::cout << "Example 2 version 1\n"; - /* Create model parts */ - SystemModel sys; - BusInfinite bus1(1.06, 0.0); - Bus bus2(1.0599558398065716, -0.009675621941024773); - Bus bus3(0.9610827543495831, -0.13122476630506485); - Branch branch12(&bus1, &bus2, 0.05, 0.21, 0, 0.1); - Branch branch13(&bus1, &bus3, 0.06, 0.15, 0, 0.12); - Branch branch23(&bus2, &bus3, 0.08, 0.27, 0, 0.45); - Genrou gen2(&bus2, 1, 0.5, -0.07588, 2.7, 0., 0., 7., .04, .05, .75, 1.9, 0.17, 0.15, 0.4, 0.35, 0.15, 0.14999, 0., 0.); - Genrou gen3(&bus3, 1, 0.25, 0.26587, 1.6, 0., 0., 7.5, .04, .05, .75, 2.3, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); - Load load3(&bus3, 0.4447197839297772, 0.20330047265361242); - BusFault fault(&bus3, 0, 1e-5, 0); - - /* Connect everything together */ - sys.addBus(&bus1); - sys.addBus(&bus2); - sys.addBus(&bus3); - sys.addComponent(&branch12); - sys.addComponent(&branch13); - sys.addComponent(&branch23); - sys.addComponent(&fault); - sys.addComponent(&load3); - sys.addComponent(&gen2); - sys.addComponent(&gen3); + // + // Create model data + // + + SystemModelData data; + + // Set bus data + data.bus.resize(3); + + // Bus 0 + data.bus[0].bus_id = 0; + data.bus[0].bus_type = BusData::SLACK; + data.bus[0].Vr0 = 1.06; + data.bus[0].Vi0 = 0.0; + + // Bus 1 + data.bus[1].bus_id = 1; + data.bus[1].bus_type = BusData::DEFAULT; + data.bus[1].Vr0 = 1.0599558398065716; + data.bus[1].Vi0 = -0.009675621941024773; + + // Bus 2 + data.bus[2].bus_id = 2; + data.bus[2].bus_type = BusData::DEFAULT; + data.bus[2].Vr0 = 0.9610827543495831; + data.bus[2].Vi0 = -0.13122476630506485; + + // Set branch data + data.branch.resize(3); + + // Branch 0-1 + data.branch[0].bus1_id = data.bus[0].bus_id; + data.branch[0].bus2_id = data.bus[1].bus_id; + data.branch[0].R = 0.05; + data.branch[0].X = 0.21; + data.branch[0].G = 0; + data.branch[0].B = 0.1; + + // Branch 0-2 + data.branch[1].bus1_id = data.bus[0].bus_id; + data.branch[1].bus2_id = data.bus[2].bus_id; + data.branch[1].R = 0.06; + data.branch[1].X = 0.15; + data.branch[1].G = 0; + data.branch[1].B = 0.12; + + // Branch 1-2 + data.branch[2].bus1_id = data.bus[1].bus_id; + data.branch[2].bus2_id = data.bus[2].bus_id; + data.branch[2].R = 0.08; + data.branch[2].X = 0.27; + data.branch[2].G = 0; + data.branch[2].B = 0.45; + + // Set generator data + data.genrou.resize(2); + + // Generator on bus 1 + data.genrou[0].bus_id = 1; + data.genrou[0].unit_id = 0; + data.genrou[0].p0 = 0.5; + data.genrou[0].q0 = -0.07588; + data.genrou[0].H = 2.7; + data.genrou[0].D = 0.; + data.genrou[0].Ra = 0.; + data.genrou[0].Tdop = 7.; + data.genrou[0].Tdopp = .04; + data.genrou[0].Tqopp = .05; + data.genrou[0].Tqop = .75; + data.genrou[0].Xd = 1.9; + data.genrou[0].Xdp = 0.17; + data.genrou[0].Xdpp = 0.15; + data.genrou[0].Xq = 0.4; + data.genrou[0].Xqp = 0.35; + data.genrou[0].Xqpp = 0.15; + data.genrou[0].Xl = 0.14999; + data.genrou[0].S10 = 0.; + data.genrou[0].S12 = 0.; + + // Generator on bus 2 + data.genrou[1].bus_id = 2; + data.genrou[1].unit_id = 1; + data.genrou[1].p0 = 0.25; + data.genrou[1].q0 = 0.26587; + data.genrou[1].H = 1.6; + data.genrou[1].D = 0.; + data.genrou[1].Ra = 0.; + data.genrou[1].Tdop = 7.5; + data.genrou[1].Tdopp = .04; + data.genrou[1].Tqopp = .05; + data.genrou[1].Tqop = .75; + data.genrou[1].Xd = 2.3; + data.genrou[1].Xdp = 0.2; + data.genrou[1].Xdpp = 0.18; + data.genrou[1].Xq = 0.5; + data.genrou[1].Xqp = 0.5; + data.genrou[1].Xqpp = 0.18; + data.genrou[1].Xl = 0.15; + data.genrou[1].S10 = 0.; + data.genrou[1].S12 = 0.; + + // Set load data + data.load.resize(1); + + // Load on bus 2 + data.load[0].bus_id = 2; + data.load[0].R = 0.4447197839297772; + data.load[0].X = 0.20330047265361242; + + // Set fault data + data.bus_fault.resize(1); + + data.bus_fault[0].bus_id = 2; + data.bus_fault[0].R = 0.0; + data.bus_fault[0].X = 1e-5; + data.bus_fault[0].status = false; + + // + // Instantiate system + // + + SystemModel sys(data); sys.allocate(); + // Get access to fault 0 + auto* fault = sys.getBusFault(0); + real_type dt = 1.0 / 4.0 / 60.0; std::vector output; auto output_cb = [&](real_type t) { - std::vector& yval = sys.y(); + std::vector& y_val = sys.y(); output.push_back(OutputData{t, - 1.0 + yval[5], - 1.0 + yval[26], - std::sqrt(yval[0] * yval[0] + yval[1] * yval[1]), - std::sqrt(yval[2] * yval[2] + yval[3] * yval[3])}); + 1.0 + y_val[5], + 1.0 + y_val[26], + std::sqrt(y_val[0] * y_val[0] + y_val[1] * y_val[1]), + std::sqrt(y_val[2] * y_val[2] + y_val[3] * y_val[3])}); }; // Set up simulation @@ -136,13 +243,13 @@ int main() ida.runSimulation(1.0, nout, output_cb); // Introduce fault to ground and run for 0.1s - fault.setStatus(1); + fault->setStatus(true); ida.initializeSimulation(1.0, false); nout = static_cast(std::round((1.1 - 1.0) / dt)); ida.runSimulation(1.1, nout, output_cb); // Clear fault and run until t = 10s. - fault.setStatus(0); + fault->setStatus(false); ida.initializeSimulation(1.1, false); nout = static_cast(std::round((10.0 - 1.1) / dt)); ida.runSimulation(10.0, nout, output_cb); @@ -165,11 +272,11 @@ int main() for (index_type i = 0; i < output.size(); ++i) { - OutputData ref{reference_solution[i + 1][0], - reference_solution[i + 1][1], - reference_solution[i + 1][2], - reference_solution[i + 1][4], - reference_solution[i + 1][5]}; + OutputData ref{Example2::reference_solution[i + 1][0], + Example2::reference_solution[i + 1][1], + Example2::reference_solution[i + 1][2], + Example2::reference_solution[i + 1][4], + Example2::reference_solution[i + 1][5]}; OutputData out_data = output[i]; out << out_data << '\n'; @@ -183,7 +290,7 @@ int main() } // fileout.close(); - std::cout << "Worst error " << worst_error + std::cout << "Max error " << worst_error << " at time t = " << worst_error_time << "\n"; std::cout << "\n\nComplete in " << (stop - start) / CLOCKS_PER_SEC << " seconds\n"; diff --git a/examples/PhasorDynamics/Example2/example2.hpp b/examples/PhasorDynamics/Example2/example2.hpp index 19b432eea..adf72f723 100644 --- a/examples/PhasorDynamics/Example2/example2.hpp +++ b/examples/PhasorDynamics/Example2/example2.hpp @@ -9,2405 +9,2409 @@ // Columns: // Time, Gen 2 #1 Speed, Gen 3 #1 Speed, Bus 1 V pu, Bus 2 V pu, Bus 3 V pu -std::vector> reference_solution = { - {0, 1, 1, 1.059999943, 1.059997797, 0.969999611}, - {0.004167, 0.99999994, 0.99999994, 1.059999943, 1.059997797, 0.969999611}, - {0.008333, 0.999999881, 0.99999994, 1.059999943, 1.059997797, 0.969999611}, - {0.0125, 0.999999821, 0.99999994, 1.059999943, 1.059997797, 0.969999611}, - {0.016667, 0.999999762, 0.999999881, 1.059999943, 1.059997797, 0.969999611}, - {0.020833, 0.999999702, 0.999999881, 1.059999943, 1.059997797, 0.969999611}, - {0.025, 0.999999642, 0.999999881, 1.059999943, 1.059997797, 0.969999611}, - {0.029167, 0.999999642, 0.999999881, 1.059999943, 1.059997797, 0.969999611}, - {0.033333, 0.999999583, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, - {0.0375, 0.999999583, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, - {0.041667, 0.999999523, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, - {0.045833, 0.999999523, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, - {0.05, 0.999999523, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, - {0.054167, 0.999999464, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, - {0.058333, 0.999999464, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, - {0.0625, 0.999999464, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, - {0.066667, 0.999999464, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, - {0.070833, 0.999999464, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, - {0.075, 0.999999464, 0.999999821, 1.059999943, 1.059996843, 0.969999015}, - {0.079167, 0.999999404, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.083333, 0.999999404, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.0875, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.091667, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.095833, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.1, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.104167, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.108333, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.1125, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.116667, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.120833, 0.999999404, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.125, 0.999999404, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.129167, 0.999999404, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.133333, 0.999999464, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.1375, 0.999999464, 0.999999821, 1.059999943, 1.059996843, 0.969999015}, - {0.141667, 0.999999464, 0.999999821, 1.059999943, 1.059996843, 0.969999015}, - {0.145833, 0.999999523, 0.999999821, 1.059999943, 1.059996843, 0.969999015}, - {0.15, 0.999999523, 0.999999821, 1.059999943, 1.059996843, 0.969999015}, - {0.154167, 0.999999583, 0.999999821, 1.059999943, 1.059996843, 0.969999015}, - {0.158333, 0.999999642, 0.999999881, 1.059999943, 1.059996843, 0.969999015}, - {0.1625, 0.999999642, 0.999999881, 1.059999943, 1.059996843, 0.969999015}, - {0.166667, 0.999999702, 0.999999881, 1.059999943, 1.059996843, 0.969999015}, - {0.170833, 0.999999702, 0.999999881, 1.059999943, 1.059996843, 0.969999015}, - {0.175, 0.999999762, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.179167, 0.999999762, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.183333, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.1875, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.191667, 0.999999881, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.195833, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.2, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.204167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.208333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.2125, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.216667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.220833, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.225, 1.000000119, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.229167, 1.000000119, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.233333, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.2375, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.241667, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.245833, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.25, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.254167, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.258333, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.2625, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.266667, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.270833, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.275, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.279167, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.283333, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.2875, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.291667, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.295833, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.3, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.304167, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.308333, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.3125, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.316667, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.320833, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.325, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.329167, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.333333, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.3375, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.341667, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.345833, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.35, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.354167, 1.000000238, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.358333, 1.000000238, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.3625, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.366667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.370833, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.375, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.379167, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.383333, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.3875, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.391667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.395833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.4, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.404167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.408333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.4125, 0.99999994, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.416667, 0.99999994, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.420833, 0.99999994, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.425, 0.99999994, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.429167, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.433333, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.4375, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.441667, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.445833, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.45, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.454167, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.458333, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.4625, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.466667, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.470833, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.475, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.479167, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.483333, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.4875, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.491667, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.495833, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.5, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.504167, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.508333, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.5125, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.516667, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.520833, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.525, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.529167, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.533333, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.5375, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.541667, 0.999999881, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.545833, 0.999999881, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.55, 0.999999881, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.554167, 0.999999881, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.558333, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.5625, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.566667, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.570833, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.575, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.579167, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.583333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.5875, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.591667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.595833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.6, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.604167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.608333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.6125, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.616667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.620833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.625, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.629167, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.633333, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.6375, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.641667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.645833, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.65, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.654167, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.658333, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.6625, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.666667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.670833, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.675, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.679167, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.683333, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.6875, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.691667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.695833, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.7, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.704167, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.708333, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.7125, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.716667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.720833, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.725, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.729167, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.733333, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.7375, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.741667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.745833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.75, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.754167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.758333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.7625, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.766667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.770833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.775, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.779167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.783333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.7875, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.791667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.795833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.8, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.804167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.808333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.8125, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.816667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.820833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.825, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.829167, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.833333, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.8375, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.841667, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.845833, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.85, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.854167, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.858333, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.8625, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.866667, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.870833, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.875, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.879167, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.883333, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.8875, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.891667, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.895833, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.9, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.904167, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.908333, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.9125, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.916667, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.920833, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.925, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.929167, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.933333, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.9375, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.941667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.945833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.95, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.954167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.958333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.9625, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.966667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.970833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.975, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.979167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.983333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.9875, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.991667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.995833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {1, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {1.004167, 1.000062704, 1.000325799, 1.059999943, 0.820292711, 0.000147394}, - {1.008333, 1.000121474, 1.00065136, 1.059999943, 0.818987548, 0.000146861}, - {1.0125, 1.000176668, 1.00097692, 1.059999943, 0.81781584, 0.000146359}, - {1.016667, 1.000228524, 1.001302361, 1.059999943, 0.816757917, 0.000145887}, - {1.020833, 1.000277519, 1.001627564, 1.059999943, 0.815796912, 0.000145443}, - {1.025, 1.000323892, 1.001952767, 1.059999943, 0.814918101, 0.000145025}, - {1.029167, 1.000367641, 1.00227797, 1.059999943, 0.814109504, 0.000144631}, - {1.033333, 1.000409126, 1.002602816, 1.059999943, 0.813361049, 0.000144261}, - {1.0375, 1.000448585, 1.002927661, 1.059999943, 0.812663555, 0.000143912}, - {1.041667, 1.000486016, 1.003252506, 1.059999943, 0.812009811, 0.000143584}, - {1.045833, 1.000521541, 1.003576994, 1.059999943, 0.811393619, 0.000143274}, - {1.05, 1.000555277, 1.003901601, 1.059999943, 0.810793042, 0.000142972}, - {1.054167, 1.000587344, 1.004225969, 1.059999943, 0.810252428, 0.000142705}, - {1.058333, 1.000617743, 1.004550219, 1.059999943, 0.809719265, 0.000142443}, - {1.0625, 1.000646591, 1.004874468, 1.059999943, 0.809195876, 0.000142186}, - {1.066667, 1.000674009, 1.005198598, 1.059999943, 0.808710635, 0.000141957}, - {1.070833, 1.000699759, 1.00552249, 1.059999943, 0.808222353, 0.000141725}, - {1.075, 1.000724196, 1.005846381, 1.059999943, 0.807762384, 0.000141516}, - {1.079167, 1.000747085, 1.006170154, 1.059999943, 0.807305813, 0.000141309}, - {1.083333, 1.000768542, 1.006493688, 1.059999943, 0.806858957, 0.000141109}, - {1.0875, 1.000788689, 1.006817341, 1.059999943, 0.806420326, 0.000140917}, - {1.091667, 1.000807405, 1.007140756, 1.059999943, 0.805988908, 0.000140729}, - {1.095833, 1.00082469, 1.007463932, 1.059999943, 0.805563867, 0.000140547}, - {1.1, 1.000840545, 1.007787228, 1.059999943, 0.80514407, 0.00014037}, - {1.104167, 1.000855803, 1.007198334, 1.059999943, 1.032057166, 0.922393143}, - {1.108333, 1.000866055, 1.006641626, 1.059999943, 1.033476114, 0.924479365}, - {1.1125, 1.000872135, 1.006110191, 1.059999943, 1.034744263, 0.926455021}, - {1.116667, 1.000874519, 1.005599022, 1.059999943, 1.035876513, 0.928305149}, - {1.120833, 1.000873804, 1.005103946, 1.059999943, 1.036886334, 0.930021584}, - {1.125, 1.000870109, 1.004621744, 1.059999943, 1.03778708, 0.93160224}, - {1.129167, 1.00086391, 1.004150152, 1.059999943, 1.038589478, 0.933047175}, - {1.133333, 1.000855207, 1.003687382, 1.059999943, 1.039303541, 0.934358716}, - {1.1375, 1.00084424, 1.003232241, 1.059999943, 1.039938688, 0.935541749}, - {1.141667, 1.000831127, 1.002783775, 1.059999943, 1.040502787, 0.936601043}, - {1.145833, 1.000815868, 1.002342105, 1.059999943, 1.041002631, 0.937542081}, - {1.15, 1.000798583, 1.001906633, 1.059999943, 1.041444898, 0.938371241}, - {1.154167, 1.000779152, 1.001477718, 1.059999943, 1.041862607, 0.939153254}, - {1.158333, 1.000757694, 1.001055717, 1.059999943, 1.042177677, 0.939717412}, - {1.1625, 1.00073421, 1.000641108, 1.059999943, 1.042499781, 0.940296471}, - {1.166667, 1.00070858, 1.000234604, 1.059999943, 1.04273808, 0.940686703}, - {1.170833, 1.000681043, 0.999836862, 1.059999943, 1.042981267, 0.941086531}, - {1.175, 1.000651479, 0.999448657, 1.059999943, 1.043155313, 0.941323221}, - {1.179167, 1.000619888, 0.999070704, 1.059999943, 1.043332696, 0.94156599}, - {1.183333, 1.00058639, 0.998704076, 1.059999943, 1.043452263, 0.941668034}, - {1.1875, 1.000550866, 0.998349309, 1.059999943, 1.043573976, 0.941773772}, - {1.191667, 1.000513554, 0.998007417, 1.059999943, 1.04364717, 0.941758871}, - {1.195833, 1.000474334, 0.997679114, 1.059999943, 1.043721676, 0.941746056}, - {1.2, 1.000433326, 0.997365177, 1.059999943, 1.043755054, 0.941630721}, - {1.204167, 1.000390649, 0.997066259, 1.059999943, 1.043789148, 0.941516459}, - {1.208333, 1.000346303, 0.996783197, 1.059999943, 1.043788195, 0.941316426}, - {1.2125, 1.000300407, 0.996516407, 1.059999943, 1.043780208, 0.941099048}, - {1.216667, 1.000253201, 0.996266425, 1.059999943, 1.043764353, 0.940862536}, - {1.220833, 1.000204682, 0.996034026, 1.059999943, 1.04372108, 0.940563142}, - {1.225, 1.000154972, 0.995819211, 1.059999943, 1.043678045, 0.940263927}, - {1.229167, 1.000104189, 0.995622635, 1.059999943, 1.043612003, 0.939915836}, - {1.233333, 1.000052571, 0.995444477, 1.059999943, 1.043545961, 0.9395684}, - {1.2375, 1.000000119, 0.995284915, 1.059999943, 1.043460965, 0.939185202}, - {1.241667, 0.999947131, 0.99514401, 1.059999943, 1.043376088, 0.938803017}, - {1.245833, 0.999893785, 0.995021999, 1.059999943, 1.043275952, 0.938397586}, - {1.25, 0.999840021, 0.994918644, 1.059999943, 1.043175936, 0.937993705}, - {1.254167, 0.999786258, 0.994834065, 1.059999943, 1.043063998, 0.937578082}, - {1.258333, 0.999732554, 0.994768023, 1.059999943, 1.042952418, 0.937164783}, - {1.2625, 0.999679089, 0.99472034, 1.059999943, 1.042832136, 0.936750293}, - {1.266667, 0.999625981, 0.994690776, 1.059999943, 1.042712331, 0.936338663}, - {1.270833, 0.999573588, 0.994678915, 1.059999943, 1.042586803, 0.935935795}, - {1.275, 0.999521911, 0.994684458, 1.059999943, 1.042461753, 0.935536265}, - {1.279167, 0.999471188, 0.994706929, 1.059999943, 1.042333841, 0.935154021}, - {1.283333, 0.999421597, 0.99474597, 1.059999943, 1.042206645, 0.934775829}, - {1.2875, 0.999373257, 0.994800925, 1.059999943, 1.042078972, 0.934422433}, - {1.291667, 0.999326408, 0.994871318, 1.059999943, 1.041952252, 0.934073329}, - {1.295833, 0.999281168, 0.994956493, 1.059999943, 1.04182744, 0.933755577}, - {1.3, 0.999237716, 0.995055914, 1.059999943, 1.041703463, 0.933442354}, - {1.304167, 0.999196231, 0.995168865, 1.059999943, 1.041583538, 0.933165789}, - {1.308333, 0.999156773, 0.99529469, 1.059999943, 1.041464686, 0.932893932}, - {1.3125, 0.99911952, 0.995432615, 1.059999943, 1.041351557, 0.932662845}, - {1.316667, 0.999084651, 0.995582044, 1.059999943, 1.0412395, 0.932436347}, - {1.320833, 0.999052227, 0.995742023, 1.059999943, 1.041135073, 0.932253957}, - {1.325, 0.999022365, 0.995912075, 1.059999943, 1.041031599, 0.932075918}, - {1.329167, 0.998995245, 0.996091127, 1.059999943, 1.040937185, 0.931943953}, - {1.333333, 0.998970926, 0.996278644, 1.059999943, 1.040843606, 0.93181622}, - {1.3375, 0.998949409, 0.99647367, 1.059999943, 1.040760398, 0.931735754}, - {1.341667, 0.998930931, 0.996675611, 1.059999943, 1.040678024, 0.931658983}, - {1.345833, 0.998915493, 0.996883333, 1.059999943, 1.040607095, 0.931629896}, - {1.35, 0.998903096, 0.997096419, 1.059999943, 1.040536761, 0.931604028}, - {1.354167, 0.998893857, 0.997313857, 1.059999943, 1.040478826, 0.931625366}, - {1.358333, 0.998887837, 0.997534931, 1.059999943, 1.040421486, 0.931649446}, - {1.3625, 0.998884976, 0.997758746, 1.059999943, 1.04037714, 0.931719601}, - {1.366667, 0.998885393, 0.997984767, 1.059999943, 1.040333271, 0.931791902}, - {1.370833, 0.998889029, 0.99821198, 1.059999943, 1.040302992, 0.931908667}, - {1.375, 0.998895884, 0.998439848, 1.059999943, 1.04027307, 0.932026923}, - {1.379167, 0.998906016, 0.998667419, 1.059999943, 1.040257096, 0.932187438}, - {1.383333, 0.998919308, 0.998894155, 1.059999943, 1.04024148, 0.932348847}, - {1.3875, 0.998935759, 0.999119222, 1.059999943, 1.04023993, 0.932549894}, - {1.391667, 0.998955429, 0.999342144, 1.059999943, 1.040238619, 0.932751417}, - {1.395833, 0.998978078, 0.999561965, 1.059999943, 1.040251493, 0.932989478}, - {1.4, 0.999003768, 0.99977833, 1.059999943, 1.040264487, 0.933227539}, - {1.404167, 0.999032319, 0.999990404, 1.059999943, 1.040291786, 0.933498859}, - {1.408333, 0.999063849, 1.000197768, 1.059999943, 1.040318966, 0.933769703}, - {1.4125, 0.999098003, 1.000399709, 1.059999943, 1.040360212, 0.934070349}, - {1.416667, 0.999134898, 1.000595927, 1.059999943, 1.040401459, 0.934370279}, - {1.420833, 0.999174297, 1.000785589, 1.059999943, 1.040456295, 0.934696198}, - {1.425, 0.999216139, 1.000968456, 1.059999943, 1.040511131, 0.935021162}, - {1.429167, 0.999260247, 1.001143932, 1.059999943, 1.0405792, 0.935368419}, - {1.433333, 0.999306619, 1.001311779, 1.059999943, 1.040647149, 0.935714424}, - {1.4375, 0.999354899, 1.001471519, 1.059999943, 1.040727735, 0.936078966}, - {1.441667, 0.999405086, 1.001622796, 1.059999943, 1.040808201, 0.936442196}, - {1.445833, 0.999457002, 1.001765251, 1.059999943, 1.040900707, 0.936819971}, - {1.45, 0.999510527, 1.001898766, 1.059999943, 1.040993094, 0.937196553}, - {1.454167, 0.999565363, 1.002022862, 1.059999943, 1.041096687, 0.937583864}, - {1.458333, 0.999621451, 1.002137542, 1.059999943, 1.041200042, 0.937969863}, - {1.4625, 0.999678612, 1.002242565, 1.059999943, 1.041313887, 0.938363016}, - {1.466667, 0.999736667, 1.002337694, 1.059999943, 1.041427493, 0.938754976}, - {1.470833, 0.999795318, 1.00242281, 1.059999943, 1.041550517, 0.939150274}, - {1.475, 0.999854624, 1.002497911, 1.059999943, 1.041673303, 0.939544678}, - {1.479167, 0.999914169, 1.002563, 1.059999943, 1.041804552, 0.939938962}, - {1.483333, 0.999973893, 1.002618074, 1.059999943, 1.041935563, 0.940332353}, - {1.4875, 1.000033617, 1.002663016, 1.059999943, 1.042073965, 0.940722287}, - {1.491667, 1.000093102, 1.002697945, 1.059999943, 1.042212009, 0.941111684}, - {1.495833, 1.000152111, 1.002722979, 1.059999943, 1.042356133, 0.941494226}, - {1.5, 1.000210524, 1.002738118, 1.059999943, 1.042500138, 0.941876531}, - {1.504167, 1.000268221, 1.002743721, 1.059999943, 1.042649031, 0.94224906}, - {1.508333, 1.000325084, 1.002739787, 1.059999943, 1.042797565, 0.94262141}, - {1.5125, 1.000380635, 1.002726674, 1.059999943, 1.042949796, 0.942981184}, - {1.516667, 1.000434995, 1.002704382, 1.059999943, 1.043101668, 0.943341076}, - {1.520833, 1.000487924, 1.002673268, 1.059999943, 1.043255925, 0.943685651}, - {1.525, 1.000539184, 1.002633691, 1.059999943, 1.043409944, 0.944030523}, - {1.529167, 1.000588775, 1.002585888, 1.059999943, 1.043564916, 0.944357812}, - {1.533333, 1.000636339, 1.002530217, 1.059999943, 1.04371953, 0.944685459}, - {1.5375, 1.000681877, 1.002466917, 1.059999943, 1.043873787, 0.944993436}, - {1.541667, 1.00072515, 1.002396464, 1.059999943, 1.044027925, 0.94530189}, - {1.545833, 1.000766158, 1.002319217, 1.059999943, 1.044180274, 0.945588708}, - {1.55, 1.000804663, 1.002235413, 1.059999943, 1.044332385, 0.945876181}, - {1.554167, 1.000840664, 1.002145648, 1.059999943, 1.044481516, 0.946140409}, - {1.558333, 1.000873923, 1.002050281, 1.059999943, 1.044630408, 0.946405232}, - {1.5625, 1.000904441, 1.001949787, 1.059999943, 1.044775009, 0.946645617}, - {1.566667, 1.000932097, 1.001844525, 1.059999943, 1.044919491, 0.946886659}, - {1.570833, 1.000956893, 1.001735091, 1.059999943, 1.045058489, 0.94710207}, - {1.575, 1.000978589, 1.001621723, 1.059999943, 1.045197368, 0.947318256}, - {1.579167, 1.000997186, 1.001505017, 1.059999943, 1.045329809, 0.947508216}, - {1.583333, 1.001012683, 1.00138545, 1.059999943, 1.045461893, 0.947698712}, - {1.5875, 1.001025081, 1.001263499, 1.059999943, 1.045586586, 0.947862685}, - {1.591667, 1.00103426, 1.001139522, 1.059999943, 1.045711041, 0.948027253}, - {1.595833, 1.00104022, 1.001014113, 1.059999943, 1.04582727, 0.948165178}, - {1.6, 1.001043081, 1.000887513, 1.059999943, 1.04594326, 0.94830364}, - {1.604167, 1.001042604, 1.000760436, 1.059999943, 1.046050191, 0.948415816}, - {1.608333, 1.001038909, 1.000633121, 1.059999943, 1.046156883, 0.948528349}, - {1.6125, 1.001032114, 1.000506163, 1.059999943, 1.04625392, 0.948615313}, - {1.616667, 1.00102222, 1.00037992, 1.059999943, 1.046350837, 0.948702633}, - {1.620833, 1.001009107, 1.000254869, 1.059999943, 1.046437621, 0.948765159}, - {1.625, 1.000993013, 1.000131369, 1.059999943, 1.046524167, 0.948828101}, - {1.629167, 1.000973821, 1.000009775, 1.059999943, 1.046600223, 0.9488675}, - {1.633333, 1.000951767, 0.999890447, 1.059999943, 1.046676159, 0.948907197}, - {1.6375, 1.000926971, 0.99977386, 1.059999943, 1.046741486, 0.948924899}, - {1.641667, 1.000899315, 0.999660254, 1.059999943, 1.046806693, 0.94894284}, - {1.645833, 1.000869036, 0.999550045, 1.059999943, 1.046861053, 0.948940635}, - {1.65, 1.000836134, 0.999443412, 1.059999943, 1.046915293, 0.948938608}, - {1.654167, 1.000800848, 0.999340832, 1.059999943, 1.046958923, 0.948918402}, - {1.658333, 1.000763297, 0.999242425, 1.059999943, 1.047002435, 0.948898375}, - {1.6625, 1.000723481, 0.999148488, 1.059999943, 1.047035456, 0.948862374}, - {1.666667, 1.00068152, 0.9990592, 1.059999943, 1.047068477, 0.948826551}, - {1.670833, 1.00063777, 0.9989748, 1.059999943, 1.047091246, 0.94877708}, - {1.675, 1.000592232, 0.998895526, 1.059999943, 1.047114015, 0.948727787}, - {1.679167, 1.000545025, 0.998821437, 1.059999943, 1.047126889, 0.948667228}, - {1.683333, 1.000496387, 0.998752713, 1.059999943, 1.047140002, 0.948606968}, - {1.6875, 1.000446439, 0.998689532, 1.059999943, 1.047143579, 0.948537946}, - {1.691667, 1.000395298, 0.998631895, 1.059999943, 1.047147393, 0.948469162}, - {1.695833, 1.000343204, 0.998579919, 1.059999943, 1.047142267, 0.94839412}, - {1.7, 1.000290275, 0.998533607, 1.059999943, 1.04713738, 0.948319435}, - {1.704167, 1.00023663, 0.998493075, 1.059999943, 1.047124386, 0.948240876}, - {1.708333, 1.000182509, 0.998458266, 1.059999943, 1.04711163, 0.948162794}, - {1.7125, 1.00012815, 0.998429179, 1.059999943, 1.047091365, 0.948083282}, - {1.716667, 1.000073671, 0.998405755, 1.059999943, 1.047071218, 0.948004186}, - {1.720833, 1.000019193, 0.998387992, 1.059999943, 1.047044516, 0.947925985}, - {1.725, 0.999964893, 0.998375833, 1.059999943, 1.047018051, 0.94784826}, - {1.729167, 0.999910951, 0.998369098, 1.059999943, 1.046985745, 0.947773576}, - {1.733333, 0.999857545, 0.998367786, 1.059999943, 1.046953559, 0.947699487}, - {1.7375, 0.999804854, 0.99837172, 1.059999943, 1.046916485, 0.947630346}, - {1.741667, 0.999752998, 0.998380721, 1.059999943, 1.046879649, 0.9475618}, - {1.745833, 0.999702215, 0.998394728, 1.059999943, 1.046838641, 0.947500169}, - {1.75, 0.999652505, 0.998413563, 1.059999943, 1.046797872, 0.947439015}, - {1.754167, 0.999604166, 0.998436928, 1.059999943, 1.046753883, 0.947386384}, - {1.758333, 0.999557257, 0.998464823, 1.059999943, 1.046710134, 0.94733429}, - {1.7625, 0.999511898, 0.99849689, 1.059999943, 1.046664119, 0.94729203}, - {1.766667, 0.999468327, 0.99853301, 1.059999943, 1.046618223, 0.947250366}, - {1.770833, 0.999426544, 0.998572886, 1.059999943, 1.046570897, 0.94721967}, - {1.775, 0.999386728, 0.998616397, 1.059999943, 1.04652369, 0.94718951}, - {1.779167, 0.999348998, 0.998663187, 1.059999943, 1.046476007, 0.94717133}, - {1.783333, 0.999313474, 0.998713076, 1.059999943, 1.046428561, 0.947153628}, - {1.7875, 0.999280155, 0.998765886, 1.059999943, 1.046381354, 0.947148621}, - {1.791667, 0.99924922, 0.998821259, 1.059999943, 1.046334267, 0.947143972}, - {1.795833, 0.999220729, 0.998879015, 1.059999943, 1.04628849, 0.947152495}, - {1.8, 0.999194741, 0.998938859, 1.059999943, 1.046242714, 0.947161376}, - {1.804167, 0.999171317, 0.999000549, 1.059999943, 1.046199083, 0.947183728}, - {1.808333, 0.999150515, 0.999063849, 1.059999943, 1.046155453, 0.947206259}, - {1.8125, 0.999132395, 0.99912852, 1.059999943, 1.046114683, 0.947242379}, - {1.816667, 0.999116957, 0.999194264, 1.059999943, 1.046073914, 0.947278678}, - {1.820833, 0.999104321, 0.999260843, 1.059999943, 1.04603672, 0.947328329}, - {1.825, 0.999094367, 0.999328017, 1.059999943, 1.045999646, 0.947378159}, - {1.829167, 0.999087214, 0.999395549, 1.059999943, 1.045966744, 0.947441041}, - {1.833333, 0.999082804, 0.99946326, 1.059999943, 1.045933962, 0.947503924}, - {1.8375, 0.999081135, 0.999530792, 1.059999943, 1.045906067, 0.947579503}, - {1.841667, 0.999082267, 0.999598026, 1.059999943, 1.045878291, 0.947655022}, - {1.845833, 0.999086082, 0.999664605, 1.059999943, 1.04585588, 0.947742462}, - {1.85, 0.999092579, 0.999730527, 1.059999943, 1.045833588, 0.947829902}, - {1.854167, 0.999101698, 0.999795437, 1.059999943, 1.045817137, 0.947928607}, - {1.858333, 0.999113441, 0.999859154, 1.059999943, 1.045800805, 0.948027134}, - {1.8625, 0.999127686, 0.999921501, 1.059999943, 1.045790911, 0.948136032}, - {1.866667, 0.999144435, 0.999982357, 1.059999943, 1.045781016, 0.94824481}, - {1.870833, 0.999163568, 1.000041485, 1.059999943, 1.045777917, 0.948362947}, - {1.875, 0.999185085, 1.000098825, 1.059999943, 1.045774817, 0.948480964}, - {1.879167, 0.999208808, 1.000154018, 1.059999943, 1.045778871, 0.948607385}, - {1.883333, 0.999234676, 1.000207067, 1.059999943, 1.045782804, 0.948733509}, - {1.8875, 0.999262571, 1.000257969, 1.059999943, 1.04579401, 0.948866963}, - {1.891667, 0.999292433, 1.000306368, 1.059999943, 1.045805335, 0.949000239}, - {1.895833, 0.999324083, 1.000352263, 1.059999943, 1.045823932, 0.949139595}, - {1.9, 0.999357522, 1.000395656, 1.059999943, 1.045842528, 0.949278772}, - {1.904167, 0.999392569, 1.000436306, 1.059999943, 1.045868516, 0.949423015}, - {1.908333, 0.999429107, 1.000474215, 1.059999943, 1.045894504, 0.94956696}, - {1.9125, 0.999466956, 1.000509381, 1.059999943, 1.045927644, 0.94971478}, - {1.916667, 0.999506116, 1.000541568, 1.059999943, 1.045960903, 0.949862361}, - {1.920833, 0.999546349, 1.000570893, 1.059999943, 1.046001196, 0.950012624}, - {1.925, 0.999587536, 1.000597358, 1.059999943, 1.046041489, 0.950162709}, - {1.929167, 0.999629557, 1.000620842, 1.059999943, 1.046088696, 0.950314343}, - {1.933333, 0.999672294, 1.000641465, 1.059999943, 1.046135783, 0.950465679}, - {1.9375, 0.999715626, 1.000658989, 1.059999943, 1.046189427, 0.950617552}, - {1.941667, 0.999759376, 1.000673771, 1.059999943, 1.046242952, 0.950769186}, - {1.945833, 0.999803364, 1.000685453, 1.059999943, 1.046302676, 0.950920165}, - {1.95, 0.999847531, 1.000694394, 1.059999943, 1.046362281, 0.951070964}, - {1.954167, 0.999891698, 1.000700474, 1.059999943, 1.046427488, 0.951220155}, - {1.958333, 0.999935806, 1.000703812, 1.059999943, 1.046492577, 0.951369166}, - {1.9625, 0.999979556, 1.000704408, 1.059999943, 1.046562791, 0.951515555}, - {1.966667, 1.000023007, 1.000702381, 1.059999943, 1.046632886, 0.951661825}, - {1.970833, 1.000065923, 1.000697732, 1.059999943, 1.046707511, 0.951804578}, - {1.975, 1.000108123, 1.000690579, 1.059999943, 1.046782017, 0.951947272}, - {1.979167, 1.000149608, 1.000681162, 1.059999943, 1.046860218, 0.952085614}, - {1.983333, 1.000190258, 1.00066936, 1.059999943, 1.046938419, 0.952223837}, - {1.9875, 1.000229836, 1.000655293, 1.059999943, 1.04701972, 0.952357054}, - {1.991667, 1.00026834, 1.0006392, 1.059999943, 1.047100902, 0.952490211}, - {1.995833, 1.000305653, 1.0006212, 1.059999943, 1.047184587, 0.952617645}, - {2, 1.000341535, 1.000601172, 1.059999943, 1.047268033, 0.95274508}, - {2.004167, 1.000376105, 1.000579476, 1.059999943, 1.047353268, 0.952866316}, - {2.008333, 1.000409007, 1.000556231, 1.059999943, 1.047438383, 0.952987432}, - {2.0125, 1.000440478, 1.000531435, 1.059999943, 1.047524452, 0.953101993}, - {2.016667, 1.000470161, 1.000505209, 1.059999943, 1.047610402, 0.953216493}, - {2.020833, 1.000498056, 1.000477791, 1.059999943, 1.04769671, 0.95332408}, - {2.025, 1.000524282, 1.0004493, 1.059999943, 1.047782779, 0.953431606}, - {2.029167, 1.000548482, 1.000419736, 1.059999943, 1.047868609, 0.953531981}, - {2.033333, 1.000570774, 1.000389457, 1.059999943, 1.047954082, 0.953632295}, - {2.0375, 1.00059104, 1.000358343, 1.059999943, 1.048038721, 0.953725338}, - {2.041667, 1.000609279, 1.000326633, 1.059999943, 1.048123121, 0.953818321}, - {2.045833, 1.000625491, 1.000294566, 1.059999943, 1.048205853, 0.953904033}, - {2.05, 1.000639558, 1.000262022, 1.059999943, 1.048288465, 0.953989685}, - {2.054167, 1.000651479, 1.000229359, 1.059999943, 1.048368931, 0.954068124}, - {2.058333, 1.000661254, 1.000196576, 1.059999943, 1.048449159, 0.954146564}, - {2.0625, 1.000668883, 1.000163794, 1.059999943, 1.048526645, 0.954217851}, - {2.066667, 1.000674367, 1.000131249, 1.059999943, 1.048604012, 0.954289198}, - {2.070833, 1.000677705, 1.000098944, 1.059999943, 1.04867816, 0.95435369}, - {2.075, 1.000678897, 1.000066876, 1.059999943, 1.048752069, 0.954418182}, - {2.079167, 1.000677943, 1.000035405, 1.059999943, 1.048822403, 0.954476118}, - {2.083333, 1.000674844, 1.000004411, 1.059999943, 1.048892617, 0.954534054}, - {2.0875, 1.000669718, 0.999974191, 1.059999943, 1.048958778, 0.95458585}, - {2.091667, 1.000662565, 0.999944627, 1.059999943, 1.04902482, 0.954637706}, - {2.095833, 1.000653505, 0.999915957, 1.059999943, 1.049086452, 0.954683781}, - {2.1, 1.000642419, 0.999888122, 1.059999943, 1.049148083, 0.954729974}, - {2.104167, 1.000629425, 0.99986136, 1.059999943, 1.049205065, 0.954770863}, - {2.108333, 1.000614524, 0.99983561, 1.059999943, 1.049262047, 0.954811871}, - {2.1125, 1.000597954, 0.999810994, 1.059999943, 1.049314141, 0.954848111}, - {2.116667, 1.000579715, 0.999787509, 1.059999943, 1.049366236, 0.95488447}, - {2.120833, 1.000559807, 0.999765277, 1.059999943, 1.049413323, 0.954916656}, - {2.125, 1.000538349, 0.999744296, 1.059999943, 1.049460411, 0.954948962}, - {2.129167, 1.000515461, 0.999724627, 1.059999943, 1.049502373, 0.954977632}, - {2.133333, 1.000491142, 0.999706268, 1.059999943, 1.049544454, 0.955006421}, - {2.1375, 1.000465512, 0.999689341, 1.059999943, 1.049581409, 0.955032229}, - {2.141667, 1.00043869, 0.999673724, 1.059999943, 1.049618363, 0.955058157}, - {2.145833, 1.000410795, 0.999659538, 1.059999943, 1.049650192, 0.955081642}, - {2.15, 1.000381947, 0.999646723, 1.059999943, 1.04968214, 0.955105186}, - {2.154167, 1.000352144, 0.999635339, 1.059999943, 1.049709082, 0.955126941}, - {2.158333, 1.000321388, 0.999625385, 1.059999943, 1.049736142, 0.955148816}, - {2.1625, 1.000290155, 0.999616802, 1.059999943, 1.049758196, 0.95516938}, - {2.166667, 1.000258207, 0.999609649, 1.059999943, 1.049780369, 0.955190122}, - {2.170833, 1.000225663, 0.999603808, 1.059999943, 1.049797893, 0.95521003}, - {2.175, 1.000192881, 0.999599397, 1.059999943, 1.049815416, 0.955230057}, - {2.179167, 1.00015974, 0.999596238, 1.059999943, 1.04982841, 0.955249846}, - {2.183333, 1.000126481, 0.99959439, 1.059999943, 1.049841523, 0.955269754}, - {2.1875, 1.000093102, 0.999593854, 1.059999943, 1.049850345, 0.9552899}, - {2.191667, 1.000059724, 0.99959451, 1.059999943, 1.049859285, 0.955310106}, - {2.195833, 1.000026464, 0.999596357, 1.059999943, 1.049864173, 0.955330908}, - {2.2, 0.999993443, 0.999599338, 1.059999943, 1.04986918, 0.95535183}, - {2.204167, 0.99996078, 0.999603391, 1.059999943, 1.049870491, 0.955373764}, - {2.208333, 0.999928474, 0.999608517, 1.059999943, 1.049871922, 0.955395818}, - {2.2125, 0.999896765, 0.999614656, 1.059999943, 1.049870014, 0.955419123}, - {2.216667, 0.999865592, 0.999621749, 1.059999943, 1.049868107, 0.955442548}, - {2.220833, 0.999835193, 0.999629676, 1.059999943, 1.049863338, 0.955467582}, - {2.225, 0.99980551, 0.999638438, 1.059999943, 1.04985857, 0.955492675}, - {2.229167, 0.999776721, 0.999648035, 1.059999943, 1.049851298, 0.955519617}, - {2.233333, 0.999748886, 0.999658287, 1.059999943, 1.049844027, 0.955546558}, - {2.2375, 0.999722064, 0.999669194, 1.059999943, 1.049834609, 0.955575585}, - {2.241667, 0.999696374, 0.999680698, 1.059999943, 1.049825192, 0.955604613}, - {2.245833, 0.999671817, 0.999692738, 1.059999943, 1.049814105, 0.955635786}, - {2.25, 0.999648452, 0.999705255, 1.059999943, 1.049803138, 0.955667019}, - {2.254167, 0.999626398, 0.999718189, 1.059999943, 1.04979074, 0.955700517}, - {2.258333, 0.999605656, 0.999731421, 1.059999943, 1.049778461, 0.955734015}, - {2.2625, 0.999586284, 0.999744952, 1.059999943, 1.049765348, 0.955769777}, - {2.266667, 0.999568343, 0.99975878, 1.059999943, 1.049752116, 0.95580554}, - {2.270833, 0.999551892, 0.999772727, 1.059999943, 1.049738646, 0.955843627}, - {2.275, 0.999536932, 0.999786794, 1.059999943, 1.049725056, 0.955881715}, - {2.279167, 0.999523461, 0.99980098, 1.059999943, 1.049711585, 0.955922067}, - {2.283333, 0.9995116, 0.999815106, 1.059999943, 1.049698114, 0.95596242}, - {2.2875, 0.999501228, 0.999829233, 1.059999943, 1.049685001, 0.956004977}, - {2.291667, 0.999492526, 0.99984324, 1.059999943, 1.049672008, 0.956047535}, - {2.295833, 0.999485373, 0.999857128, 1.059999943, 1.049659848, 0.956092179}, - {2.3, 0.999479771, 0.999870837, 1.059999943, 1.049647689, 0.956136823}, - {2.304167, 0.999475837, 0.999884367, 1.059999943, 1.049636841, 0.956183434}, - {2.308333, 0.999473453, 0.99989754, 1.059999943, 1.049625993, 0.956230044}, - {2.3125, 0.999472618, 0.999910474, 1.059999943, 1.049616814, 0.956278563}, - {2.316667, 0.999473393, 0.99992305, 1.059999943, 1.049607515, 0.956327021}, - {2.320833, 0.999475658, 0.999935269, 1.059999943, 1.049600363, 0.956377208}, - {2.325, 0.999479473, 0.999947071, 1.059999943, 1.04959321, 0.956427336}, - {2.329167, 0.999484777, 0.999958456, 1.059999943, 1.049588203, 0.956479013}, - {2.333333, 0.999491513, 0.999969423, 1.059999943, 1.049583435, 0.95653069}, - {2.3375, 0.999499619, 0.999979854, 1.059999943, 1.049581051, 0.956583738}, - {2.341667, 0.999509156, 0.999989808, 1.059999943, 1.049578905, 0.956636727}, - {2.345833, 0.999519944, 0.999999285, 1.059999943, 1.049579382, 0.956690967}, - {2.35, 0.999532104, 1.000008225, 1.059999943, 1.049579978, 0.956745088}, - {2.354167, 0.999545395, 1.00001657, 1.059999943, 1.049583673, 0.956800282}, - {2.358333, 0.999559939, 1.000024438, 1.059999943, 1.049587369, 0.956855416}, - {2.3625, 0.999575555, 1.00003171, 1.059999943, 1.049594283, 0.956911385}, - {2.366667, 0.999592185, 1.000038385, 1.059999943, 1.049601197, 0.956967354}, - {2.370833, 0.999609828, 1.000044584, 1.059999943, 1.049611449, 0.957023919}, - {2.375, 0.999628425, 1.000050187, 1.059999943, 1.049621701, 0.957080424}, - {2.379167, 0.999647856, 1.000055313, 1.059999943, 1.04963541, 0.957137406}, - {2.383333, 0.999668062, 1.000059724, 1.059999943, 1.049649119, 0.957194388}, - {2.3875, 0.999688923, 1.000063777, 1.059999943, 1.049666286, 0.957251668}, - {2.391667, 0.9997105, 1.000067115, 1.059999943, 1.049683571, 0.957308888}, - {2.395833, 0.999732614, 1.000070095, 1.059999943, 1.049704194, 0.957366169}, - {2.4, 0.999755204, 1.000072479, 1.059999943, 1.049724817, 0.957423508}, - {2.404167, 0.999778271, 1.000074387, 1.059999943, 1.049748898, 0.957480788}, - {2.408333, 0.999801636, 1.000075817, 1.059999943, 1.049772978, 0.957538009}, - {2.4125, 0.999825239, 1.000076771, 1.059999943, 1.049800277, 0.95759505}, - {2.416667, 0.999849081, 1.000077248, 1.059999943, 1.049827695, 0.957652092}, - {2.420833, 0.999873042, 1.000077367, 1.059999943, 1.049858212, 0.957708836}, - {2.425, 0.999897003, 1.000077009, 1.059999943, 1.04988873, 0.95776552}, - {2.429167, 0.999920964, 1.000076294, 1.059999943, 1.049922347, 0.957821786}, - {2.433333, 0.999944866, 1.000075221, 1.059999943, 1.049955845, 0.957877994}, - {2.4375, 0.999968529, 1.000073791, 1.059999943, 1.049992204, 0.957933664}, - {2.441667, 0.999991953, 1.000072002, 1.059999943, 1.050028443, 0.957989335}, - {2.445833, 1.00001514, 1.000069976, 1.059999943, 1.050067425, 0.95804435}, - {2.45, 1.000037909, 1.000067711, 1.059999943, 1.050106287, 0.958099365}, - {2.454167, 1.000060201, 1.000065088, 1.059999943, 1.050147414, 0.958153665}, - {2.458333, 1.000082016, 1.000062346, 1.059999943, 1.050188541, 0.958207965}, - {2.4625, 1.000103235, 1.000059366, 1.059999943, 1.050231814, 0.95826143}, - {2.466667, 1.000123858, 1.000056148, 1.059999943, 1.050274968, 0.958314896}, - {2.470833, 1.000143886, 1.00005281, 1.059999943, 1.05031991, 0.958367527}, - {2.475, 1.000163078, 1.000049353, 1.059999943, 1.050364733, 0.958420157}, - {2.479167, 1.000181556, 1.000045776, 1.059999943, 1.050411105, 0.958471894}, - {2.483333, 1.000199199, 1.000042081, 1.059999943, 1.050457358, 0.958523631}, - {2.4875, 1.000216007, 1.000038385, 1.059999943, 1.050504684, 0.958574474}, - {2.491667, 1.000231862, 1.000034571, 1.059999943, 1.050552011, 0.958625317}, - {2.495833, 1.000246763, 1.000030875, 1.059999943, 1.050600171, 0.958675206}, - {2.5, 1.00026083, 1.000027061, 1.059999943, 1.050648332, 0.958725095}, - {2.504167, 1.000273705, 1.000023246, 1.059999943, 1.05069685, 0.95877403}, - {2.508333, 1.000285625, 1.000019431, 1.059999943, 1.050745368, 0.958822966}, - {2.5125, 1.000296593, 1.000015616, 1.059999943, 1.050794125, 0.958871007}, - {2.516667, 1.000306368, 1.00001204, 1.059999943, 1.050842762, 0.958919048}, - {2.520833, 1.00031507, 1.000008345, 1.059999943, 1.050891161, 0.958966136}, - {2.525, 1.0003227, 1.000004768, 1.059999943, 1.050939679, 0.959013283}, - {2.529167, 1.000329256, 1.000001431, 1.059999943, 1.050987601, 0.959059477}, - {2.533333, 1.00033462, 0.999998033, 1.059999943, 1.051035523, 0.95910567}, - {2.5375, 1.000338912, 0.999994814, 1.059999943, 1.05108285, 0.95915097}, - {2.541667, 1.000342131, 0.999991655, 1.059999943, 1.051129937, 0.95919627}, - {2.545833, 1.000344157, 0.999988675, 1.059999943, 1.05117619, 0.959240735}, - {2.55, 1.00034523, 0.999985814, 1.059999943, 1.051222205, 0.9592852}, - {2.554167, 1.000345111, 0.999983132, 1.059999943, 1.051267147, 0.95932889}, - {2.558333, 1.000343919, 0.999980509, 1.059999943, 1.05131197, 0.95937252}, - {2.5625, 1.000341654, 0.999978125, 1.059999943, 1.051355243, 0.959415317}, - {2.566667, 1.000338316, 0.999975801, 1.059999943, 1.051398516, 0.959458172}, - {2.570833, 1.000334024, 0.999973655, 1.059999943, 1.05144012, 0.959500253}, - {2.575, 1.00032866, 0.999971688, 1.059999943, 1.051481724, 0.959542274}, - {2.579167, 1.000322461, 0.99996978, 1.059999943, 1.05152142, 0.95958364}, - {2.583333, 1.000315309, 0.999968112, 1.059999943, 1.051561117, 0.959624946}, - {2.5875, 1.000307202, 0.999966502, 1.059999943, 1.051598668, 0.959665537}, - {2.591667, 1.000298262, 0.999965072, 1.059999943, 1.051636338, 0.959706128}, - {2.595833, 1.000288486, 0.99996376, 1.059999943, 1.051671743, 0.959746063}, - {2.6, 1.000277996, 0.999962568, 1.059999943, 1.051707149, 0.959785938}, - {2.604167, 1.000266671, 0.999961555, 1.059999943, 1.05174017, 0.959825158}, - {2.608333, 1.00025475, 0.999960601, 1.059999943, 1.05177331, 0.959864378}, - {2.6125, 1.000242114, 0.999959767, 1.059999943, 1.051804066, 0.959902942}, - {2.616667, 1.000228882, 0.999958992, 1.059999943, 1.051834702, 0.959941506}, - {2.620833, 1.000215173, 0.999958396, 1.059999943, 1.051862955, 0.959979355}, - {2.625, 1.000200868, 0.9999578, 1.059999943, 1.051891327, 0.960017264}, - {2.629167, 1.000186086, 0.999957323, 1.059999943, 1.051917076, 0.960054517}, - {2.633333, 1.000170946, 0.999956906, 1.059999943, 1.051942945, 0.96009171}, - {2.6375, 1.000155449, 0.999956608, 1.059999943, 1.05196619, 0.960128307}, - {2.641667, 1.000139713, 0.99995631, 1.059999943, 1.051989555, 0.960164905}, - {2.645833, 1.00012362, 0.999956071, 1.059999943, 1.052010417, 0.960200846}, - {2.65, 1.000107288, 0.999955833, 1.059999943, 1.052031398, 0.960236788}, - {2.654167, 1.000090957, 0.999955654, 1.059999943, 1.052049875, 0.960272133}, - {2.658333, 1.000074387, 0.999955535, 1.059999943, 1.052068353, 0.96030736}, - {2.6625, 1.000057936, 0.999955356, 1.059999943, 1.052084565, 0.96034205}, - {2.666667, 1.000041366, 0.999955237, 1.059999943, 1.052100658, 0.96037668}, - {2.670833, 1.000024796, 0.999955118, 1.059999943, 1.052114606, 0.960410595}, - {2.675, 1.000008464, 0.999954998, 1.059999943, 1.052128553, 0.96044457}, - {2.679167, 0.999992192, 0.999954879, 1.059999943, 1.052140355, 0.960477889}, - {2.683333, 0.999976158, 0.9999547, 1.059999943, 1.052152157, 0.960511148}, - {2.6875, 0.999960363, 0.999954522, 1.059999943, 1.052162051, 0.960543811}, - {2.691667, 0.999944866, 0.999954283, 1.059999943, 1.052171826, 0.960576415}, - {2.695833, 0.999929667, 0.999954045, 1.059999943, 1.052179813, 0.960608363}, - {2.7, 0.999914825, 0.999953806, 1.059999943, 1.0521878, 0.960640311}, - {2.704167, 0.99990046, 0.999953449, 1.059999943, 1.052194119, 0.960671544}, - {2.708333, 0.999886453, 0.999953091, 1.059999943, 1.052200437, 0.960702837}, - {2.7125, 0.999872983, 0.999952734, 1.059999943, 1.052205324, 0.960733414}, - {2.716667, 0.999860048, 0.999952257, 1.059999943, 1.052210212, 0.960763991}, - {2.720833, 0.999847651, 0.99995178, 1.059999943, 1.052213669, 0.960793912}, - {2.725, 0.999835789, 0.999951303, 1.059999943, 1.052217245, 0.960823774}, - {2.729167, 0.999824584, 0.999950707, 1.059999943, 1.052219629, 0.96085304}, - {2.733333, 0.999813974, 0.999950111, 1.059999943, 1.052222133, 0.960882246}, - {2.7375, 0.99980408, 0.999949455, 1.059999943, 1.052223682, 0.960910857}, - {2.741667, 0.999794781, 0.99994874, 1.059999943, 1.052225232, 0.960939467}, - {2.745833, 0.999786258, 0.999947965, 1.059999943, 1.052226067, 0.960967422}, - {2.75, 0.99977839, 0.99994719, 1.059999943, 1.05222702, 0.960995376}, - {2.754167, 0.999771297, 0.999946415, 1.059999943, 1.052227378, 0.961022794}, - {2.758333, 0.99976486, 0.999945581, 1.059999943, 1.052227855, 0.961050153}, - {2.7625, 0.999759257, 0.999944746, 1.059999943, 1.052228093, 0.961076915}, - {2.766667, 0.999754369, 0.999943852, 1.059999943, 1.052228212, 0.961103737}, - {2.770833, 0.999750197, 0.999942958, 1.059999943, 1.052228451, 0.961130023}, - {2.775, 0.999746859, 0.999942064, 1.059999943, 1.05222857, 0.961156309}, - {2.779167, 0.999744236, 0.99994117, 1.059999943, 1.052228928, 0.961182117}, - {2.783333, 0.999742389, 0.999940276, 1.059999943, 1.052229404, 0.961207926}, - {2.7875, 0.999741256, 0.999939382, 1.059999943, 1.05223012, 0.961233318}, - {2.791667, 0.999740899, 0.999938548, 1.059999943, 1.052230954, 0.961258709}, - {2.795833, 0.999741256, 0.999937713, 1.059999943, 1.052232265, 0.961283743}, - {2.8, 0.999742389, 0.999936879, 1.059999943, 1.052233577, 0.961308777}, - {2.804167, 0.999744177, 0.999936104, 1.059999943, 1.052235723, 0.961333513}, - {2.808333, 0.99974668, 0.999935329, 1.059999943, 1.052237868, 0.96135819}, - {2.8125, 0.999749899, 0.999934673, 1.059999943, 1.052240968, 0.961382687}, - {2.816667, 0.999753714, 0.999934018, 1.059999943, 1.052244067, 0.961407185}, - {2.820833, 0.999758184, 0.999933481, 1.059999943, 1.05224812, 0.961431503}, - {2.825, 0.99976331, 0.999932945, 1.059999943, 1.052252293, 0.961455822}, - {2.829167, 0.999768972, 0.999932528, 1.059999943, 1.052257657, 0.961480081}, - {2.833333, 0.99977529, 0.99993217, 1.059999943, 1.052263141, 0.961504281}, - {2.8375, 0.999782085, 0.999931931, 1.059999943, 1.052269816, 0.96152848}, - {2.841667, 0.999789417, 0.999931753, 1.059999943, 1.052276611, 0.96155268}, - {2.845833, 0.999797225, 0.999931633, 1.059999943, 1.052284718, 0.961576939}, - {2.85, 0.99980545, 0.999931693, 1.059999943, 1.052292943, 0.961601198}, - {2.854167, 0.999814153, 0.999931812, 1.059999943, 1.052302599, 0.961625576}, - {2.858333, 0.999823272, 0.999932051, 1.059999943, 1.052312374, 0.961649954}, - {2.8625, 0.99983269, 0.999932349, 1.059999943, 1.05232358, 0.961674511}, - {2.866667, 0.999842465, 0.999932826, 1.059999943, 1.052334905, 0.961699069}, - {2.870833, 0.999852538, 0.999933422, 1.059999943, 1.052347779, 0.961723924}, - {2.875, 0.999862909, 0.999934137, 1.059999943, 1.052360773, 0.961748719}, - {2.879167, 0.999873459, 0.999934912, 1.059999943, 1.052375197, 0.961773872}, - {2.883333, 0.999884188, 0.999935865, 1.059999943, 1.052389741, 0.961799026}, - {2.8875, 0.999895096, 0.999936938, 1.059999943, 1.052405953, 0.961824536}, - {2.891667, 0.999906182, 0.999938071, 1.059999943, 1.052422047, 0.961850047}, - {2.895833, 0.999917269, 0.999939382, 1.059999943, 1.052439809, 0.961876035}, - {2.9, 0.999928474, 0.999940813, 1.059999943, 1.052457571, 0.961901963}, - {2.904167, 0.99993968, 0.999942362, 1.059999943, 1.052476883, 0.961928368}, - {2.908333, 0.999950886, 0.999944031, 1.059999943, 1.052496195, 0.961954772}, - {2.9125, 0.999962032, 0.99994576, 1.059999943, 1.052517056, 0.961981714}, - {2.916667, 0.999973118, 0.999947608, 1.059999943, 1.052537918, 0.962008655}, - {2.920833, 0.999984086, 0.999949634, 1.059999943, 1.052560091, 0.962036073}, - {2.925, 0.999994934, 0.999951661, 1.059999943, 1.052582264, 0.962063551}, - {2.929167, 1.000005603, 0.999953866, 1.059999943, 1.052605867, 0.962091565}, - {2.933333, 1.000016093, 0.999956131, 1.059999943, 1.052629471, 0.962119579}, - {2.9375, 1.000026345, 0.999958456, 1.059999943, 1.052654147, 0.96214813}, - {2.941667, 1.000036359, 0.999960899, 1.059999943, 1.052678943, 0.962176681}, - {2.945833, 1.000046015, 0.999963343, 1.059999943, 1.052704811, 0.962205768}, - {2.95, 1.000055432, 0.999965906, 1.059999943, 1.05273068, 0.962234914}, - {2.954167, 1.000064492, 0.999968529, 1.059999943, 1.052757502, 0.962264597}, - {2.958333, 1.000073314, 0.999971151, 1.059999943, 1.052784204, 0.962294281}, - {2.9625, 1.000081658, 0.999973834, 1.059999943, 1.052811861, 0.96232444}, - {2.966667, 1.000089645, 0.999976575, 1.059999943, 1.052839518, 0.96235466}, - {2.970833, 1.000097156, 0.999979317, 1.059999943, 1.052867889, 0.962385356}, - {2.975, 1.000104308, 0.999982119, 1.059999943, 1.052896142, 0.962416053}, - {2.979167, 1.000111103, 0.99998486, 1.059999943, 1.052924991, 0.962447166}, - {2.983333, 1.000117302, 0.999987602, 1.059999943, 1.05295372, 0.96247834}, - {2.9875, 1.000123143, 0.999990344, 1.059999943, 1.052983046, 0.96250993}, - {2.991667, 1.000128508, 0.999993086, 1.059999943, 1.053012133, 0.962541461}, - {2.995833, 1.000133276, 0.999995768, 1.059999943, 1.053041577, 0.962573409}, - {3, 1.000137687, 0.99999845, 1.059999943, 1.053071022, 0.962605298}, - {3.004167, 1.000141501, 1.000001073, 1.059999943, 1.053100467, 0.962637544}, - {3.008333, 1.000144958, 1.000003576, 1.059999943, 1.053129911, 0.96266973}, - {3.0125, 1.00014782, 1.00000608, 1.059999943, 1.053159356, 0.962702215}, - {3.016667, 1.000150084, 1.000008464, 1.059999943, 1.053188682, 0.96273464}, - {3.020833, 1.000151992, 1.000010729, 1.059999943, 1.053217888, 0.962767243}, - {3.025, 1.000153303, 1.000012994, 1.059999943, 1.053246975, 0.962799788}, - {3.029167, 1.000154138, 1.00001514, 1.059999943, 1.053275824, 0.962832451}, - {3.033333, 1.000154495, 1.000017047, 1.059999943, 1.053304553, 0.962865114}, - {3.0375, 1.000154376, 1.000018954, 1.059999943, 1.053332806, 0.962897778}, - {3.041667, 1.00015378, 1.000020742, 1.059999943, 1.053361058, 0.962930441}, - {3.045833, 1.000152707, 1.000022411, 1.059999943, 1.053388596, 0.962962985}, - {3.05, 1.000151157, 1.000023961, 1.059999943, 1.053416252, 0.962995529}, - {3.054167, 1.000149131, 1.000025272, 1.059999943, 1.053443074, 0.963027895}, - {3.058333, 1.000146747, 1.000026464, 1.059999943, 1.053469896, 0.96306026}, - {3.0625, 1.000143886, 1.000027537, 1.059999943, 1.053495884, 0.963092387}, - {3.066667, 1.000140548, 1.000028491, 1.059999943, 1.053521872, 0.963124454}, - {3.070833, 1.000136852, 1.000029206, 1.059999943, 1.053546906, 0.963156223}, - {3.075, 1.000132799, 1.000029802, 1.059999943, 1.053571939, 0.963187933}, - {3.079167, 1.000128388, 1.000030279, 1.059999943, 1.053595901, 0.963219225}, - {3.083333, 1.00012362, 1.000030518, 1.059999943, 1.053619981, 0.963250518}, - {3.0875, 1.000118494, 1.000030637, 1.059999943, 1.053642869, 0.963281274}, - {3.091667, 1.00011313, 1.000030518, 1.059999943, 1.053665638, 0.96331203}, - {3.095833, 1.000107408, 1.000030398, 1.059999943, 1.053687334, 0.963342249}, - {3.1, 1.000101447, 1.000029922, 1.059999943, 1.05370903, 0.963372409}, - {3.104167, 1.000095248, 1.000029445, 1.059999943, 1.053729534, 0.963401914}, - {3.108333, 1.000088811, 1.00002861, 1.059999943, 1.053750038, 0.963431358}, - {3.1125, 1.000082135, 1.000027776, 1.059999943, 1.05376935, 0.963460147}, - {3.116667, 1.00007534, 1.000026703, 1.059999943, 1.053788543, 0.963488877}, - {3.120833, 1.000068426, 1.000025511, 1.059999943, 1.053806543, 0.963516891}, - {3.125, 1.000061274, 1.000024199, 1.059999943, 1.053824544, 0.963544846}, - {3.129167, 1.000054121, 1.00002265, 1.059999943, 1.053841352, 0.963571966}, - {3.133333, 1.00004673, 1.0000211, 1.059999943, 1.053858042, 0.963599026}, - {3.1375, 1.000039339, 1.000019312, 1.059999943, 1.053873539, 0.963625252}, - {3.141667, 1.000031948, 1.000017405, 1.059999943, 1.053889036, 0.963651478}, - {3.145833, 1.000024557, 1.000015378, 1.059999943, 1.053903341, 0.96367681}, - {3.15, 1.000017047, 1.000013232, 1.059999943, 1.053917527, 0.963702083}, - {3.154167, 1.000009656, 1.000010967, 1.059999943, 1.05393064, 0.963726461}, - {3.158333, 1.000002265, 1.000008702, 1.059999943, 1.053943753, 0.96375078}, - {3.1625, 0.999994993, 1.000006199, 1.059999943, 1.053955674, 0.963774204}, - {3.166667, 0.999987721, 1.000003695, 1.059999943, 1.053967595, 0.963797569}, - {3.170833, 0.999980628, 1.000001073, 1.059999943, 1.053978443, 0.96382004}, - {3.175, 0.999973595, 0.99999845, 1.059999943, 1.053989291, 0.963842452}, - {3.179167, 0.999966741, 0.999995708, 1.059999943, 1.053999186, 0.963863909}, - {3.183333, 0.999960005, 0.999992967, 1.059999943, 1.054008961, 0.963885427}, - {3.1875, 0.999953508, 0.999990165, 1.059999943, 1.054017901, 0.963905931}, - {3.191667, 0.999947131, 0.999987304, 1.059999943, 1.054026842, 0.963926494}, - {3.195833, 0.999941051, 0.999984443, 1.059999943, 1.054034948, 0.963946104}, - {3.2, 0.99993515, 0.999981582, 1.059999943, 1.054042935, 0.963965714}, - {3.204167, 0.999929488, 0.999978721, 1.059999943, 1.054050326, 0.963984489}, - {3.208333, 0.999924064, 0.99997592, 1.059999943, 1.054057598, 0.964003205}, - {3.2125, 0.999918878, 0.999973059, 1.059999943, 1.054064274, 0.964021087}, - {3.216667, 0.99991399, 0.999970257, 1.059999943, 1.05407095, 0.964039028}, - {3.220833, 0.999909461, 0.999967515, 1.059999943, 1.054077029, 0.964056134}, - {3.225, 0.999905109, 0.999964774, 1.059999943, 1.054083109, 0.9640733}, - {3.229167, 0.999901116, 0.999962151, 1.059999943, 1.054088712, 0.964089692}, - {3.233333, 0.99989748, 0.999959528, 1.059999943, 1.054094434, 0.964106083}, - {3.2375, 0.999894083, 0.999957025, 1.059999943, 1.054099679, 0.964121819}, - {3.241667, 0.999891043, 0.999954581, 1.059999943, 1.054105043, 0.964137554}, - {3.245833, 0.999888361, 0.999952257, 1.059999943, 1.054110169, 0.964152753}, - {3.25, 0.999885976, 0.999949992, 1.059999943, 1.054115295, 0.964167893}, - {3.254167, 0.99988389, 0.999947846, 1.059999943, 1.054120183, 0.964182556}, - {3.258333, 0.999882162, 0.999945819, 1.059999943, 1.05412519, 0.964197218}, - {3.2625, 0.999880791, 0.999943972, 1.059999943, 1.054130197, 0.964211464}, - {3.266667, 0.999879777, 0.999942183, 1.059999943, 1.054135203, 0.964225709}, - {3.270833, 0.999879003, 0.999940515, 1.059999943, 1.05414021, 0.964239597}, - {3.275, 0.999878645, 0.999939024, 1.059999943, 1.054145336, 0.964253485}, - {3.279167, 0.999878585, 0.999937654, 1.059999943, 1.054150581, 0.964267135}, - {3.283333, 0.999878824, 0.999936461, 1.059999943, 1.054155827, 0.964280784}, - {3.2875, 0.99987942, 0.999935389, 1.059999943, 1.05416131, 0.964294255}, - {3.291667, 0.999880314, 0.999934435, 1.059999943, 1.054166913, 0.964307725}, - {3.295833, 0.999881506, 0.99993366, 1.059999943, 1.054172874, 0.964321136}, - {3.3, 0.999882996, 0.999933064, 1.059999943, 1.054178715, 0.964334488}, - {3.304167, 0.999884784, 0.999932647, 1.059999943, 1.054185152, 0.964347899}, - {3.308333, 0.99988687, 0.999932349, 1.059999943, 1.054191589, 0.96436131}, - {3.3125, 0.999889195, 0.99993223, 1.059999943, 1.054198503, 0.964374721}, - {3.316667, 0.999891758, 0.99993223, 1.059999943, 1.054205418, 0.964388251}, - {3.320833, 0.999894619, 0.999932468, 1.059999943, 1.054212928, 0.964401841}, - {3.325, 0.999897718, 0.999932766, 1.059999943, 1.054220438, 0.964415491}, - {3.329167, 0.999900997, 0.999933302, 1.059999943, 1.054228544, 0.964429319}, - {3.333333, 0.999904513, 0.999933958, 1.059999943, 1.05423677, 0.964443207}, - {3.3375, 0.999908209, 0.999934793, 1.059999943, 1.054245591, 0.964457333}, - {3.341667, 0.999912143, 0.999935746, 1.059999943, 1.054254532, 0.964471459}, - {3.345833, 0.999916196, 0.999936819, 1.059999943, 1.054264188, 0.964485943}, - {3.35, 0.999920428, 0.999938071, 1.059999943, 1.054273725, 0.964500487}, - {3.354167, 0.999924839, 0.999939442, 1.059999943, 1.054284096, 0.964515388}, - {3.358333, 0.999929368, 0.999940991, 1.059999943, 1.054294467, 0.964530289}, - {3.3625, 0.999933958, 0.999942601, 1.059999943, 1.054305673, 0.964545608}, - {3.366667, 0.999938726, 0.999944389, 1.059999943, 1.054316878, 0.964560986}, - {3.370833, 0.999943495, 0.999946237, 1.059999943, 1.054328799, 0.96457684}, - {3.375, 0.999948382, 0.999948204, 1.059999943, 1.05434072, 0.964592695}, - {3.379167, 0.99995333, 0.99995029, 1.059999943, 1.054353476, 0.964609027}, - {3.383333, 0.999958336, 0.999952435, 1.059999943, 1.054366231, 0.964625418}, - {3.3875, 0.999963343, 0.9999547, 1.059999943, 1.054379702, 0.964642286}, - {3.391667, 0.99996835, 0.999957025, 1.059999943, 1.054393172, 0.964659154}, - {3.395833, 0.999973357, 0.999959409, 1.059999943, 1.054407358, 0.964676619}, - {3.4, 0.999978364, 0.999961853, 1.059999943, 1.054421663, 0.964694023}, - {3.404167, 0.99998337, 0.999964416, 1.059999943, 1.054436564, 0.964712024}, - {3.408333, 0.999988258, 0.999966919, 1.059999943, 1.054451585, 0.964729965}, - {3.4125, 0.999993145, 0.999969542, 1.059999943, 1.054467201, 0.964748502}, - {3.416667, 0.999997973, 0.999972165, 1.059999943, 1.054482818, 0.964766979}, - {3.420833, 1.000002623, 0.999974787, 1.059999943, 1.05449903, 0.964785993}, - {3.425, 1.000007272, 0.99997741, 1.059999943, 1.054515243, 0.964805067}, - {3.429167, 1.000011802, 0.999980092, 1.059999943, 1.054532051, 0.964824557}, - {3.433333, 1.000016212, 0.999982715, 1.059999943, 1.05454886, 0.964844108}, - {3.4375, 1.000020385, 0.999985337, 1.059999943, 1.054566145, 0.964864075}, - {3.441667, 1.000024557, 0.99998796, 1.059999943, 1.05458343, 0.964884043}, - {3.445833, 1.000028491, 0.999990523, 1.059999943, 1.054601192, 0.964904487}, - {3.45, 1.000032306, 0.999993026, 1.059999943, 1.054618955, 0.964924872}, - {3.454167, 1.000036001, 0.99999553, 1.059999943, 1.054637074, 0.964945674}, - {3.458333, 1.000039458, 0.999997973, 1.059999943, 1.054655194, 0.964966476}, - {3.4625, 1.000042677, 1.000000358, 1.059999943, 1.054673672, 0.964987576}, - {3.466667, 1.000045776, 1.000002623, 1.059999943, 1.05469203, 0.965008676}, - {3.470833, 1.000048637, 1.000004888, 1.059999943, 1.054710627, 0.965030074}, - {3.475, 1.000051379, 1.000007033, 1.059999943, 1.054729342, 0.965051472}, - {3.479167, 1.000053883, 1.00000906, 1.059999943, 1.054748058, 0.965073049}, - {3.483333, 1.000056148, 1.000010967, 1.059999943, 1.054766893, 0.965094686}, - {3.4875, 1.000058174, 1.000012875, 1.059999943, 1.054785728, 0.965116441}, - {3.491667, 1.000059962, 1.000014544, 1.059999943, 1.054804564, 0.965138137}, - {3.495833, 1.000061631, 1.000016212, 1.059999943, 1.054823399, 0.965160012}, - {3.5, 1.000063062, 1.000017762, 1.059999943, 1.054842234, 0.965181828}, - {3.504167, 1.000064135, 1.000019193, 1.059999943, 1.054861069, 0.965203702}, - {3.508333, 1.000065088, 1.000020504, 1.059999943, 1.054879785, 0.965225518}, - {3.5125, 1.000065804, 1.000021577, 1.059999943, 1.054898381, 0.965247333}, - {3.516667, 1.00006628, 1.00002265, 1.059999943, 1.054916978, 0.965269089}, - {3.520833, 1.000066638, 1.000023603, 1.059999943, 1.054935336, 0.965290785}, - {3.525, 1.000066638, 1.000024319, 1.059999943, 1.054953694, 0.965312481}, - {3.529167, 1.000066519, 1.000025034, 1.059999943, 1.054971695, 0.965333939}, - {3.533333, 1.000066161, 1.000025511, 1.059999943, 1.054989815, 0.965355456}, - {3.5375, 1.000065565, 1.000025988, 1.059999943, 1.055007458, 0.965376675}, - {3.541667, 1.000064731, 1.000026226, 1.059999943, 1.05502522, 0.965397954}, - {3.545833, 1.000063777, 1.000026345, 1.059999943, 1.055042505, 0.965418875}, - {3.55, 1.000062585, 1.000026345, 1.059999943, 1.055059791, 0.965439796}, - {3.554167, 1.000061154, 1.000026226, 1.059999943, 1.055076599, 0.96546036}, - {3.558333, 1.000059605, 1.000025868, 1.059999943, 1.055093408, 0.965480924}, - {3.5625, 1.000057936, 1.000025511, 1.059999943, 1.055109739, 0.96550107}, - {3.566667, 1.000056028, 1.000025034, 1.059999943, 1.055126071, 0.965521216}, - {3.570833, 1.000054002, 1.000024438, 1.059999943, 1.055141807, 0.965540946}, - {3.575, 1.000051737, 1.000023603, 1.059999943, 1.055157542, 0.965560615}, - {3.579167, 1.000049353, 1.000022769, 1.059999943, 1.055172682, 0.965579808}, - {3.583333, 1.000046968, 1.000021815, 1.059999943, 1.055187941, 0.965598941}, - {3.5875, 1.000044346, 1.000020742, 1.059999943, 1.055202484, 0.965617597}, - {3.591667, 1.000041604, 1.00001955, 1.059999943, 1.055217028, 0.965636253}, - {3.595833, 1.000038743, 1.000018358, 1.059999943, 1.055230856, 0.965654254}, - {3.6, 1.000035763, 1.000016928, 1.059999943, 1.055244803, 0.965672314}, - {3.604167, 1.000032783, 1.000015497, 1.059999943, 1.055258155, 0.965689778}, - {3.608333, 1.000029683, 1.000014067, 1.059999943, 1.055271387, 0.965707242}, - {3.6125, 1.000026464, 1.000012398, 1.059999943, 1.055284023, 0.965724051}, - {3.616667, 1.000023246, 1.000010729, 1.059999943, 1.055296659, 0.965740919}, - {3.620833, 1.000019908, 1.00000906, 1.059999943, 1.05530858, 0.965757132}, - {3.625, 1.000016689, 1.000007272, 1.059999943, 1.055320621, 0.965773344}, - {3.629167, 1.000013232, 1.000005484, 1.059999943, 1.055331945, 0.965788901}, - {3.633333, 1.000009894, 1.000003695, 1.059999943, 1.05534327, 0.965804458}, - {3.6375, 1.000006557, 1.000001788, 1.059999943, 1.055353999, 0.965819418}, - {3.641667, 1.000003099, 0.999999821, 1.059999943, 1.055364728, 0.965834379}, - {3.645833, 0.999999762, 0.999997914, 1.059999943, 1.055374861, 0.965848684}, - {3.65, 0.999996424, 0.999995947, 1.059999943, 1.055384994, 0.965862989}, - {3.654167, 0.999993086, 0.99999398, 1.059999943, 1.05539453, 0.965876758}, - {3.658333, 0.999989808, 0.999992013, 1.059999943, 1.055404067, 0.965890467}, - {3.6625, 0.999986589, 0.999990106, 1.059999943, 1.055413008, 0.96590358}, - {3.666667, 0.99998343, 0.999988139, 1.059999943, 1.055422068, 0.965916753}, - {3.670833, 0.99998033, 0.999986231, 1.059999943, 1.055430532, 0.96592927}, - {3.675, 0.999977291, 0.999984324, 1.059999943, 1.055438995, 0.965941906}, - {3.679167, 0.99997431, 0.999982417, 1.059999943, 1.055447102, 0.965953946}, - {3.683333, 0.999971449, 0.999980628, 1.059999943, 1.055455089, 0.965965986}, - {3.6875, 0.999968648, 0.99997884, 1.059999943, 1.055462718, 0.96597755}, - {3.691667, 0.999965966, 0.999977052, 1.059999943, 1.055470347, 0.965989113}, - {3.695833, 0.999963403, 0.999975383, 1.059999943, 1.0554775, 0.966000199}, - {3.7, 0.999960959, 0.999973774, 1.059999943, 1.055484772, 0.966011345}, - {3.704167, 0.999958634, 0.999972165, 1.059999943, 1.055491686, 0.966022074}, - {3.708333, 0.999956429, 0.999970675, 1.059999943, 1.0554986, 0.966032803}, - {3.7125, 0.999954343, 0.999969244, 1.059999943, 1.055505276, 0.966043115}, - {3.716667, 0.999952376, 0.999967873, 1.059999943, 1.055511951, 0.966053486}, - {3.720833, 0.999950588, 0.999966621, 1.059999943, 1.055518389, 0.966063559}, - {3.725, 0.999948919, 0.999965429, 1.059999943, 1.055524826, 0.966073573}, - {3.729167, 0.999947369, 0.999964297, 1.059999943, 1.055531144, 0.966083348}, - {3.733333, 0.999945998, 0.999963284, 1.059999943, 1.055537462, 0.966093183}, - {3.7375, 0.999944806, 0.99996233, 1.059999943, 1.055543542, 0.966102719}, - {3.741667, 0.999943733, 0.999961495, 1.059999943, 1.055549741, 0.966112316}, - {3.745833, 0.99994278, 0.99996078, 1.059999943, 1.05555594, 0.966121733}, - {3.75, 0.999942005, 0.999960124, 1.059999943, 1.055562019, 0.96613121}, - {3.754167, 0.999941409, 0.999959588, 1.059999943, 1.055568218, 0.966140509}, - {3.758333, 0.999940932, 0.999959111, 1.059999943, 1.055574417, 0.966149867}, - {3.7625, 0.999940634, 0.999958754, 1.059999943, 1.055580616, 0.966159105}, - {3.766667, 0.999940515, 0.999958515, 1.059999943, 1.055586815, 0.966168404}, - {3.770833, 0.999940455, 0.999958336, 1.059999943, 1.055593133, 0.966177642}, - {3.775, 0.999940634, 0.999958277, 1.059999943, 1.055599332, 0.966186941}, - {3.779167, 0.999940932, 0.999958336, 1.059999943, 1.055605888, 0.966196239}, - {3.783333, 0.999941349, 0.999958456, 1.059999943, 1.055612326, 0.966205537}, - {3.7875, 0.999941945, 0.999958634, 1.059999943, 1.055619001, 0.966214955}, - {3.791667, 0.999942601, 0.999958992, 1.059999943, 1.055625558, 0.966224313}, - {3.795833, 0.999943495, 0.999959409, 1.059999943, 1.055632472, 0.96623385}, - {3.8, 0.999944448, 0.999959886, 1.059999943, 1.055639386, 0.966243386}, - {3.804167, 0.999945521, 0.999960482, 1.059999943, 1.055646539, 0.966253042}, - {3.808333, 0.999946773, 0.999961138, 1.059999943, 1.055653691, 0.966262698}, - {3.8125, 0.999948084, 0.999961853, 1.059999943, 1.055661082, 0.966272593}, - {3.816667, 0.999949574, 0.999962687, 1.059999943, 1.055668592, 0.966282427}, - {3.820833, 0.999951124, 0.999963582, 1.059999943, 1.055676341, 0.966292501}, - {3.825, 0.999952734, 0.999964535, 1.059999943, 1.05568409, 0.966302633}, - {3.829167, 0.999954522, 0.999965608, 1.059999943, 1.055692196, 0.966312945}, - {3.833333, 0.99995631, 0.999966681, 1.059999943, 1.055700302, 0.966323256}, - {3.8375, 0.999958277, 0.999967813, 1.059999943, 1.055708766, 0.966333866}, - {3.841667, 0.999960244, 0.999969065, 1.059999943, 1.05571723, 0.966344476}, - {3.845833, 0.99996227, 0.999970317, 1.059999943, 1.055726051, 0.966355324}, - {3.85, 0.999964416, 0.999971569, 1.059999943, 1.055734873, 0.966366172}, - {3.854167, 0.999966562, 0.999972939, 1.059999943, 1.055744052, 0.966377318}, - {3.858333, 0.999968827, 0.99997431, 1.059999943, 1.055753231, 0.966388464}, - {3.8625, 0.999971092, 0.999975681, 1.059999943, 1.055762768, 0.966399908}, - {3.866667, 0.999973357, 0.999977112, 1.059999943, 1.055772305, 0.966411352}, - {3.870833, 0.999975681, 0.999978602, 1.059999943, 1.055782318, 0.966423094}, - {3.875, 0.999978065, 0.999980032, 1.059999943, 1.055792212, 0.966434777}, - {3.879167, 0.99998039, 0.999981523, 1.059999943, 1.055802464, 0.966446817}, - {3.883333, 0.999982774, 0.999983013, 1.059999943, 1.055812836, 0.966458797}, - {3.8875, 0.999985158, 0.999984503, 1.059999943, 1.055823445, 0.966471076}, - {3.891667, 0.999987483, 0.999985993, 1.059999943, 1.055834055, 0.966483355}, - {3.895833, 0.999989867, 0.999987483, 1.059999943, 1.055845022, 0.966495872}, - {3.9, 0.999992192, 0.999988973, 1.059999943, 1.055855989, 0.966508389}, - {3.904167, 0.999994457, 0.999990404, 1.059999943, 1.055867195, 0.966521144}, - {3.908333, 0.999996722, 0.999991834, 1.059999943, 1.055878401, 0.966533899}, - {3.9125, 0.999998987, 0.999993265, 1.059999943, 1.055889964, 0.966546893}, - {3.916667, 1.000001192, 0.999994636, 1.059999943, 1.055901527, 0.966559887}, - {3.920833, 1.000003338, 0.999996006, 1.059999943, 1.055913329, 0.96657306}, - {3.925, 1.000005364, 0.999997318, 1.059999943, 1.055925012, 0.966586232}, - {3.929167, 1.000007391, 0.999998569, 1.059999943, 1.055937052, 0.966599584}, - {3.933333, 1.000009298, 0.999999821, 1.059999943, 1.055949092, 0.966612935}, - {3.9375, 1.000011206, 1.000001073, 1.059999943, 1.055961251, 0.966626406}, - {3.941667, 1.000012994, 1.000002146, 1.059999943, 1.055973411, 0.966639876}, - {3.945833, 1.000014782, 1.000003219, 1.059999943, 1.055985689, 0.966653466}, - {3.95, 1.000016451, 1.000004292, 1.059999943, 1.055998087, 0.966666996}, - {3.954167, 1.000018001, 1.000005245, 1.059999943, 1.056010485, 0.966680646}, - {3.958333, 1.000019431, 1.000006199, 1.059999943, 1.056022882, 0.966694295}, - {3.9625, 1.000020742, 1.000007033, 1.059999943, 1.056035399, 0.966708004}, - {3.966667, 1.000022054, 1.000007868, 1.059999943, 1.056047916, 0.966721654}, - {3.970833, 1.000023246, 1.000008583, 1.059999943, 1.056060433, 0.966735363}, - {3.975, 1.000024319, 1.000009179, 1.059999943, 1.05607295, 0.966749012}, - {3.979167, 1.000025272, 1.000009775, 1.059999943, 1.056085467, 0.966762662}, - {3.983333, 1.000026226, 1.000010371, 1.059999943, 1.056097984, 0.966776311}, - {3.9875, 1.000026941, 1.000010729, 1.059999943, 1.056110501, 0.966789901}, - {3.991667, 1.000027657, 1.000011206, 1.059999943, 1.056123018, 0.966803432}, - {3.995833, 1.000028133, 1.000011444, 1.059999943, 1.056135416, 0.966816902}, - {4, 1.00002861, 1.000011802, 1.059999943, 1.056147814, 0.966830373}, - {4.004167, 1.000028968, 1.000011921, 1.059999943, 1.056160092, 0.966843724}, - {4.008333, 1.000029206, 1.00001204, 1.059999943, 1.056172371, 0.966857076}, - {4.0125, 1.000029325, 1.00001204, 1.059999943, 1.05618453, 0.966870248}, - {4.016667, 1.000029325, 1.00001204, 1.059999943, 1.05619669, 0.966883421}, - {4.020833, 1.000029206, 1.00001204, 1.059999943, 1.056208611, 0.966896355}, - {4.025, 1.000029087, 1.000011802, 1.059999943, 1.056220651, 0.966909349}, - {4.029167, 1.000028729, 1.000011683, 1.059999943, 1.056232333, 0.966922104}, - {4.033333, 1.000028372, 1.000011325, 1.059999943, 1.056244135, 0.96693486}, - {4.0375, 1.000027895, 1.000011086, 1.059999943, 1.056255579, 0.966947377}, - {4.041667, 1.000027299, 1.00001061, 1.059999943, 1.056267142, 0.966959894}, - {4.045833, 1.000026703, 1.000010252, 1.059999943, 1.056278348, 0.966972113}, - {4.05, 1.000025868, 1.000009656, 1.059999943, 1.056289673, 0.966984391}, - {4.054167, 1.000025034, 1.000009179, 1.059999943, 1.05630064, 0.966996372}, - {4.058333, 1.000024199, 1.000008583, 1.059999943, 1.056311607, 0.967008293}, - {4.0625, 1.000023127, 1.000007987, 1.059999943, 1.056322336, 0.967019975}, - {4.066667, 1.000022054, 1.000007272, 1.059999943, 1.056332946, 0.967031598}, - {4.070833, 1.000020981, 1.000006557, 1.059999943, 1.056343317, 0.967042983}, - {4.075, 1.000019789, 1.000005722, 1.059999943, 1.056353688, 0.967054307}, - {4.079167, 1.000018477, 1.000005007, 1.059999943, 1.056363702, 0.967065334}, - {4.083333, 1.000017166, 1.000004172, 1.059999943, 1.056373835, 0.967076361}, - {4.0875, 1.000015855, 1.000003338, 1.059999943, 1.056383491, 0.96708709}, - {4.091667, 1.000014424, 1.000002384, 1.059999943, 1.056393266, 0.967097759}, - {4.095833, 1.000012875, 1.00000155, 1.059999943, 1.056402564, 0.96710813}, - {4.1, 1.000011444, 1.000000596, 1.059999943, 1.056411982, 0.967118561}, - {4.104167, 1.000009894, 0.999999702, 1.059999943, 1.056421041, 0.967128575}, - {4.108333, 1.000008345, 0.999998748, 1.059999943, 1.056430101, 0.967138648}, - {4.1125, 1.000006676, 0.999997795, 1.059999943, 1.056438804, 0.967148364}, - {4.116667, 1.000005126, 0.999996841, 1.059999943, 1.056447506, 0.967158079}, - {4.120833, 1.000003457, 0.999995887, 1.059999943, 1.056455851, 0.967167497}, - {4.125, 1.000001907, 0.999994934, 1.059999943, 1.056464314, 0.967176914}, - {4.129167, 1.000000238, 0.99999398, 1.059999943, 1.056472301, 0.967185974}, - {4.133333, 0.999998629, 0.999993026, 1.059999943, 1.056480408, 0.967195094}, - {4.1375, 0.99999696, 0.999992073, 1.059999943, 1.056488156, 0.967203915}, - {4.141667, 0.999995351, 0.999991119, 1.059999943, 1.056496024, 0.967212737}, - {4.145833, 0.999993742, 0.999990225, 1.059999943, 1.056503415, 0.96722126}, - {4.15, 0.999992192, 0.999989331, 1.059999943, 1.056510925, 0.967229784}, - {4.154167, 0.999990582, 0.999988496, 1.059999943, 1.056518197, 0.967238069}, - {4.158333, 0.999989092, 0.999987602, 1.059999943, 1.05652535, 0.967246294}, - {4.1625, 0.999987602, 0.999986827, 1.059999943, 1.056532383, 0.967254341}, - {4.166667, 0.999986112, 0.999985993, 1.059999943, 1.056539297, 0.967262328}, - {4.170833, 0.999984682, 0.999985278, 1.059999943, 1.056546092, 0.967270136}, - {4.175, 0.999983311, 0.999984503, 1.059999943, 1.056552887, 0.967277944}, - {4.179167, 0.99998194, 0.999983847, 1.059999943, 1.056559324, 0.967285573}, - {4.183333, 0.999980688, 0.999983191, 1.059999943, 1.056565881, 0.967293143}, - {4.1875, 0.999979436, 0.999982536, 1.059999943, 1.056572318, 0.967300594}, - {4.191667, 0.999978304, 0.99998194, 1.059999943, 1.056578636, 0.967307985}, - {4.195833, 0.999977171, 0.999981403, 1.059999943, 1.056584835, 0.967315257}, - {4.2, 0.999976099, 0.999980927, 1.059999943, 1.056591034, 0.967322528}, - {4.204167, 0.999975145, 0.99998045, 1.059999943, 1.056597114, 0.967329681}, - {4.208333, 0.999974191, 0.999980032, 1.059999943, 1.056603193, 0.967336833}, - {4.2125, 0.999973357, 0.999979675, 1.059999943, 1.056609154, 0.967343867}, - {4.216667, 0.999972522, 0.999979317, 1.059999943, 1.056615233, 0.9673509}, - {4.220833, 0.999971867, 0.999979079, 1.059999943, 1.056621075, 0.967357814}, - {4.225, 0.999971211, 0.99997884, 1.059999943, 1.056627035, 0.967364788}, - {4.229167, 0.999970615, 0.999978602, 1.059999943, 1.056632876, 0.967371643}, - {4.233333, 0.999970138, 0.999978483, 1.059999943, 1.056638718, 0.967378557}, - {4.2375, 0.999969721, 0.999978364, 1.059999943, 1.056644559, 0.967385411}, - {4.241667, 0.999969363, 0.999978304, 1.059999943, 1.0566504, 0.967392266}, - {4.245833, 0.999969125, 0.999978304, 1.059999943, 1.056656241, 0.96739912}, - {4.25, 0.999968886, 0.999978364, 1.059999943, 1.056662083, 0.967405975}, - {4.254167, 0.999968767, 0.999978423, 1.059999943, 1.056668043, 0.96741277}, - {4.258333, 0.999968767, 0.999978542, 1.059999943, 1.056673884, 0.967419624}, - {4.2625, 0.999968767, 0.999978721, 1.059999943, 1.056679845, 0.967426479}, - {4.266667, 0.999968886, 0.9999789, 1.059999943, 1.056685805, 0.967433393}, - {4.270833, 0.999969065, 0.999979138, 1.059999943, 1.056691766, 0.967440307}, - {4.275, 0.999969304, 0.999979436, 1.059999943, 1.056697726, 0.967447221}, - {4.279167, 0.999969602, 0.999979734, 1.059999943, 1.056703806, 0.967454195}, - {4.283333, 0.999970019, 0.999980092, 1.059999943, 1.056710005, 0.967461169}, - {4.2875, 0.999970436, 0.99998045, 1.059999943, 1.056716204, 0.967468202}, - {4.291667, 0.999970973, 0.999980867, 1.059999943, 1.056722403, 0.967475235}, - {4.295833, 0.999971569, 0.999981344, 1.059999943, 1.056728721, 0.967482388}, - {4.3, 0.999972165, 0.999981821, 1.059999943, 1.056735039, 0.967489481}, - {4.304167, 0.99997288, 0.999982297, 1.059999943, 1.056741476, 0.967496693}, - {4.308333, 0.999973595, 0.999982834, 1.059999943, 1.056748033, 0.967503965}, - {4.3125, 0.99997443, 0.99998343, 1.059999943, 1.056754589, 0.967511296}, - {4.316667, 0.999975264, 0.999983966, 1.059999943, 1.056761265, 0.967518628}, - {4.320833, 0.999976158, 0.999984562, 1.059999943, 1.05676806, 0.967526019}, - {4.325, 0.999977052, 0.999985158, 1.059999943, 1.056774855, 0.967533469}, - {4.329167, 0.999978006, 0.999985814, 1.059999943, 1.056781769, 0.967541039}, - {4.333333, 0.999979019, 0.99998647, 1.059999943, 1.056788683, 0.967548549}, - {4.3375, 0.999980092, 0.999987125, 1.059999943, 1.056795835, 0.967556238}, - {4.341667, 0.999981165, 0.999987781, 1.059999943, 1.056802988, 0.967563868}, - {4.345833, 0.999982238, 0.999988437, 1.059999943, 1.05681026, 0.967571676}, - {4.35, 0.99998337, 0.999989092, 1.059999943, 1.056817532, 0.967579424}, - {4.354167, 0.999984503, 0.999989808, 1.059999943, 1.056824923, 0.967587292}, - {4.358333, 0.999985635, 0.999990463, 1.059999943, 1.056832433, 0.96759516}, - {4.3625, 0.999986768, 0.999991119, 1.059999943, 1.056840062, 0.967603147}, - {4.366667, 0.99998796, 0.999991834, 1.059999943, 1.056847572, 0.967611134}, - {4.370833, 0.999989152, 0.99999249, 1.059999943, 1.05685544, 0.96761924}, - {4.375, 0.999990284, 0.999993145, 1.059999943, 1.056863189, 0.967627347}, - {4.379167, 0.999991477, 0.999993801, 1.059999943, 1.056871057, 0.967635512}, - {4.383333, 0.999992669, 0.999994457, 1.059999943, 1.056878924, 0.967643678}, - {4.3875, 0.999993801, 0.999995053, 1.059999943, 1.056887031, 0.967651904}, - {4.391667, 0.999994993, 0.999995708, 1.059999943, 1.056895137, 0.967660189}, - {4.395833, 0.999996126, 0.999996305, 1.059999943, 1.056903243, 0.967668533}, - {4.4, 0.999997199, 0.999996901, 1.059999943, 1.056911469, 0.967676818}, - {4.404167, 0.999998331, 0.999997437, 1.059999943, 1.056919694, 0.967685223}, - {4.408333, 0.999999404, 0.999997973, 1.059999943, 1.056928039, 0.967693627}, - {4.4125, 1.000000477, 0.99999851, 1.059999943, 1.056936383, 0.967702031}, - {4.416667, 1.000001431, 0.999999046, 1.059999943, 1.056944847, 0.967710495}, - {4.420833, 1.000002384, 0.999999523, 1.059999943, 1.056953311, 0.967718959}, - {4.425, 1.000003338, 0.99999994, 1.059999943, 1.056961775, 0.967727423}, - {4.429167, 1.000004292, 1.000000358, 1.059999943, 1.056970239, 0.967735887}, - {4.433333, 1.000005126, 1.000000834, 1.059999943, 1.056978822, 0.96774435}, - {4.4375, 1.00000596, 1.000001192, 1.059999943, 1.056987405, 0.967752874}, - {4.441667, 1.000006795, 1.00000155, 1.059999943, 1.056995988, 0.967761338}, - {4.445833, 1.00000751, 1.000001907, 1.059999943, 1.057004571, 0.967769802}, - {4.45, 1.000008225, 1.000002146, 1.059999943, 1.057013154, 0.967778325}, - {4.454167, 1.000008821, 1.000002384, 1.059999943, 1.057021856, 0.967786729}, - {4.458333, 1.000009537, 1.000002623, 1.059999943, 1.057030439, 0.967795193}, - {4.4625, 1.000010014, 1.000002861, 1.059999943, 1.057039022, 0.967803597}, - {4.466667, 1.00001049, 1.000003099, 1.059999943, 1.057047606, 0.967812002}, - {4.470833, 1.000010967, 1.000003219, 1.059999943, 1.057056189, 0.967820346}, - {4.475, 1.000011325, 1.000003338, 1.059999943, 1.057064891, 0.967828691}, - {4.479167, 1.000011683, 1.000003457, 1.059999943, 1.057073355, 0.967836976}, - {4.483333, 1.00001204, 1.000003457, 1.059999943, 1.057081938, 0.967845261}, - {4.4875, 1.000012279, 1.000003457, 1.059999943, 1.057090402, 0.967853487}, - {4.491667, 1.000012398, 1.000003576, 1.059999943, 1.057098866, 0.967861652}, - {4.495833, 1.000012517, 1.000003457, 1.059999943, 1.057107329, 0.967869759}, - {4.5, 1.000012636, 1.000003457, 1.059999943, 1.057115674, 0.967877865}, - {4.504167, 1.000012636, 1.000003338, 1.059999943, 1.057124019, 0.967885852}, - {4.508333, 1.000012636, 1.000003219, 1.059999943, 1.057132244, 0.967893839}, - {4.5125, 1.000012517, 1.000003099, 1.059999943, 1.05714047, 0.967901707}, - {4.516667, 1.000012398, 1.00000298, 1.059999943, 1.057148695, 0.967909634}, - {4.520833, 1.000012279, 1.000002861, 1.059999943, 1.057156801, 0.967917383}, - {4.525, 1.00001204, 1.000002623, 1.059999943, 1.057164907, 0.967925131}, - {4.529167, 1.000011802, 1.000002384, 1.059999943, 1.057172775, 0.967932701}, - {4.533333, 1.000011444, 1.000002146, 1.059999943, 1.057180762, 0.967940331}, - {4.5375, 1.000011086, 1.000001907, 1.059999943, 1.057188511, 0.967947781}, - {4.541667, 1.00001061, 1.000001669, 1.059999943, 1.057196379, 0.967955291}, - {4.545833, 1.000010252, 1.000001311, 1.059999943, 1.057204008, 0.967962623}, - {4.55, 1.000009775, 1.000001073, 1.059999943, 1.057211638, 0.967969894}, - {4.554167, 1.000009179, 1.000000715, 1.059999943, 1.057219148, 0.967977107}, - {4.558333, 1.000008583, 1.000000358, 1.059999943, 1.057226539, 0.967984259}, - {4.5625, 1.000007987, 1, 1.059999943, 1.05723393, 0.967991292}, - {4.566667, 1.000007391, 0.999999642, 1.059999943, 1.057241201, 0.967998326}, - {4.570833, 1.000006795, 0.999999285, 1.059999943, 1.057248354, 0.96800518}, - {4.575, 1.00000608, 0.999998927, 1.059999943, 1.057255507, 0.968012035}, - {4.579167, 1.000005364, 0.99999851, 1.059999943, 1.05726254, 0.968018711}, - {4.583333, 1.000004649, 0.999998152, 1.059999943, 1.057269454, 0.968025446}, - {4.5875, 1.000003934, 0.999997735, 1.059999943, 1.057276249, 0.968031943}, - {4.591667, 1.000003219, 0.999997318, 1.059999943, 1.057283044, 0.968038499}, - {4.595833, 1.000002384, 0.999996901, 1.059999943, 1.05728972, 0.968044877}, - {4.6, 1.00000155, 0.999996543, 1.059999943, 1.057296276, 0.968051314}, - {4.604167, 1.000000834, 0.999996126, 1.059999943, 1.057302833, 0.968057513}, - {4.608333, 1, 0.999995708, 1.059999943, 1.05730927, 0.968063772}, - {4.6125, 0.999999166, 0.999995351, 1.059999943, 1.057315469, 0.968069851}, - {4.616667, 0.999998391, 0.999994934, 1.059999943, 1.057321787, 0.968075991}, - {4.620833, 0.999997556, 0.999994576, 1.059999943, 1.057327986, 0.968081951}, - {4.625, 0.999996781, 0.999994159, 1.059999943, 1.057334065, 0.968087912}, - {4.629167, 0.999995947, 0.999993801, 1.059999943, 1.057340026, 0.968093693}, - {4.633333, 0.999995172, 0.999993443, 1.059999943, 1.057345986, 0.968099535}, - {4.6375, 0.999994397, 0.999993086, 1.059999943, 1.057351828, 0.968105197}, - {4.641667, 0.999993622, 0.999992728, 1.059999943, 1.057357669, 0.968110919}, - {4.645833, 0.999992847, 0.99999243, 1.059999943, 1.057363391, 0.968116522}, - {4.65, 0.999992132, 0.999992073, 1.059999943, 1.057369113, 0.968122065}, - {4.654167, 0.999991417, 0.999991775, 1.059999943, 1.057374716, 0.968127549}, - {4.658333, 0.999990702, 0.999991477, 1.059999943, 1.057380199, 0.968133032}, - {4.6625, 0.999989986, 0.999991238, 1.059999943, 1.057385683, 0.968138397}, - {4.666667, 0.999989331, 0.99999094, 1.059999943, 1.057391167, 0.968143761}, - {4.670833, 0.999988735, 0.999990702, 1.059999943, 1.057396531, 0.968149066}, - {4.675, 0.999988079, 0.999990463, 1.059999943, 1.057401896, 0.968154311}, - {4.679167, 0.999987543, 0.999990284, 1.059999943, 1.057407141, 0.968159497}, - {4.683333, 0.999986947, 0.999990046, 1.059999943, 1.057412386, 0.968164742}, - {4.6875, 0.99998647, 0.999989867, 1.059999943, 1.057417631, 0.968169868}, - {4.691667, 0.999985993, 0.999989748, 1.059999943, 1.057422876, 0.968174994}, - {4.695833, 0.999985516, 0.999989569, 1.059999943, 1.057428002, 0.96818006}, - {4.7, 0.999985099, 0.99998945, 1.059999943, 1.057433128, 0.968185127}, - {4.704167, 0.999984741, 0.999989331, 1.059999943, 1.057438135, 0.968190134}, - {4.708333, 0.999984384, 0.999989271, 1.059999943, 1.057443261, 0.96819514}, - {4.7125, 0.999984086, 0.999989212, 1.059999943, 1.057448268, 0.968200147}, - {4.716667, 0.999983788, 0.999989152, 1.059999943, 1.057453275, 0.968205154}, - {4.720833, 0.999983549, 0.999989092, 1.059999943, 1.057458401, 0.968210101}, - {4.725, 0.99998337, 0.999989092, 1.059999943, 1.057463408, 0.968215048}, - {4.729167, 0.999983191, 0.999989092, 1.059999943, 1.057468414, 0.968219936}, - {4.733333, 0.999983072, 0.999989152, 1.059999943, 1.057473421, 0.968224883}, - {4.7375, 0.999982953, 0.999989152, 1.059999943, 1.057478428, 0.96822983}, - {4.741667, 0.999982953, 0.999989212, 1.059999943, 1.057483435, 0.968234718}, - {4.745833, 0.999982953, 0.999989331, 1.059999943, 1.057488441, 0.968239665}, - {4.75, 0.999982953, 0.99998939, 1.059999943, 1.057493448, 0.968244553}, - {4.754167, 0.999983013, 0.99998951, 1.059999943, 1.057498455, 0.9682495}, - {4.758333, 0.999983132, 0.999989629, 1.059999943, 1.057503462, 0.968254387}, - {4.7625, 0.999983251, 0.999989748, 1.059999943, 1.057508588, 0.968259335}, - {4.766667, 0.99998343, 0.999989927, 1.059999943, 1.057513714, 0.968264282}, - {4.770833, 0.999983609, 0.999990106, 1.059999943, 1.057518721, 0.968269229}, - {4.775, 0.999983847, 0.999990284, 1.059999943, 1.057523847, 0.968274176}, - {4.779167, 0.999984086, 0.999990463, 1.059999943, 1.057529092, 0.968279123}, - {4.783333, 0.999984384, 0.999990642, 1.059999943, 1.057534218, 0.96828413}, - {4.7875, 0.999984741, 0.99999088, 1.059999943, 1.057539463, 0.968289077}, - {4.791667, 0.999985099, 0.999991119, 1.059999943, 1.057544589, 0.968294084}, - {4.795833, 0.999985456, 0.999991357, 1.059999943, 1.057549953, 0.96829915}, - {4.8, 0.999985874, 0.999991596, 1.059999943, 1.057555199, 0.968304157}, - {4.804167, 0.999986291, 0.999991834, 1.059999943, 1.057560563, 0.968309224}, - {4.808333, 0.999986768, 0.999992073, 1.059999943, 1.057565928, 0.96831429}, - {4.8125, 0.999987245, 0.999992371, 1.059999943, 1.057571292, 0.968319356}, - {4.816667, 0.999987721, 0.999992609, 1.059999943, 1.057576656, 0.968324482}, - {4.820833, 0.999988198, 0.999992907, 1.059999943, 1.05758214, 0.968329608}, - {4.825, 0.999988735, 0.999993205, 1.059999943, 1.057587624, 0.968334734}, - {4.829167, 0.999989271, 0.999993503, 1.059999943, 1.057593226, 0.96833992}, - {4.833333, 0.999989808, 0.999993742, 1.059999943, 1.05759871, 0.968345046}, - {4.8375, 0.999990404, 0.99999404, 1.059999943, 1.057604432, 0.968350291}, - {4.841667, 0.99999094, 0.999994338, 1.059999943, 1.057610035, 0.968355477}, - {4.845833, 0.999991536, 0.999994636, 1.059999943, 1.057615757, 0.968360722}, - {4.85, 0.999992132, 0.999994934, 1.059999943, 1.05762136, 0.968365967}, - {4.854167, 0.999992728, 0.999995232, 1.059999943, 1.057627201, 0.968371212}, - {4.858333, 0.999993265, 0.99999547, 1.059999943, 1.057632923, 0.968376517}, - {4.8625, 0.999993861, 0.999995768, 1.059999943, 1.057638764, 0.968381822}, - {4.866667, 0.999994457, 0.999996066, 1.059999943, 1.057644606, 0.968387127}, - {4.870833, 0.999995053, 0.999996305, 1.059999943, 1.057650447, 0.968392432}, - {4.875, 0.999995649, 0.999996603, 1.059999943, 1.057656288, 0.968397737}, - {4.879167, 0.999996185, 0.999996841, 1.059999943, 1.057662249, 0.968403101}, - {4.883333, 0.999996781, 0.999997139, 1.059999943, 1.057668209, 0.968408465}, - {4.8875, 0.999997318, 0.999997377, 1.059999943, 1.05767417, 0.96841383}, - {4.891667, 0.999997854, 0.999997616, 1.059999943, 1.05768013, 0.968419194}, - {4.895833, 0.999998391, 0.999997854, 1.059999943, 1.05768621, 0.968424559}, - {4.9, 0.999998927, 0.999998093, 1.059999943, 1.05769217, 0.968429923}, - {4.904167, 0.999999404, 0.999998271, 1.059999943, 1.05769825, 0.968435287}, - {4.908333, 0.999999881, 0.99999851, 1.059999943, 1.057704329, 0.968440712}, - {4.9125, 1.000000358, 0.999998689, 1.059999943, 1.057710409, 0.968446076}, - {4.916667, 1.000000834, 0.999998868, 1.059999943, 1.057716489, 0.96845144}, - {4.920833, 1.000001192, 0.999999046, 1.059999943, 1.057722569, 0.968456805}, - {4.925, 1.000001669, 0.999999225, 1.059999943, 1.057728648, 0.968462229}, - {4.929167, 1.000002027, 0.999999404, 1.059999943, 1.057734728, 0.968467593}, - {4.933333, 1.000002384, 0.999999523, 1.059999943, 1.057740927, 0.968472958}, - {4.9375, 1.000002742, 0.999999642, 1.059999943, 1.057747006, 0.968478262}, - {4.941667, 1.000003099, 0.999999762, 1.059999943, 1.057753086, 0.968483627}, - {4.945833, 1.000003338, 0.999999881, 1.059999943, 1.057759166, 0.968488932}, - {4.95, 1.000003576, 0.99999994, 1.059999943, 1.057765245, 0.968494236}, - {4.954167, 1.000003815, 1, 1.059999943, 1.057771325, 0.968499541}, - {4.958333, 1.000004053, 1.000000119, 1.059999943, 1.057777405, 0.968504846}, - {4.9625, 1.000004292, 1.000000119, 1.059999943, 1.057783484, 0.968510091}, - {4.966667, 1.000004411, 1.000000238, 1.059999943, 1.057789564, 0.968515337}, - {4.970833, 1.00000453, 1.000000238, 1.059999943, 1.057795525, 0.968520582}, - {4.975, 1.000004649, 1.000000238, 1.059999943, 1.057801604, 0.968525767}, - {4.979167, 1.000004768, 1.000000238, 1.059999943, 1.057807565, 0.968530953}, - {4.983333, 1.000004768, 1.000000238, 1.059999943, 1.057813525, 0.968536079}, - {4.9875, 1.000004888, 1.000000238, 1.059999943, 1.057819366, 0.968541205}, - {4.991667, 1.000004888, 1.000000238, 1.059999943, 1.057825327, 0.968546331}, - {4.995833, 1.000004768, 1.000000238, 1.059999943, 1.057831168, 0.968551338}, - {5, 1.000004768, 1.000000119, 1.059999943, 1.057837009, 0.968556404}, - {5.004167, 1.000004649, 1.000000119, 1.059999943, 1.057842851, 0.968561411}, - {5.008333, 1.000004649, 1, 1.059999943, 1.057848573, 0.968566358}, - {5.0125, 1.00000453, 1, 1.059999943, 1.057854295, 0.968571305}, - {5.016667, 1.000004292, 0.999999881, 1.059999943, 1.057860017, 0.968576252}, - {5.020833, 1.000004172, 0.999999821, 1.059999943, 1.057865739, 0.96858108}, - {5.025, 1.000003934, 0.999999702, 1.059999943, 1.057871342, 0.968585908}, - {5.029167, 1.000003815, 0.999999583, 1.059999943, 1.057876945, 0.968590677}, - {5.033333, 1.000003576, 0.999999464, 1.059999943, 1.057882428, 0.968595505}, - {5.0375, 1.000003338, 0.999999344, 1.059999943, 1.057887912, 0.968600154}, - {5.041667, 1.000003099, 0.999999225, 1.059999943, 1.057893395, 0.968604863}, - {5.045833, 1.000002742, 0.999999046, 1.059999943, 1.05789876, 0.968609512}, - {5.05, 1.000002503, 0.999998927, 1.059999943, 1.057904243, 0.968614161}, - {5.054167, 1.000002146, 0.999998748, 1.059999943, 1.057909489, 0.968618691}, - {5.058333, 1.000001788, 0.999998629, 1.059999943, 1.057914734, 0.968623221}, - {5.0625, 1.00000155, 0.99999845, 1.059999943, 1.057919979, 0.968627691}, - {5.066667, 1.000001192, 0.999998331, 1.059999943, 1.057925224, 0.968632162}, - {5.070833, 1.000000834, 0.999998152, 1.059999943, 1.05793035, 0.968636572}, - {5.075, 1.000000477, 0.999997973, 1.059999943, 1.057935357, 0.968640924}, - {5.079167, 1, 0.999997795, 1.059999943, 1.057940483, 0.968645275}, - {5.083333, 0.999999642, 0.999997616, 1.059999943, 1.05794549, 0.968649566}, - {5.0875, 0.999999285, 0.999997497, 1.059999943, 1.057950377, 0.968653798}, - {5.091667, 0.999998868, 0.999997318, 1.059999943, 1.057955265, 0.96865803}, - {5.095833, 0.99999851, 0.999997139, 1.059999943, 1.057960153, 0.968662202}, - {5.1, 0.999998093, 0.99999696, 1.059999943, 1.057964921, 0.968666315}, - {5.104167, 0.999997675, 0.999996781, 1.059999943, 1.057969689, 0.968670428}, - {5.108333, 0.999997318, 0.999996603, 1.059999943, 1.057974458, 0.968674481}, - {5.1125, 0.999996901, 0.999996483, 1.059999943, 1.057979107, 0.968678534}, - {5.116667, 0.999996543, 0.999996305, 1.059999943, 1.057983756, 0.968682528}, - {5.120833, 0.999996126, 0.999996126, 1.059999943, 1.057988405, 0.968686461}, - {5.125, 0.999995768, 0.999996006, 1.059999943, 1.057992935, 0.968690395}, - {5.129167, 0.999995351, 0.999995828, 1.059999943, 1.057997465, 0.96869427}, - {5.133333, 0.999994993, 0.999995708, 1.059999943, 1.058001995, 0.968698204}, - {5.1375, 0.999994636, 0.99999553, 1.059999943, 1.058006406, 0.968702018}, - {5.141667, 0.999994278, 0.99999541, 1.059999943, 1.058010936, 0.968705833}, - {5.145833, 0.99999398, 0.999995291, 1.059999943, 1.058015227, 0.968709588}, - {5.15, 0.999993622, 0.999995172, 1.059999943, 1.058019638, 0.968713343}, - {5.154167, 0.999993324, 0.999995053, 1.059999943, 1.05802393, 0.968717039}, - {5.158333, 0.999993026, 0.999994934, 1.059999943, 1.058028221, 0.968720734}, - {5.1625, 0.999992728, 0.999994814, 1.059999943, 1.058032513, 0.96872443}, - {5.166667, 0.99999249, 0.999994755, 1.059999943, 1.058036804, 0.968728065}, - {5.170833, 0.999992192, 0.999994636, 1.059999943, 1.058040977, 0.968731701}, - {5.175, 0.999991953, 0.999994576, 1.059999943, 1.058045149, 0.968735278}, - {5.179167, 0.999991715, 0.999994457, 1.059999943, 1.058049321, 0.968738854}, - {5.183333, 0.999991536, 0.999994397, 1.059999943, 1.058053613, 0.96874243}, - {5.1875, 0.999991357, 0.999994338, 1.059999943, 1.058057666, 0.968746006}, - {5.191667, 0.999991179, 0.999994278, 1.059999943, 1.058061838, 0.968749523}, - {5.195833, 0.999991, 0.999994278, 1.059999943, 1.058065891, 0.96875304}, - {5.2, 0.99999088, 0.999994218, 1.059999943, 1.058070064, 0.968756557}, - {5.204167, 0.999990761, 0.999994218, 1.059999943, 1.058074117, 0.968760014}, - {5.208333, 0.999990642, 0.999994159, 1.059999943, 1.05807817, 0.96876353}, - {5.2125, 0.999990523, 0.999994159, 1.059999943, 1.058082342, 0.968766987}, - {5.216667, 0.999990463, 0.999994159, 1.059999943, 1.058086395, 0.968770444}, - {5.220833, 0.999990404, 0.999994159, 1.059999943, 1.058090448, 0.968773901}, - {5.225, 0.999990404, 0.999994159, 1.059999943, 1.058094502, 0.968777359}, - {5.229167, 0.999990404, 0.999994218, 1.059999943, 1.058098555, 0.968780756}, - {5.233333, 0.999990404, 0.999994218, 1.059999943, 1.058102608, 0.968784213}, - {5.2375, 0.999990404, 0.999994278, 1.059999943, 1.058106661, 0.968787611}, - {5.241667, 0.999990463, 0.999994278, 1.059999943, 1.058110714, 0.968791068}, - {5.245833, 0.999990523, 0.999994338, 1.059999943, 1.058114767, 0.968794465}, - {5.25, 0.999990582, 0.999994397, 1.059999943, 1.05811882, 0.968797863}, - {5.254167, 0.999990702, 0.999994457, 1.059999943, 1.058122993, 0.96880132}, - {5.258333, 0.999990821, 0.999994516, 1.059999943, 1.058127046, 0.968804717}, - {5.2625, 0.99999094, 0.999994636, 1.059999943, 1.058131099, 0.968808115}, - {5.266667, 0.999991059, 0.999994695, 1.059999943, 1.058135152, 0.968811572}, - {5.270833, 0.999991238, 0.999994814, 1.059999943, 1.058139324, 0.968814969}, - {5.275, 0.999991417, 0.999994874, 1.059999943, 1.058143377, 0.968818367}, - {5.279167, 0.999991596, 0.999994993, 1.059999943, 1.05814755, 0.968821824}, - {5.283333, 0.999991775, 0.999995112, 1.059999943, 1.058151722, 0.968825221}, - {5.2875, 0.999992013, 0.999995172, 1.059999943, 1.058155775, 0.968828678}, - {5.291667, 0.999992192, 0.999995291, 1.059999943, 1.058159947, 0.968832135}, - {5.295833, 0.99999243, 0.99999541, 1.059999943, 1.05816412, 0.968835533}, - {5.3, 0.999992669, 0.99999553, 1.059999943, 1.058168292, 0.96883899}, - {5.304167, 0.999992907, 0.999995649, 1.059999943, 1.058172584, 0.968842447}, - {5.308333, 0.999993205, 0.999995768, 1.059999943, 1.058176756, 0.968845904}, - {5.3125, 0.999993443, 0.999995947, 1.059999943, 1.058180928, 0.968849361}, - {5.316667, 0.999993682, 0.999996066, 1.059999943, 1.05818522, 0.968852818}, - {5.320833, 0.99999398, 0.999996185, 1.059999943, 1.058189511, 0.968856335}, - {5.325, 0.999994278, 0.999996305, 1.059999943, 1.058193684, 0.968859792}, - {5.329167, 0.999994576, 0.999996483, 1.059999943, 1.058197975, 0.968863249}, - {5.333333, 0.999994814, 0.999996603, 1.059999943, 1.058202267, 0.968866766}, - {5.3375, 0.999995112, 0.999996722, 1.059999943, 1.058206558, 0.968870223}, - {5.341667, 0.99999541, 0.999996841, 1.059999943, 1.058210969, 0.968873739}, - {5.345833, 0.999995708, 0.99999702, 1.059999943, 1.058215261, 0.968877256}, - {5.35, 0.999996006, 0.999997139, 1.059999943, 1.058219552, 0.968880713}, - {5.354167, 0.999996305, 0.999997258, 1.059999943, 1.058223963, 0.96888423}, - {5.358333, 0.999996543, 0.999997377, 1.059999943, 1.058228374, 0.968887746}, - {5.3625, 0.999996841, 0.999997556, 1.059999943, 1.058232665, 0.968891263}, - {5.366667, 0.999997139, 0.999997675, 1.059999943, 1.058237076, 0.96889478}, - {5.370833, 0.999997377, 0.999997795, 1.059999943, 1.058241487, 0.968898296}, - {5.375, 0.999997675, 0.999997914, 1.059999943, 1.058245897, 0.968901813}, - {5.379167, 0.999997914, 0.999998033, 1.059999943, 1.058250308, 0.96890533}, - {5.383333, 0.999998212, 0.999998152, 1.059999943, 1.058254719, 0.968908846}, - {5.3875, 0.99999845, 0.999998271, 1.059999943, 1.05825913, 0.968912363}, - {5.391667, 0.999998689, 0.999998391, 1.059999943, 1.05826354, 0.96891588}, - {5.395833, 0.999998927, 0.99999845, 1.059999943, 1.058267951, 0.968919396}, - {5.4, 0.999999166, 0.999998569, 1.059999943, 1.058272362, 0.968922913}, - {5.404167, 0.999999344, 0.999998689, 1.059999943, 1.058276773, 0.96892643}, - {5.408333, 0.999999583, 0.999998748, 1.059999943, 1.058281183, 0.968929946}, - {5.4125, 0.999999762, 0.999998868, 1.059999943, 1.058285594, 0.968933463}, - {5.416667, 0.99999994, 0.999998927, 1.059999943, 1.058290124, 0.96893698}, - {5.420833, 1.000000119, 0.999998987, 1.059999943, 1.058294535, 0.968940437}, - {5.425, 1.000000238, 0.999999046, 1.059999943, 1.058298945, 0.968943954}, - {5.429167, 1.000000477, 0.999999166, 1.059999943, 1.058303356, 0.968947411}, - {5.433333, 1.000000596, 0.999999225, 1.059999943, 1.058307767, 0.968950927}, - {5.4375, 1.000000715, 0.999999225, 1.059999943, 1.058312178, 0.968954384}, - {5.441667, 1.000000834, 0.999999285, 1.059999943, 1.058316469, 0.968957841}, - {5.445833, 1.000000954, 0.999999344, 1.059999943, 1.05832088, 0.968961239}, - {5.45, 1.000000954, 0.999999404, 1.059999943, 1.058325291, 0.968964696}, - {5.454167, 1.000001073, 0.999999404, 1.059999943, 1.058329582, 0.968968093}, - {5.458333, 1.000001192, 0.999999464, 1.059999943, 1.058333993, 0.96897155}, - {5.4625, 1.000001192, 0.999999464, 1.059999943, 1.058338284, 0.968974948}, - {5.466667, 1.000001192, 0.999999464, 1.059999943, 1.058342576, 0.968978286}, - {5.470833, 1.000001311, 0.999999464, 1.059999943, 1.058346868, 0.968981683}, - {5.475, 1.000001311, 0.999999464, 1.059999943, 1.058351159, 0.968985021}, - {5.479167, 1.000001311, 0.999999464, 1.059999943, 1.058355451, 0.968988359}, - {5.483333, 1.000001192, 0.999999464, 1.059999943, 1.058359742, 0.968991697}, - {5.4875, 1.000001192, 0.999999464, 1.059999943, 1.058363914, 0.968994975}, - {5.491667, 1.000001192, 0.999999464, 1.059999943, 1.058368206, 0.968998313}, - {5.495833, 1.000001073, 0.999999404, 1.059999943, 1.058372378, 0.969001532}, - {5.5, 1.000001073, 0.999999404, 1.059999943, 1.058376551, 0.96900481}, - {5.504167, 1.000000954, 0.999999344, 1.059999943, 1.058380723, 0.969008029}, - {5.508333, 1.000000954, 0.999999285, 1.059999943, 1.058384776, 0.969011247}, - {5.5125, 1.000000834, 0.999999285, 1.059999943, 1.058388948, 0.969014466}, - {5.516667, 1.000000715, 0.999999225, 1.059999943, 1.058393002, 0.969017625}, - {5.520833, 1.000000596, 0.999999166, 1.059999943, 1.058397055, 0.969020784}, - {5.525, 1.000000477, 0.999999106, 1.059999943, 1.058401108, 0.969023883}, - {5.529167, 1.000000358, 0.999999046, 1.059999943, 1.058405161, 0.969026983}, - {5.533333, 1.000000238, 0.999998987, 1.059999943, 1.058409095, 0.969030082}, - {5.5375, 1.000000119, 0.999998927, 1.059999943, 1.058413029, 0.969033182}, - {5.541667, 0.99999994, 0.999998868, 1.059999943, 1.058416963, 0.969036222}, - {5.545833, 0.999999762, 0.999998808, 1.059999943, 1.058420897, 0.969039261}, - {5.55, 0.999999583, 0.999998748, 1.059999943, 1.05842483, 0.969042242}, - {5.554167, 0.999999404, 0.999998629, 1.059999943, 1.058428645, 0.969045222}, - {5.558333, 0.999999225, 0.999998569, 1.059999943, 1.05843246, 0.969048202}, - {5.5625, 0.999999046, 0.99999851, 1.059999943, 1.058436275, 0.969051123}, - {5.566667, 0.999998868, 0.99999845, 1.059999943, 1.058440089, 0.969054043}, - {5.570833, 0.999998689, 0.999998331, 1.059999943, 1.058443785, 0.969056964}, - {5.575, 0.99999851, 0.999998271, 1.059999943, 1.05844748, 0.969059825}, - {5.579167, 0.999998331, 0.999998152, 1.059999943, 1.058451176, 0.969062686}, - {5.583333, 0.999998152, 0.999998093, 1.059999943, 1.058454871, 0.969065487}, - {5.5875, 0.999997914, 0.999998033, 1.059999943, 1.058458567, 0.969068289}, - {5.591667, 0.999997735, 0.999997914, 1.059999943, 1.058462143, 0.96907109}, - {5.595833, 0.999997556, 0.999997854, 1.059999943, 1.058465838, 0.969073892}, - {5.6, 0.999997377, 0.999997795, 1.059999943, 1.058469415, 0.969076633}, - {5.604167, 0.999997199, 0.999997675, 1.059999943, 1.058472872, 0.969079316}, - {5.608333, 0.99999702, 0.999997616, 1.059999943, 1.058476448, 0.969082057}, - {5.6125, 0.999996841, 0.999997556, 1.059999943, 1.058480024, 0.96908474}, - {5.616667, 0.999996662, 0.999997497, 1.059999943, 1.058483481, 0.969087422}, - {5.620833, 0.999996483, 0.999997377, 1.059999943, 1.058486938, 0.969090104}, - {5.625, 0.999996305, 0.999997318, 1.059999943, 1.058490396, 0.969092727}, - {5.629167, 0.999996126, 0.999997258, 1.059999943, 1.058493853, 0.969095349}, - {5.633333, 0.999996006, 0.999997199, 1.059999943, 1.05849731, 0.969097972}, - {5.6375, 0.999995828, 0.999997139, 1.059999943, 1.058500648, 0.969100535}, - {5.641667, 0.999995708, 0.999997079, 1.059999943, 1.058503985, 0.969103098}, - {5.645833, 0.99999553, 0.99999702, 1.059999943, 1.058507323, 0.969105661}, - {5.65, 0.99999541, 0.99999696, 1.059999943, 1.05851078, 0.969108224}, - {5.654167, 0.999995291, 0.999996901, 1.059999943, 1.058514118, 0.969110727}, - {5.658333, 0.999995172, 0.999996901, 1.059999943, 1.058517337, 0.969113231}, - {5.6625, 0.999995053, 0.999996841, 1.059999943, 1.058520675, 0.969115734}, - {5.666667, 0.999994934, 0.999996781, 1.059999943, 1.058524013, 0.969118238}, - {5.670833, 0.999994874, 0.999996781, 1.059999943, 1.058527231, 0.969120741}, - {5.675, 0.999994755, 0.999996722, 1.059999943, 1.058530569, 0.969123185}, - {5.679167, 0.999994695, 0.999996722, 1.059999943, 1.058533788, 0.969125628}, - {5.683333, 0.999994636, 0.999996662, 1.059999943, 1.058537006, 0.969128072}, - {5.6875, 0.999994576, 0.999996662, 1.059999943, 1.058540225, 0.969130516}, - {5.691667, 0.999994516, 0.999996662, 1.059999943, 1.058543444, 0.96913296}, - {5.695833, 0.999994457, 0.999996603, 1.059999943, 1.058546662, 0.969135344}, - {5.7, 0.999994397, 0.999996603, 1.059999943, 1.05855, 0.969137788}, - {5.704167, 0.999994397, 0.999996603, 1.059999943, 1.0585531, 0.969140172}, - {5.708333, 0.999994397, 0.999996603, 1.059999943, 1.058556318, 0.969142616}, - {5.7125, 0.999994397, 0.999996603, 1.059999943, 1.058559537, 0.969145}, - {5.716667, 0.999994397, 0.999996603, 1.059999943, 1.058562756, 0.969147384}, - {5.720833, 0.999994397, 0.999996662, 1.059999943, 1.058565974, 0.969149768}, - {5.725, 0.999994397, 0.999996662, 1.059999943, 1.058569193, 0.969152153}, - {5.729167, 0.999994457, 0.999996662, 1.059999943, 1.058572292, 0.969154537}, - {5.733333, 0.999994457, 0.999996722, 1.059999943, 1.058575511, 0.969156861}, - {5.7375, 0.999994516, 0.999996722, 1.059999943, 1.05857873, 0.969159245}, - {5.741667, 0.999994576, 0.999996781, 1.059999943, 1.058581948, 0.96916163}, - {5.745833, 0.999994636, 0.999996781, 1.059999943, 1.058585048, 0.969164014}, - {5.75, 0.999994695, 0.999996841, 1.059999943, 1.058588266, 0.969166338}, - {5.754167, 0.999994755, 0.999996901, 1.059999943, 1.058591485, 0.969168723}, - {5.758333, 0.999994874, 0.999996901, 1.059999943, 1.058594704, 0.969171047}, - {5.7625, 0.999994934, 0.99999696, 1.059999943, 1.058597922, 0.969173431}, - {5.766667, 0.999995053, 0.99999702, 1.059999943, 1.058601022, 0.969175816}, - {5.770833, 0.999995112, 0.999997079, 1.059999943, 1.05860424, 0.96917814}, - {5.775, 0.999995232, 0.999997139, 1.059999943, 1.058607459, 0.969180524}, - {5.779167, 0.999995351, 0.999997199, 1.059999943, 1.058610678, 0.969182849}, - {5.783333, 0.99999547, 0.999997258, 1.059999943, 1.058613896, 0.969185233}, - {5.7875, 0.999995589, 0.999997318, 1.059999943, 1.058617115, 0.969187558}, - {5.791667, 0.999995708, 0.999997377, 1.059999943, 1.058620334, 0.969189942}, - {5.795833, 0.999995828, 0.999997437, 1.059999943, 1.058623552, 0.969192326}, - {5.8, 0.999995947, 0.999997497, 1.059999943, 1.058626771, 0.969194651}, - {5.804167, 0.999996126, 0.999997556, 1.059999943, 1.05862999, 0.969197035}, - {5.808333, 0.999996245, 0.999997616, 1.059999943, 1.058633208, 0.969199359}, - {5.8125, 0.999996364, 0.999997675, 1.059999943, 1.058636427, 0.969201744}, - {5.816667, 0.999996543, 0.999997795, 1.059999943, 1.058639646, 0.969204128}, - {5.820833, 0.999996662, 0.999997854, 1.059999943, 1.058642983, 0.969206452}, - {5.825, 0.999996781, 0.999997914, 1.059999943, 1.058646202, 0.969208837}, - {5.829167, 0.99999696, 0.999997973, 1.059999943, 1.058649421, 0.969211221}, - {5.833333, 0.999997079, 0.999998033, 1.059999943, 1.058652639, 0.969213545}, - {5.8375, 0.999997199, 0.999998093, 1.059999943, 1.058655977, 0.96921593}, - {5.841667, 0.999997377, 0.999998212, 1.059999943, 1.058659196, 0.969218314}, - {5.845833, 0.999997497, 0.999998271, 1.059999943, 1.058662415, 0.969220638}, - {5.85, 0.999997675, 0.999998331, 1.059999943, 1.058665752, 0.969223022}, - {5.854167, 0.999997795, 0.999998391, 1.059999943, 1.058668971, 0.969225407}, - {5.858333, 0.999997914, 0.99999845, 1.059999943, 1.058672309, 0.969227791}, - {5.8625, 0.999998033, 0.99999851, 1.059999943, 1.058675528, 0.969230115}, - {5.866667, 0.999998152, 0.999998569, 1.059999943, 1.058678746, 0.9692325}, - {5.870833, 0.999998331, 0.999998629, 1.059999943, 1.058682084, 0.969234824}, - {5.875, 0.99999845, 0.999998689, 1.059999943, 1.058685303, 0.969237208}, - {5.879167, 0.999998569, 0.999998748, 1.059999943, 1.058688641, 0.969239593}, - {5.883333, 0.999998629, 0.999998808, 1.059999943, 1.058691859, 0.969241917}, - {5.8875, 0.999998748, 0.999998868, 1.059999943, 1.058695078, 0.969244301}, - {5.891667, 0.999998868, 0.999998927, 1.059999943, 1.058698416, 0.969246626}, - {5.895833, 0.999998987, 0.999998987, 1.059999943, 1.058701634, 0.96924895}, - {5.9, 0.999999046, 0.999998987, 1.059999943, 1.058704853, 0.969251335}, - {5.904167, 0.999999166, 0.999999046, 1.059999943, 1.058708191, 0.969253659}, - {5.908333, 0.999999225, 0.999999106, 1.059999943, 1.05871141, 0.969255984}, - {5.9125, 0.999999344, 0.999999106, 1.059999943, 1.058714628, 0.969258308}, - {5.916667, 0.999999404, 0.999999166, 1.059999943, 1.058717847, 0.969260633}, - {5.920833, 0.999999464, 0.999999166, 1.059999943, 1.058721066, 0.969262958}, - {5.925, 0.999999523, 0.999999225, 1.059999943, 1.058724284, 0.969265282}, - {5.929167, 0.999999583, 0.999999225, 1.059999943, 1.058727503, 0.969267547}, - {5.933333, 0.999999642, 0.999999285, 1.059999943, 1.058730721, 0.969269872}, - {5.9375, 0.999999642, 0.999999285, 1.059999943, 1.05873394, 0.969272137}, - {5.941667, 0.999999702, 0.999999285, 1.059999943, 1.058737159, 0.969274402}, - {5.945833, 0.999999702, 0.999999344, 1.059999943, 1.058740377, 0.969276667}, - {5.95, 0.999999762, 0.999999344, 1.059999943, 1.058743477, 0.969278991}, - {5.954167, 0.999999762, 0.999999344, 1.059999943, 1.058746696, 0.969281197}, - {5.958333, 0.999999762, 0.999999344, 1.059999943, 1.058749795, 0.969283462}, - {5.9625, 0.999999762, 0.999999344, 1.059999943, 1.058753014, 0.969285727}, - {5.966667, 0.999999762, 0.999999344, 1.059999943, 1.058756113, 0.969287932}, - {5.970833, 0.999999762, 0.999999344, 1.059999943, 1.058759212, 0.969290137}, - {5.975, 0.999999762, 0.999999344, 1.059999943, 1.058762312, 0.969292343}, - {5.979167, 0.999999762, 0.999999344, 1.059999943, 1.058765411, 0.969294548}, - {5.983333, 0.999999702, 0.999999344, 1.059999943, 1.058768511, 0.969296753}, - {5.9875, 0.999999702, 0.999999285, 1.059999943, 1.05877161, 0.969298959}, - {5.991667, 0.999999642, 0.999999285, 1.059999943, 1.05877471, 0.969301105}, - {5.995833, 0.999999583, 0.999999285, 1.059999943, 1.05877769, 0.96930325}, - {6, 0.999999583, 0.999999225, 1.059999943, 1.058780789, 0.969305396}, - {6.004167, 0.999999523, 0.999999225, 1.059999943, 1.05878377, 0.969307542}, - {6.008333, 0.999999464, 0.999999225, 1.059999943, 1.05878675, 0.969309628}, - {6.0125, 0.999999404, 0.999999166, 1.059999943, 1.05878973, 0.969311774}, - {6.016667, 0.999999344, 0.999999166, 1.059999943, 1.05879271, 0.96931386}, - {6.020833, 0.999999285, 0.999999106, 1.059999943, 1.058795691, 0.969315946}, - {6.025, 0.999999166, 0.999999106, 1.059999943, 1.058798671, 0.969318032}, - {6.029167, 0.999999106, 0.999999046, 1.059999943, 1.058801532, 0.969320059}, - {6.033333, 0.999999046, 0.999999046, 1.059999943, 1.058804512, 0.969322145}, - {6.0375, 0.999998987, 0.999998987, 1.059999943, 1.058807373, 0.969324172}, - {6.041667, 0.999998868, 0.999998927, 1.059999943, 1.058810234, 0.969326198}, - {6.045833, 0.999998808, 0.999998927, 1.059999943, 1.058813095, 0.969328165}, - {6.05, 0.999998689, 0.999998868, 1.059999943, 1.058815956, 0.969330192}, - {6.054167, 0.999998629, 0.999998808, 1.059999943, 1.058818817, 0.969332159}, - {6.058333, 0.99999851, 0.999998808, 1.059999943, 1.058821678, 0.969334126}, - {6.0625, 0.99999845, 0.999998748, 1.059999943, 1.05882442, 0.969336092}, - {6.066667, 0.999998331, 0.999998689, 1.059999943, 1.058827281, 0.969338059}, - {6.070833, 0.999998271, 0.999998689, 1.059999943, 1.058830023, 0.969339967}, - {6.075, 0.999998152, 0.999998629, 1.059999943, 1.058832765, 0.969341874}, - {6.079167, 0.999998093, 0.999998569, 1.059999943, 1.058835626, 0.969343781}, - {6.083333, 0.999997973, 0.999998569, 1.059999943, 1.058838367, 0.969345689}, - {6.0875, 0.999997914, 0.99999851, 1.059999943, 1.05884099, 0.969347596}, - {6.091667, 0.999997795, 0.99999845, 1.059999943, 1.058843732, 0.969349504}, - {6.095833, 0.999997735, 0.99999845, 1.059999943, 1.058846474, 0.969351351}, - {6.1, 0.999997675, 0.999998391, 1.059999943, 1.058849096, 0.969353199}, - {6.104167, 0.999997556, 0.999998391, 1.059999943, 1.058851838, 0.969355047}, - {6.108333, 0.999997497, 0.999998331, 1.059999943, 1.058854461, 0.969356894}, - {6.1125, 0.999997377, 0.999998271, 1.059999943, 1.058857083, 0.969358683}, - {6.116667, 0.999997318, 0.999998271, 1.059999943, 1.058859706, 0.96936053}, - {6.120833, 0.999997258, 0.999998212, 1.059999943, 1.058862329, 0.969362319}, - {6.125, 0.999997199, 0.999998212, 1.059999943, 1.058864951, 0.969364107}, - {6.129167, 0.999997139, 0.999998152, 1.059999943, 1.058867574, 0.969365895}, - {6.133333, 0.99999702, 0.999998152, 1.059999943, 1.058870196, 0.969367683}, - {6.1375, 0.99999696, 0.999998152, 1.059999943, 1.058872819, 0.969369411}, - {6.141667, 0.999996901, 0.999998093, 1.059999943, 1.058875322, 0.9693712}, - {6.145833, 0.999996901, 0.999998093, 1.059999943, 1.058877945, 0.969372928}, - {6.15, 0.999996841, 0.999998033, 1.059999943, 1.058880448, 0.969374716}, - {6.154167, 0.999996781, 0.999998033, 1.059999943, 1.058883071, 0.969376445}, - {6.158333, 0.999996722, 0.999998033, 1.059999943, 1.058885574, 0.969378173}, - {6.1625, 0.999996722, 0.999998033, 1.059999943, 1.058888078, 0.969379902}, - {6.166667, 0.999996662, 0.999997973, 1.059999943, 1.0588907, 0.969381571}, - {6.170833, 0.999996603, 0.999997973, 1.059999943, 1.058893204, 0.969383299}, - {6.175, 0.999996603, 0.999997973, 1.059999943, 1.058895707, 0.969385028}, - {6.179167, 0.999996603, 0.999997973, 1.059999943, 1.058898211, 0.969386697}, - {6.183333, 0.999996543, 0.999997973, 1.059999943, 1.058900714, 0.969388425}, - {6.1875, 0.999996543, 0.999997973, 1.059999943, 1.058903217, 0.969390094}, - {6.191667, 0.999996543, 0.999997973, 1.059999943, 1.058905721, 0.969391763}, - {6.195833, 0.999996543, 0.999997973, 1.059999943, 1.058908105, 0.969393432}, - {6.2, 0.999996543, 0.999997973, 1.059999943, 1.058910608, 0.969395101}, - {6.204167, 0.999996543, 0.999997973, 1.059999943, 1.058913112, 0.96939677}, - {6.208333, 0.999996543, 0.999997973, 1.059999943, 1.058915615, 0.969398439}, - {6.2125, 0.999996543, 0.999998033, 1.059999943, 1.058918118, 0.969400108}, - {6.216667, 0.999996603, 0.999998033, 1.059999943, 1.058920503, 0.969401777}, - {6.220833, 0.999996603, 0.999998033, 1.059999943, 1.058923006, 0.969403446}, - {6.225, 0.999996603, 0.999998033, 1.059999943, 1.058925509, 0.969405115}, - {6.229167, 0.999996662, 0.999998093, 1.059999943, 1.058927894, 0.969406724}, - {6.233333, 0.999996722, 0.999998093, 1.059999943, 1.058930397, 0.969408393}, - {6.2375, 0.999996722, 0.999998093, 1.059999943, 1.0589329, 0.969410062}, - {6.241667, 0.999996781, 0.999998152, 1.059999943, 1.058935285, 0.969411671}, - {6.245833, 0.999996781, 0.999998152, 1.059999943, 1.058937788, 0.96941334}, - {6.25, 0.999996841, 0.999998152, 1.059999943, 1.058940291, 0.969414949}, - {6.254167, 0.999996901, 0.999998212, 1.059999943, 1.058942676, 0.969416618}, - {6.258333, 0.99999696, 0.999998212, 1.059999943, 1.058945179, 0.969418228}, - {6.2625, 0.99999702, 0.999998271, 1.059999943, 1.058947563, 0.969419897}, - {6.266667, 0.999997079, 0.999998271, 1.059999943, 1.058950067, 0.969421506}, - {6.270833, 0.999997139, 0.999998331, 1.059999943, 1.058952451, 0.969423175}, - {6.275, 0.999997199, 0.999998331, 1.059999943, 1.058954954, 0.969424784}, - {6.279167, 0.999997258, 0.999998391, 1.059999943, 1.058957458, 0.969426453}, - {6.283333, 0.999997318, 0.99999845, 1.059999943, 1.058959842, 0.969428062}, - {6.2875, 0.999997377, 0.99999845, 1.059999943, 1.058962345, 0.969429672}, - {6.291667, 0.999997437, 0.99999851, 1.059999943, 1.058964729, 0.969431341}, - {6.295833, 0.999997497, 0.99999851, 1.059999943, 1.058967233, 0.96943295}, - {6.3, 0.999997556, 0.999998569, 1.059999943, 1.058969617, 0.969434559}, - {6.304167, 0.999997675, 0.999998629, 1.059999943, 1.05897212, 0.969436228}, - {6.308333, 0.999997735, 0.999998629, 1.059999943, 1.058974504, 0.969437838}, - {6.3125, 0.999997795, 0.999998689, 1.059999943, 1.058977008, 0.969439447}, - {6.316667, 0.999997854, 0.999998689, 1.059999943, 1.058979511, 0.969441116}, - {6.320833, 0.999997914, 0.999998748, 1.059999943, 1.058981895, 0.969442725}, - {6.325, 0.999998033, 0.999998808, 1.059999943, 1.058984399, 0.969444335}, - {6.329167, 0.999998093, 0.999998808, 1.059999943, 1.058986783, 0.969445944}, - {6.333333, 0.999998152, 0.999998868, 1.059999943, 1.058989286, 0.969447553}, - {6.3375, 0.999998212, 0.999998868, 1.059999943, 1.058991671, 0.969449222}, - {6.341667, 0.999998271, 0.999998927, 1.059999943, 1.058994174, 0.969450831}, - {6.345833, 0.999998331, 0.999998927, 1.059999943, 1.058996558, 0.969452441}, - {6.35, 0.999998391, 0.999998987, 1.059999943, 1.058999062, 0.96945405}, - {6.354167, 0.99999845, 0.999998987, 1.059999943, 1.059001446, 0.969455659}, - {6.358333, 0.99999851, 0.999999046, 1.059999943, 1.05900383, 0.969457269}, - {6.3625, 0.999998569, 0.999999046, 1.059999943, 1.059006333, 0.969458878}, - {6.366667, 0.999998629, 0.999999106, 1.059999943, 1.059008718, 0.969460487}, - {6.370833, 0.999998689, 0.999999106, 1.059999943, 1.059011221, 0.969462097}, - {6.375, 0.999998748, 0.999999166, 1.059999943, 1.059013605, 0.969463706}, - {6.379167, 0.999998808, 0.999999166, 1.059999943, 1.059015989, 0.969465256}, - {6.383333, 0.999998868, 0.999999225, 1.059999943, 1.059018493, 0.969466865}, - {6.3875, 0.999998927, 0.999999225, 1.059999943, 1.059020877, 0.969468474}, - {6.391667, 0.999998927, 0.999999225, 1.059999943, 1.059023261, 0.969470024}, - {6.395833, 0.999998987, 0.999999285, 1.059999943, 1.059025645, 0.969471633}, - {6.4, 0.999999046, 0.999999285, 1.059999943, 1.059028029, 0.969473183}, - {6.404167, 0.999999046, 0.999999285, 1.059999943, 1.059030533, 0.969474792}, - {6.408333, 0.999999106, 0.999999344, 1.059999943, 1.059032917, 0.969476342}, - {6.4125, 0.999999106, 0.999999344, 1.059999943, 1.059035301, 0.969477892}, - {6.416667, 0.999999166, 0.999999344, 1.059999943, 1.059037685, 0.969479501}, - {6.420833, 0.999999166, 0.999999344, 1.059999943, 1.05904007, 0.969481051}, - {6.425, 0.999999225, 0.999999344, 1.059999943, 1.059042335, 0.969482601}, - {6.429167, 0.999999225, 0.999999404, 1.059999943, 1.059044719, 0.96948415}, - {6.433333, 0.999999225, 0.999999404, 1.059999943, 1.059047103, 0.9694857}, - {6.4375, 0.999999225, 0.999999404, 1.059999943, 1.059049487, 0.96948719}, - {6.441667, 0.999999225, 0.999999404, 1.059999943, 1.059051752, 0.96948874}, - {6.445833, 0.999999285, 0.999999404, 1.059999943, 1.059054136, 0.96949029}, - {6.45, 0.999999285, 0.999999404, 1.059999943, 1.05905652, 0.96949178}, - {6.454167, 0.999999285, 0.999999404, 1.059999943, 1.059058785, 0.96949327}, - {6.458333, 0.999999225, 0.999999404, 1.059999943, 1.05906117, 0.96949482}, - {6.4625, 0.999999225, 0.999999404, 1.059999943, 1.059063435, 0.96949631}, - {6.466667, 0.999999225, 0.999999404, 1.059999943, 1.0590657, 0.9694978}, - {6.470833, 0.999999225, 0.999999404, 1.059999943, 1.059067965, 0.96949929}, - {6.475, 0.999999225, 0.999999344, 1.059999943, 1.059070349, 0.96950078}, - {6.479167, 0.999999225, 0.999999344, 1.059999943, 1.059072614, 0.96950227}, - {6.483333, 0.999999166, 0.999999344, 1.059999943, 1.059074879, 0.969503701}, - {6.4875, 0.999999166, 0.999999344, 1.059999943, 1.059077144, 0.969505191}, - {6.491667, 0.999999106, 0.999999344, 1.059999943, 1.059079289, 0.969506621}, - {6.495833, 0.999999106, 0.999999344, 1.059999943, 1.059081554, 0.969508052}, - {6.5, 0.999999046, 0.999999285, 1.059999943, 1.059083819, 0.969509542}, - {6.504167, 0.999999046, 0.999999285, 1.059999943, 1.059086084, 0.969510913}, - {6.508333, 0.999998987, 0.999999285, 1.059999943, 1.05908823, 0.969512343}, - {6.5125, 0.999998987, 0.999999285, 1.059999943, 1.059090495, 0.969513774}, - {6.516667, 0.999998927, 0.999999225, 1.059999943, 1.059092641, 0.969515204}, - {6.520833, 0.999998927, 0.999999225, 1.059999943, 1.059094787, 0.969516575}, - {6.525, 0.999998868, 0.999999225, 1.059999943, 1.059097052, 0.969518006}, - {6.529167, 0.999998808, 0.999999225, 1.059999943, 1.059099197, 0.969519377}, - {6.533333, 0.999998808, 0.999999166, 1.059999943, 1.059101343, 0.969520748}, - {6.5375, 0.999998748, 0.999999166, 1.059999943, 1.059103489, 0.969522119}, - {6.541667, 0.999998689, 0.999999166, 1.059999943, 1.059105635, 0.969523489}, - {6.545833, 0.999998689, 0.999999106, 1.059999943, 1.05910778, 0.96952486}, - {6.55, 0.999998629, 0.999999106, 1.059999943, 1.059109926, 0.969526231}, - {6.554167, 0.999998569, 0.999999106, 1.059999943, 1.059111953, 0.969527543}, - {6.558333, 0.999998569, 0.999999046, 1.059999943, 1.059114099, 0.969528914}, - {6.5625, 0.99999851, 0.999999046, 1.059999943, 1.059116125, 0.969530225}, - {6.566667, 0.99999845, 0.999999046, 1.059999943, 1.059118271, 0.969531536}, - {6.570833, 0.999998391, 0.999998987, 1.059999943, 1.059120297, 0.969532847}, - {6.575, 0.999998391, 0.999998987, 1.059999943, 1.059122443, 0.969534159}, - {6.579167, 0.999998331, 0.999998987, 1.059999943, 1.05912447, 0.96953547}, - {6.583333, 0.999998271, 0.999998927, 1.059999943, 1.059126496, 0.969536781}, - {6.5875, 0.999998271, 0.999998927, 1.059999943, 1.059128523, 0.969538093}, - {6.591667, 0.999998212, 0.999998927, 1.059999943, 1.059130669, 0.969539344}, - {6.595833, 0.999998152, 0.999998927, 1.059999943, 1.059132695, 0.969540656}, - {6.6, 0.999998152, 0.999998868, 1.059999943, 1.059134722, 0.969541907}, - {6.604167, 0.999998093, 0.999998868, 1.059999943, 1.059136629, 0.969543159}, - {6.608333, 0.999998093, 0.999998868, 1.059999943, 1.059138656, 0.96954447}, - {6.6125, 0.999998033, 0.999998868, 1.059999943, 1.059140682, 0.969545722}, - {6.616667, 0.999998033, 0.999998808, 1.059999943, 1.059142709, 0.969546974}, - {6.620833, 0.999997973, 0.999998808, 1.059999943, 1.059144616, 0.969548166}, - {6.625, 0.999997973, 0.999998808, 1.059999943, 1.059146643, 0.969549418}, - {6.629167, 0.999997914, 0.999998808, 1.059999943, 1.059148669, 0.969550669}, - {6.633333, 0.999997914, 0.999998808, 1.059999943, 1.059150577, 0.969551921}, - {6.6375, 0.999997854, 0.999998808, 1.059999943, 1.059152603, 0.969553113}, - {6.641667, 0.999997854, 0.999998748, 1.059999943, 1.059154511, 0.969554365}, - {6.645833, 0.999997854, 0.999998748, 1.059999943, 1.059156418, 0.969555557}, - {6.65, 0.999997795, 0.999998748, 1.059999943, 1.059158444, 0.969556749}, - {6.654167, 0.999997795, 0.999998748, 1.059999943, 1.059160352, 0.969558001}, - {6.658333, 0.999997795, 0.999998748, 1.059999943, 1.059162259, 0.969559193}, - {6.6625, 0.999997795, 0.999998748, 1.059999943, 1.059164166, 0.969560385}, - {6.666667, 0.999997795, 0.999998748, 1.059999943, 1.059166193, 0.969561577}, - {6.670833, 0.999997795, 0.999998748, 1.059999943, 1.0591681, 0.969562769}, - {6.675, 0.999997795, 0.999998748, 1.059999943, 1.059170008, 0.969563961}, - {6.679167, 0.999997795, 0.999998748, 1.059999943, 1.059171915, 0.969565153}, - {6.683333, 0.999997795, 0.999998748, 1.059999943, 1.059173822, 0.969566345}, - {6.6875, 0.999997795, 0.999998748, 1.059999943, 1.05917573, 0.969567478}, - {6.691667, 0.999997795, 0.999998748, 1.059999943, 1.059177637, 0.96956867}, - {6.695833, 0.999997795, 0.999998748, 1.059999943, 1.059179544, 0.969569862}, - {6.7, 0.999997795, 0.999998808, 1.059999943, 1.059181452, 0.969571054}, - {6.704167, 0.999997795, 0.999998808, 1.059999943, 1.059183359, 0.969572186}, - {6.708333, 0.999997795, 0.999998808, 1.059999943, 1.059185266, 0.969573379}, - {6.7125, 0.999997854, 0.999998808, 1.059999943, 1.059187055, 0.969574511}, - {6.716667, 0.999997854, 0.999998808, 1.059999943, 1.059188962, 0.969575703}, - {6.720833, 0.999997854, 0.999998808, 1.059999943, 1.059190869, 0.969576836}, - {6.725, 0.999997854, 0.999998868, 1.059999943, 1.059192777, 0.969578028}, - {6.729167, 0.999997914, 0.999998868, 1.059999943, 1.059194684, 0.96957916}, - {6.733333, 0.999997914, 0.999998868, 1.059999943, 1.059196472, 0.969580352}, - {6.7375, 0.999997973, 0.999998868, 1.059999943, 1.05919838, 0.969581485}, - {6.741667, 0.999997973, 0.999998868, 1.059999943, 1.059200287, 0.969582617}, - {6.745833, 0.999997973, 0.999998927, 1.059999943, 1.059202075, 0.96958375}, - {6.75, 0.999998033, 0.999998927, 1.059999943, 1.059203982, 0.969584942}, - {6.754167, 0.999998033, 0.999998927, 1.059999943, 1.05920589, 0.969586074}, - {6.758333, 0.999998093, 0.999998987, 1.059999943, 1.059207678, 0.969587207}, - {6.7625, 0.999998093, 0.999998987, 1.059999943, 1.059209585, 0.969588339}, - {6.766667, 0.999998152, 0.999998987, 1.059999943, 1.059211493, 0.969589531}, - {6.770833, 0.999998212, 0.999998987, 1.059999943, 1.059213281, 0.969590664}, - {6.775, 0.999998212, 0.999999046, 1.059999943, 1.059215188, 0.969591796}, - {6.779167, 0.999998271, 0.999999046, 1.059999943, 1.059216976, 0.969592929}, - {6.783333, 0.999998271, 0.999999046, 1.059999943, 1.059218884, 0.969594061}, - {6.7875, 0.999998331, 0.999999106, 1.059999943, 1.059220791, 0.969595194}, - {6.791667, 0.999998331, 0.999999106, 1.059999943, 1.059222579, 0.969596326}, - {6.795833, 0.999998391, 0.999999106, 1.059999943, 1.059224486, 0.969597459}, - {6.8, 0.99999845, 0.999999166, 1.059999943, 1.059226274, 0.969598591}, - {6.804167, 0.99999845, 0.999999166, 1.059999943, 1.059228182, 0.969599724}, - {6.808333, 0.99999851, 0.999999166, 1.059999943, 1.05922997, 0.969600856}, - {6.8125, 0.99999851, 0.999999166, 1.059999943, 1.059231758, 0.969601989}, - {6.816667, 0.999998569, 0.999999225, 1.059999943, 1.059233665, 0.969603121}, - {6.820833, 0.999998629, 0.999999225, 1.059999943, 1.059235454, 0.969604194}, - {6.825, 0.999998629, 0.999999225, 1.059999943, 1.059237361, 0.969605327}, - {6.829167, 0.999998689, 0.999999285, 1.059999943, 1.059239149, 0.969606459}, - {6.833333, 0.999998689, 0.999999285, 1.059999943, 1.059240937, 0.969607592}, - {6.8375, 0.999998748, 0.999999285, 1.059999943, 1.059242845, 0.969608724}, - {6.841667, 0.999998748, 0.999999285, 1.059999943, 1.059244633, 0.969609797}, - {6.845833, 0.999998808, 0.999999344, 1.059999943, 1.059246421, 0.969610929}, - {6.85, 0.999998808, 0.999999344, 1.059999943, 1.059248328, 0.969612062}, - {6.854167, 0.999998868, 0.999999344, 1.059999943, 1.059250116, 0.969613135}, - {6.858333, 0.999998868, 0.999999344, 1.059999943, 1.059251904, 0.969614267}, - {6.8625, 0.999998927, 0.999999404, 1.059999943, 1.059253693, 0.96961534}, - {6.866667, 0.999998927, 0.999999404, 1.059999943, 1.0592556, 0.969616473}, - {6.870833, 0.999998987, 0.999999404, 1.059999943, 1.059257388, 0.969617546}, - {6.875, 0.999998987, 0.999999404, 1.059999943, 1.059259176, 0.969618618}, - {6.879167, 0.999998987, 0.999999404, 1.059999943, 1.059260964, 0.969619751}, - {6.883333, 0.999999046, 0.999999464, 1.059999943, 1.059262753, 0.969620824}, - {6.8875, 0.999999046, 0.999999464, 1.059999943, 1.059264541, 0.969621897}, - {6.891667, 0.999999046, 0.999999464, 1.059999943, 1.059266329, 0.96962297}, - {6.895833, 0.999999106, 0.999999464, 1.059999943, 1.059268117, 0.969624102}, - {6.9, 0.999999106, 0.999999464, 1.059999943, 1.059269905, 0.969625175}, - {6.904167, 0.999999106, 0.999999464, 1.059999943, 1.059271693, 0.969626248}, - {6.908333, 0.999999106, 0.999999464, 1.059999943, 1.059273481, 0.969627321}, - {6.9125, 0.999999106, 0.999999464, 1.059999943, 1.05927515, 0.969628394}, - {6.916667, 0.999999166, 0.999999464, 1.059999943, 1.059276938, 0.969629467}, - {6.920833, 0.999999166, 0.999999464, 1.059999943, 1.059278727, 0.96963048}, - {6.925, 0.999999166, 0.999999464, 1.059999943, 1.059280515, 0.969631553}, - {6.929167, 0.999999166, 0.999999523, 1.059999943, 1.059282184, 0.969632626}, - {6.933333, 0.999999166, 0.999999523, 1.059999943, 1.059283972, 0.969633639}, - {6.9375, 0.999999166, 0.999999523, 1.059999943, 1.05928576, 0.969634712}, - {6.941667, 0.999999166, 0.999999523, 1.059999943, 1.059287429, 0.969635725}, - {6.945833, 0.999999166, 0.999999523, 1.059999943, 1.059289217, 0.969636798}, - {6.95, 0.999999166, 0.999999523, 1.059999943, 1.059290886, 0.969637811}, - {6.954167, 0.999999166, 0.999999464, 1.059999943, 1.059292555, 0.969638884}, - {6.958333, 0.999999166, 0.999999464, 1.059999943, 1.059294343, 0.969639897}, - {6.9625, 0.999999166, 0.999999464, 1.059999943, 1.059296012, 0.969640911}, - {6.966667, 0.999999106, 0.999999464, 1.059999943, 1.059297681, 0.969641924}, - {6.970833, 0.999999106, 0.999999464, 1.059999943, 1.059299469, 0.969642937}, - {6.975, 0.999999106, 0.999999464, 1.059999943, 1.059301138, 0.96964395}, - {6.979167, 0.999999106, 0.999999464, 1.059999943, 1.059302807, 0.969644964}, - {6.983333, 0.999999106, 0.999999464, 1.059999943, 1.059304476, 0.969645977}, - {6.9875, 0.999999106, 0.999999464, 1.059999943, 1.059306145, 0.969646931}, - {6.991667, 0.999999046, 0.999999464, 1.059999943, 1.059307814, 0.969647944}, - {6.995833, 0.999999046, 0.999999464, 1.059999943, 1.059309483, 0.969648957}, - {7, 0.999999046, 0.999999464, 1.059999943, 1.059311152, 0.969649911}, - {7.004167, 0.999999046, 0.999999404, 1.059999943, 1.05931282, 0.969650924}, - {7.008333, 0.999998987, 0.999999404, 1.059999943, 1.05931437, 0.969651878}, - {7.0125, 0.999998987, 0.999999404, 1.059999943, 1.059316039, 0.969652832}, - {7.016667, 0.999998987, 0.999999404, 1.059999943, 1.059317708, 0.969653785}, - {7.020833, 0.999998927, 0.999999404, 1.059999943, 1.059319258, 0.969654799}, - {7.025, 0.999998927, 0.999999404, 1.059999943, 1.059320927, 0.969655752}, - {7.029167, 0.999998927, 0.999999404, 1.059999943, 1.059322596, 0.969656706}, - {7.033333, 0.999998868, 0.999999344, 1.059999943, 1.059324145, 0.96965766}, - {7.0375, 0.999998868, 0.999999344, 1.059999943, 1.059325695, 0.969658554}, - {7.041667, 0.999998868, 0.999999344, 1.059999943, 1.059327364, 0.969659507}, - {7.045833, 0.999998808, 0.999999344, 1.059999943, 1.059328914, 0.969660461}, - {7.05, 0.999998808, 0.999999344, 1.059999943, 1.059330583, 0.969661415}, - {7.054167, 0.999998808, 0.999999344, 1.059999943, 1.059332132, 0.969662309}, - {7.058333, 0.999998748, 0.999999344, 1.059999943, 1.059333682, 0.969663262}, - {7.0625, 0.999998748, 0.999999285, 1.059999943, 1.059335232, 0.969664156}, - {7.066667, 0.999998748, 0.999999285, 1.059999943, 1.059336782, 0.96966511}, - {7.070833, 0.999998689, 0.999999285, 1.059999943, 1.059338331, 0.969666004}, - {7.075, 0.999998689, 0.999999285, 1.059999943, 1.059339881, 0.969666898}, - {7.079167, 0.999998689, 0.999999285, 1.059999943, 1.059341431, 0.969667792}, - {7.083333, 0.999998689, 0.999999285, 1.059999943, 1.05934298, 0.969668686}, - {7.0875, 0.999998629, 0.999999285, 1.059999943, 1.05934453, 0.96966958}, - {7.091667, 0.999998629, 0.999999285, 1.059999943, 1.05934608, 0.969670475}, - {7.095833, 0.999998629, 0.999999225, 1.059999943, 1.05934763, 0.969671369}, - {7.1, 0.999998629, 0.999999225, 1.059999943, 1.059349179, 0.969672263}, - {7.104167, 0.999998569, 0.999999225, 1.059999943, 1.05935061, 0.969673157}, - {7.108333, 0.999998569, 0.999999225, 1.059999943, 1.05935216, 0.969674051}, - {7.1125, 0.999998569, 0.999999225, 1.059999943, 1.059353709, 0.969674945}, - {7.116667, 0.999998569, 0.999999225, 1.059999943, 1.05935514, 0.969675779}, - {7.120833, 0.999998569, 0.999999225, 1.059999943, 1.059356689, 0.969676673}, - {7.125, 0.99999851, 0.999999225, 1.059999943, 1.059358239, 0.969677508}, - {7.129167, 0.99999851, 0.999999225, 1.059999943, 1.05935967, 0.969678402}, - {7.133333, 0.99999851, 0.999999225, 1.059999943, 1.059361219, 0.969679236}, - {7.1375, 0.99999851, 0.999999225, 1.059999943, 1.05936265, 0.96968013}, - {7.141667, 0.99999851, 0.999999225, 1.059999943, 1.0593642, 0.969680965}, - {7.145833, 0.99999851, 0.999999225, 1.059999943, 1.05936563, 0.969681799}, - {7.15, 0.99999851, 0.999999225, 1.059999943, 1.059367061, 0.969682693}, - {7.154167, 0.99999851, 0.999999225, 1.059999943, 1.05936861, 0.969683528}, - {7.158333, 0.99999851, 0.999999225, 1.059999943, 1.059370041, 0.969684362}, - {7.1625, 0.99999851, 0.999999225, 1.059999943, 1.059371471, 0.969685197}, - {7.166667, 0.99999851, 0.999999225, 1.059999943, 1.059373021, 0.969686031}, - {7.170833, 0.99999851, 0.999999225, 1.059999943, 1.059374452, 0.969686925}, - {7.175, 0.99999851, 0.999999225, 1.059999943, 1.059375882, 0.96968776}, - {7.179167, 0.99999851, 0.999999225, 1.059999943, 1.059377313, 0.969688594}, - {7.183333, 0.99999851, 0.999999225, 1.059999943, 1.059378743, 0.969689429}, - {7.1875, 0.99999851, 0.999999225, 1.059999943, 1.059380174, 0.969690263}, - {7.191667, 0.99999851, 0.999999225, 1.059999943, 1.059381723, 0.969691038}, - {7.195833, 0.99999851, 0.999999225, 1.059999943, 1.059383154, 0.969691873}, - {7.2, 0.99999851, 0.999999225, 1.059999943, 1.059384584, 0.969692707}, - {7.204167, 0.999998569, 0.999999285, 1.059999943, 1.059386015, 0.969693542}, - {7.208333, 0.999998569, 0.999999285, 1.059999943, 1.059387445, 0.969694376}, - {7.2125, 0.999998569, 0.999999285, 1.059999943, 1.059388876, 0.96969521}, - {7.216667, 0.999998569, 0.999999285, 1.059999943, 1.059390306, 0.969695985}, - {7.220833, 0.999998569, 0.999999285, 1.059999943, 1.059391737, 0.96969682}, - {7.225, 0.999998629, 0.999999285, 1.059999943, 1.059393168, 0.969697654}, - {7.229167, 0.999998629, 0.999999285, 1.059999943, 1.059394598, 0.969698429}, - {7.233333, 0.999998629, 0.999999285, 1.059999943, 1.059396029, 0.969699264}, - {7.2375, 0.999998629, 0.999999285, 1.059999943, 1.059397459, 0.969700098}, - {7.241667, 0.999998689, 0.999999344, 1.059999943, 1.05939877, 0.969700873}, - {7.245833, 0.999998689, 0.999999344, 1.059999943, 1.059400201, 0.969701707}, - {7.25, 0.999998689, 0.999999344, 1.059999943, 1.059401631, 0.969702482}, - {7.254167, 0.999998689, 0.999999344, 1.059999943, 1.059403062, 0.969703317}, - {7.258333, 0.999998748, 0.999999344, 1.059999943, 1.059404492, 0.969704092}, - {7.2625, 0.999998748, 0.999999344, 1.059999943, 1.059405923, 0.969704926}, - {7.266667, 0.999998748, 0.999999404, 1.059999943, 1.059407234, 0.969705701}, - {7.270833, 0.999998808, 0.999999404, 1.059999943, 1.059408665, 0.969706535}, - {7.275, 0.999998808, 0.999999404, 1.059999943, 1.059410095, 0.96970731}, - {7.279167, 0.999998808, 0.999999404, 1.059999943, 1.059411526, 0.969708145}, - {7.283333, 0.999998808, 0.999999404, 1.059999943, 1.059412837, 0.96970892}, - {7.2875, 0.999998868, 0.999999404, 1.059999943, 1.059414268, 0.969709694}, - {7.291667, 0.999998868, 0.999999404, 1.059999943, 1.059415698, 0.969710529}, - {7.295833, 0.999998868, 0.999999464, 1.059999943, 1.059417009, 0.969711304}, - {7.3, 0.999998927, 0.999999464, 1.059999943, 1.05941844, 0.969712079}, - {7.304167, 0.999998927, 0.999999464, 1.059999943, 1.05941987, 0.969712853}, - {7.308333, 0.999998927, 0.999999464, 1.059999943, 1.059421182, 0.969713688}, - {7.3125, 0.999998987, 0.999999464, 1.059999943, 1.059422612, 0.969714463}, - {7.316667, 0.999998987, 0.999999464, 1.059999943, 1.059423923, 0.969715238}, - {7.320833, 0.999998987, 0.999999523, 1.059999943, 1.059425354, 0.969716012}, - {7.325, 0.999998987, 0.999999523, 1.059999943, 1.059426665, 0.969716787}, - {7.329167, 0.999999046, 0.999999523, 1.059999943, 1.059428096, 0.969717562}, - {7.333333, 0.999999046, 0.999999523, 1.059999943, 1.059429407, 0.969718337}, - {7.3375, 0.999999046, 0.999999523, 1.059999943, 1.059430838, 0.969719112}, - {7.341667, 0.999999046, 0.999999523, 1.059999943, 1.059432149, 0.969719887}, - {7.345833, 0.999999106, 0.999999523, 1.059999943, 1.059433579, 0.969720662}, - {7.35, 0.999999106, 0.999999523, 1.059999943, 1.059434891, 0.969721437}, - {7.354167, 0.999999106, 0.999999523, 1.059999943, 1.059436321, 0.969722211}, - {7.358333, 0.999999106, 0.999999583, 1.059999943, 1.059437633, 0.969722986}, - {7.3625, 0.999999166, 0.999999583, 1.059999943, 1.059438944, 0.969723761}, - {7.366667, 0.999999166, 0.999999583, 1.059999943, 1.059440374, 0.969724536}, - {7.370833, 0.999999166, 0.999999583, 1.059999943, 1.059441686, 0.969725251}, - {7.375, 0.999999166, 0.999999583, 1.059999943, 1.059442997, 0.969726026}, - {7.379167, 0.999999166, 0.999999583, 1.059999943, 1.059444308, 0.969726801}, - {7.383333, 0.999999166, 0.999999583, 1.059999943, 1.05944562, 0.969727576}, - {7.3875, 0.999999225, 0.999999583, 1.059999943, 1.05944705, 0.969728291}, - {7.391667, 0.999999225, 0.999999583, 1.059999943, 1.059448361, 0.969729066}, - {7.395833, 0.999999225, 0.999999583, 1.059999943, 1.059449673, 0.969729781}, - {7.4, 0.999999225, 0.999999583, 1.059999943, 1.059450984, 0.969730556}, - {7.404167, 0.999999225, 0.999999583, 1.059999943, 1.059452295, 0.969731271}, - {7.408333, 0.999999225, 0.999999583, 1.059999943, 1.059453607, 0.969732046}, - {7.4125, 0.999999225, 0.999999583, 1.059999943, 1.059454918, 0.969732761}, - {7.416667, 0.999999225, 0.999999583, 1.059999943, 1.059456229, 0.969733536}, - {7.420833, 0.999999225, 0.999999583, 1.059999943, 1.059457541, 0.969734252}, - {7.425, 0.999999225, 0.999999583, 1.059999943, 1.059458852, 0.969734967}, - {7.429167, 0.999999225, 0.999999583, 1.059999943, 1.059460163, 0.969735682}, - {7.433333, 0.999999225, 0.999999583, 1.059999943, 1.059461474, 0.969736457}, - {7.4375, 0.999999225, 0.999999583, 1.059999943, 1.059462786, 0.969737172}, - {7.441667, 0.999999225, 0.999999583, 1.059999943, 1.059463978, 0.969737887}, - {7.445833, 0.999999225, 0.999999583, 1.059999943, 1.059465289, 0.969738603}, - {7.45, 0.999999225, 0.999999583, 1.059999943, 1.0594666, 0.969739318}, - {7.454167, 0.999999225, 0.999999583, 1.059999943, 1.059467912, 0.969740033}, - {7.458333, 0.999999225, 0.999999583, 1.059999943, 1.059469104, 0.969740748}, - {7.4625, 0.999999225, 0.999999583, 1.059999943, 1.059470415, 0.969741464}, - {7.466667, 0.999999225, 0.999999583, 1.059999943, 1.059471726, 0.969742179}, - {7.470833, 0.999999225, 0.999999583, 1.059999943, 1.059472919, 0.969742835}, - {7.475, 0.999999225, 0.999999583, 1.059999943, 1.05947423, 0.96974355}, - {7.479167, 0.999999166, 0.999999583, 1.059999943, 1.059475422, 0.969744265}, - {7.483333, 0.999999166, 0.999999583, 1.059999943, 1.059476733, 0.96974498}, - {7.4875, 0.999999166, 0.999999583, 1.059999943, 1.059477925, 0.969745636}, - {7.491667, 0.999999166, 0.999999583, 1.059999943, 1.059479117, 0.969746351}, - {7.495833, 0.999999166, 0.999999583, 1.059999943, 1.059480429, 0.969747007}, - {7.5, 0.999999166, 0.999999583, 1.059999943, 1.059481621, 0.969747722}, - {7.504167, 0.999999166, 0.999999583, 1.059999943, 1.059482932, 0.969748378}, - {7.508333, 0.999999166, 0.999999583, 1.059999943, 1.059484124, 0.969749093}, - {7.5125, 0.999999106, 0.999999583, 1.059999943, 1.059485316, 0.969749749}, - {7.516667, 0.999999106, 0.999999583, 1.059999943, 1.059486508, 0.969750404}, - {7.520833, 0.999999106, 0.999999523, 1.059999943, 1.0594877, 0.96975106}, - {7.525, 0.999999106, 0.999999523, 1.059999943, 1.059489012, 0.969751775}, - {7.529167, 0.999999106, 0.999999523, 1.059999943, 1.059490204, 0.969752431}, - {7.533333, 0.999999106, 0.999999523, 1.059999943, 1.059491396, 0.969753087}, - {7.5375, 0.999999106, 0.999999523, 1.059999943, 1.059492588, 0.969753742}, - {7.541667, 0.999999046, 0.999999523, 1.059999943, 1.05949378, 0.969754398}, - {7.545833, 0.999999046, 0.999999523, 1.059999943, 1.059494972, 0.969755054}, - {7.55, 0.999999046, 0.999999523, 1.059999943, 1.059496164, 0.969755709}, - {7.554167, 0.999999046, 0.999999523, 1.059999943, 1.059497356, 0.969756365}, - {7.558333, 0.999999046, 0.999999523, 1.059999943, 1.059498549, 0.96975702}, - {7.5625, 0.999999046, 0.999999523, 1.059999943, 1.059499741, 0.969757676}, - {7.566667, 0.999999046, 0.999999523, 1.059999943, 1.059500813, 0.969758272}, - {7.570833, 0.999998987, 0.999999523, 1.059999943, 1.059502006, 0.969758928}, - {7.575, 0.999998987, 0.999999523, 1.059999943, 1.059503198, 0.969759583}, - {7.579167, 0.999998987, 0.999999523, 1.059999943, 1.05950439, 0.969760239}, - {7.583333, 0.999998987, 0.999999523, 1.059999943, 1.059505582, 0.969760835}, - {7.5875, 0.999998987, 0.999999523, 1.059999943, 1.059506655, 0.969761491}, - {7.591667, 0.999998987, 0.999999523, 1.059999943, 1.059507847, 0.969762087}, - {7.595833, 0.999998987, 0.999999523, 1.059999943, 1.059509039, 0.969762743}, - {7.6, 0.999998987, 0.999999523, 1.059999943, 1.059510112, 0.969763339}, - {7.604167, 0.999998987, 0.999999523, 1.059999943, 1.059511304, 0.969763994}, - {7.608333, 0.999998987, 0.999999464, 1.059999943, 1.059512377, 0.96976459}, - {7.6125, 0.999998987, 0.999999464, 1.059999943, 1.059513569, 0.969765246}, - {7.616667, 0.999998927, 0.999999464, 1.059999943, 1.059514642, 0.969765842}, - {7.620833, 0.999998927, 0.999999464, 1.059999943, 1.059515834, 0.969766438}, - {7.625, 0.999998927, 0.999999464, 1.059999943, 1.059516907, 0.969767094}, - {7.629167, 0.999998927, 0.999999464, 1.059999943, 1.059518099, 0.96976769}, - {7.633333, 0.999998927, 0.999999464, 1.059999943, 1.059519172, 0.969768286}, - {7.6375, 0.999998927, 0.999999464, 1.059999943, 1.059520364, 0.969768882}, - {7.641667, 0.999998927, 0.999999464, 1.059999943, 1.059521437, 0.969769537}, - {7.645833, 0.999998927, 0.999999464, 1.059999943, 1.05952251, 0.969770134}, - {7.65, 0.999998927, 0.999999523, 1.059999943, 1.059523702, 0.96977073}, - {7.654167, 0.999998927, 0.999999523, 1.059999943, 1.059524775, 0.969771326}, - {7.658333, 0.999998927, 0.999999523, 1.059999943, 1.059525847, 0.969771922}, - {7.6625, 0.999998927, 0.999999523, 1.059999943, 1.05952704, 0.969772518}, - {7.666667, 0.999998987, 0.999999523, 1.059999943, 1.059528112, 0.969773114}, - {7.670833, 0.999998987, 0.999999523, 1.059999943, 1.059529185, 0.96977371}, - {7.675, 0.999998987, 0.999999523, 1.059999943, 1.059530258, 0.969774306}, - {7.679167, 0.999998987, 0.999999523, 1.059999943, 1.05953145, 0.969774902}, - {7.683333, 0.999998987, 0.999999523, 1.059999943, 1.059532523, 0.969775498}, - {7.6875, 0.999998987, 0.999999523, 1.059999943, 1.059533596, 0.969776094}, - {7.691667, 0.999998987, 0.999999523, 1.059999943, 1.059534669, 0.96977669}, - {7.695833, 0.999998987, 0.999999523, 1.059999943, 1.059535742, 0.969777226}, - {7.7, 0.999998987, 0.999999523, 1.059999943, 1.059536815, 0.969777822}, - {7.704167, 0.999998987, 0.999999523, 1.059999943, 1.059538007, 0.969778419}, - {7.708333, 0.999998987, 0.999999523, 1.059999943, 1.05953908, 0.969779015}, - {7.7125, 0.999999046, 0.999999523, 1.059999943, 1.059540153, 0.969779611}, - {7.716667, 0.999999046, 0.999999523, 1.059999943, 1.059541225, 0.969780147}, - {7.720833, 0.999999046, 0.999999523, 1.059999943, 1.059542298, 0.969780743}, - {7.725, 0.999999046, 0.999999523, 1.059999943, 1.059543371, 0.969781339}, - {7.729167, 0.999999046, 0.999999523, 1.059999943, 1.059544444, 0.969781935}, - {7.733333, 0.999999046, 0.999999583, 1.059999943, 1.059545517, 0.969782472}, - {7.7375, 0.999999046, 0.999999583, 1.059999943, 1.05954659, 0.969783068}, - {7.741667, 0.999999106, 0.999999583, 1.059999943, 1.059547663, 0.969783604}, - {7.745833, 0.999999106, 0.999999583, 1.059999943, 1.059548736, 0.9697842}, - {7.75, 0.999999106, 0.999999583, 1.059999943, 1.059549809, 0.969784796}, - {7.754167, 0.999999106, 0.999999583, 1.059999943, 1.059550762, 0.969785333}, - {7.758333, 0.999999106, 0.999999583, 1.059999943, 1.059551835, 0.969785929}, - {7.7625, 0.999999106, 0.999999583, 1.059999943, 1.059552908, 0.969786465}, - {7.766667, 0.999999106, 0.999999583, 1.059999943, 1.059553981, 0.969787061}, - {7.770833, 0.999999166, 0.999999583, 1.059999943, 1.059555054, 0.969787598}, - {7.775, 0.999999166, 0.999999583, 1.059999943, 1.059556127, 0.969788194}, - {7.779167, 0.999999166, 0.999999583, 1.059999943, 1.059557199, 0.96978873}, - {7.783333, 0.999999166, 0.999999642, 1.059999943, 1.059558153, 0.969789326}, - {7.7875, 0.999999166, 0.999999642, 1.059999943, 1.059559226, 0.969789863}, - {7.791667, 0.999999166, 0.999999642, 1.059999943, 1.059560299, 0.969790399}, - {7.795833, 0.999999225, 0.999999642, 1.059999943, 1.059561372, 0.969790995}, - {7.8, 0.999999225, 0.999999642, 1.059999943, 1.059562325, 0.969791532}, - {7.804167, 0.999999225, 0.999999642, 1.059999943, 1.059563398, 0.969792128}, - {7.808333, 0.999999225, 0.999999642, 1.059999943, 1.059564471, 0.969792664}, - {7.8125, 0.999999225, 0.999999642, 1.059999943, 1.059565425, 0.9697932}, - {7.816667, 0.999999225, 0.999999642, 1.059999943, 1.059566498, 0.969793737}, - {7.820833, 0.999999225, 0.999999642, 1.059999943, 1.059567571, 0.969794333}, - {7.825, 0.999999285, 0.999999642, 1.059999943, 1.059568524, 0.969794869}, - {7.829167, 0.999999285, 0.999999642, 1.059999943, 1.059569597, 0.969795406}, - {7.833333, 0.999999285, 0.999999642, 1.059999943, 1.05957067, 0.969795942}, - {7.8375, 0.999999285, 0.999999642, 1.059999943, 1.059571624, 0.969796479}, - {7.841667, 0.999999285, 0.999999702, 1.059999943, 1.059572697, 0.969797075}, - {7.845833, 0.999999285, 0.999999702, 1.059999943, 1.05957365, 0.969797611}, - {7.85, 0.999999285, 0.999999702, 1.059999943, 1.059574723, 0.969798148}, - {7.854167, 0.999999285, 0.999999702, 1.059999943, 1.059575677, 0.969798684}, - {7.858333, 0.999999285, 0.999999702, 1.059999943, 1.05957675, 0.969799221}, - {7.8625, 0.999999344, 0.999999702, 1.059999943, 1.059577703, 0.969799757}, - {7.866667, 0.999999344, 0.999999702, 1.059999943, 1.059578776, 0.969800293}, - {7.870833, 0.999999344, 0.999999702, 1.059999943, 1.05957973, 0.96980083}, - {7.875, 0.999999344, 0.999999702, 1.059999943, 1.059580684, 0.969801366}, - {7.879167, 0.999999344, 0.999999702, 1.059999943, 1.059581757, 0.969801903}, - {7.883333, 0.999999344, 0.999999702, 1.059999943, 1.05958271, 0.969802439}, - {7.8875, 0.999999344, 0.999999702, 1.059999943, 1.059583664, 0.969802916}, - {7.891667, 0.999999344, 0.999999702, 1.059999943, 1.059584737, 0.969803452}, - {7.895833, 0.999999344, 0.999999702, 1.059999943, 1.059585691, 0.969803989}, - {7.9, 0.999999344, 0.999999702, 1.059999943, 1.059586644, 0.969804525}, - {7.904167, 0.999999344, 0.999999702, 1.059999943, 1.059587717, 0.969805062}, - {7.908333, 0.999999344, 0.999999702, 1.059999943, 1.059588671, 0.969805539}, - {7.9125, 0.999999344, 0.999999702, 1.059999943, 1.059589624, 0.969806075}, - {7.916667, 0.999999344, 0.999999702, 1.059999943, 1.059590578, 0.969806612}, - {7.920833, 0.999999344, 0.999999702, 1.059999943, 1.059591532, 0.969807088}, - {7.925, 0.999999344, 0.999999702, 1.059999943, 1.059592605, 0.969807625}, - {7.929167, 0.999999344, 0.999999702, 1.059999943, 1.059593558, 0.969808161}, - {7.933333, 0.999999344, 0.999999702, 1.059999943, 1.059594512, 0.969808638}, - {7.9375, 0.999999344, 0.999999702, 1.059999943, 1.059595466, 0.969809175}, - {7.941667, 0.999999344, 0.999999702, 1.059999943, 1.059596419, 0.969809651}, - {7.945833, 0.999999344, 0.999999702, 1.059999943, 1.059597373, 0.969810188}, - {7.95, 0.999999344, 0.999999702, 1.059999943, 1.059598327, 0.969810665}, - {7.954167, 0.999999344, 0.999999702, 1.059999943, 1.05959928, 0.969811141}, - {7.958333, 0.999999344, 0.999999702, 1.059999943, 1.059600234, 0.969811678}, - {7.9625, 0.999999344, 0.999999702, 1.059999943, 1.059601188, 0.969812155}, - {7.966667, 0.999999344, 0.999999702, 1.059999943, 1.059602141, 0.969812691}, - {7.970833, 0.999999344, 0.999999702, 1.059999943, 1.059603095, 0.969813168}, - {7.975, 0.999999344, 0.999999702, 1.059999943, 1.05960393, 0.969813645}, - {7.979167, 0.999999344, 0.999999702, 1.059999943, 1.059604883, 0.969814122}, - {7.983333, 0.999999344, 0.999999702, 1.059999943, 1.059605837, 0.969814658}, - {7.9875, 0.999999344, 0.999999702, 1.059999943, 1.059606791, 0.969815135}, - {7.991667, 0.999999344, 0.999999702, 1.059999943, 1.059607744, 0.969815612}, - {7.995833, 0.999999344, 0.999999702, 1.059999943, 1.059608579, 0.969816089}, - {8, 0.999999344, 0.999999702, 1.059999943, 1.059609532, 0.969816566}, - {8.004167, 0.999999285, 0.999999702, 1.059999943, 1.059610486, 0.969817042}, - {8.008333, 0.999999285, 0.999999702, 1.059999943, 1.05961144, 0.969817519}, - {8.0125, 0.999999285, 0.999999702, 1.059999943, 1.059612274, 0.969817996}, - {8.016667, 0.999999285, 0.999999702, 1.059999943, 1.059613228, 0.969818473}, - {8.020833, 0.999999285, 0.999999702, 1.059999943, 1.059614182, 0.96981895}, - {8.025, 0.999999285, 0.999999702, 1.059999943, 1.059615016, 0.969819427}, - {8.029167, 0.999999285, 0.999999702, 1.059999943, 1.05961597, 0.969819903}, - {8.033333, 0.999999285, 0.999999702, 1.059999943, 1.059616804, 0.96982038}, - {8.0375, 0.999999285, 0.999999642, 1.059999943, 1.059617758, 0.969820857}, - {8.041667, 0.999999285, 0.999999642, 1.059999943, 1.059618592, 0.969821274}, - {8.045833, 0.999999285, 0.999999642, 1.059999943, 1.059619546, 0.969821751}, - {8.05, 0.999999285, 0.999999642, 1.059999943, 1.05962038, 0.969822228}, - {8.054167, 0.999999285, 0.999999642, 1.059999943, 1.059621334, 0.969822705}, - {8.058333, 0.999999285, 0.999999642, 1.059999943, 1.059622169, 0.969823182}, - {8.0625, 0.999999285, 0.999999642, 1.059999943, 1.059623122, 0.969823599}, - {8.066667, 0.999999285, 0.999999642, 1.059999943, 1.059623957, 0.969824076}, - {8.070833, 0.999999285, 0.999999642, 1.059999943, 1.059624791, 0.969824493}, - {8.075, 0.999999285, 0.999999642, 1.059999943, 1.059625745, 0.96982497}, - {8.079167, 0.999999225, 0.999999642, 1.059999943, 1.059626579, 0.969825447}, - {8.083333, 0.999999225, 0.999999642, 1.059999943, 1.059627414, 0.969825864}, - {8.0875, 0.999999225, 0.999999642, 1.059999943, 1.059628367, 0.969826341}, - {8.091667, 0.999999225, 0.999999642, 1.059999943, 1.059629202, 0.969826758}, - {8.095833, 0.999999225, 0.999999642, 1.059999943, 1.059630036, 0.969827235}, - {8.1, 0.999999225, 0.999999642, 1.059999943, 1.05963099, 0.969827652}, - {8.104167, 0.999999225, 0.999999642, 1.059999943, 1.059631824, 0.969828129}, - {8.108333, 0.999999225, 0.999999642, 1.059999943, 1.059632659, 0.969828546}, - {8.1125, 0.999999225, 0.999999642, 1.059999943, 1.059633493, 0.969829023}, - {8.116667, 0.999999225, 0.999999642, 1.059999943, 1.059634328, 0.96982944}, - {8.120833, 0.999999225, 0.999999642, 1.059999943, 1.059635162, 0.969829857}, - {8.125, 0.999999225, 0.999999642, 1.059999943, 1.059636116, 0.969830334}, - {8.129167, 0.999999225, 0.999999642, 1.059999943, 1.05963695, 0.969830751}, - {8.133333, 0.999999225, 0.999999642, 1.059999943, 1.059637785, 0.969831169}, - {8.1375, 0.999999225, 0.999999642, 1.059999943, 1.059638619, 0.969831645}, - {8.141667, 0.999999225, 0.999999642, 1.059999943, 1.059639454, 0.969832063}, - {8.145833, 0.999999225, 0.999999642, 1.059999943, 1.059640288, 0.96983248}, - {8.15, 0.999999225, 0.999999642, 1.059999943, 1.059641123, 0.969832897}, - {8.154167, 0.999999285, 0.999999642, 1.059999943, 1.059641957, 0.969833374}, - {8.158333, 0.999999285, 0.999999642, 1.059999943, 1.059642792, 0.969833791}, - {8.1625, 0.999999285, 0.999999642, 1.059999943, 1.059643626, 0.969834208}, - {8.166667, 0.999999285, 0.999999642, 1.059999943, 1.059644461, 0.969834626}, - {8.170833, 0.999999285, 0.999999702, 1.059999943, 1.059645295, 0.969835043}, - {8.175, 0.999999285, 0.999999702, 1.059999943, 1.05964613, 0.96983546}, - {8.179167, 0.999999285, 0.999999702, 1.059999943, 1.059646964, 0.969835877}, - {8.183333, 0.999999285, 0.999999702, 1.059999943, 1.059647799, 0.969836354}, - {8.1875, 0.999999285, 0.999999702, 1.059999943, 1.059648633, 0.969836771}, - {8.191667, 0.999999285, 0.999999702, 1.059999943, 1.059649467, 0.969837189}, - {8.195833, 0.999999285, 0.999999702, 1.059999943, 1.059650302, 0.969837606}, - {8.2, 0.999999285, 0.999999702, 1.059999943, 1.059651017, 0.969838023}, - {8.204167, 0.999999285, 0.999999702, 1.059999943, 1.059651852, 0.96983844}, - {8.208333, 0.999999285, 0.999999702, 1.059999943, 1.059652686, 0.969838858}, - {8.2125, 0.999999285, 0.999999702, 1.059999943, 1.059653521, 0.969839275}, - {8.216667, 0.999999285, 0.999999702, 1.059999943, 1.059654355, 0.969839692}, - {8.220833, 0.999999344, 0.999999702, 1.059999943, 1.05965519, 0.969840109}, - {8.225, 0.999999344, 0.999999702, 1.059999943, 1.059655905, 0.969840527}, - {8.229167, 0.999999344, 0.999999702, 1.059999943, 1.059656739, 0.969840884}, - {8.233333, 0.999999344, 0.999999702, 1.059999943, 1.059657574, 0.969841301}, - {8.2375, 0.999999344, 0.999999702, 1.059999943, 1.059658408, 0.969841719}, - {8.241667, 0.999999344, 0.999999702, 1.059999943, 1.059659123, 0.969842136}, - {8.245833, 0.999999344, 0.999999702, 1.059999943, 1.059659958, 0.969842553}, - {8.25, 0.999999344, 0.999999702, 1.059999943, 1.059660792, 0.96984297}, - {8.254167, 0.999999344, 0.999999702, 1.059999943, 1.059661508, 0.969843388}, - {8.258333, 0.999999344, 0.999999702, 1.059999943, 1.059662342, 0.969843745}, - {8.2625, 0.999999344, 0.999999702, 1.059999943, 1.059663177, 0.969844162}, - {8.266667, 0.999999344, 0.999999702, 1.059999943, 1.059663892, 0.96984458}, - {8.270833, 0.999999404, 0.999999702, 1.059999943, 1.059664726, 0.969844997}, - {8.275, 0.999999404, 0.999999762, 1.059999943, 1.059665561, 0.969845355}, - {8.279167, 0.999999404, 0.999999762, 1.059999943, 1.059666276, 0.969845772}, - {8.283333, 0.999999404, 0.999999762, 1.059999943, 1.05966711, 0.969846189}, - {8.2875, 0.999999404, 0.999999762, 1.059999943, 1.059667826, 0.969846606}, - {8.291667, 0.999999404, 0.999999762, 1.059999943, 1.05966866, 0.969846964}, - {8.295833, 0.999999404, 0.999999762, 1.059999943, 1.059669495, 0.969847381}, - {8.3, 0.999999404, 0.999999762, 1.059999943, 1.05967021, 0.969847798}, - {8.304167, 0.999999404, 0.999999762, 1.059999943, 1.059671044, 0.969848156}, - {8.308333, 0.999999404, 0.999999762, 1.059999943, 1.05967176, 0.969848573}, - {8.3125, 0.999999404, 0.999999762, 1.059999943, 1.059672594, 0.969848931}, - {8.316667, 0.999999404, 0.999999762, 1.059999943, 1.059673309, 0.969849348}, - {8.320833, 0.999999404, 0.999999762, 1.059999943, 1.059674144, 0.969849765}, - {8.325, 0.999999464, 0.999999762, 1.059999943, 1.059674859, 0.969850123}, - {8.329167, 0.999999464, 0.999999762, 1.059999943, 1.059675574, 0.96985054}, - {8.333333, 0.999999464, 0.999999762, 1.059999943, 1.059676409, 0.969850898}, - {8.3375, 0.999999464, 0.999999762, 1.059999943, 1.059677124, 0.969851315}, - {8.341667, 0.999999464, 0.999999762, 1.059999943, 1.059677958, 0.969851673}, - {8.345833, 0.999999464, 0.999999762, 1.059999943, 1.059678674, 0.96985209}, - {8.35, 0.999999464, 0.999999762, 1.059999943, 1.059679389, 0.969852448}, - {8.354167, 0.999999464, 0.999999762, 1.059999943, 1.059680223, 0.969852865}, - {8.358333, 0.999999464, 0.999999762, 1.059999943, 1.059680939, 0.969853222}, - {8.3625, 0.999999464, 0.999999762, 1.059999943, 1.059681654, 0.96985358}, - {8.366667, 0.999999464, 0.999999762, 1.059999943, 1.059682488, 0.969853997}, - {8.370833, 0.999999464, 0.999999762, 1.059999943, 1.059683204, 0.969854355}, - {8.375, 0.999999464, 0.999999762, 1.059999943, 1.059683919, 0.969854712}, - {8.379167, 0.999999464, 0.999999762, 1.059999943, 1.059684753, 0.96985513}, - {8.383333, 0.999999464, 0.999999762, 1.059999943, 1.059685469, 0.969855487}, - {8.3875, 0.999999464, 0.999999762, 1.059999943, 1.059686184, 0.969855845}, - {8.391667, 0.999999464, 0.999999762, 1.059999943, 1.059686899, 0.969856262}, - {8.395833, 0.999999464, 0.999999762, 1.059999943, 1.059687614, 0.96985662}, - {8.4, 0.999999464, 0.999999762, 1.059999943, 1.059688449, 0.969856977}, - {8.404167, 0.999999464, 0.999999762, 1.059999943, 1.059689164, 0.969857335}, - {8.408333, 0.999999464, 0.999999762, 1.059999943, 1.059689879, 0.969857752}, - {8.4125, 0.999999464, 0.999999762, 1.059999943, 1.059690595, 0.96985811}, - {8.416667, 0.999999464, 0.999999762, 1.059999943, 1.05969131, 0.969858468}, - {8.420833, 0.999999464, 0.999999762, 1.059999943, 1.059692025, 0.969858825}, - {8.425, 0.999999464, 0.999999762, 1.059999943, 1.05969274, 0.969859183}, - {8.429167, 0.999999464, 0.999999762, 1.059999943, 1.059693456, 0.96985954}, - {8.433333, 0.999999464, 0.999999762, 1.059999943, 1.059694171, 0.969859898}, - {8.4375, 0.999999464, 0.999999762, 1.059999943, 1.059694886, 0.969860256}, - {8.441667, 0.999999464, 0.999999762, 1.059999943, 1.059695601, 0.969860613}, - {8.445833, 0.999999464, 0.999999762, 1.059999943, 1.059696317, 0.969860971}, - {8.45, 0.999999464, 0.999999762, 1.059999943, 1.059697032, 0.969861329}, - {8.454167, 0.999999464, 0.999999762, 1.059999943, 1.059697747, 0.969861686}, - {8.458333, 0.999999464, 0.999999762, 1.059999943, 1.059698462, 0.969862044}, - {8.4625, 0.999999464, 0.999999762, 1.059999943, 1.059699178, 0.969862401}, - {8.466667, 0.999999464, 0.999999762, 1.059999943, 1.059699893, 0.969862759}, - {8.470833, 0.999999464, 0.999999762, 1.059999943, 1.059700608, 0.969863117}, - {8.475, 0.999999464, 0.999999762, 1.059999943, 1.059701324, 0.969863474}, - {8.479167, 0.999999464, 0.999999762, 1.059999943, 1.059702039, 0.969863832}, - {8.483333, 0.999999464, 0.999999762, 1.059999943, 1.059702754, 0.96986419}, - {8.4875, 0.999999464, 0.999999762, 1.059999943, 1.059703469, 0.969864547}, - {8.491667, 0.999999464, 0.999999762, 1.059999943, 1.059704065, 0.969864845}, - {8.495833, 0.999999464, 0.999999762, 1.059999943, 1.059704781, 0.969865203}, - {8.5, 0.999999464, 0.999999762, 1.059999943, 1.059705496, 0.969865561}, - {8.504167, 0.999999464, 0.999999762, 1.059999943, 1.059706211, 0.969865918}, - {8.508333, 0.999999464, 0.999999762, 1.059999943, 1.059706926, 0.969866216}, - {8.5125, 0.999999464, 0.999999762, 1.059999943, 1.059707522, 0.969866574}, - {8.516667, 0.999999464, 0.999999762, 1.059999943, 1.059708238, 0.969866931}, - {8.520833, 0.999999464, 0.999999762, 1.059999943, 1.059708953, 0.969867229}, - {8.525, 0.999999464, 0.999999762, 1.059999943, 1.059709549, 0.969867587}, - {8.529167, 0.999999464, 0.999999762, 1.059999943, 1.059710264, 0.969867945}, - {8.533333, 0.999999464, 0.999999762, 1.059999943, 1.059710979, 0.969868243}, - {8.5375, 0.999999464, 0.999999762, 1.059999943, 1.059711576, 0.9698686}, - {8.541667, 0.999999464, 0.999999762, 1.059999943, 1.059712291, 0.969868958}, - {8.545833, 0.999999464, 0.999999762, 1.059999943, 1.059713006, 0.969869256}, - {8.55, 0.999999464, 0.999999762, 1.059999943, 1.059713602, 0.969869614}, - {8.554167, 0.999999464, 0.999999762, 1.059999943, 1.059714317, 0.969869912}, - {8.558333, 0.999999464, 0.999999762, 1.059999943, 1.059715033, 0.969870269}, - {8.5625, 0.999999464, 0.999999762, 1.059999943, 1.059715629, 0.969870567}, - {8.566667, 0.999999464, 0.999999762, 1.059999943, 1.059716344, 0.969870925}, - {8.570833, 0.999999464, 0.999999762, 1.059999943, 1.05971694, 0.969871223}, - {8.575, 0.999999464, 0.999999762, 1.059999943, 1.059717655, 0.969871581}, - {8.579167, 0.999999464, 0.999999762, 1.059999943, 1.059718251, 0.969871879}, - {8.583333, 0.999999464, 0.999999762, 1.059999943, 1.059718966, 0.969872236}, - {8.5875, 0.999999464, 0.999999762, 1.059999943, 1.059719563, 0.969872534}, - {8.591667, 0.999999464, 0.999999762, 1.059999943, 1.059720278, 0.969872832}, - {8.595833, 0.999999464, 0.999999762, 1.059999943, 1.059720874, 0.96987319}, - {8.6, 0.999999464, 0.999999762, 1.059999943, 1.059721589, 0.969873488}, - {8.604167, 0.999999464, 0.999999762, 1.059999943, 1.059722185, 0.969873846}, - {8.608333, 0.999999464, 0.999999762, 1.059999943, 1.059722781, 0.969874144}, - {8.6125, 0.999999464, 0.999999762, 1.059999943, 1.059723496, 0.969874442}, - {8.616667, 0.999999464, 0.999999762, 1.059999943, 1.059724092, 0.969874799}, - {8.620833, 0.999999464, 0.999999762, 1.059999943, 1.059724808, 0.969875097}, - {8.625, 0.999999464, 0.999999762, 1.059999943, 1.059725404, 0.969875395}, - {8.629167, 0.999999464, 0.999999762, 1.059999943, 1.059726, 0.969875693}, - {8.633333, 0.999999464, 0.999999762, 1.059999943, 1.059726715, 0.969876051}, - {8.6375, 0.999999464, 0.999999762, 1.059999943, 1.059727311, 0.969876349}, - {8.641667, 0.999999464, 0.999999762, 1.059999943, 1.059727907, 0.969876647}, - {8.645833, 0.999999464, 0.999999762, 1.059999943, 1.059728622, 0.969876945}, - {8.65, 0.999999464, 0.999999762, 1.059999943, 1.059729218, 0.969877303}, - {8.654167, 0.999999464, 0.999999762, 1.059999943, 1.059729815, 0.969877601}, - {8.658333, 0.999999464, 0.999999762, 1.059999943, 1.05973053, 0.969877899}, - {8.6625, 0.999999464, 0.999999762, 1.059999943, 1.059731126, 0.969878197}, - {8.666667, 0.999999464, 0.999999762, 1.059999943, 1.059731722, 0.969878495}, - {8.670833, 0.999999464, 0.999999762, 1.059999943, 1.059732318, 0.969878793}, - {8.675, 0.999999464, 0.999999762, 1.059999943, 1.059733033, 0.969879091}, - {8.679167, 0.999999464, 0.999999762, 1.059999943, 1.059733629, 0.969879448}, - {8.683333, 0.999999464, 0.999999762, 1.059999943, 1.059734225, 0.969879746}, - {8.6875, 0.999999464, 0.999999762, 1.059999943, 1.059734821, 0.969880044}, - {8.691667, 0.999999464, 0.999999762, 1.059999943, 1.059735417, 0.969880342}, - {8.695833, 0.999999464, 0.999999762, 1.059999943, 1.059736013, 0.969880641}, - {8.7, 0.999999464, 0.999999762, 1.059999943, 1.059736729, 0.969880939}, - {8.704167, 0.999999464, 0.999999762, 1.059999943, 1.059737325, 0.969881237}, - {8.708333, 0.999999523, 0.999999821, 1.059999943, 1.059737921, 0.969881535}, - {8.7125, 0.999999523, 0.999999821, 1.059999943, 1.059738517, 0.969881833}, - {8.716667, 0.999999523, 0.999999821, 1.059999943, 1.059739113, 0.969882131}, - {8.720833, 0.999999523, 0.999999821, 1.059999943, 1.059739709, 0.969882429}, - {8.725, 0.999999523, 0.999999821, 1.059999943, 1.059740305, 0.969882727}, - {8.729167, 0.999999523, 0.999999821, 1.059999943, 1.059740901, 0.969883025}, - {8.733333, 0.999999523, 0.999999821, 1.059999943, 1.059741616, 0.969883323}, - {8.7375, 0.999999523, 0.999999821, 1.059999943, 1.059742212, 0.969883621}, - {8.741667, 0.999999523, 0.999999821, 1.059999943, 1.059742808, 0.969883919}, - {8.745833, 0.999999523, 0.999999821, 1.059999943, 1.059743404, 0.969884217}, - {8.75, 0.999999523, 0.999999821, 1.059999943, 1.059744, 0.969884515}, - {8.754167, 0.999999523, 0.999999821, 1.059999943, 1.059744596, 0.969884813}, - {8.758333, 0.999999523, 0.999999821, 1.059999943, 1.059745193, 0.969885051}, - {8.7625, 0.999999523, 0.999999821, 1.059999943, 1.059745789, 0.969885349}, - {8.766667, 0.999999523, 0.999999821, 1.059999943, 1.059746385, 0.969885647}, - {8.770833, 0.999999523, 0.999999821, 1.059999943, 1.059746981, 0.969885945}, - {8.775, 0.999999523, 0.999999821, 1.059999943, 1.059747577, 0.969886243}, - {8.779167, 0.999999523, 0.999999821, 1.059999943, 1.059748173, 0.969886541}, - {8.783333, 0.999999523, 0.999999821, 1.059999943, 1.059748769, 0.96988678}, - {8.7875, 0.999999523, 0.999999821, 1.059999943, 1.059749246, 0.969887078}, - {8.791667, 0.999999523, 0.999999821, 1.059999943, 1.059749842, 0.969887376}, - {8.795833, 0.999999583, 0.999999821, 1.059999943, 1.059750438, 0.969887674}, - {8.8, 0.999999583, 0.999999821, 1.059999943, 1.059751034, 0.969887972}, - {8.804167, 0.999999583, 0.999999821, 1.059999943, 1.05975163, 0.96988821}, - {8.808333, 0.999999583, 0.999999821, 1.059999943, 1.059752226, 0.969888508}, - {8.8125, 0.999999583, 0.999999821, 1.059999943, 1.059752822, 0.969888806}, - {8.816667, 0.999999583, 0.999999821, 1.059999943, 1.059753418, 0.969889104}, - {8.820833, 0.999999583, 0.999999821, 1.059999943, 1.059753895, 0.969889343}, - {8.825, 0.999999583, 0.999999821, 1.059999943, 1.059754491, 0.969889641}, - {8.829167, 0.999999583, 0.999999821, 1.059999943, 1.059755087, 0.969889939}, - {8.833333, 0.999999583, 0.999999821, 1.059999943, 1.059755683, 0.969890177}, - {8.8375, 0.999999583, 0.999999821, 1.059999943, 1.059756279, 0.969890475}, - {8.841667, 0.999999583, 0.999999821, 1.059999943, 1.059756875, 0.969890773}, - {8.845833, 0.999999583, 0.999999821, 1.059999943, 1.059757352, 0.969891012}, - {8.85, 0.999999583, 0.999999821, 1.059999943, 1.059757948, 0.96989131}, - {8.854167, 0.999999583, 0.999999821, 1.059999943, 1.059758544, 0.969891608}, - {8.858333, 0.999999583, 0.999999821, 1.059999943, 1.05975914, 0.969891846}, - {8.8625, 0.999999583, 0.999999821, 1.059999943, 1.059759617, 0.969892144}, - {8.866667, 0.999999583, 0.999999821, 1.059999943, 1.059760213, 0.969892383}, - {8.870833, 0.999999583, 0.999999821, 1.059999943, 1.059760809, 0.969892681}, - {8.875, 0.999999583, 0.999999821, 1.059999943, 1.059761286, 0.969892919}, - {8.879167, 0.999999583, 0.999999821, 1.059999943, 1.059761882, 0.969893217}, - {8.883333, 0.999999583, 0.999999821, 1.059999943, 1.059762478, 0.969893456}, - {8.8875, 0.999999583, 0.999999821, 1.059999943, 1.059762955, 0.969893754}, - {8.891667, 0.999999583, 0.999999821, 1.059999943, 1.059763551, 0.969893992}, - {8.895833, 0.999999583, 0.999999821, 1.059999943, 1.059764147, 0.96989429}, - {8.9, 0.999999583, 0.999999821, 1.059999943, 1.059764624, 0.969894528}, - {8.904167, 0.999999583, 0.999999821, 1.059999943, 1.05976522, 0.969894826}, - {8.908333, 0.999999583, 0.999999821, 1.059999943, 1.059765697, 0.969895065}, - {8.9125, 0.999999583, 0.999999821, 1.059999943, 1.059766293, 0.969895363}, - {8.916667, 0.999999583, 0.999999821, 1.059999943, 1.059766889, 0.969895601}, - {8.920833, 0.999999583, 0.999999821, 1.059999943, 1.059767365, 0.96989584}, - {8.925, 0.999999583, 0.999999821, 1.059999943, 1.059767962, 0.969896138}, - {8.929167, 0.999999583, 0.999999821, 1.059999943, 1.059768438, 0.969896376}, - {8.933333, 0.999999583, 0.999999821, 1.059999943, 1.059769034, 0.969896674}, - {8.9375, 0.999999583, 0.999999821, 1.059999943, 1.059769511, 0.969896913}, - {8.941667, 0.999999583, 0.999999821, 1.059999943, 1.059770107, 0.969897151}, - {8.945833, 0.999999583, 0.999999821, 1.059999943, 1.059770584, 0.969897449}, - {8.95, 0.999999583, 0.999999821, 1.059999943, 1.05977118, 0.969897687}, - {8.954167, 0.999999583, 0.999999821, 1.059999943, 1.059771657, 0.969897926}, - {8.958333, 0.999999583, 0.999999821, 1.059999943, 1.059772253, 0.969898224}, - {8.9625, 0.999999583, 0.999999821, 1.059999943, 1.05977273, 0.969898462}, - {8.966667, 0.999999583, 0.999999821, 1.059999943, 1.059773326, 0.969898701}, - {8.970833, 0.999999583, 0.999999821, 1.059999943, 1.059773803, 0.969898939}, - {8.975, 0.999999583, 0.999999821, 1.059999943, 1.05977428, 0.969899237}, - {8.979167, 0.999999583, 0.999999821, 1.059999943, 1.059774876, 0.969899476}, - {8.983333, 0.999999583, 0.999999821, 1.059999943, 1.059775352, 0.969899714}, - {8.9875, 0.999999583, 0.999999821, 1.059999943, 1.059775949, 0.969899952}, - {8.991667, 0.999999583, 0.999999821, 1.059999943, 1.059776425, 0.969900191}, - {8.995833, 0.999999583, 0.999999821, 1.059999943, 1.059776902, 0.969900429}, - {9, 0.999999583, 0.999999821, 1.059999943, 1.059777498, 0.969900727}, - {9.004167, 0.999999583, 0.999999821, 1.059999943, 1.059777975, 0.969900966}, - {9.008333, 0.999999583, 0.999999821, 1.059999943, 1.059778452, 0.969901204}, - {9.0125, 0.999999583, 0.999999821, 1.059999943, 1.059779048, 0.969901443}, - {9.016667, 0.999999583, 0.999999821, 1.059999943, 1.059779525, 0.969901681}, - {9.020833, 0.999999583, 0.999999821, 1.059999943, 1.059780002, 0.969901919}, - {9.025, 0.999999583, 0.999999821, 1.059999943, 1.059780598, 0.969902158}, - {9.029167, 0.999999583, 0.999999821, 1.059999943, 1.059781075, 0.969902396}, - {9.033333, 0.999999583, 0.999999821, 1.059999943, 1.059781551, 0.969902635}, - {9.0375, 0.999999583, 0.999999821, 1.059999943, 1.059782028, 0.969902873}, - {9.041667, 0.999999583, 0.999999821, 1.059999943, 1.059782505, 0.969903171}, - {9.045833, 0.999999583, 0.999999821, 1.059999943, 1.059783101, 0.969903409}, - {9.05, 0.999999583, 0.999999821, 1.059999943, 1.059783578, 0.969903648}, - {9.054167, 0.999999583, 0.999999821, 1.059999943, 1.059784055, 0.969903886}, - {9.058333, 0.999999583, 0.999999821, 1.059999943, 1.059784532, 0.969904125}, - {9.0625, 0.999999583, 0.999999821, 1.059999943, 1.059785128, 0.969904363}, - {9.066667, 0.999999583, 0.999999821, 1.059999943, 1.059785604, 0.969904542}, - {9.070833, 0.999999583, 0.999999821, 1.059999943, 1.059786081, 0.96990478}, - {9.075, 0.999999583, 0.999999821, 1.059999943, 1.059786558, 0.969905019}, - {9.079167, 0.999999583, 0.999999821, 1.059999943, 1.059787035, 0.969905257}, - {9.083333, 0.999999583, 0.999999821, 1.059999943, 1.059787512, 0.969905496}, - {9.0875, 0.999999583, 0.999999821, 1.059999943, 1.059787989, 0.969905734}, - {9.091667, 0.999999583, 0.999999821, 1.059999943, 1.059788466, 0.969905972}, - {9.095833, 0.999999583, 0.999999821, 1.059999943, 1.059789062, 0.969906211}, - {9.1, 0.999999583, 0.999999821, 1.059999943, 1.059789538, 0.969906449}, - {9.104167, 0.999999583, 0.999999821, 1.059999943, 1.059790015, 0.969906688}, - {9.108333, 0.999999583, 0.999999821, 1.059999943, 1.059790492, 0.969906926}, - {9.1125, 0.999999583, 0.999999821, 1.059999943, 1.059790969, 0.969907105}, - {9.116667, 0.999999583, 0.999999821, 1.059999943, 1.059791446, 0.969907343}, - {9.120833, 0.999999583, 0.999999821, 1.059999943, 1.059791923, 0.969907582}, - {9.125, 0.999999583, 0.999999821, 1.059999943, 1.059792399, 0.96990782}, - {9.129167, 0.999999583, 0.999999821, 1.059999943, 1.059792876, 0.969908059}, - {9.133333, 0.999999583, 0.999999821, 1.059999943, 1.059793353, 0.969908297}, - {9.1375, 0.999999583, 0.999999821, 1.059999943, 1.05979383, 0.969908476}, - {9.141667, 0.999999583, 0.999999821, 1.059999943, 1.059794307, 0.969908714}, - {9.145833, 0.999999583, 0.999999821, 1.059999943, 1.059794784, 0.969908953}, - {9.15, 0.999999583, 0.999999821, 1.059999943, 1.05979526, 0.969909191}, - {9.154167, 0.999999583, 0.999999821, 1.059999943, 1.059795737, 0.96990937}, - {9.158333, 0.999999583, 0.999999821, 1.059999943, 1.059796214, 0.969909608}, - {9.1625, 0.999999583, 0.999999821, 1.059999943, 1.059796691, 0.969909847}, - {9.166667, 0.999999642, 0.999999821, 1.059999943, 1.059797168, 0.969910085}, - {9.170833, 0.999999642, 0.999999821, 1.059999943, 1.059797645, 0.969910264}, - {9.175, 0.999999642, 0.999999821, 1.059999943, 1.059798121, 0.969910502}, - {9.179167, 0.999999642, 0.999999821, 1.059999943, 1.059798598, 0.969910741}, - {9.183333, 0.999999642, 0.999999881, 1.059999943, 1.059799075, 0.96991092}, - {9.1875, 0.999999642, 0.999999881, 1.059999943, 1.059799433, 0.969911158}, - {9.191667, 0.999999642, 0.999999881, 1.059999943, 1.05979991, 0.969911397}, - {9.195833, 0.999999642, 0.999999881, 1.059999943, 1.059800386, 0.969911575}, - {9.2, 0.999999642, 0.999999881, 1.059999943, 1.059800863, 0.969911814}, - {9.204167, 0.999999642, 0.999999881, 1.059999943, 1.05980134, 0.969912052}, - {9.208333, 0.999999642, 0.999999881, 1.059999943, 1.059801817, 0.969912231}, - {9.2125, 0.999999642, 0.999999881, 1.059999943, 1.059802294, 0.969912469}, - {9.216667, 0.999999642, 0.999999881, 1.059999943, 1.059802771, 0.969912708}, - {9.220833, 0.999999642, 0.999999881, 1.059999943, 1.059803128, 0.969912887}, - {9.225, 0.999999642, 0.999999881, 1.059999943, 1.059803605, 0.969913125}, - {9.229167, 0.999999642, 0.999999881, 1.059999943, 1.059804082, 0.969913304}, - {9.233333, 0.999999642, 0.999999881, 1.059999943, 1.059804559, 0.969913542}, - {9.2375, 0.999999642, 0.999999881, 1.059999943, 1.059805036, 0.969913781}, - {9.241667, 0.999999642, 0.999999881, 1.059999943, 1.059805393, 0.96991396}, - {9.245833, 0.999999642, 0.999999881, 1.059999943, 1.05980587, 0.969914198}, - {9.25, 0.999999642, 0.999999881, 1.059999943, 1.059806347, 0.969914377}, - {9.254167, 0.999999642, 0.999999881, 1.059999943, 1.059806824, 0.969914615}, - {9.258333, 0.999999642, 0.999999881, 1.059999943, 1.059807181, 0.969914794}, - {9.2625, 0.999999642, 0.999999881, 1.059999943, 1.059807658, 0.969915032}, - {9.266667, 0.999999642, 0.999999881, 1.059999943, 1.059808135, 0.969915211}, - {9.270833, 0.999999642, 0.999999881, 1.059999943, 1.059808612, 0.96991545}, - {9.275, 0.999999642, 0.999999881, 1.059999943, 1.05980897, 0.969915628}, - {9.279167, 0.999999642, 0.999999881, 1.059999943, 1.059809446, 0.969915867}, - {9.283333, 0.999999642, 0.999999881, 1.059999943, 1.059809923, 0.969916046}, - {9.2875, 0.999999642, 0.999999881, 1.059999943, 1.059810281, 0.969916284}, - {9.291667, 0.999999642, 0.999999881, 1.059999943, 1.059810758, 0.969916463}, - {9.295833, 0.999999642, 0.999999881, 1.059999943, 1.059811234, 0.969916701}, - {9.3, 0.999999642, 0.999999881, 1.059999943, 1.059811592, 0.96991688}, - {9.304167, 0.999999642, 0.999999881, 1.059999943, 1.059812069, 0.969917119}, - {9.308333, 0.999999642, 0.999999881, 1.059999943, 1.059812546, 0.969917297}, - {9.3125, 0.999999642, 0.999999881, 1.059999943, 1.059812903, 0.969917536}, - {9.316667, 0.999999642, 0.999999881, 1.059999943, 1.05981338, 0.969917715}, - {9.320833, 0.999999642, 0.999999881, 1.059999943, 1.059813857, 0.969917893}, - {9.325, 0.999999702, 0.999999881, 1.059999943, 1.059814215, 0.969918132}, - {9.329167, 0.999999702, 0.999999881, 1.059999943, 1.059814692, 0.969918311}, - {9.333333, 0.999999702, 0.999999881, 1.059999943, 1.059815168, 0.969918489}, - {9.3375, 0.999999702, 0.999999881, 1.059999943, 1.059815526, 0.969918728}, - {9.341667, 0.999999702, 0.999999881, 1.059999943, 1.059816003, 0.969918907}, - {9.345833, 0.999999702, 0.999999881, 1.059999943, 1.05981636, 0.969919145}, - {9.35, 0.999999702, 0.999999881, 1.059999943, 1.059816837, 0.969919324}, - {9.354167, 0.999999702, 0.999999881, 1.059999943, 1.059817195, 0.969919503}, - {9.358333, 0.999999702, 0.999999881, 1.059999943, 1.059817672, 0.969919741}, - {9.3625, 0.999999702, 0.999999881, 1.059999943, 1.059818029, 0.96991992}, - {9.366667, 0.999999702, 0.999999881, 1.059999943, 1.059818506, 0.969920099}, - {9.370833, 0.999999702, 0.999999881, 1.059999943, 1.059818983, 0.969920278}, - {9.375, 0.999999702, 0.999999881, 1.059999943, 1.059819341, 0.969920516}, - {9.379167, 0.999999702, 0.999999881, 1.059999943, 1.059819818, 0.969920695}, - {9.383333, 0.999999702, 0.999999881, 1.059999943, 1.059820175, 0.969920874}, - {9.3875, 0.999999702, 0.999999881, 1.059999943, 1.059820652, 0.969921112}, - {9.391667, 0.999999702, 0.999999881, 1.059999943, 1.05982101, 0.969921291}, - {9.395833, 0.999999702, 0.999999881, 1.059999943, 1.059821367, 0.96992147}, - {9.4, 0.999999702, 0.999999881, 1.059999943, 1.059821844, 0.969921649}, - {9.404167, 0.999999702, 0.999999881, 1.059999943, 1.059822202, 0.969921827}, - {9.408333, 0.999999702, 0.999999881, 1.059999943, 1.059822679, 0.969922066}, - {9.4125, 0.999999702, 0.999999881, 1.059999943, 1.059823036, 0.969922245}, - {9.416667, 0.999999702, 0.999999881, 1.059999943, 1.059823513, 0.969922423}, - {9.420833, 0.999999702, 0.999999881, 1.059999943, 1.059823871, 0.969922602}, - {9.425, 0.999999702, 0.999999881, 1.059999943, 1.059824228, 0.969922781}, - {9.429167, 0.999999702, 0.999999881, 1.059999943, 1.059824705, 0.969923019}, - {9.433333, 0.999999702, 0.999999881, 1.059999943, 1.059825063, 0.969923198}, - {9.4375, 0.999999702, 0.999999881, 1.059999943, 1.05982554, 0.969923377}, - {9.441667, 0.999999702, 0.999999881, 1.059999943, 1.059825897, 0.969923556}, - {9.445833, 0.999999702, 0.999999881, 1.059999943, 1.059826255, 0.969923735}, - {9.45, 0.999999702, 0.999999881, 1.059999943, 1.059826732, 0.969923913}, - {9.454167, 0.999999702, 0.999999881, 1.059999943, 1.059827089, 0.969924092}, - {9.458333, 0.999999702, 0.999999881, 1.059999943, 1.059827447, 0.969924271}, - {9.4625, 0.999999702, 0.999999881, 1.059999943, 1.059827924, 0.96992451}, - {9.466667, 0.999999702, 0.999999881, 1.059999943, 1.059828281, 0.969924688}, - {9.470833, 0.999999702, 0.999999881, 1.059999943, 1.059828639, 0.969924867}, - {9.475, 0.999999702, 0.999999881, 1.059999943, 1.059829116, 0.969925046}, - {9.479167, 0.999999702, 0.999999881, 1.059999943, 1.059829474, 0.969925225}, - {9.483333, 0.999999702, 0.999999881, 1.059999943, 1.059829831, 0.969925404}, - {9.4875, 0.999999702, 0.999999881, 1.059999943, 1.059830308, 0.969925582}, - {9.491667, 0.999999702, 0.999999881, 1.059999943, 1.059830666, 0.969925761}, - {9.495833, 0.999999702, 0.999999881, 1.059999943, 1.059831023, 0.96992594}, - {9.5, 0.999999702, 0.999999881, 1.059999943, 1.059831381, 0.969926119}, - {9.504167, 0.999999702, 0.999999881, 1.059999943, 1.059831858, 0.969926298}, - {9.508333, 0.999999702, 0.999999881, 1.059999943, 1.059832215, 0.969926476}, - {9.5125, 0.999999702, 0.999999881, 1.059999943, 1.059832573, 0.969926655}, - {9.516667, 0.999999702, 0.999999881, 1.059999943, 1.059832931, 0.969926834}, - {9.520833, 0.999999702, 0.999999881, 1.059999943, 1.059833407, 0.969927013}, - {9.525, 0.999999702, 0.999999881, 1.059999943, 1.059833765, 0.969927192}, - {9.529167, 0.999999702, 0.999999881, 1.059999943, 1.059834123, 0.969927371}, - {9.533333, 0.999999702, 0.999999881, 1.059999943, 1.05983448, 0.969927549}, - {9.5375, 0.999999702, 0.999999881, 1.059999943, 1.059834838, 0.969927728}, - {9.541667, 0.999999702, 0.999999881, 1.059999943, 1.059835315, 0.969927907}, - {9.545833, 0.999999702, 0.999999881, 1.059999943, 1.059835672, 0.969928086}, - {9.55, 0.999999702, 0.999999881, 1.059999943, 1.05983603, 0.969928265}, - {9.554167, 0.999999702, 0.999999881, 1.059999943, 1.059836388, 0.969928384}, - {9.558333, 0.999999702, 0.999999881, 1.059999943, 1.059836745, 0.969928563}, - {9.5625, 0.999999702, 0.999999881, 1.059999943, 1.059837103, 0.969928741}, - {9.566667, 0.999999702, 0.999999881, 1.059999943, 1.059837461, 0.96992892}, - {9.570833, 0.999999702, 0.999999881, 1.059999943, 1.059837937, 0.969929099}, - {9.575, 0.999999702, 0.999999881, 1.059999943, 1.059838295, 0.969929278}, - {9.579167, 0.999999702, 0.999999881, 1.059999943, 1.059838653, 0.969929457}, - {9.583333, 0.999999702, 0.999999881, 1.059999943, 1.05983901, 0.969929636}, - {9.5875, 0.999999702, 0.999999881, 1.059999943, 1.059839368, 0.969929755}, - {9.591667, 0.999999702, 0.999999881, 1.059999943, 1.059839725, 0.969929934}, - {9.595833, 0.999999702, 0.999999881, 1.059999943, 1.059840083, 0.969930112}, - {9.6, 0.999999702, 0.999999881, 1.059999943, 1.059840441, 0.969930291}, - {9.604167, 0.999999702, 0.999999881, 1.059999943, 1.059840798, 0.96993047}, - {9.608333, 0.999999702, 0.999999881, 1.059999943, 1.059841156, 0.969930649}, - {9.6125, 0.999999702, 0.999999881, 1.059999943, 1.059841514, 0.969930768}, - {9.616667, 0.999999702, 0.999999881, 1.059999943, 1.059841871, 0.969930947}, - {9.620833, 0.999999702, 0.999999881, 1.059999943, 1.059842229, 0.969931126}, - {9.625, 0.999999702, 0.999999881, 1.059999943, 1.059842587, 0.969931304}, - {9.629167, 0.999999702, 0.999999881, 1.059999943, 1.059842944, 0.969931424}, - {9.633333, 0.999999702, 0.999999881, 1.059999943, 1.059843421, 0.969931602}, - {9.6375, 0.999999702, 0.999999881, 1.059999943, 1.059843779, 0.969931781}, - {9.641667, 0.999999702, 0.999999881, 1.059999943, 1.059844136, 0.96993196}, - {9.645833, 0.999999702, 0.999999881, 1.059999943, 1.059844494, 0.969932139}, - {9.65, 0.999999702, 0.999999881, 1.059999943, 1.059844851, 0.969932258}, - {9.654167, 0.999999702, 0.999999881, 1.059999943, 1.05984509, 0.969932437}, - {9.658333, 0.999999702, 0.999999881, 1.059999943, 1.059845448, 0.969932616}, - {9.6625, 0.999999702, 0.999999881, 1.059999943, 1.059845805, 0.969932735}, - {9.666667, 0.999999702, 0.999999881, 1.059999943, 1.059846163, 0.969932914}, - {9.670833, 0.999999702, 0.999999881, 1.059999943, 1.05984652, 0.969933093}, - {9.675, 0.999999702, 0.999999881, 1.059999943, 1.059846878, 0.969933271}, - {9.679167, 0.999999702, 0.999999881, 1.059999943, 1.059847236, 0.969933391}, - {9.683333, 0.999999702, 0.999999881, 1.059999943, 1.059847593, 0.969933569}, - {9.6875, 0.999999702, 0.999999881, 1.059999943, 1.059847951, 0.969933748}, - {9.691667, 0.999999702, 0.999999881, 1.059999943, 1.059848309, 0.969933867}, - {9.695833, 0.999999702, 0.999999881, 1.059999943, 1.059848666, 0.969934046}, - {9.7, 0.999999702, 0.999999881, 1.059999943, 1.059849024, 0.969934225}, - {9.704167, 0.999999702, 0.999999881, 1.059999943, 1.059849381, 0.969934344}, - {9.708333, 0.999999702, 0.999999881, 1.059999943, 1.059849739, 0.969934523}, - {9.7125, 0.999999702, 0.999999881, 1.059999943, 1.059849977, 0.969934702}, - {9.716667, 0.999999702, 0.999999881, 1.059999943, 1.059850335, 0.969934821}, - {9.720833, 0.999999702, 0.999999881, 1.059999943, 1.059850693, 0.969935}, - {9.725, 0.999999702, 0.999999881, 1.059999943, 1.05985105, 0.969935119}, - {9.729167, 0.999999702, 0.999999881, 1.059999943, 1.059851408, 0.969935298}, - {9.733333, 0.999999702, 0.999999881, 1.059999943, 1.059851766, 0.969935477}, - {9.7375, 0.999999762, 0.999999881, 1.059999943, 1.059852123, 0.969935596}, - {9.741667, 0.999999762, 0.999999881, 1.059999943, 1.059852481, 0.969935775}, - {9.745833, 0.999999762, 0.999999881, 1.059999943, 1.059852719, 0.969935894}, - {9.75, 0.999999762, 0.999999881, 1.059999943, 1.059853077, 0.969936073}, - {9.754167, 0.999999762, 0.999999881, 1.059999943, 1.059853435, 0.969936252}, - {9.758333, 0.999999762, 0.999999881, 1.059999943, 1.059853792, 0.969936371}, - {9.7625, 0.999999762, 0.999999881, 1.059999943, 1.05985415, 0.96993655}, - {9.766667, 0.999999762, 0.999999881, 1.059999943, 1.059854388, 0.969936669}, - {9.770833, 0.999999762, 0.999999881, 1.059999943, 1.059854746, 0.969936848}, - {9.775, 0.999999762, 0.999999881, 1.059999943, 1.059855103, 0.969936967}, - {9.779167, 0.999999762, 0.999999881, 1.059999943, 1.059855461, 0.969937146}, - {9.783333, 0.999999762, 0.999999881, 1.059999943, 1.059855819, 0.969937325}, - {9.7875, 0.999999762, 0.999999881, 1.059999943, 1.059856057, 0.969937444}, - {9.791667, 0.999999762, 0.999999881, 1.059999943, 1.059856415, 0.969937623}, - {9.795833, 0.999999762, 0.999999881, 1.059999943, 1.059856772, 0.969937742}, - {9.8, 0.999999762, 0.999999881, 1.059999943, 1.05985713, 0.969937921}, - {9.804167, 0.999999762, 0.999999881, 1.059999943, 1.059857368, 0.96993804}, - {9.808333, 0.999999762, 0.999999881, 1.059999943, 1.059857726, 0.969938219}, - {9.8125, 0.999999762, 0.999999881, 1.059999943, 1.059858084, 0.969938338}, - {9.816667, 0.999999762, 0.999999881, 1.059999943, 1.059858441, 0.969938517}, - {9.820833, 0.999999762, 0.999999881, 1.059999943, 1.05985868, 0.969938636}, - {9.825, 0.999999762, 0.999999881, 1.059999943, 1.059859037, 0.969938755}, - {9.829167, 0.999999762, 0.999999881, 1.059999943, 1.059859395, 0.969938934}, - {9.833333, 0.999999762, 0.999999881, 1.059999943, 1.059859633, 0.969939053}, - {9.8375, 0.999999762, 0.999999881, 1.059999943, 1.059859991, 0.969939232}, - {9.841667, 0.999999762, 0.99999994, 1.059999943, 1.059860349, 0.969939351}, - {9.845833, 0.999999762, 0.99999994, 1.059999943, 1.059860587, 0.96993953}, - {9.85, 0.999999762, 0.99999994, 1.059999943, 1.059860945, 0.969939649}, - {9.854167, 0.999999762, 0.99999994, 1.059999943, 1.059861302, 0.969939828}, - {9.858333, 0.999999762, 0.99999994, 1.059999943, 1.059861541, 0.969939947}, - {9.8625, 0.999999762, 0.99999994, 1.059999943, 1.059861898, 0.969940066}, - {9.866667, 0.999999762, 0.99999994, 1.059999943, 1.059862256, 0.969940245}, - {9.870833, 0.999999762, 0.99999994, 1.059999943, 1.059862494, 0.969940364}, - {9.875, 0.999999762, 0.99999994, 1.059999943, 1.059862852, 0.969940543}, - {9.879167, 0.999999762, 0.99999994, 1.059999943, 1.05986321, 0.969940662}, - {9.883333, 0.999999762, 0.99999994, 1.059999943, 1.059863448, 0.969940782}, - {9.8875, 0.999999762, 0.99999994, 1.059999943, 1.059863806, 0.96994096}, - {9.891667, 0.999999762, 0.99999994, 1.059999943, 1.059864044, 0.96994108}, - {9.895833, 0.999999762, 0.99999994, 1.059999943, 1.059864402, 0.969941199}, - {9.9, 0.999999762, 0.99999994, 1.059999943, 1.059864759, 0.969941378}, - {9.904167, 0.999999762, 0.99999994, 1.059999943, 1.059864998, 0.969941497}, - {9.908333, 0.999999762, 0.99999994, 1.059999943, 1.059865355, 0.969941616}, - {9.9125, 0.999999762, 0.99999994, 1.059999943, 1.059865594, 0.969941795}, - {9.916667, 0.999999762, 0.99999994, 1.059999943, 1.059865952, 0.969941914}, - {9.920833, 0.999999762, 0.99999994, 1.059999943, 1.05986619, 0.969942033}, - {9.925, 0.999999762, 0.99999994, 1.059999943, 1.059866548, 0.969942212}, - {9.929167, 0.999999762, 0.99999994, 1.059999943, 1.059866905, 0.969942331}, - {9.933333, 0.999999762, 0.99999994, 1.059999943, 1.059867144, 0.969942451}, - {9.9375, 0.999999762, 0.99999994, 1.059999943, 1.059867501, 0.969942629}, - {9.941667, 0.999999762, 0.99999994, 1.059999943, 1.05986774, 0.969942749}, - {9.945833, 0.999999762, 0.99999994, 1.059999943, 1.059868097, 0.969942868}, - {9.95, 0.999999762, 0.99999994, 1.059999943, 1.059868336, 0.969942987}, - {9.954167, 0.999999762, 0.99999994, 1.059999943, 1.059868693, 0.969943166}, - {9.958333, 0.999999762, 0.99999994, 1.059999943, 1.059868932, 0.969943285}, - {9.9625, 0.999999762, 0.99999994, 1.059999943, 1.059869289, 0.969943404}, - {9.966667, 0.999999762, 0.99999994, 1.059999943, 1.059869528, 0.969943583}, - {9.970833, 0.999999762, 0.99999994, 1.059999943, 1.059869885, 0.969943702}, - {9.975, 0.999999762, 0.99999994, 1.059999943, 1.059870124, 0.969943821}, - {9.979167, 0.999999762, 0.99999994, 1.059999943, 1.059870481, 0.969943941}, - {9.983333, 0.999999762, 0.99999994, 1.059999943, 1.05987072, 0.96994406}, - {9.9875, 0.999999762, 0.99999994, 1.059999943, 1.059871078, 0.969944239}, - {9.991667, 0.999999762, 0.99999994, 1.059999943, 1.059871316, 0.969944358}, - {9.995833, 0.999999762, 0.99999994, 1.059999943, 1.059871554, 0.969944477}, - {10, 0.999999762, 0.99999994, 1.059999943, 1.059871912, 0.969944596}}; +namespace Example2 +{ + double reference_tol = 1e-6; + std::vector> reference_solution = { + {0, 1, 1, 1.059999943, 1.059997797, 0.969999611}, + {0.004167, 0.99999994, 0.99999994, 1.059999943, 1.059997797, 0.969999611}, + {0.008333, 0.999999881, 0.99999994, 1.059999943, 1.059997797, 0.969999611}, + {0.0125, 0.999999821, 0.99999994, 1.059999943, 1.059997797, 0.969999611}, + {0.016667, 0.999999762, 0.999999881, 1.059999943, 1.059997797, 0.969999611}, + {0.020833, 0.999999702, 0.999999881, 1.059999943, 1.059997797, 0.969999611}, + {0.025, 0.999999642, 0.999999881, 1.059999943, 1.059997797, 0.969999611}, + {0.029167, 0.999999642, 0.999999881, 1.059999943, 1.059997797, 0.969999611}, + {0.033333, 0.999999583, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, + {0.0375, 0.999999583, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, + {0.041667, 0.999999523, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, + {0.045833, 0.999999523, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, + {0.05, 0.999999523, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, + {0.054167, 0.999999464, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, + {0.058333, 0.999999464, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, + {0.0625, 0.999999464, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, + {0.066667, 0.999999464, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, + {0.070833, 0.999999464, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, + {0.075, 0.999999464, 0.999999821, 1.059999943, 1.059996843, 0.969999015}, + {0.079167, 0.999999404, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.083333, 0.999999404, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.0875, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.091667, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.095833, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.1, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.104167, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.108333, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.1125, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.116667, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.120833, 0.999999404, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.125, 0.999999404, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.129167, 0.999999404, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.133333, 0.999999464, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.1375, 0.999999464, 0.999999821, 1.059999943, 1.059996843, 0.969999015}, + {0.141667, 0.999999464, 0.999999821, 1.059999943, 1.059996843, 0.969999015}, + {0.145833, 0.999999523, 0.999999821, 1.059999943, 1.059996843, 0.969999015}, + {0.15, 0.999999523, 0.999999821, 1.059999943, 1.059996843, 0.969999015}, + {0.154167, 0.999999583, 0.999999821, 1.059999943, 1.059996843, 0.969999015}, + {0.158333, 0.999999642, 0.999999881, 1.059999943, 1.059996843, 0.969999015}, + {0.1625, 0.999999642, 0.999999881, 1.059999943, 1.059996843, 0.969999015}, + {0.166667, 0.999999702, 0.999999881, 1.059999943, 1.059996843, 0.969999015}, + {0.170833, 0.999999702, 0.999999881, 1.059999943, 1.059996843, 0.969999015}, + {0.175, 0.999999762, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.179167, 0.999999762, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.183333, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.1875, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.191667, 0.999999881, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.195833, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.2, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.204167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.208333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.2125, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.216667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.220833, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.225, 1.000000119, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.229167, 1.000000119, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.233333, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.2375, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.241667, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.245833, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.25, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.254167, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.258333, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.2625, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.266667, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.270833, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.275, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.279167, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.283333, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.2875, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.291667, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.295833, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.3, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.304167, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.308333, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.3125, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.316667, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.320833, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.325, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.329167, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.333333, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.3375, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.341667, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.345833, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.35, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.354167, 1.000000238, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.358333, 1.000000238, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.3625, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.366667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.370833, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.375, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.379167, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.383333, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.3875, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.391667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.395833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.4, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.404167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.408333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.4125, 0.99999994, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.416667, 0.99999994, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.420833, 0.99999994, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.425, 0.99999994, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.429167, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.433333, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.4375, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.441667, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.445833, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.45, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.454167, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.458333, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.4625, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.466667, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.470833, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.475, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.479167, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.483333, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.4875, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.491667, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.495833, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.5, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.504167, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.508333, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.5125, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.516667, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.520833, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.525, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.529167, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.533333, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.5375, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.541667, 0.999999881, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.545833, 0.999999881, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.55, 0.999999881, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.554167, 0.999999881, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.558333, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.5625, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.566667, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.570833, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.575, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.579167, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.583333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.5875, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.591667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.595833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.6, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.604167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.608333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.6125, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.616667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.620833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.625, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.629167, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.633333, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.6375, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.641667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.645833, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.65, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.654167, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.658333, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.6625, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.666667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.670833, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.675, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.679167, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.683333, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.6875, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.691667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.695833, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.7, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.704167, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.708333, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.7125, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.716667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.720833, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.725, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.729167, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.733333, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.7375, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.741667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.745833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.75, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.754167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.758333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.7625, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.766667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.770833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.775, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.779167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.783333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.7875, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.791667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.795833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.8, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.804167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.808333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.8125, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.816667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.820833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.825, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.829167, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.833333, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.8375, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.841667, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.845833, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.85, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.854167, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.858333, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.8625, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.866667, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.870833, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.875, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.879167, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.883333, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.8875, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.891667, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.895833, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.9, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.904167, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.908333, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.9125, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.916667, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.920833, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.925, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.929167, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.933333, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.9375, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.941667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.945833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.95, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.954167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.958333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.9625, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.966667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.970833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.975, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.979167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.983333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.9875, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.991667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.995833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {1, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {1.004167, 1.000062704, 1.000325799, 1.059999943, 0.820292711, 0.000147394}, + {1.008333, 1.000121474, 1.00065136, 1.059999943, 0.818987548, 0.000146861}, + {1.0125, 1.000176668, 1.00097692, 1.059999943, 0.81781584, 0.000146359}, + {1.016667, 1.000228524, 1.001302361, 1.059999943, 0.816757917, 0.000145887}, + {1.020833, 1.000277519, 1.001627564, 1.059999943, 0.815796912, 0.000145443}, + {1.025, 1.000323892, 1.001952767, 1.059999943, 0.814918101, 0.000145025}, + {1.029167, 1.000367641, 1.00227797, 1.059999943, 0.814109504, 0.000144631}, + {1.033333, 1.000409126, 1.002602816, 1.059999943, 0.813361049, 0.000144261}, + {1.0375, 1.000448585, 1.002927661, 1.059999943, 0.812663555, 0.000143912}, + {1.041667, 1.000486016, 1.003252506, 1.059999943, 0.812009811, 0.000143584}, + {1.045833, 1.000521541, 1.003576994, 1.059999943, 0.811393619, 0.000143274}, + {1.05, 1.000555277, 1.003901601, 1.059999943, 0.810793042, 0.000142972}, + {1.054167, 1.000587344, 1.004225969, 1.059999943, 0.810252428, 0.000142705}, + {1.058333, 1.000617743, 1.004550219, 1.059999943, 0.809719265, 0.000142443}, + {1.0625, 1.000646591, 1.004874468, 1.059999943, 0.809195876, 0.000142186}, + {1.066667, 1.000674009, 1.005198598, 1.059999943, 0.808710635, 0.000141957}, + {1.070833, 1.000699759, 1.00552249, 1.059999943, 0.808222353, 0.000141725}, + {1.075, 1.000724196, 1.005846381, 1.059999943, 0.807762384, 0.000141516}, + {1.079167, 1.000747085, 1.006170154, 1.059999943, 0.807305813, 0.000141309}, + {1.083333, 1.000768542, 1.006493688, 1.059999943, 0.806858957, 0.000141109}, + {1.0875, 1.000788689, 1.006817341, 1.059999943, 0.806420326, 0.000140917}, + {1.091667, 1.000807405, 1.007140756, 1.059999943, 0.805988908, 0.000140729}, + {1.095833, 1.00082469, 1.007463932, 1.059999943, 0.805563867, 0.000140547}, + {1.1, 1.000840545, 1.007787228, 1.059999943, 0.80514407, 0.00014037}, + {1.104167, 1.000855803, 1.007198334, 1.059999943, 1.032057166, 0.922393143}, + {1.108333, 1.000866055, 1.006641626, 1.059999943, 1.033476114, 0.924479365}, + {1.1125, 1.000872135, 1.006110191, 1.059999943, 1.034744263, 0.926455021}, + {1.116667, 1.000874519, 1.005599022, 1.059999943, 1.035876513, 0.928305149}, + {1.120833, 1.000873804, 1.005103946, 1.059999943, 1.036886334, 0.930021584}, + {1.125, 1.000870109, 1.004621744, 1.059999943, 1.03778708, 0.93160224}, + {1.129167, 1.00086391, 1.004150152, 1.059999943, 1.038589478, 0.933047175}, + {1.133333, 1.000855207, 1.003687382, 1.059999943, 1.039303541, 0.934358716}, + {1.1375, 1.00084424, 1.003232241, 1.059999943, 1.039938688, 0.935541749}, + {1.141667, 1.000831127, 1.002783775, 1.059999943, 1.040502787, 0.936601043}, + {1.145833, 1.000815868, 1.002342105, 1.059999943, 1.041002631, 0.937542081}, + {1.15, 1.000798583, 1.001906633, 1.059999943, 1.041444898, 0.938371241}, + {1.154167, 1.000779152, 1.001477718, 1.059999943, 1.041862607, 0.939153254}, + {1.158333, 1.000757694, 1.001055717, 1.059999943, 1.042177677, 0.939717412}, + {1.1625, 1.00073421, 1.000641108, 1.059999943, 1.042499781, 0.940296471}, + {1.166667, 1.00070858, 1.000234604, 1.059999943, 1.04273808, 0.940686703}, + {1.170833, 1.000681043, 0.999836862, 1.059999943, 1.042981267, 0.941086531}, + {1.175, 1.000651479, 0.999448657, 1.059999943, 1.043155313, 0.941323221}, + {1.179167, 1.000619888, 0.999070704, 1.059999943, 1.043332696, 0.94156599}, + {1.183333, 1.00058639, 0.998704076, 1.059999943, 1.043452263, 0.941668034}, + {1.1875, 1.000550866, 0.998349309, 1.059999943, 1.043573976, 0.941773772}, + {1.191667, 1.000513554, 0.998007417, 1.059999943, 1.04364717, 0.941758871}, + {1.195833, 1.000474334, 0.997679114, 1.059999943, 1.043721676, 0.941746056}, + {1.2, 1.000433326, 0.997365177, 1.059999943, 1.043755054, 0.941630721}, + {1.204167, 1.000390649, 0.997066259, 1.059999943, 1.043789148, 0.941516459}, + {1.208333, 1.000346303, 0.996783197, 1.059999943, 1.043788195, 0.941316426}, + {1.2125, 1.000300407, 0.996516407, 1.059999943, 1.043780208, 0.941099048}, + {1.216667, 1.000253201, 0.996266425, 1.059999943, 1.043764353, 0.940862536}, + {1.220833, 1.000204682, 0.996034026, 1.059999943, 1.04372108, 0.940563142}, + {1.225, 1.000154972, 0.995819211, 1.059999943, 1.043678045, 0.940263927}, + {1.229167, 1.000104189, 0.995622635, 1.059999943, 1.043612003, 0.939915836}, + {1.233333, 1.000052571, 0.995444477, 1.059999943, 1.043545961, 0.9395684}, + {1.2375, 1.000000119, 0.995284915, 1.059999943, 1.043460965, 0.939185202}, + {1.241667, 0.999947131, 0.99514401, 1.059999943, 1.043376088, 0.938803017}, + {1.245833, 0.999893785, 0.995021999, 1.059999943, 1.043275952, 0.938397586}, + {1.25, 0.999840021, 0.994918644, 1.059999943, 1.043175936, 0.937993705}, + {1.254167, 0.999786258, 0.994834065, 1.059999943, 1.043063998, 0.937578082}, + {1.258333, 0.999732554, 0.994768023, 1.059999943, 1.042952418, 0.937164783}, + {1.2625, 0.999679089, 0.99472034, 1.059999943, 1.042832136, 0.936750293}, + {1.266667, 0.999625981, 0.994690776, 1.059999943, 1.042712331, 0.936338663}, + {1.270833, 0.999573588, 0.994678915, 1.059999943, 1.042586803, 0.935935795}, + {1.275, 0.999521911, 0.994684458, 1.059999943, 1.042461753, 0.935536265}, + {1.279167, 0.999471188, 0.994706929, 1.059999943, 1.042333841, 0.935154021}, + {1.283333, 0.999421597, 0.99474597, 1.059999943, 1.042206645, 0.934775829}, + {1.2875, 0.999373257, 0.994800925, 1.059999943, 1.042078972, 0.934422433}, + {1.291667, 0.999326408, 0.994871318, 1.059999943, 1.041952252, 0.934073329}, + {1.295833, 0.999281168, 0.994956493, 1.059999943, 1.04182744, 0.933755577}, + {1.3, 0.999237716, 0.995055914, 1.059999943, 1.041703463, 0.933442354}, + {1.304167, 0.999196231, 0.995168865, 1.059999943, 1.041583538, 0.933165789}, + {1.308333, 0.999156773, 0.99529469, 1.059999943, 1.041464686, 0.932893932}, + {1.3125, 0.99911952, 0.995432615, 1.059999943, 1.041351557, 0.932662845}, + {1.316667, 0.999084651, 0.995582044, 1.059999943, 1.0412395, 0.932436347}, + {1.320833, 0.999052227, 0.995742023, 1.059999943, 1.041135073, 0.932253957}, + {1.325, 0.999022365, 0.995912075, 1.059999943, 1.041031599, 0.932075918}, + {1.329167, 0.998995245, 0.996091127, 1.059999943, 1.040937185, 0.931943953}, + {1.333333, 0.998970926, 0.996278644, 1.059999943, 1.040843606, 0.93181622}, + {1.3375, 0.998949409, 0.99647367, 1.059999943, 1.040760398, 0.931735754}, + {1.341667, 0.998930931, 0.996675611, 1.059999943, 1.040678024, 0.931658983}, + {1.345833, 0.998915493, 0.996883333, 1.059999943, 1.040607095, 0.931629896}, + {1.35, 0.998903096, 0.997096419, 1.059999943, 1.040536761, 0.931604028}, + {1.354167, 0.998893857, 0.997313857, 1.059999943, 1.040478826, 0.931625366}, + {1.358333, 0.998887837, 0.997534931, 1.059999943, 1.040421486, 0.931649446}, + {1.3625, 0.998884976, 0.997758746, 1.059999943, 1.04037714, 0.931719601}, + {1.366667, 0.998885393, 0.997984767, 1.059999943, 1.040333271, 0.931791902}, + {1.370833, 0.998889029, 0.99821198, 1.059999943, 1.040302992, 0.931908667}, + {1.375, 0.998895884, 0.998439848, 1.059999943, 1.04027307, 0.932026923}, + {1.379167, 0.998906016, 0.998667419, 1.059999943, 1.040257096, 0.932187438}, + {1.383333, 0.998919308, 0.998894155, 1.059999943, 1.04024148, 0.932348847}, + {1.3875, 0.998935759, 0.999119222, 1.059999943, 1.04023993, 0.932549894}, + {1.391667, 0.998955429, 0.999342144, 1.059999943, 1.040238619, 0.932751417}, + {1.395833, 0.998978078, 0.999561965, 1.059999943, 1.040251493, 0.932989478}, + {1.4, 0.999003768, 0.99977833, 1.059999943, 1.040264487, 0.933227539}, + {1.404167, 0.999032319, 0.999990404, 1.059999943, 1.040291786, 0.933498859}, + {1.408333, 0.999063849, 1.000197768, 1.059999943, 1.040318966, 0.933769703}, + {1.4125, 0.999098003, 1.000399709, 1.059999943, 1.040360212, 0.934070349}, + {1.416667, 0.999134898, 1.000595927, 1.059999943, 1.040401459, 0.934370279}, + {1.420833, 0.999174297, 1.000785589, 1.059999943, 1.040456295, 0.934696198}, + {1.425, 0.999216139, 1.000968456, 1.059999943, 1.040511131, 0.935021162}, + {1.429167, 0.999260247, 1.001143932, 1.059999943, 1.0405792, 0.935368419}, + {1.433333, 0.999306619, 1.001311779, 1.059999943, 1.040647149, 0.935714424}, + {1.4375, 0.999354899, 1.001471519, 1.059999943, 1.040727735, 0.936078966}, + {1.441667, 0.999405086, 1.001622796, 1.059999943, 1.040808201, 0.936442196}, + {1.445833, 0.999457002, 1.001765251, 1.059999943, 1.040900707, 0.936819971}, + {1.45, 0.999510527, 1.001898766, 1.059999943, 1.040993094, 0.937196553}, + {1.454167, 0.999565363, 1.002022862, 1.059999943, 1.041096687, 0.937583864}, + {1.458333, 0.999621451, 1.002137542, 1.059999943, 1.041200042, 0.937969863}, + {1.4625, 0.999678612, 1.002242565, 1.059999943, 1.041313887, 0.938363016}, + {1.466667, 0.999736667, 1.002337694, 1.059999943, 1.041427493, 0.938754976}, + {1.470833, 0.999795318, 1.00242281, 1.059999943, 1.041550517, 0.939150274}, + {1.475, 0.999854624, 1.002497911, 1.059999943, 1.041673303, 0.939544678}, + {1.479167, 0.999914169, 1.002563, 1.059999943, 1.041804552, 0.939938962}, + {1.483333, 0.999973893, 1.002618074, 1.059999943, 1.041935563, 0.940332353}, + {1.4875, 1.000033617, 1.002663016, 1.059999943, 1.042073965, 0.940722287}, + {1.491667, 1.000093102, 1.002697945, 1.059999943, 1.042212009, 0.941111684}, + {1.495833, 1.000152111, 1.002722979, 1.059999943, 1.042356133, 0.941494226}, + {1.5, 1.000210524, 1.002738118, 1.059999943, 1.042500138, 0.941876531}, + {1.504167, 1.000268221, 1.002743721, 1.059999943, 1.042649031, 0.94224906}, + {1.508333, 1.000325084, 1.002739787, 1.059999943, 1.042797565, 0.94262141}, + {1.5125, 1.000380635, 1.002726674, 1.059999943, 1.042949796, 0.942981184}, + {1.516667, 1.000434995, 1.002704382, 1.059999943, 1.043101668, 0.943341076}, + {1.520833, 1.000487924, 1.002673268, 1.059999943, 1.043255925, 0.943685651}, + {1.525, 1.000539184, 1.002633691, 1.059999943, 1.043409944, 0.944030523}, + {1.529167, 1.000588775, 1.002585888, 1.059999943, 1.043564916, 0.944357812}, + {1.533333, 1.000636339, 1.002530217, 1.059999943, 1.04371953, 0.944685459}, + {1.5375, 1.000681877, 1.002466917, 1.059999943, 1.043873787, 0.944993436}, + {1.541667, 1.00072515, 1.002396464, 1.059999943, 1.044027925, 0.94530189}, + {1.545833, 1.000766158, 1.002319217, 1.059999943, 1.044180274, 0.945588708}, + {1.55, 1.000804663, 1.002235413, 1.059999943, 1.044332385, 0.945876181}, + {1.554167, 1.000840664, 1.002145648, 1.059999943, 1.044481516, 0.946140409}, + {1.558333, 1.000873923, 1.002050281, 1.059999943, 1.044630408, 0.946405232}, + {1.5625, 1.000904441, 1.001949787, 1.059999943, 1.044775009, 0.946645617}, + {1.566667, 1.000932097, 1.001844525, 1.059999943, 1.044919491, 0.946886659}, + {1.570833, 1.000956893, 1.001735091, 1.059999943, 1.045058489, 0.94710207}, + {1.575, 1.000978589, 1.001621723, 1.059999943, 1.045197368, 0.947318256}, + {1.579167, 1.000997186, 1.001505017, 1.059999943, 1.045329809, 0.947508216}, + {1.583333, 1.001012683, 1.00138545, 1.059999943, 1.045461893, 0.947698712}, + {1.5875, 1.001025081, 1.001263499, 1.059999943, 1.045586586, 0.947862685}, + {1.591667, 1.00103426, 1.001139522, 1.059999943, 1.045711041, 0.948027253}, + {1.595833, 1.00104022, 1.001014113, 1.059999943, 1.04582727, 0.948165178}, + {1.6, 1.001043081, 1.000887513, 1.059999943, 1.04594326, 0.94830364}, + {1.604167, 1.001042604, 1.000760436, 1.059999943, 1.046050191, 0.948415816}, + {1.608333, 1.001038909, 1.000633121, 1.059999943, 1.046156883, 0.948528349}, + {1.6125, 1.001032114, 1.000506163, 1.059999943, 1.04625392, 0.948615313}, + {1.616667, 1.00102222, 1.00037992, 1.059999943, 1.046350837, 0.948702633}, + {1.620833, 1.001009107, 1.000254869, 1.059999943, 1.046437621, 0.948765159}, + {1.625, 1.000993013, 1.000131369, 1.059999943, 1.046524167, 0.948828101}, + {1.629167, 1.000973821, 1.000009775, 1.059999943, 1.046600223, 0.9488675}, + {1.633333, 1.000951767, 0.999890447, 1.059999943, 1.046676159, 0.948907197}, + {1.6375, 1.000926971, 0.99977386, 1.059999943, 1.046741486, 0.948924899}, + {1.641667, 1.000899315, 0.999660254, 1.059999943, 1.046806693, 0.94894284}, + {1.645833, 1.000869036, 0.999550045, 1.059999943, 1.046861053, 0.948940635}, + {1.65, 1.000836134, 0.999443412, 1.059999943, 1.046915293, 0.948938608}, + {1.654167, 1.000800848, 0.999340832, 1.059999943, 1.046958923, 0.948918402}, + {1.658333, 1.000763297, 0.999242425, 1.059999943, 1.047002435, 0.948898375}, + {1.6625, 1.000723481, 0.999148488, 1.059999943, 1.047035456, 0.948862374}, + {1.666667, 1.00068152, 0.9990592, 1.059999943, 1.047068477, 0.948826551}, + {1.670833, 1.00063777, 0.9989748, 1.059999943, 1.047091246, 0.94877708}, + {1.675, 1.000592232, 0.998895526, 1.059999943, 1.047114015, 0.948727787}, + {1.679167, 1.000545025, 0.998821437, 1.059999943, 1.047126889, 0.948667228}, + {1.683333, 1.000496387, 0.998752713, 1.059999943, 1.047140002, 0.948606968}, + {1.6875, 1.000446439, 0.998689532, 1.059999943, 1.047143579, 0.948537946}, + {1.691667, 1.000395298, 0.998631895, 1.059999943, 1.047147393, 0.948469162}, + {1.695833, 1.000343204, 0.998579919, 1.059999943, 1.047142267, 0.94839412}, + {1.7, 1.000290275, 0.998533607, 1.059999943, 1.04713738, 0.948319435}, + {1.704167, 1.00023663, 0.998493075, 1.059999943, 1.047124386, 0.948240876}, + {1.708333, 1.000182509, 0.998458266, 1.059999943, 1.04711163, 0.948162794}, + {1.7125, 1.00012815, 0.998429179, 1.059999943, 1.047091365, 0.948083282}, + {1.716667, 1.000073671, 0.998405755, 1.059999943, 1.047071218, 0.948004186}, + {1.720833, 1.000019193, 0.998387992, 1.059999943, 1.047044516, 0.947925985}, + {1.725, 0.999964893, 0.998375833, 1.059999943, 1.047018051, 0.94784826}, + {1.729167, 0.999910951, 0.998369098, 1.059999943, 1.046985745, 0.947773576}, + {1.733333, 0.999857545, 0.998367786, 1.059999943, 1.046953559, 0.947699487}, + {1.7375, 0.999804854, 0.99837172, 1.059999943, 1.046916485, 0.947630346}, + {1.741667, 0.999752998, 0.998380721, 1.059999943, 1.046879649, 0.9475618}, + {1.745833, 0.999702215, 0.998394728, 1.059999943, 1.046838641, 0.947500169}, + {1.75, 0.999652505, 0.998413563, 1.059999943, 1.046797872, 0.947439015}, + {1.754167, 0.999604166, 0.998436928, 1.059999943, 1.046753883, 0.947386384}, + {1.758333, 0.999557257, 0.998464823, 1.059999943, 1.046710134, 0.94733429}, + {1.7625, 0.999511898, 0.99849689, 1.059999943, 1.046664119, 0.94729203}, + {1.766667, 0.999468327, 0.99853301, 1.059999943, 1.046618223, 0.947250366}, + {1.770833, 0.999426544, 0.998572886, 1.059999943, 1.046570897, 0.94721967}, + {1.775, 0.999386728, 0.998616397, 1.059999943, 1.04652369, 0.94718951}, + {1.779167, 0.999348998, 0.998663187, 1.059999943, 1.046476007, 0.94717133}, + {1.783333, 0.999313474, 0.998713076, 1.059999943, 1.046428561, 0.947153628}, + {1.7875, 0.999280155, 0.998765886, 1.059999943, 1.046381354, 0.947148621}, + {1.791667, 0.99924922, 0.998821259, 1.059999943, 1.046334267, 0.947143972}, + {1.795833, 0.999220729, 0.998879015, 1.059999943, 1.04628849, 0.947152495}, + {1.8, 0.999194741, 0.998938859, 1.059999943, 1.046242714, 0.947161376}, + {1.804167, 0.999171317, 0.999000549, 1.059999943, 1.046199083, 0.947183728}, + {1.808333, 0.999150515, 0.999063849, 1.059999943, 1.046155453, 0.947206259}, + {1.8125, 0.999132395, 0.99912852, 1.059999943, 1.046114683, 0.947242379}, + {1.816667, 0.999116957, 0.999194264, 1.059999943, 1.046073914, 0.947278678}, + {1.820833, 0.999104321, 0.999260843, 1.059999943, 1.04603672, 0.947328329}, + {1.825, 0.999094367, 0.999328017, 1.059999943, 1.045999646, 0.947378159}, + {1.829167, 0.999087214, 0.999395549, 1.059999943, 1.045966744, 0.947441041}, + {1.833333, 0.999082804, 0.99946326, 1.059999943, 1.045933962, 0.947503924}, + {1.8375, 0.999081135, 0.999530792, 1.059999943, 1.045906067, 0.947579503}, + {1.841667, 0.999082267, 0.999598026, 1.059999943, 1.045878291, 0.947655022}, + {1.845833, 0.999086082, 0.999664605, 1.059999943, 1.04585588, 0.947742462}, + {1.85, 0.999092579, 0.999730527, 1.059999943, 1.045833588, 0.947829902}, + {1.854167, 0.999101698, 0.999795437, 1.059999943, 1.045817137, 0.947928607}, + {1.858333, 0.999113441, 0.999859154, 1.059999943, 1.045800805, 0.948027134}, + {1.8625, 0.999127686, 0.999921501, 1.059999943, 1.045790911, 0.948136032}, + {1.866667, 0.999144435, 0.999982357, 1.059999943, 1.045781016, 0.94824481}, + {1.870833, 0.999163568, 1.000041485, 1.059999943, 1.045777917, 0.948362947}, + {1.875, 0.999185085, 1.000098825, 1.059999943, 1.045774817, 0.948480964}, + {1.879167, 0.999208808, 1.000154018, 1.059999943, 1.045778871, 0.948607385}, + {1.883333, 0.999234676, 1.000207067, 1.059999943, 1.045782804, 0.948733509}, + {1.8875, 0.999262571, 1.000257969, 1.059999943, 1.04579401, 0.948866963}, + {1.891667, 0.999292433, 1.000306368, 1.059999943, 1.045805335, 0.949000239}, + {1.895833, 0.999324083, 1.000352263, 1.059999943, 1.045823932, 0.949139595}, + {1.9, 0.999357522, 1.000395656, 1.059999943, 1.045842528, 0.949278772}, + {1.904167, 0.999392569, 1.000436306, 1.059999943, 1.045868516, 0.949423015}, + {1.908333, 0.999429107, 1.000474215, 1.059999943, 1.045894504, 0.94956696}, + {1.9125, 0.999466956, 1.000509381, 1.059999943, 1.045927644, 0.94971478}, + {1.916667, 0.999506116, 1.000541568, 1.059999943, 1.045960903, 0.949862361}, + {1.920833, 0.999546349, 1.000570893, 1.059999943, 1.046001196, 0.950012624}, + {1.925, 0.999587536, 1.000597358, 1.059999943, 1.046041489, 0.950162709}, + {1.929167, 0.999629557, 1.000620842, 1.059999943, 1.046088696, 0.950314343}, + {1.933333, 0.999672294, 1.000641465, 1.059999943, 1.046135783, 0.950465679}, + {1.9375, 0.999715626, 1.000658989, 1.059999943, 1.046189427, 0.950617552}, + {1.941667, 0.999759376, 1.000673771, 1.059999943, 1.046242952, 0.950769186}, + {1.945833, 0.999803364, 1.000685453, 1.059999943, 1.046302676, 0.950920165}, + {1.95, 0.999847531, 1.000694394, 1.059999943, 1.046362281, 0.951070964}, + {1.954167, 0.999891698, 1.000700474, 1.059999943, 1.046427488, 0.951220155}, + {1.958333, 0.999935806, 1.000703812, 1.059999943, 1.046492577, 0.951369166}, + {1.9625, 0.999979556, 1.000704408, 1.059999943, 1.046562791, 0.951515555}, + {1.966667, 1.000023007, 1.000702381, 1.059999943, 1.046632886, 0.951661825}, + {1.970833, 1.000065923, 1.000697732, 1.059999943, 1.046707511, 0.951804578}, + {1.975, 1.000108123, 1.000690579, 1.059999943, 1.046782017, 0.951947272}, + {1.979167, 1.000149608, 1.000681162, 1.059999943, 1.046860218, 0.952085614}, + {1.983333, 1.000190258, 1.00066936, 1.059999943, 1.046938419, 0.952223837}, + {1.9875, 1.000229836, 1.000655293, 1.059999943, 1.04701972, 0.952357054}, + {1.991667, 1.00026834, 1.0006392, 1.059999943, 1.047100902, 0.952490211}, + {1.995833, 1.000305653, 1.0006212, 1.059999943, 1.047184587, 0.952617645}, + {2, 1.000341535, 1.000601172, 1.059999943, 1.047268033, 0.95274508}, + {2.004167, 1.000376105, 1.000579476, 1.059999943, 1.047353268, 0.952866316}, + {2.008333, 1.000409007, 1.000556231, 1.059999943, 1.047438383, 0.952987432}, + {2.0125, 1.000440478, 1.000531435, 1.059999943, 1.047524452, 0.953101993}, + {2.016667, 1.000470161, 1.000505209, 1.059999943, 1.047610402, 0.953216493}, + {2.020833, 1.000498056, 1.000477791, 1.059999943, 1.04769671, 0.95332408}, + {2.025, 1.000524282, 1.0004493, 1.059999943, 1.047782779, 0.953431606}, + {2.029167, 1.000548482, 1.000419736, 1.059999943, 1.047868609, 0.953531981}, + {2.033333, 1.000570774, 1.000389457, 1.059999943, 1.047954082, 0.953632295}, + {2.0375, 1.00059104, 1.000358343, 1.059999943, 1.048038721, 0.953725338}, + {2.041667, 1.000609279, 1.000326633, 1.059999943, 1.048123121, 0.953818321}, + {2.045833, 1.000625491, 1.000294566, 1.059999943, 1.048205853, 0.953904033}, + {2.05, 1.000639558, 1.000262022, 1.059999943, 1.048288465, 0.953989685}, + {2.054167, 1.000651479, 1.000229359, 1.059999943, 1.048368931, 0.954068124}, + {2.058333, 1.000661254, 1.000196576, 1.059999943, 1.048449159, 0.954146564}, + {2.0625, 1.000668883, 1.000163794, 1.059999943, 1.048526645, 0.954217851}, + {2.066667, 1.000674367, 1.000131249, 1.059999943, 1.048604012, 0.954289198}, + {2.070833, 1.000677705, 1.000098944, 1.059999943, 1.04867816, 0.95435369}, + {2.075, 1.000678897, 1.000066876, 1.059999943, 1.048752069, 0.954418182}, + {2.079167, 1.000677943, 1.000035405, 1.059999943, 1.048822403, 0.954476118}, + {2.083333, 1.000674844, 1.000004411, 1.059999943, 1.048892617, 0.954534054}, + {2.0875, 1.000669718, 0.999974191, 1.059999943, 1.048958778, 0.95458585}, + {2.091667, 1.000662565, 0.999944627, 1.059999943, 1.04902482, 0.954637706}, + {2.095833, 1.000653505, 0.999915957, 1.059999943, 1.049086452, 0.954683781}, + {2.1, 1.000642419, 0.999888122, 1.059999943, 1.049148083, 0.954729974}, + {2.104167, 1.000629425, 0.99986136, 1.059999943, 1.049205065, 0.954770863}, + {2.108333, 1.000614524, 0.99983561, 1.059999943, 1.049262047, 0.954811871}, + {2.1125, 1.000597954, 0.999810994, 1.059999943, 1.049314141, 0.954848111}, + {2.116667, 1.000579715, 0.999787509, 1.059999943, 1.049366236, 0.95488447}, + {2.120833, 1.000559807, 0.999765277, 1.059999943, 1.049413323, 0.954916656}, + {2.125, 1.000538349, 0.999744296, 1.059999943, 1.049460411, 0.954948962}, + {2.129167, 1.000515461, 0.999724627, 1.059999943, 1.049502373, 0.954977632}, + {2.133333, 1.000491142, 0.999706268, 1.059999943, 1.049544454, 0.955006421}, + {2.1375, 1.000465512, 0.999689341, 1.059999943, 1.049581409, 0.955032229}, + {2.141667, 1.00043869, 0.999673724, 1.059999943, 1.049618363, 0.955058157}, + {2.145833, 1.000410795, 0.999659538, 1.059999943, 1.049650192, 0.955081642}, + {2.15, 1.000381947, 0.999646723, 1.059999943, 1.04968214, 0.955105186}, + {2.154167, 1.000352144, 0.999635339, 1.059999943, 1.049709082, 0.955126941}, + {2.158333, 1.000321388, 0.999625385, 1.059999943, 1.049736142, 0.955148816}, + {2.1625, 1.000290155, 0.999616802, 1.059999943, 1.049758196, 0.95516938}, + {2.166667, 1.000258207, 0.999609649, 1.059999943, 1.049780369, 0.955190122}, + {2.170833, 1.000225663, 0.999603808, 1.059999943, 1.049797893, 0.95521003}, + {2.175, 1.000192881, 0.999599397, 1.059999943, 1.049815416, 0.955230057}, + {2.179167, 1.00015974, 0.999596238, 1.059999943, 1.04982841, 0.955249846}, + {2.183333, 1.000126481, 0.99959439, 1.059999943, 1.049841523, 0.955269754}, + {2.1875, 1.000093102, 0.999593854, 1.059999943, 1.049850345, 0.9552899}, + {2.191667, 1.000059724, 0.99959451, 1.059999943, 1.049859285, 0.955310106}, + {2.195833, 1.000026464, 0.999596357, 1.059999943, 1.049864173, 0.955330908}, + {2.2, 0.999993443, 0.999599338, 1.059999943, 1.04986918, 0.95535183}, + {2.204167, 0.99996078, 0.999603391, 1.059999943, 1.049870491, 0.955373764}, + {2.208333, 0.999928474, 0.999608517, 1.059999943, 1.049871922, 0.955395818}, + {2.2125, 0.999896765, 0.999614656, 1.059999943, 1.049870014, 0.955419123}, + {2.216667, 0.999865592, 0.999621749, 1.059999943, 1.049868107, 0.955442548}, + {2.220833, 0.999835193, 0.999629676, 1.059999943, 1.049863338, 0.955467582}, + {2.225, 0.99980551, 0.999638438, 1.059999943, 1.04985857, 0.955492675}, + {2.229167, 0.999776721, 0.999648035, 1.059999943, 1.049851298, 0.955519617}, + {2.233333, 0.999748886, 0.999658287, 1.059999943, 1.049844027, 0.955546558}, + {2.2375, 0.999722064, 0.999669194, 1.059999943, 1.049834609, 0.955575585}, + {2.241667, 0.999696374, 0.999680698, 1.059999943, 1.049825192, 0.955604613}, + {2.245833, 0.999671817, 0.999692738, 1.059999943, 1.049814105, 0.955635786}, + {2.25, 0.999648452, 0.999705255, 1.059999943, 1.049803138, 0.955667019}, + {2.254167, 0.999626398, 0.999718189, 1.059999943, 1.04979074, 0.955700517}, + {2.258333, 0.999605656, 0.999731421, 1.059999943, 1.049778461, 0.955734015}, + {2.2625, 0.999586284, 0.999744952, 1.059999943, 1.049765348, 0.955769777}, + {2.266667, 0.999568343, 0.99975878, 1.059999943, 1.049752116, 0.95580554}, + {2.270833, 0.999551892, 0.999772727, 1.059999943, 1.049738646, 0.955843627}, + {2.275, 0.999536932, 0.999786794, 1.059999943, 1.049725056, 0.955881715}, + {2.279167, 0.999523461, 0.99980098, 1.059999943, 1.049711585, 0.955922067}, + {2.283333, 0.9995116, 0.999815106, 1.059999943, 1.049698114, 0.95596242}, + {2.2875, 0.999501228, 0.999829233, 1.059999943, 1.049685001, 0.956004977}, + {2.291667, 0.999492526, 0.99984324, 1.059999943, 1.049672008, 0.956047535}, + {2.295833, 0.999485373, 0.999857128, 1.059999943, 1.049659848, 0.956092179}, + {2.3, 0.999479771, 0.999870837, 1.059999943, 1.049647689, 0.956136823}, + {2.304167, 0.999475837, 0.999884367, 1.059999943, 1.049636841, 0.956183434}, + {2.308333, 0.999473453, 0.99989754, 1.059999943, 1.049625993, 0.956230044}, + {2.3125, 0.999472618, 0.999910474, 1.059999943, 1.049616814, 0.956278563}, + {2.316667, 0.999473393, 0.99992305, 1.059999943, 1.049607515, 0.956327021}, + {2.320833, 0.999475658, 0.999935269, 1.059999943, 1.049600363, 0.956377208}, + {2.325, 0.999479473, 0.999947071, 1.059999943, 1.04959321, 0.956427336}, + {2.329167, 0.999484777, 0.999958456, 1.059999943, 1.049588203, 0.956479013}, + {2.333333, 0.999491513, 0.999969423, 1.059999943, 1.049583435, 0.95653069}, + {2.3375, 0.999499619, 0.999979854, 1.059999943, 1.049581051, 0.956583738}, + {2.341667, 0.999509156, 0.999989808, 1.059999943, 1.049578905, 0.956636727}, + {2.345833, 0.999519944, 0.999999285, 1.059999943, 1.049579382, 0.956690967}, + {2.35, 0.999532104, 1.000008225, 1.059999943, 1.049579978, 0.956745088}, + {2.354167, 0.999545395, 1.00001657, 1.059999943, 1.049583673, 0.956800282}, + {2.358333, 0.999559939, 1.000024438, 1.059999943, 1.049587369, 0.956855416}, + {2.3625, 0.999575555, 1.00003171, 1.059999943, 1.049594283, 0.956911385}, + {2.366667, 0.999592185, 1.000038385, 1.059999943, 1.049601197, 0.956967354}, + {2.370833, 0.999609828, 1.000044584, 1.059999943, 1.049611449, 0.957023919}, + {2.375, 0.999628425, 1.000050187, 1.059999943, 1.049621701, 0.957080424}, + {2.379167, 0.999647856, 1.000055313, 1.059999943, 1.04963541, 0.957137406}, + {2.383333, 0.999668062, 1.000059724, 1.059999943, 1.049649119, 0.957194388}, + {2.3875, 0.999688923, 1.000063777, 1.059999943, 1.049666286, 0.957251668}, + {2.391667, 0.9997105, 1.000067115, 1.059999943, 1.049683571, 0.957308888}, + {2.395833, 0.999732614, 1.000070095, 1.059999943, 1.049704194, 0.957366169}, + {2.4, 0.999755204, 1.000072479, 1.059999943, 1.049724817, 0.957423508}, + {2.404167, 0.999778271, 1.000074387, 1.059999943, 1.049748898, 0.957480788}, + {2.408333, 0.999801636, 1.000075817, 1.059999943, 1.049772978, 0.957538009}, + {2.4125, 0.999825239, 1.000076771, 1.059999943, 1.049800277, 0.95759505}, + {2.416667, 0.999849081, 1.000077248, 1.059999943, 1.049827695, 0.957652092}, + {2.420833, 0.999873042, 1.000077367, 1.059999943, 1.049858212, 0.957708836}, + {2.425, 0.999897003, 1.000077009, 1.059999943, 1.04988873, 0.95776552}, + {2.429167, 0.999920964, 1.000076294, 1.059999943, 1.049922347, 0.957821786}, + {2.433333, 0.999944866, 1.000075221, 1.059999943, 1.049955845, 0.957877994}, + {2.4375, 0.999968529, 1.000073791, 1.059999943, 1.049992204, 0.957933664}, + {2.441667, 0.999991953, 1.000072002, 1.059999943, 1.050028443, 0.957989335}, + {2.445833, 1.00001514, 1.000069976, 1.059999943, 1.050067425, 0.95804435}, + {2.45, 1.000037909, 1.000067711, 1.059999943, 1.050106287, 0.958099365}, + {2.454167, 1.000060201, 1.000065088, 1.059999943, 1.050147414, 0.958153665}, + {2.458333, 1.000082016, 1.000062346, 1.059999943, 1.050188541, 0.958207965}, + {2.4625, 1.000103235, 1.000059366, 1.059999943, 1.050231814, 0.95826143}, + {2.466667, 1.000123858, 1.000056148, 1.059999943, 1.050274968, 0.958314896}, + {2.470833, 1.000143886, 1.00005281, 1.059999943, 1.05031991, 0.958367527}, + {2.475, 1.000163078, 1.000049353, 1.059999943, 1.050364733, 0.958420157}, + {2.479167, 1.000181556, 1.000045776, 1.059999943, 1.050411105, 0.958471894}, + {2.483333, 1.000199199, 1.000042081, 1.059999943, 1.050457358, 0.958523631}, + {2.4875, 1.000216007, 1.000038385, 1.059999943, 1.050504684, 0.958574474}, + {2.491667, 1.000231862, 1.000034571, 1.059999943, 1.050552011, 0.958625317}, + {2.495833, 1.000246763, 1.000030875, 1.059999943, 1.050600171, 0.958675206}, + {2.5, 1.00026083, 1.000027061, 1.059999943, 1.050648332, 0.958725095}, + {2.504167, 1.000273705, 1.000023246, 1.059999943, 1.05069685, 0.95877403}, + {2.508333, 1.000285625, 1.000019431, 1.059999943, 1.050745368, 0.958822966}, + {2.5125, 1.000296593, 1.000015616, 1.059999943, 1.050794125, 0.958871007}, + {2.516667, 1.000306368, 1.00001204, 1.059999943, 1.050842762, 0.958919048}, + {2.520833, 1.00031507, 1.000008345, 1.059999943, 1.050891161, 0.958966136}, + {2.525, 1.0003227, 1.000004768, 1.059999943, 1.050939679, 0.959013283}, + {2.529167, 1.000329256, 1.000001431, 1.059999943, 1.050987601, 0.959059477}, + {2.533333, 1.00033462, 0.999998033, 1.059999943, 1.051035523, 0.95910567}, + {2.5375, 1.000338912, 0.999994814, 1.059999943, 1.05108285, 0.95915097}, + {2.541667, 1.000342131, 0.999991655, 1.059999943, 1.051129937, 0.95919627}, + {2.545833, 1.000344157, 0.999988675, 1.059999943, 1.05117619, 0.959240735}, + {2.55, 1.00034523, 0.999985814, 1.059999943, 1.051222205, 0.9592852}, + {2.554167, 1.000345111, 0.999983132, 1.059999943, 1.051267147, 0.95932889}, + {2.558333, 1.000343919, 0.999980509, 1.059999943, 1.05131197, 0.95937252}, + {2.5625, 1.000341654, 0.999978125, 1.059999943, 1.051355243, 0.959415317}, + {2.566667, 1.000338316, 0.999975801, 1.059999943, 1.051398516, 0.959458172}, + {2.570833, 1.000334024, 0.999973655, 1.059999943, 1.05144012, 0.959500253}, + {2.575, 1.00032866, 0.999971688, 1.059999943, 1.051481724, 0.959542274}, + {2.579167, 1.000322461, 0.99996978, 1.059999943, 1.05152142, 0.95958364}, + {2.583333, 1.000315309, 0.999968112, 1.059999943, 1.051561117, 0.959624946}, + {2.5875, 1.000307202, 0.999966502, 1.059999943, 1.051598668, 0.959665537}, + {2.591667, 1.000298262, 0.999965072, 1.059999943, 1.051636338, 0.959706128}, + {2.595833, 1.000288486, 0.99996376, 1.059999943, 1.051671743, 0.959746063}, + {2.6, 1.000277996, 0.999962568, 1.059999943, 1.051707149, 0.959785938}, + {2.604167, 1.000266671, 0.999961555, 1.059999943, 1.05174017, 0.959825158}, + {2.608333, 1.00025475, 0.999960601, 1.059999943, 1.05177331, 0.959864378}, + {2.6125, 1.000242114, 0.999959767, 1.059999943, 1.051804066, 0.959902942}, + {2.616667, 1.000228882, 0.999958992, 1.059999943, 1.051834702, 0.959941506}, + {2.620833, 1.000215173, 0.999958396, 1.059999943, 1.051862955, 0.959979355}, + {2.625, 1.000200868, 0.9999578, 1.059999943, 1.051891327, 0.960017264}, + {2.629167, 1.000186086, 0.999957323, 1.059999943, 1.051917076, 0.960054517}, + {2.633333, 1.000170946, 0.999956906, 1.059999943, 1.051942945, 0.96009171}, + {2.6375, 1.000155449, 0.999956608, 1.059999943, 1.05196619, 0.960128307}, + {2.641667, 1.000139713, 0.99995631, 1.059999943, 1.051989555, 0.960164905}, + {2.645833, 1.00012362, 0.999956071, 1.059999943, 1.052010417, 0.960200846}, + {2.65, 1.000107288, 0.999955833, 1.059999943, 1.052031398, 0.960236788}, + {2.654167, 1.000090957, 0.999955654, 1.059999943, 1.052049875, 0.960272133}, + {2.658333, 1.000074387, 0.999955535, 1.059999943, 1.052068353, 0.96030736}, + {2.6625, 1.000057936, 0.999955356, 1.059999943, 1.052084565, 0.96034205}, + {2.666667, 1.000041366, 0.999955237, 1.059999943, 1.052100658, 0.96037668}, + {2.670833, 1.000024796, 0.999955118, 1.059999943, 1.052114606, 0.960410595}, + {2.675, 1.000008464, 0.999954998, 1.059999943, 1.052128553, 0.96044457}, + {2.679167, 0.999992192, 0.999954879, 1.059999943, 1.052140355, 0.960477889}, + {2.683333, 0.999976158, 0.9999547, 1.059999943, 1.052152157, 0.960511148}, + {2.6875, 0.999960363, 0.999954522, 1.059999943, 1.052162051, 0.960543811}, + {2.691667, 0.999944866, 0.999954283, 1.059999943, 1.052171826, 0.960576415}, + {2.695833, 0.999929667, 0.999954045, 1.059999943, 1.052179813, 0.960608363}, + {2.7, 0.999914825, 0.999953806, 1.059999943, 1.0521878, 0.960640311}, + {2.704167, 0.99990046, 0.999953449, 1.059999943, 1.052194119, 0.960671544}, + {2.708333, 0.999886453, 0.999953091, 1.059999943, 1.052200437, 0.960702837}, + {2.7125, 0.999872983, 0.999952734, 1.059999943, 1.052205324, 0.960733414}, + {2.716667, 0.999860048, 0.999952257, 1.059999943, 1.052210212, 0.960763991}, + {2.720833, 0.999847651, 0.99995178, 1.059999943, 1.052213669, 0.960793912}, + {2.725, 0.999835789, 0.999951303, 1.059999943, 1.052217245, 0.960823774}, + {2.729167, 0.999824584, 0.999950707, 1.059999943, 1.052219629, 0.96085304}, + {2.733333, 0.999813974, 0.999950111, 1.059999943, 1.052222133, 0.960882246}, + {2.7375, 0.99980408, 0.999949455, 1.059999943, 1.052223682, 0.960910857}, + {2.741667, 0.999794781, 0.99994874, 1.059999943, 1.052225232, 0.960939467}, + {2.745833, 0.999786258, 0.999947965, 1.059999943, 1.052226067, 0.960967422}, + {2.75, 0.99977839, 0.99994719, 1.059999943, 1.05222702, 0.960995376}, + {2.754167, 0.999771297, 0.999946415, 1.059999943, 1.052227378, 0.961022794}, + {2.758333, 0.99976486, 0.999945581, 1.059999943, 1.052227855, 0.961050153}, + {2.7625, 0.999759257, 0.999944746, 1.059999943, 1.052228093, 0.961076915}, + {2.766667, 0.999754369, 0.999943852, 1.059999943, 1.052228212, 0.961103737}, + {2.770833, 0.999750197, 0.999942958, 1.059999943, 1.052228451, 0.961130023}, + {2.775, 0.999746859, 0.999942064, 1.059999943, 1.05222857, 0.961156309}, + {2.779167, 0.999744236, 0.99994117, 1.059999943, 1.052228928, 0.961182117}, + {2.783333, 0.999742389, 0.999940276, 1.059999943, 1.052229404, 0.961207926}, + {2.7875, 0.999741256, 0.999939382, 1.059999943, 1.05223012, 0.961233318}, + {2.791667, 0.999740899, 0.999938548, 1.059999943, 1.052230954, 0.961258709}, + {2.795833, 0.999741256, 0.999937713, 1.059999943, 1.052232265, 0.961283743}, + {2.8, 0.999742389, 0.999936879, 1.059999943, 1.052233577, 0.961308777}, + {2.804167, 0.999744177, 0.999936104, 1.059999943, 1.052235723, 0.961333513}, + {2.808333, 0.99974668, 0.999935329, 1.059999943, 1.052237868, 0.96135819}, + {2.8125, 0.999749899, 0.999934673, 1.059999943, 1.052240968, 0.961382687}, + {2.816667, 0.999753714, 0.999934018, 1.059999943, 1.052244067, 0.961407185}, + {2.820833, 0.999758184, 0.999933481, 1.059999943, 1.05224812, 0.961431503}, + {2.825, 0.99976331, 0.999932945, 1.059999943, 1.052252293, 0.961455822}, + {2.829167, 0.999768972, 0.999932528, 1.059999943, 1.052257657, 0.961480081}, + {2.833333, 0.99977529, 0.99993217, 1.059999943, 1.052263141, 0.961504281}, + {2.8375, 0.999782085, 0.999931931, 1.059999943, 1.052269816, 0.96152848}, + {2.841667, 0.999789417, 0.999931753, 1.059999943, 1.052276611, 0.96155268}, + {2.845833, 0.999797225, 0.999931633, 1.059999943, 1.052284718, 0.961576939}, + {2.85, 0.99980545, 0.999931693, 1.059999943, 1.052292943, 0.961601198}, + {2.854167, 0.999814153, 0.999931812, 1.059999943, 1.052302599, 0.961625576}, + {2.858333, 0.999823272, 0.999932051, 1.059999943, 1.052312374, 0.961649954}, + {2.8625, 0.99983269, 0.999932349, 1.059999943, 1.05232358, 0.961674511}, + {2.866667, 0.999842465, 0.999932826, 1.059999943, 1.052334905, 0.961699069}, + {2.870833, 0.999852538, 0.999933422, 1.059999943, 1.052347779, 0.961723924}, + {2.875, 0.999862909, 0.999934137, 1.059999943, 1.052360773, 0.961748719}, + {2.879167, 0.999873459, 0.999934912, 1.059999943, 1.052375197, 0.961773872}, + {2.883333, 0.999884188, 0.999935865, 1.059999943, 1.052389741, 0.961799026}, + {2.8875, 0.999895096, 0.999936938, 1.059999943, 1.052405953, 0.961824536}, + {2.891667, 0.999906182, 0.999938071, 1.059999943, 1.052422047, 0.961850047}, + {2.895833, 0.999917269, 0.999939382, 1.059999943, 1.052439809, 0.961876035}, + {2.9, 0.999928474, 0.999940813, 1.059999943, 1.052457571, 0.961901963}, + {2.904167, 0.99993968, 0.999942362, 1.059999943, 1.052476883, 0.961928368}, + {2.908333, 0.999950886, 0.999944031, 1.059999943, 1.052496195, 0.961954772}, + {2.9125, 0.999962032, 0.99994576, 1.059999943, 1.052517056, 0.961981714}, + {2.916667, 0.999973118, 0.999947608, 1.059999943, 1.052537918, 0.962008655}, + {2.920833, 0.999984086, 0.999949634, 1.059999943, 1.052560091, 0.962036073}, + {2.925, 0.999994934, 0.999951661, 1.059999943, 1.052582264, 0.962063551}, + {2.929167, 1.000005603, 0.999953866, 1.059999943, 1.052605867, 0.962091565}, + {2.933333, 1.000016093, 0.999956131, 1.059999943, 1.052629471, 0.962119579}, + {2.9375, 1.000026345, 0.999958456, 1.059999943, 1.052654147, 0.96214813}, + {2.941667, 1.000036359, 0.999960899, 1.059999943, 1.052678943, 0.962176681}, + {2.945833, 1.000046015, 0.999963343, 1.059999943, 1.052704811, 0.962205768}, + {2.95, 1.000055432, 0.999965906, 1.059999943, 1.05273068, 0.962234914}, + {2.954167, 1.000064492, 0.999968529, 1.059999943, 1.052757502, 0.962264597}, + {2.958333, 1.000073314, 0.999971151, 1.059999943, 1.052784204, 0.962294281}, + {2.9625, 1.000081658, 0.999973834, 1.059999943, 1.052811861, 0.96232444}, + {2.966667, 1.000089645, 0.999976575, 1.059999943, 1.052839518, 0.96235466}, + {2.970833, 1.000097156, 0.999979317, 1.059999943, 1.052867889, 0.962385356}, + {2.975, 1.000104308, 0.999982119, 1.059999943, 1.052896142, 0.962416053}, + {2.979167, 1.000111103, 0.99998486, 1.059999943, 1.052924991, 0.962447166}, + {2.983333, 1.000117302, 0.999987602, 1.059999943, 1.05295372, 0.96247834}, + {2.9875, 1.000123143, 0.999990344, 1.059999943, 1.052983046, 0.96250993}, + {2.991667, 1.000128508, 0.999993086, 1.059999943, 1.053012133, 0.962541461}, + {2.995833, 1.000133276, 0.999995768, 1.059999943, 1.053041577, 0.962573409}, + {3, 1.000137687, 0.99999845, 1.059999943, 1.053071022, 0.962605298}, + {3.004167, 1.000141501, 1.000001073, 1.059999943, 1.053100467, 0.962637544}, + {3.008333, 1.000144958, 1.000003576, 1.059999943, 1.053129911, 0.96266973}, + {3.0125, 1.00014782, 1.00000608, 1.059999943, 1.053159356, 0.962702215}, + {3.016667, 1.000150084, 1.000008464, 1.059999943, 1.053188682, 0.96273464}, + {3.020833, 1.000151992, 1.000010729, 1.059999943, 1.053217888, 0.962767243}, + {3.025, 1.000153303, 1.000012994, 1.059999943, 1.053246975, 0.962799788}, + {3.029167, 1.000154138, 1.00001514, 1.059999943, 1.053275824, 0.962832451}, + {3.033333, 1.000154495, 1.000017047, 1.059999943, 1.053304553, 0.962865114}, + {3.0375, 1.000154376, 1.000018954, 1.059999943, 1.053332806, 0.962897778}, + {3.041667, 1.00015378, 1.000020742, 1.059999943, 1.053361058, 0.962930441}, + {3.045833, 1.000152707, 1.000022411, 1.059999943, 1.053388596, 0.962962985}, + {3.05, 1.000151157, 1.000023961, 1.059999943, 1.053416252, 0.962995529}, + {3.054167, 1.000149131, 1.000025272, 1.059999943, 1.053443074, 0.963027895}, + {3.058333, 1.000146747, 1.000026464, 1.059999943, 1.053469896, 0.96306026}, + {3.0625, 1.000143886, 1.000027537, 1.059999943, 1.053495884, 0.963092387}, + {3.066667, 1.000140548, 1.000028491, 1.059999943, 1.053521872, 0.963124454}, + {3.070833, 1.000136852, 1.000029206, 1.059999943, 1.053546906, 0.963156223}, + {3.075, 1.000132799, 1.000029802, 1.059999943, 1.053571939, 0.963187933}, + {3.079167, 1.000128388, 1.000030279, 1.059999943, 1.053595901, 0.963219225}, + {3.083333, 1.00012362, 1.000030518, 1.059999943, 1.053619981, 0.963250518}, + {3.0875, 1.000118494, 1.000030637, 1.059999943, 1.053642869, 0.963281274}, + {3.091667, 1.00011313, 1.000030518, 1.059999943, 1.053665638, 0.96331203}, + {3.095833, 1.000107408, 1.000030398, 1.059999943, 1.053687334, 0.963342249}, + {3.1, 1.000101447, 1.000029922, 1.059999943, 1.05370903, 0.963372409}, + {3.104167, 1.000095248, 1.000029445, 1.059999943, 1.053729534, 0.963401914}, + {3.108333, 1.000088811, 1.00002861, 1.059999943, 1.053750038, 0.963431358}, + {3.1125, 1.000082135, 1.000027776, 1.059999943, 1.05376935, 0.963460147}, + {3.116667, 1.00007534, 1.000026703, 1.059999943, 1.053788543, 0.963488877}, + {3.120833, 1.000068426, 1.000025511, 1.059999943, 1.053806543, 0.963516891}, + {3.125, 1.000061274, 1.000024199, 1.059999943, 1.053824544, 0.963544846}, + {3.129167, 1.000054121, 1.00002265, 1.059999943, 1.053841352, 0.963571966}, + {3.133333, 1.00004673, 1.0000211, 1.059999943, 1.053858042, 0.963599026}, + {3.1375, 1.000039339, 1.000019312, 1.059999943, 1.053873539, 0.963625252}, + {3.141667, 1.000031948, 1.000017405, 1.059999943, 1.053889036, 0.963651478}, + {3.145833, 1.000024557, 1.000015378, 1.059999943, 1.053903341, 0.96367681}, + {3.15, 1.000017047, 1.000013232, 1.059999943, 1.053917527, 0.963702083}, + {3.154167, 1.000009656, 1.000010967, 1.059999943, 1.05393064, 0.963726461}, + {3.158333, 1.000002265, 1.000008702, 1.059999943, 1.053943753, 0.96375078}, + {3.1625, 0.999994993, 1.000006199, 1.059999943, 1.053955674, 0.963774204}, + {3.166667, 0.999987721, 1.000003695, 1.059999943, 1.053967595, 0.963797569}, + {3.170833, 0.999980628, 1.000001073, 1.059999943, 1.053978443, 0.96382004}, + {3.175, 0.999973595, 0.99999845, 1.059999943, 1.053989291, 0.963842452}, + {3.179167, 0.999966741, 0.999995708, 1.059999943, 1.053999186, 0.963863909}, + {3.183333, 0.999960005, 0.999992967, 1.059999943, 1.054008961, 0.963885427}, + {3.1875, 0.999953508, 0.999990165, 1.059999943, 1.054017901, 0.963905931}, + {3.191667, 0.999947131, 0.999987304, 1.059999943, 1.054026842, 0.963926494}, + {3.195833, 0.999941051, 0.999984443, 1.059999943, 1.054034948, 0.963946104}, + {3.2, 0.99993515, 0.999981582, 1.059999943, 1.054042935, 0.963965714}, + {3.204167, 0.999929488, 0.999978721, 1.059999943, 1.054050326, 0.963984489}, + {3.208333, 0.999924064, 0.99997592, 1.059999943, 1.054057598, 0.964003205}, + {3.2125, 0.999918878, 0.999973059, 1.059999943, 1.054064274, 0.964021087}, + {3.216667, 0.99991399, 0.999970257, 1.059999943, 1.05407095, 0.964039028}, + {3.220833, 0.999909461, 0.999967515, 1.059999943, 1.054077029, 0.964056134}, + {3.225, 0.999905109, 0.999964774, 1.059999943, 1.054083109, 0.9640733}, + {3.229167, 0.999901116, 0.999962151, 1.059999943, 1.054088712, 0.964089692}, + {3.233333, 0.99989748, 0.999959528, 1.059999943, 1.054094434, 0.964106083}, + {3.2375, 0.999894083, 0.999957025, 1.059999943, 1.054099679, 0.964121819}, + {3.241667, 0.999891043, 0.999954581, 1.059999943, 1.054105043, 0.964137554}, + {3.245833, 0.999888361, 0.999952257, 1.059999943, 1.054110169, 0.964152753}, + {3.25, 0.999885976, 0.999949992, 1.059999943, 1.054115295, 0.964167893}, + {3.254167, 0.99988389, 0.999947846, 1.059999943, 1.054120183, 0.964182556}, + {3.258333, 0.999882162, 0.999945819, 1.059999943, 1.05412519, 0.964197218}, + {3.2625, 0.999880791, 0.999943972, 1.059999943, 1.054130197, 0.964211464}, + {3.266667, 0.999879777, 0.999942183, 1.059999943, 1.054135203, 0.964225709}, + {3.270833, 0.999879003, 0.999940515, 1.059999943, 1.05414021, 0.964239597}, + {3.275, 0.999878645, 0.999939024, 1.059999943, 1.054145336, 0.964253485}, + {3.279167, 0.999878585, 0.999937654, 1.059999943, 1.054150581, 0.964267135}, + {3.283333, 0.999878824, 0.999936461, 1.059999943, 1.054155827, 0.964280784}, + {3.2875, 0.99987942, 0.999935389, 1.059999943, 1.05416131, 0.964294255}, + {3.291667, 0.999880314, 0.999934435, 1.059999943, 1.054166913, 0.964307725}, + {3.295833, 0.999881506, 0.99993366, 1.059999943, 1.054172874, 0.964321136}, + {3.3, 0.999882996, 0.999933064, 1.059999943, 1.054178715, 0.964334488}, + {3.304167, 0.999884784, 0.999932647, 1.059999943, 1.054185152, 0.964347899}, + {3.308333, 0.99988687, 0.999932349, 1.059999943, 1.054191589, 0.96436131}, + {3.3125, 0.999889195, 0.99993223, 1.059999943, 1.054198503, 0.964374721}, + {3.316667, 0.999891758, 0.99993223, 1.059999943, 1.054205418, 0.964388251}, + {3.320833, 0.999894619, 0.999932468, 1.059999943, 1.054212928, 0.964401841}, + {3.325, 0.999897718, 0.999932766, 1.059999943, 1.054220438, 0.964415491}, + {3.329167, 0.999900997, 0.999933302, 1.059999943, 1.054228544, 0.964429319}, + {3.333333, 0.999904513, 0.999933958, 1.059999943, 1.05423677, 0.964443207}, + {3.3375, 0.999908209, 0.999934793, 1.059999943, 1.054245591, 0.964457333}, + {3.341667, 0.999912143, 0.999935746, 1.059999943, 1.054254532, 0.964471459}, + {3.345833, 0.999916196, 0.999936819, 1.059999943, 1.054264188, 0.964485943}, + {3.35, 0.999920428, 0.999938071, 1.059999943, 1.054273725, 0.964500487}, + {3.354167, 0.999924839, 0.999939442, 1.059999943, 1.054284096, 0.964515388}, + {3.358333, 0.999929368, 0.999940991, 1.059999943, 1.054294467, 0.964530289}, + {3.3625, 0.999933958, 0.999942601, 1.059999943, 1.054305673, 0.964545608}, + {3.366667, 0.999938726, 0.999944389, 1.059999943, 1.054316878, 0.964560986}, + {3.370833, 0.999943495, 0.999946237, 1.059999943, 1.054328799, 0.96457684}, + {3.375, 0.999948382, 0.999948204, 1.059999943, 1.05434072, 0.964592695}, + {3.379167, 0.99995333, 0.99995029, 1.059999943, 1.054353476, 0.964609027}, + {3.383333, 0.999958336, 0.999952435, 1.059999943, 1.054366231, 0.964625418}, + {3.3875, 0.999963343, 0.9999547, 1.059999943, 1.054379702, 0.964642286}, + {3.391667, 0.99996835, 0.999957025, 1.059999943, 1.054393172, 0.964659154}, + {3.395833, 0.999973357, 0.999959409, 1.059999943, 1.054407358, 0.964676619}, + {3.4, 0.999978364, 0.999961853, 1.059999943, 1.054421663, 0.964694023}, + {3.404167, 0.99998337, 0.999964416, 1.059999943, 1.054436564, 0.964712024}, + {3.408333, 0.999988258, 0.999966919, 1.059999943, 1.054451585, 0.964729965}, + {3.4125, 0.999993145, 0.999969542, 1.059999943, 1.054467201, 0.964748502}, + {3.416667, 0.999997973, 0.999972165, 1.059999943, 1.054482818, 0.964766979}, + {3.420833, 1.000002623, 0.999974787, 1.059999943, 1.05449903, 0.964785993}, + {3.425, 1.000007272, 0.99997741, 1.059999943, 1.054515243, 0.964805067}, + {3.429167, 1.000011802, 0.999980092, 1.059999943, 1.054532051, 0.964824557}, + {3.433333, 1.000016212, 0.999982715, 1.059999943, 1.05454886, 0.964844108}, + {3.4375, 1.000020385, 0.999985337, 1.059999943, 1.054566145, 0.964864075}, + {3.441667, 1.000024557, 0.99998796, 1.059999943, 1.05458343, 0.964884043}, + {3.445833, 1.000028491, 0.999990523, 1.059999943, 1.054601192, 0.964904487}, + {3.45, 1.000032306, 0.999993026, 1.059999943, 1.054618955, 0.964924872}, + {3.454167, 1.000036001, 0.99999553, 1.059999943, 1.054637074, 0.964945674}, + {3.458333, 1.000039458, 0.999997973, 1.059999943, 1.054655194, 0.964966476}, + {3.4625, 1.000042677, 1.000000358, 1.059999943, 1.054673672, 0.964987576}, + {3.466667, 1.000045776, 1.000002623, 1.059999943, 1.05469203, 0.965008676}, + {3.470833, 1.000048637, 1.000004888, 1.059999943, 1.054710627, 0.965030074}, + {3.475, 1.000051379, 1.000007033, 1.059999943, 1.054729342, 0.965051472}, + {3.479167, 1.000053883, 1.00000906, 1.059999943, 1.054748058, 0.965073049}, + {3.483333, 1.000056148, 1.000010967, 1.059999943, 1.054766893, 0.965094686}, + {3.4875, 1.000058174, 1.000012875, 1.059999943, 1.054785728, 0.965116441}, + {3.491667, 1.000059962, 1.000014544, 1.059999943, 1.054804564, 0.965138137}, + {3.495833, 1.000061631, 1.000016212, 1.059999943, 1.054823399, 0.965160012}, + {3.5, 1.000063062, 1.000017762, 1.059999943, 1.054842234, 0.965181828}, + {3.504167, 1.000064135, 1.000019193, 1.059999943, 1.054861069, 0.965203702}, + {3.508333, 1.000065088, 1.000020504, 1.059999943, 1.054879785, 0.965225518}, + {3.5125, 1.000065804, 1.000021577, 1.059999943, 1.054898381, 0.965247333}, + {3.516667, 1.00006628, 1.00002265, 1.059999943, 1.054916978, 0.965269089}, + {3.520833, 1.000066638, 1.000023603, 1.059999943, 1.054935336, 0.965290785}, + {3.525, 1.000066638, 1.000024319, 1.059999943, 1.054953694, 0.965312481}, + {3.529167, 1.000066519, 1.000025034, 1.059999943, 1.054971695, 0.965333939}, + {3.533333, 1.000066161, 1.000025511, 1.059999943, 1.054989815, 0.965355456}, + {3.5375, 1.000065565, 1.000025988, 1.059999943, 1.055007458, 0.965376675}, + {3.541667, 1.000064731, 1.000026226, 1.059999943, 1.05502522, 0.965397954}, + {3.545833, 1.000063777, 1.000026345, 1.059999943, 1.055042505, 0.965418875}, + {3.55, 1.000062585, 1.000026345, 1.059999943, 1.055059791, 0.965439796}, + {3.554167, 1.000061154, 1.000026226, 1.059999943, 1.055076599, 0.96546036}, + {3.558333, 1.000059605, 1.000025868, 1.059999943, 1.055093408, 0.965480924}, + {3.5625, 1.000057936, 1.000025511, 1.059999943, 1.055109739, 0.96550107}, + {3.566667, 1.000056028, 1.000025034, 1.059999943, 1.055126071, 0.965521216}, + {3.570833, 1.000054002, 1.000024438, 1.059999943, 1.055141807, 0.965540946}, + {3.575, 1.000051737, 1.000023603, 1.059999943, 1.055157542, 0.965560615}, + {3.579167, 1.000049353, 1.000022769, 1.059999943, 1.055172682, 0.965579808}, + {3.583333, 1.000046968, 1.000021815, 1.059999943, 1.055187941, 0.965598941}, + {3.5875, 1.000044346, 1.000020742, 1.059999943, 1.055202484, 0.965617597}, + {3.591667, 1.000041604, 1.00001955, 1.059999943, 1.055217028, 0.965636253}, + {3.595833, 1.000038743, 1.000018358, 1.059999943, 1.055230856, 0.965654254}, + {3.6, 1.000035763, 1.000016928, 1.059999943, 1.055244803, 0.965672314}, + {3.604167, 1.000032783, 1.000015497, 1.059999943, 1.055258155, 0.965689778}, + {3.608333, 1.000029683, 1.000014067, 1.059999943, 1.055271387, 0.965707242}, + {3.6125, 1.000026464, 1.000012398, 1.059999943, 1.055284023, 0.965724051}, + {3.616667, 1.000023246, 1.000010729, 1.059999943, 1.055296659, 0.965740919}, + {3.620833, 1.000019908, 1.00000906, 1.059999943, 1.05530858, 0.965757132}, + {3.625, 1.000016689, 1.000007272, 1.059999943, 1.055320621, 0.965773344}, + {3.629167, 1.000013232, 1.000005484, 1.059999943, 1.055331945, 0.965788901}, + {3.633333, 1.000009894, 1.000003695, 1.059999943, 1.05534327, 0.965804458}, + {3.6375, 1.000006557, 1.000001788, 1.059999943, 1.055353999, 0.965819418}, + {3.641667, 1.000003099, 0.999999821, 1.059999943, 1.055364728, 0.965834379}, + {3.645833, 0.999999762, 0.999997914, 1.059999943, 1.055374861, 0.965848684}, + {3.65, 0.999996424, 0.999995947, 1.059999943, 1.055384994, 0.965862989}, + {3.654167, 0.999993086, 0.99999398, 1.059999943, 1.05539453, 0.965876758}, + {3.658333, 0.999989808, 0.999992013, 1.059999943, 1.055404067, 0.965890467}, + {3.6625, 0.999986589, 0.999990106, 1.059999943, 1.055413008, 0.96590358}, + {3.666667, 0.99998343, 0.999988139, 1.059999943, 1.055422068, 0.965916753}, + {3.670833, 0.99998033, 0.999986231, 1.059999943, 1.055430532, 0.96592927}, + {3.675, 0.999977291, 0.999984324, 1.059999943, 1.055438995, 0.965941906}, + {3.679167, 0.99997431, 0.999982417, 1.059999943, 1.055447102, 0.965953946}, + {3.683333, 0.999971449, 0.999980628, 1.059999943, 1.055455089, 0.965965986}, + {3.6875, 0.999968648, 0.99997884, 1.059999943, 1.055462718, 0.96597755}, + {3.691667, 0.999965966, 0.999977052, 1.059999943, 1.055470347, 0.965989113}, + {3.695833, 0.999963403, 0.999975383, 1.059999943, 1.0554775, 0.966000199}, + {3.7, 0.999960959, 0.999973774, 1.059999943, 1.055484772, 0.966011345}, + {3.704167, 0.999958634, 0.999972165, 1.059999943, 1.055491686, 0.966022074}, + {3.708333, 0.999956429, 0.999970675, 1.059999943, 1.0554986, 0.966032803}, + {3.7125, 0.999954343, 0.999969244, 1.059999943, 1.055505276, 0.966043115}, + {3.716667, 0.999952376, 0.999967873, 1.059999943, 1.055511951, 0.966053486}, + {3.720833, 0.999950588, 0.999966621, 1.059999943, 1.055518389, 0.966063559}, + {3.725, 0.999948919, 0.999965429, 1.059999943, 1.055524826, 0.966073573}, + {3.729167, 0.999947369, 0.999964297, 1.059999943, 1.055531144, 0.966083348}, + {3.733333, 0.999945998, 0.999963284, 1.059999943, 1.055537462, 0.966093183}, + {3.7375, 0.999944806, 0.99996233, 1.059999943, 1.055543542, 0.966102719}, + {3.741667, 0.999943733, 0.999961495, 1.059999943, 1.055549741, 0.966112316}, + {3.745833, 0.99994278, 0.99996078, 1.059999943, 1.05555594, 0.966121733}, + {3.75, 0.999942005, 0.999960124, 1.059999943, 1.055562019, 0.96613121}, + {3.754167, 0.999941409, 0.999959588, 1.059999943, 1.055568218, 0.966140509}, + {3.758333, 0.999940932, 0.999959111, 1.059999943, 1.055574417, 0.966149867}, + {3.7625, 0.999940634, 0.999958754, 1.059999943, 1.055580616, 0.966159105}, + {3.766667, 0.999940515, 0.999958515, 1.059999943, 1.055586815, 0.966168404}, + {3.770833, 0.999940455, 0.999958336, 1.059999943, 1.055593133, 0.966177642}, + {3.775, 0.999940634, 0.999958277, 1.059999943, 1.055599332, 0.966186941}, + {3.779167, 0.999940932, 0.999958336, 1.059999943, 1.055605888, 0.966196239}, + {3.783333, 0.999941349, 0.999958456, 1.059999943, 1.055612326, 0.966205537}, + {3.7875, 0.999941945, 0.999958634, 1.059999943, 1.055619001, 0.966214955}, + {3.791667, 0.999942601, 0.999958992, 1.059999943, 1.055625558, 0.966224313}, + {3.795833, 0.999943495, 0.999959409, 1.059999943, 1.055632472, 0.96623385}, + {3.8, 0.999944448, 0.999959886, 1.059999943, 1.055639386, 0.966243386}, + {3.804167, 0.999945521, 0.999960482, 1.059999943, 1.055646539, 0.966253042}, + {3.808333, 0.999946773, 0.999961138, 1.059999943, 1.055653691, 0.966262698}, + {3.8125, 0.999948084, 0.999961853, 1.059999943, 1.055661082, 0.966272593}, + {3.816667, 0.999949574, 0.999962687, 1.059999943, 1.055668592, 0.966282427}, + {3.820833, 0.999951124, 0.999963582, 1.059999943, 1.055676341, 0.966292501}, + {3.825, 0.999952734, 0.999964535, 1.059999943, 1.05568409, 0.966302633}, + {3.829167, 0.999954522, 0.999965608, 1.059999943, 1.055692196, 0.966312945}, + {3.833333, 0.99995631, 0.999966681, 1.059999943, 1.055700302, 0.966323256}, + {3.8375, 0.999958277, 0.999967813, 1.059999943, 1.055708766, 0.966333866}, + {3.841667, 0.999960244, 0.999969065, 1.059999943, 1.05571723, 0.966344476}, + {3.845833, 0.99996227, 0.999970317, 1.059999943, 1.055726051, 0.966355324}, + {3.85, 0.999964416, 0.999971569, 1.059999943, 1.055734873, 0.966366172}, + {3.854167, 0.999966562, 0.999972939, 1.059999943, 1.055744052, 0.966377318}, + {3.858333, 0.999968827, 0.99997431, 1.059999943, 1.055753231, 0.966388464}, + {3.8625, 0.999971092, 0.999975681, 1.059999943, 1.055762768, 0.966399908}, + {3.866667, 0.999973357, 0.999977112, 1.059999943, 1.055772305, 0.966411352}, + {3.870833, 0.999975681, 0.999978602, 1.059999943, 1.055782318, 0.966423094}, + {3.875, 0.999978065, 0.999980032, 1.059999943, 1.055792212, 0.966434777}, + {3.879167, 0.99998039, 0.999981523, 1.059999943, 1.055802464, 0.966446817}, + {3.883333, 0.999982774, 0.999983013, 1.059999943, 1.055812836, 0.966458797}, + {3.8875, 0.999985158, 0.999984503, 1.059999943, 1.055823445, 0.966471076}, + {3.891667, 0.999987483, 0.999985993, 1.059999943, 1.055834055, 0.966483355}, + {3.895833, 0.999989867, 0.999987483, 1.059999943, 1.055845022, 0.966495872}, + {3.9, 0.999992192, 0.999988973, 1.059999943, 1.055855989, 0.966508389}, + {3.904167, 0.999994457, 0.999990404, 1.059999943, 1.055867195, 0.966521144}, + {3.908333, 0.999996722, 0.999991834, 1.059999943, 1.055878401, 0.966533899}, + {3.9125, 0.999998987, 0.999993265, 1.059999943, 1.055889964, 0.966546893}, + {3.916667, 1.000001192, 0.999994636, 1.059999943, 1.055901527, 0.966559887}, + {3.920833, 1.000003338, 0.999996006, 1.059999943, 1.055913329, 0.96657306}, + {3.925, 1.000005364, 0.999997318, 1.059999943, 1.055925012, 0.966586232}, + {3.929167, 1.000007391, 0.999998569, 1.059999943, 1.055937052, 0.966599584}, + {3.933333, 1.000009298, 0.999999821, 1.059999943, 1.055949092, 0.966612935}, + {3.9375, 1.000011206, 1.000001073, 1.059999943, 1.055961251, 0.966626406}, + {3.941667, 1.000012994, 1.000002146, 1.059999943, 1.055973411, 0.966639876}, + {3.945833, 1.000014782, 1.000003219, 1.059999943, 1.055985689, 0.966653466}, + {3.95, 1.000016451, 1.000004292, 1.059999943, 1.055998087, 0.966666996}, + {3.954167, 1.000018001, 1.000005245, 1.059999943, 1.056010485, 0.966680646}, + {3.958333, 1.000019431, 1.000006199, 1.059999943, 1.056022882, 0.966694295}, + {3.9625, 1.000020742, 1.000007033, 1.059999943, 1.056035399, 0.966708004}, + {3.966667, 1.000022054, 1.000007868, 1.059999943, 1.056047916, 0.966721654}, + {3.970833, 1.000023246, 1.000008583, 1.059999943, 1.056060433, 0.966735363}, + {3.975, 1.000024319, 1.000009179, 1.059999943, 1.05607295, 0.966749012}, + {3.979167, 1.000025272, 1.000009775, 1.059999943, 1.056085467, 0.966762662}, + {3.983333, 1.000026226, 1.000010371, 1.059999943, 1.056097984, 0.966776311}, + {3.9875, 1.000026941, 1.000010729, 1.059999943, 1.056110501, 0.966789901}, + {3.991667, 1.000027657, 1.000011206, 1.059999943, 1.056123018, 0.966803432}, + {3.995833, 1.000028133, 1.000011444, 1.059999943, 1.056135416, 0.966816902}, + {4, 1.00002861, 1.000011802, 1.059999943, 1.056147814, 0.966830373}, + {4.004167, 1.000028968, 1.000011921, 1.059999943, 1.056160092, 0.966843724}, + {4.008333, 1.000029206, 1.00001204, 1.059999943, 1.056172371, 0.966857076}, + {4.0125, 1.000029325, 1.00001204, 1.059999943, 1.05618453, 0.966870248}, + {4.016667, 1.000029325, 1.00001204, 1.059999943, 1.05619669, 0.966883421}, + {4.020833, 1.000029206, 1.00001204, 1.059999943, 1.056208611, 0.966896355}, + {4.025, 1.000029087, 1.000011802, 1.059999943, 1.056220651, 0.966909349}, + {4.029167, 1.000028729, 1.000011683, 1.059999943, 1.056232333, 0.966922104}, + {4.033333, 1.000028372, 1.000011325, 1.059999943, 1.056244135, 0.96693486}, + {4.0375, 1.000027895, 1.000011086, 1.059999943, 1.056255579, 0.966947377}, + {4.041667, 1.000027299, 1.00001061, 1.059999943, 1.056267142, 0.966959894}, + {4.045833, 1.000026703, 1.000010252, 1.059999943, 1.056278348, 0.966972113}, + {4.05, 1.000025868, 1.000009656, 1.059999943, 1.056289673, 0.966984391}, + {4.054167, 1.000025034, 1.000009179, 1.059999943, 1.05630064, 0.966996372}, + {4.058333, 1.000024199, 1.000008583, 1.059999943, 1.056311607, 0.967008293}, + {4.0625, 1.000023127, 1.000007987, 1.059999943, 1.056322336, 0.967019975}, + {4.066667, 1.000022054, 1.000007272, 1.059999943, 1.056332946, 0.967031598}, + {4.070833, 1.000020981, 1.000006557, 1.059999943, 1.056343317, 0.967042983}, + {4.075, 1.000019789, 1.000005722, 1.059999943, 1.056353688, 0.967054307}, + {4.079167, 1.000018477, 1.000005007, 1.059999943, 1.056363702, 0.967065334}, + {4.083333, 1.000017166, 1.000004172, 1.059999943, 1.056373835, 0.967076361}, + {4.0875, 1.000015855, 1.000003338, 1.059999943, 1.056383491, 0.96708709}, + {4.091667, 1.000014424, 1.000002384, 1.059999943, 1.056393266, 0.967097759}, + {4.095833, 1.000012875, 1.00000155, 1.059999943, 1.056402564, 0.96710813}, + {4.1, 1.000011444, 1.000000596, 1.059999943, 1.056411982, 0.967118561}, + {4.104167, 1.000009894, 0.999999702, 1.059999943, 1.056421041, 0.967128575}, + {4.108333, 1.000008345, 0.999998748, 1.059999943, 1.056430101, 0.967138648}, + {4.1125, 1.000006676, 0.999997795, 1.059999943, 1.056438804, 0.967148364}, + {4.116667, 1.000005126, 0.999996841, 1.059999943, 1.056447506, 0.967158079}, + {4.120833, 1.000003457, 0.999995887, 1.059999943, 1.056455851, 0.967167497}, + {4.125, 1.000001907, 0.999994934, 1.059999943, 1.056464314, 0.967176914}, + {4.129167, 1.000000238, 0.99999398, 1.059999943, 1.056472301, 0.967185974}, + {4.133333, 0.999998629, 0.999993026, 1.059999943, 1.056480408, 0.967195094}, + {4.1375, 0.99999696, 0.999992073, 1.059999943, 1.056488156, 0.967203915}, + {4.141667, 0.999995351, 0.999991119, 1.059999943, 1.056496024, 0.967212737}, + {4.145833, 0.999993742, 0.999990225, 1.059999943, 1.056503415, 0.96722126}, + {4.15, 0.999992192, 0.999989331, 1.059999943, 1.056510925, 0.967229784}, + {4.154167, 0.999990582, 0.999988496, 1.059999943, 1.056518197, 0.967238069}, + {4.158333, 0.999989092, 0.999987602, 1.059999943, 1.05652535, 0.967246294}, + {4.1625, 0.999987602, 0.999986827, 1.059999943, 1.056532383, 0.967254341}, + {4.166667, 0.999986112, 0.999985993, 1.059999943, 1.056539297, 0.967262328}, + {4.170833, 0.999984682, 0.999985278, 1.059999943, 1.056546092, 0.967270136}, + {4.175, 0.999983311, 0.999984503, 1.059999943, 1.056552887, 0.967277944}, + {4.179167, 0.99998194, 0.999983847, 1.059999943, 1.056559324, 0.967285573}, + {4.183333, 0.999980688, 0.999983191, 1.059999943, 1.056565881, 0.967293143}, + {4.1875, 0.999979436, 0.999982536, 1.059999943, 1.056572318, 0.967300594}, + {4.191667, 0.999978304, 0.99998194, 1.059999943, 1.056578636, 0.967307985}, + {4.195833, 0.999977171, 0.999981403, 1.059999943, 1.056584835, 0.967315257}, + {4.2, 0.999976099, 0.999980927, 1.059999943, 1.056591034, 0.967322528}, + {4.204167, 0.999975145, 0.99998045, 1.059999943, 1.056597114, 0.967329681}, + {4.208333, 0.999974191, 0.999980032, 1.059999943, 1.056603193, 0.967336833}, + {4.2125, 0.999973357, 0.999979675, 1.059999943, 1.056609154, 0.967343867}, + {4.216667, 0.999972522, 0.999979317, 1.059999943, 1.056615233, 0.9673509}, + {4.220833, 0.999971867, 0.999979079, 1.059999943, 1.056621075, 0.967357814}, + {4.225, 0.999971211, 0.99997884, 1.059999943, 1.056627035, 0.967364788}, + {4.229167, 0.999970615, 0.999978602, 1.059999943, 1.056632876, 0.967371643}, + {4.233333, 0.999970138, 0.999978483, 1.059999943, 1.056638718, 0.967378557}, + {4.2375, 0.999969721, 0.999978364, 1.059999943, 1.056644559, 0.967385411}, + {4.241667, 0.999969363, 0.999978304, 1.059999943, 1.0566504, 0.967392266}, + {4.245833, 0.999969125, 0.999978304, 1.059999943, 1.056656241, 0.96739912}, + {4.25, 0.999968886, 0.999978364, 1.059999943, 1.056662083, 0.967405975}, + {4.254167, 0.999968767, 0.999978423, 1.059999943, 1.056668043, 0.96741277}, + {4.258333, 0.999968767, 0.999978542, 1.059999943, 1.056673884, 0.967419624}, + {4.2625, 0.999968767, 0.999978721, 1.059999943, 1.056679845, 0.967426479}, + {4.266667, 0.999968886, 0.9999789, 1.059999943, 1.056685805, 0.967433393}, + {4.270833, 0.999969065, 0.999979138, 1.059999943, 1.056691766, 0.967440307}, + {4.275, 0.999969304, 0.999979436, 1.059999943, 1.056697726, 0.967447221}, + {4.279167, 0.999969602, 0.999979734, 1.059999943, 1.056703806, 0.967454195}, + {4.283333, 0.999970019, 0.999980092, 1.059999943, 1.056710005, 0.967461169}, + {4.2875, 0.999970436, 0.99998045, 1.059999943, 1.056716204, 0.967468202}, + {4.291667, 0.999970973, 0.999980867, 1.059999943, 1.056722403, 0.967475235}, + {4.295833, 0.999971569, 0.999981344, 1.059999943, 1.056728721, 0.967482388}, + {4.3, 0.999972165, 0.999981821, 1.059999943, 1.056735039, 0.967489481}, + {4.304167, 0.99997288, 0.999982297, 1.059999943, 1.056741476, 0.967496693}, + {4.308333, 0.999973595, 0.999982834, 1.059999943, 1.056748033, 0.967503965}, + {4.3125, 0.99997443, 0.99998343, 1.059999943, 1.056754589, 0.967511296}, + {4.316667, 0.999975264, 0.999983966, 1.059999943, 1.056761265, 0.967518628}, + {4.320833, 0.999976158, 0.999984562, 1.059999943, 1.05676806, 0.967526019}, + {4.325, 0.999977052, 0.999985158, 1.059999943, 1.056774855, 0.967533469}, + {4.329167, 0.999978006, 0.999985814, 1.059999943, 1.056781769, 0.967541039}, + {4.333333, 0.999979019, 0.99998647, 1.059999943, 1.056788683, 0.967548549}, + {4.3375, 0.999980092, 0.999987125, 1.059999943, 1.056795835, 0.967556238}, + {4.341667, 0.999981165, 0.999987781, 1.059999943, 1.056802988, 0.967563868}, + {4.345833, 0.999982238, 0.999988437, 1.059999943, 1.05681026, 0.967571676}, + {4.35, 0.99998337, 0.999989092, 1.059999943, 1.056817532, 0.967579424}, + {4.354167, 0.999984503, 0.999989808, 1.059999943, 1.056824923, 0.967587292}, + {4.358333, 0.999985635, 0.999990463, 1.059999943, 1.056832433, 0.96759516}, + {4.3625, 0.999986768, 0.999991119, 1.059999943, 1.056840062, 0.967603147}, + {4.366667, 0.99998796, 0.999991834, 1.059999943, 1.056847572, 0.967611134}, + {4.370833, 0.999989152, 0.99999249, 1.059999943, 1.05685544, 0.96761924}, + {4.375, 0.999990284, 0.999993145, 1.059999943, 1.056863189, 0.967627347}, + {4.379167, 0.999991477, 0.999993801, 1.059999943, 1.056871057, 0.967635512}, + {4.383333, 0.999992669, 0.999994457, 1.059999943, 1.056878924, 0.967643678}, + {4.3875, 0.999993801, 0.999995053, 1.059999943, 1.056887031, 0.967651904}, + {4.391667, 0.999994993, 0.999995708, 1.059999943, 1.056895137, 0.967660189}, + {4.395833, 0.999996126, 0.999996305, 1.059999943, 1.056903243, 0.967668533}, + {4.4, 0.999997199, 0.999996901, 1.059999943, 1.056911469, 0.967676818}, + {4.404167, 0.999998331, 0.999997437, 1.059999943, 1.056919694, 0.967685223}, + {4.408333, 0.999999404, 0.999997973, 1.059999943, 1.056928039, 0.967693627}, + {4.4125, 1.000000477, 0.99999851, 1.059999943, 1.056936383, 0.967702031}, + {4.416667, 1.000001431, 0.999999046, 1.059999943, 1.056944847, 0.967710495}, + {4.420833, 1.000002384, 0.999999523, 1.059999943, 1.056953311, 0.967718959}, + {4.425, 1.000003338, 0.99999994, 1.059999943, 1.056961775, 0.967727423}, + {4.429167, 1.000004292, 1.000000358, 1.059999943, 1.056970239, 0.967735887}, + {4.433333, 1.000005126, 1.000000834, 1.059999943, 1.056978822, 0.96774435}, + {4.4375, 1.00000596, 1.000001192, 1.059999943, 1.056987405, 0.967752874}, + {4.441667, 1.000006795, 1.00000155, 1.059999943, 1.056995988, 0.967761338}, + {4.445833, 1.00000751, 1.000001907, 1.059999943, 1.057004571, 0.967769802}, + {4.45, 1.000008225, 1.000002146, 1.059999943, 1.057013154, 0.967778325}, + {4.454167, 1.000008821, 1.000002384, 1.059999943, 1.057021856, 0.967786729}, + {4.458333, 1.000009537, 1.000002623, 1.059999943, 1.057030439, 0.967795193}, + {4.4625, 1.000010014, 1.000002861, 1.059999943, 1.057039022, 0.967803597}, + {4.466667, 1.00001049, 1.000003099, 1.059999943, 1.057047606, 0.967812002}, + {4.470833, 1.000010967, 1.000003219, 1.059999943, 1.057056189, 0.967820346}, + {4.475, 1.000011325, 1.000003338, 1.059999943, 1.057064891, 0.967828691}, + {4.479167, 1.000011683, 1.000003457, 1.059999943, 1.057073355, 0.967836976}, + {4.483333, 1.00001204, 1.000003457, 1.059999943, 1.057081938, 0.967845261}, + {4.4875, 1.000012279, 1.000003457, 1.059999943, 1.057090402, 0.967853487}, + {4.491667, 1.000012398, 1.000003576, 1.059999943, 1.057098866, 0.967861652}, + {4.495833, 1.000012517, 1.000003457, 1.059999943, 1.057107329, 0.967869759}, + {4.5, 1.000012636, 1.000003457, 1.059999943, 1.057115674, 0.967877865}, + {4.504167, 1.000012636, 1.000003338, 1.059999943, 1.057124019, 0.967885852}, + {4.508333, 1.000012636, 1.000003219, 1.059999943, 1.057132244, 0.967893839}, + {4.5125, 1.000012517, 1.000003099, 1.059999943, 1.05714047, 0.967901707}, + {4.516667, 1.000012398, 1.00000298, 1.059999943, 1.057148695, 0.967909634}, + {4.520833, 1.000012279, 1.000002861, 1.059999943, 1.057156801, 0.967917383}, + {4.525, 1.00001204, 1.000002623, 1.059999943, 1.057164907, 0.967925131}, + {4.529167, 1.000011802, 1.000002384, 1.059999943, 1.057172775, 0.967932701}, + {4.533333, 1.000011444, 1.000002146, 1.059999943, 1.057180762, 0.967940331}, + {4.5375, 1.000011086, 1.000001907, 1.059999943, 1.057188511, 0.967947781}, + {4.541667, 1.00001061, 1.000001669, 1.059999943, 1.057196379, 0.967955291}, + {4.545833, 1.000010252, 1.000001311, 1.059999943, 1.057204008, 0.967962623}, + {4.55, 1.000009775, 1.000001073, 1.059999943, 1.057211638, 0.967969894}, + {4.554167, 1.000009179, 1.000000715, 1.059999943, 1.057219148, 0.967977107}, + {4.558333, 1.000008583, 1.000000358, 1.059999943, 1.057226539, 0.967984259}, + {4.5625, 1.000007987, 1, 1.059999943, 1.05723393, 0.967991292}, + {4.566667, 1.000007391, 0.999999642, 1.059999943, 1.057241201, 0.967998326}, + {4.570833, 1.000006795, 0.999999285, 1.059999943, 1.057248354, 0.96800518}, + {4.575, 1.00000608, 0.999998927, 1.059999943, 1.057255507, 0.968012035}, + {4.579167, 1.000005364, 0.99999851, 1.059999943, 1.05726254, 0.968018711}, + {4.583333, 1.000004649, 0.999998152, 1.059999943, 1.057269454, 0.968025446}, + {4.5875, 1.000003934, 0.999997735, 1.059999943, 1.057276249, 0.968031943}, + {4.591667, 1.000003219, 0.999997318, 1.059999943, 1.057283044, 0.968038499}, + {4.595833, 1.000002384, 0.999996901, 1.059999943, 1.05728972, 0.968044877}, + {4.6, 1.00000155, 0.999996543, 1.059999943, 1.057296276, 0.968051314}, + {4.604167, 1.000000834, 0.999996126, 1.059999943, 1.057302833, 0.968057513}, + {4.608333, 1, 0.999995708, 1.059999943, 1.05730927, 0.968063772}, + {4.6125, 0.999999166, 0.999995351, 1.059999943, 1.057315469, 0.968069851}, + {4.616667, 0.999998391, 0.999994934, 1.059999943, 1.057321787, 0.968075991}, + {4.620833, 0.999997556, 0.999994576, 1.059999943, 1.057327986, 0.968081951}, + {4.625, 0.999996781, 0.999994159, 1.059999943, 1.057334065, 0.968087912}, + {4.629167, 0.999995947, 0.999993801, 1.059999943, 1.057340026, 0.968093693}, + {4.633333, 0.999995172, 0.999993443, 1.059999943, 1.057345986, 0.968099535}, + {4.6375, 0.999994397, 0.999993086, 1.059999943, 1.057351828, 0.968105197}, + {4.641667, 0.999993622, 0.999992728, 1.059999943, 1.057357669, 0.968110919}, + {4.645833, 0.999992847, 0.99999243, 1.059999943, 1.057363391, 0.968116522}, + {4.65, 0.999992132, 0.999992073, 1.059999943, 1.057369113, 0.968122065}, + {4.654167, 0.999991417, 0.999991775, 1.059999943, 1.057374716, 0.968127549}, + {4.658333, 0.999990702, 0.999991477, 1.059999943, 1.057380199, 0.968133032}, + {4.6625, 0.999989986, 0.999991238, 1.059999943, 1.057385683, 0.968138397}, + {4.666667, 0.999989331, 0.99999094, 1.059999943, 1.057391167, 0.968143761}, + {4.670833, 0.999988735, 0.999990702, 1.059999943, 1.057396531, 0.968149066}, + {4.675, 0.999988079, 0.999990463, 1.059999943, 1.057401896, 0.968154311}, + {4.679167, 0.999987543, 0.999990284, 1.059999943, 1.057407141, 0.968159497}, + {4.683333, 0.999986947, 0.999990046, 1.059999943, 1.057412386, 0.968164742}, + {4.6875, 0.99998647, 0.999989867, 1.059999943, 1.057417631, 0.968169868}, + {4.691667, 0.999985993, 0.999989748, 1.059999943, 1.057422876, 0.968174994}, + {4.695833, 0.999985516, 0.999989569, 1.059999943, 1.057428002, 0.96818006}, + {4.7, 0.999985099, 0.99998945, 1.059999943, 1.057433128, 0.968185127}, + {4.704167, 0.999984741, 0.999989331, 1.059999943, 1.057438135, 0.968190134}, + {4.708333, 0.999984384, 0.999989271, 1.059999943, 1.057443261, 0.96819514}, + {4.7125, 0.999984086, 0.999989212, 1.059999943, 1.057448268, 0.968200147}, + {4.716667, 0.999983788, 0.999989152, 1.059999943, 1.057453275, 0.968205154}, + {4.720833, 0.999983549, 0.999989092, 1.059999943, 1.057458401, 0.968210101}, + {4.725, 0.99998337, 0.999989092, 1.059999943, 1.057463408, 0.968215048}, + {4.729167, 0.999983191, 0.999989092, 1.059999943, 1.057468414, 0.968219936}, + {4.733333, 0.999983072, 0.999989152, 1.059999943, 1.057473421, 0.968224883}, + {4.7375, 0.999982953, 0.999989152, 1.059999943, 1.057478428, 0.96822983}, + {4.741667, 0.999982953, 0.999989212, 1.059999943, 1.057483435, 0.968234718}, + {4.745833, 0.999982953, 0.999989331, 1.059999943, 1.057488441, 0.968239665}, + {4.75, 0.999982953, 0.99998939, 1.059999943, 1.057493448, 0.968244553}, + {4.754167, 0.999983013, 0.99998951, 1.059999943, 1.057498455, 0.9682495}, + {4.758333, 0.999983132, 0.999989629, 1.059999943, 1.057503462, 0.968254387}, + {4.7625, 0.999983251, 0.999989748, 1.059999943, 1.057508588, 0.968259335}, + {4.766667, 0.99998343, 0.999989927, 1.059999943, 1.057513714, 0.968264282}, + {4.770833, 0.999983609, 0.999990106, 1.059999943, 1.057518721, 0.968269229}, + {4.775, 0.999983847, 0.999990284, 1.059999943, 1.057523847, 0.968274176}, + {4.779167, 0.999984086, 0.999990463, 1.059999943, 1.057529092, 0.968279123}, + {4.783333, 0.999984384, 0.999990642, 1.059999943, 1.057534218, 0.96828413}, + {4.7875, 0.999984741, 0.99999088, 1.059999943, 1.057539463, 0.968289077}, + {4.791667, 0.999985099, 0.999991119, 1.059999943, 1.057544589, 0.968294084}, + {4.795833, 0.999985456, 0.999991357, 1.059999943, 1.057549953, 0.96829915}, + {4.8, 0.999985874, 0.999991596, 1.059999943, 1.057555199, 0.968304157}, + {4.804167, 0.999986291, 0.999991834, 1.059999943, 1.057560563, 0.968309224}, + {4.808333, 0.999986768, 0.999992073, 1.059999943, 1.057565928, 0.96831429}, + {4.8125, 0.999987245, 0.999992371, 1.059999943, 1.057571292, 0.968319356}, + {4.816667, 0.999987721, 0.999992609, 1.059999943, 1.057576656, 0.968324482}, + {4.820833, 0.999988198, 0.999992907, 1.059999943, 1.05758214, 0.968329608}, + {4.825, 0.999988735, 0.999993205, 1.059999943, 1.057587624, 0.968334734}, + {4.829167, 0.999989271, 0.999993503, 1.059999943, 1.057593226, 0.96833992}, + {4.833333, 0.999989808, 0.999993742, 1.059999943, 1.05759871, 0.968345046}, + {4.8375, 0.999990404, 0.99999404, 1.059999943, 1.057604432, 0.968350291}, + {4.841667, 0.99999094, 0.999994338, 1.059999943, 1.057610035, 0.968355477}, + {4.845833, 0.999991536, 0.999994636, 1.059999943, 1.057615757, 0.968360722}, + {4.85, 0.999992132, 0.999994934, 1.059999943, 1.05762136, 0.968365967}, + {4.854167, 0.999992728, 0.999995232, 1.059999943, 1.057627201, 0.968371212}, + {4.858333, 0.999993265, 0.99999547, 1.059999943, 1.057632923, 0.968376517}, + {4.8625, 0.999993861, 0.999995768, 1.059999943, 1.057638764, 0.968381822}, + {4.866667, 0.999994457, 0.999996066, 1.059999943, 1.057644606, 0.968387127}, + {4.870833, 0.999995053, 0.999996305, 1.059999943, 1.057650447, 0.968392432}, + {4.875, 0.999995649, 0.999996603, 1.059999943, 1.057656288, 0.968397737}, + {4.879167, 0.999996185, 0.999996841, 1.059999943, 1.057662249, 0.968403101}, + {4.883333, 0.999996781, 0.999997139, 1.059999943, 1.057668209, 0.968408465}, + {4.8875, 0.999997318, 0.999997377, 1.059999943, 1.05767417, 0.96841383}, + {4.891667, 0.999997854, 0.999997616, 1.059999943, 1.05768013, 0.968419194}, + {4.895833, 0.999998391, 0.999997854, 1.059999943, 1.05768621, 0.968424559}, + {4.9, 0.999998927, 0.999998093, 1.059999943, 1.05769217, 0.968429923}, + {4.904167, 0.999999404, 0.999998271, 1.059999943, 1.05769825, 0.968435287}, + {4.908333, 0.999999881, 0.99999851, 1.059999943, 1.057704329, 0.968440712}, + {4.9125, 1.000000358, 0.999998689, 1.059999943, 1.057710409, 0.968446076}, + {4.916667, 1.000000834, 0.999998868, 1.059999943, 1.057716489, 0.96845144}, + {4.920833, 1.000001192, 0.999999046, 1.059999943, 1.057722569, 0.968456805}, + {4.925, 1.000001669, 0.999999225, 1.059999943, 1.057728648, 0.968462229}, + {4.929167, 1.000002027, 0.999999404, 1.059999943, 1.057734728, 0.968467593}, + {4.933333, 1.000002384, 0.999999523, 1.059999943, 1.057740927, 0.968472958}, + {4.9375, 1.000002742, 0.999999642, 1.059999943, 1.057747006, 0.968478262}, + {4.941667, 1.000003099, 0.999999762, 1.059999943, 1.057753086, 0.968483627}, + {4.945833, 1.000003338, 0.999999881, 1.059999943, 1.057759166, 0.968488932}, + {4.95, 1.000003576, 0.99999994, 1.059999943, 1.057765245, 0.968494236}, + {4.954167, 1.000003815, 1, 1.059999943, 1.057771325, 0.968499541}, + {4.958333, 1.000004053, 1.000000119, 1.059999943, 1.057777405, 0.968504846}, + {4.9625, 1.000004292, 1.000000119, 1.059999943, 1.057783484, 0.968510091}, + {4.966667, 1.000004411, 1.000000238, 1.059999943, 1.057789564, 0.968515337}, + {4.970833, 1.00000453, 1.000000238, 1.059999943, 1.057795525, 0.968520582}, + {4.975, 1.000004649, 1.000000238, 1.059999943, 1.057801604, 0.968525767}, + {4.979167, 1.000004768, 1.000000238, 1.059999943, 1.057807565, 0.968530953}, + {4.983333, 1.000004768, 1.000000238, 1.059999943, 1.057813525, 0.968536079}, + {4.9875, 1.000004888, 1.000000238, 1.059999943, 1.057819366, 0.968541205}, + {4.991667, 1.000004888, 1.000000238, 1.059999943, 1.057825327, 0.968546331}, + {4.995833, 1.000004768, 1.000000238, 1.059999943, 1.057831168, 0.968551338}, + {5, 1.000004768, 1.000000119, 1.059999943, 1.057837009, 0.968556404}, + {5.004167, 1.000004649, 1.000000119, 1.059999943, 1.057842851, 0.968561411}, + {5.008333, 1.000004649, 1, 1.059999943, 1.057848573, 0.968566358}, + {5.0125, 1.00000453, 1, 1.059999943, 1.057854295, 0.968571305}, + {5.016667, 1.000004292, 0.999999881, 1.059999943, 1.057860017, 0.968576252}, + {5.020833, 1.000004172, 0.999999821, 1.059999943, 1.057865739, 0.96858108}, + {5.025, 1.000003934, 0.999999702, 1.059999943, 1.057871342, 0.968585908}, + {5.029167, 1.000003815, 0.999999583, 1.059999943, 1.057876945, 0.968590677}, + {5.033333, 1.000003576, 0.999999464, 1.059999943, 1.057882428, 0.968595505}, + {5.0375, 1.000003338, 0.999999344, 1.059999943, 1.057887912, 0.968600154}, + {5.041667, 1.000003099, 0.999999225, 1.059999943, 1.057893395, 0.968604863}, + {5.045833, 1.000002742, 0.999999046, 1.059999943, 1.05789876, 0.968609512}, + {5.05, 1.000002503, 0.999998927, 1.059999943, 1.057904243, 0.968614161}, + {5.054167, 1.000002146, 0.999998748, 1.059999943, 1.057909489, 0.968618691}, + {5.058333, 1.000001788, 0.999998629, 1.059999943, 1.057914734, 0.968623221}, + {5.0625, 1.00000155, 0.99999845, 1.059999943, 1.057919979, 0.968627691}, + {5.066667, 1.000001192, 0.999998331, 1.059999943, 1.057925224, 0.968632162}, + {5.070833, 1.000000834, 0.999998152, 1.059999943, 1.05793035, 0.968636572}, + {5.075, 1.000000477, 0.999997973, 1.059999943, 1.057935357, 0.968640924}, + {5.079167, 1, 0.999997795, 1.059999943, 1.057940483, 0.968645275}, + {5.083333, 0.999999642, 0.999997616, 1.059999943, 1.05794549, 0.968649566}, + {5.0875, 0.999999285, 0.999997497, 1.059999943, 1.057950377, 0.968653798}, + {5.091667, 0.999998868, 0.999997318, 1.059999943, 1.057955265, 0.96865803}, + {5.095833, 0.99999851, 0.999997139, 1.059999943, 1.057960153, 0.968662202}, + {5.1, 0.999998093, 0.99999696, 1.059999943, 1.057964921, 0.968666315}, + {5.104167, 0.999997675, 0.999996781, 1.059999943, 1.057969689, 0.968670428}, + {5.108333, 0.999997318, 0.999996603, 1.059999943, 1.057974458, 0.968674481}, + {5.1125, 0.999996901, 0.999996483, 1.059999943, 1.057979107, 0.968678534}, + {5.116667, 0.999996543, 0.999996305, 1.059999943, 1.057983756, 0.968682528}, + {5.120833, 0.999996126, 0.999996126, 1.059999943, 1.057988405, 0.968686461}, + {5.125, 0.999995768, 0.999996006, 1.059999943, 1.057992935, 0.968690395}, + {5.129167, 0.999995351, 0.999995828, 1.059999943, 1.057997465, 0.96869427}, + {5.133333, 0.999994993, 0.999995708, 1.059999943, 1.058001995, 0.968698204}, + {5.1375, 0.999994636, 0.99999553, 1.059999943, 1.058006406, 0.968702018}, + {5.141667, 0.999994278, 0.99999541, 1.059999943, 1.058010936, 0.968705833}, + {5.145833, 0.99999398, 0.999995291, 1.059999943, 1.058015227, 0.968709588}, + {5.15, 0.999993622, 0.999995172, 1.059999943, 1.058019638, 0.968713343}, + {5.154167, 0.999993324, 0.999995053, 1.059999943, 1.05802393, 0.968717039}, + {5.158333, 0.999993026, 0.999994934, 1.059999943, 1.058028221, 0.968720734}, + {5.1625, 0.999992728, 0.999994814, 1.059999943, 1.058032513, 0.96872443}, + {5.166667, 0.99999249, 0.999994755, 1.059999943, 1.058036804, 0.968728065}, + {5.170833, 0.999992192, 0.999994636, 1.059999943, 1.058040977, 0.968731701}, + {5.175, 0.999991953, 0.999994576, 1.059999943, 1.058045149, 0.968735278}, + {5.179167, 0.999991715, 0.999994457, 1.059999943, 1.058049321, 0.968738854}, + {5.183333, 0.999991536, 0.999994397, 1.059999943, 1.058053613, 0.96874243}, + {5.1875, 0.999991357, 0.999994338, 1.059999943, 1.058057666, 0.968746006}, + {5.191667, 0.999991179, 0.999994278, 1.059999943, 1.058061838, 0.968749523}, + {5.195833, 0.999991, 0.999994278, 1.059999943, 1.058065891, 0.96875304}, + {5.2, 0.99999088, 0.999994218, 1.059999943, 1.058070064, 0.968756557}, + {5.204167, 0.999990761, 0.999994218, 1.059999943, 1.058074117, 0.968760014}, + {5.208333, 0.999990642, 0.999994159, 1.059999943, 1.05807817, 0.96876353}, + {5.2125, 0.999990523, 0.999994159, 1.059999943, 1.058082342, 0.968766987}, + {5.216667, 0.999990463, 0.999994159, 1.059999943, 1.058086395, 0.968770444}, + {5.220833, 0.999990404, 0.999994159, 1.059999943, 1.058090448, 0.968773901}, + {5.225, 0.999990404, 0.999994159, 1.059999943, 1.058094502, 0.968777359}, + {5.229167, 0.999990404, 0.999994218, 1.059999943, 1.058098555, 0.968780756}, + {5.233333, 0.999990404, 0.999994218, 1.059999943, 1.058102608, 0.968784213}, + {5.2375, 0.999990404, 0.999994278, 1.059999943, 1.058106661, 0.968787611}, + {5.241667, 0.999990463, 0.999994278, 1.059999943, 1.058110714, 0.968791068}, + {5.245833, 0.999990523, 0.999994338, 1.059999943, 1.058114767, 0.968794465}, + {5.25, 0.999990582, 0.999994397, 1.059999943, 1.05811882, 0.968797863}, + {5.254167, 0.999990702, 0.999994457, 1.059999943, 1.058122993, 0.96880132}, + {5.258333, 0.999990821, 0.999994516, 1.059999943, 1.058127046, 0.968804717}, + {5.2625, 0.99999094, 0.999994636, 1.059999943, 1.058131099, 0.968808115}, + {5.266667, 0.999991059, 0.999994695, 1.059999943, 1.058135152, 0.968811572}, + {5.270833, 0.999991238, 0.999994814, 1.059999943, 1.058139324, 0.968814969}, + {5.275, 0.999991417, 0.999994874, 1.059999943, 1.058143377, 0.968818367}, + {5.279167, 0.999991596, 0.999994993, 1.059999943, 1.05814755, 0.968821824}, + {5.283333, 0.999991775, 0.999995112, 1.059999943, 1.058151722, 0.968825221}, + {5.2875, 0.999992013, 0.999995172, 1.059999943, 1.058155775, 0.968828678}, + {5.291667, 0.999992192, 0.999995291, 1.059999943, 1.058159947, 0.968832135}, + {5.295833, 0.99999243, 0.99999541, 1.059999943, 1.05816412, 0.968835533}, + {5.3, 0.999992669, 0.99999553, 1.059999943, 1.058168292, 0.96883899}, + {5.304167, 0.999992907, 0.999995649, 1.059999943, 1.058172584, 0.968842447}, + {5.308333, 0.999993205, 0.999995768, 1.059999943, 1.058176756, 0.968845904}, + {5.3125, 0.999993443, 0.999995947, 1.059999943, 1.058180928, 0.968849361}, + {5.316667, 0.999993682, 0.999996066, 1.059999943, 1.05818522, 0.968852818}, + {5.320833, 0.99999398, 0.999996185, 1.059999943, 1.058189511, 0.968856335}, + {5.325, 0.999994278, 0.999996305, 1.059999943, 1.058193684, 0.968859792}, + {5.329167, 0.999994576, 0.999996483, 1.059999943, 1.058197975, 0.968863249}, + {5.333333, 0.999994814, 0.999996603, 1.059999943, 1.058202267, 0.968866766}, + {5.3375, 0.999995112, 0.999996722, 1.059999943, 1.058206558, 0.968870223}, + {5.341667, 0.99999541, 0.999996841, 1.059999943, 1.058210969, 0.968873739}, + {5.345833, 0.999995708, 0.99999702, 1.059999943, 1.058215261, 0.968877256}, + {5.35, 0.999996006, 0.999997139, 1.059999943, 1.058219552, 0.968880713}, + {5.354167, 0.999996305, 0.999997258, 1.059999943, 1.058223963, 0.96888423}, + {5.358333, 0.999996543, 0.999997377, 1.059999943, 1.058228374, 0.968887746}, + {5.3625, 0.999996841, 0.999997556, 1.059999943, 1.058232665, 0.968891263}, + {5.366667, 0.999997139, 0.999997675, 1.059999943, 1.058237076, 0.96889478}, + {5.370833, 0.999997377, 0.999997795, 1.059999943, 1.058241487, 0.968898296}, + {5.375, 0.999997675, 0.999997914, 1.059999943, 1.058245897, 0.968901813}, + {5.379167, 0.999997914, 0.999998033, 1.059999943, 1.058250308, 0.96890533}, + {5.383333, 0.999998212, 0.999998152, 1.059999943, 1.058254719, 0.968908846}, + {5.3875, 0.99999845, 0.999998271, 1.059999943, 1.05825913, 0.968912363}, + {5.391667, 0.999998689, 0.999998391, 1.059999943, 1.05826354, 0.96891588}, + {5.395833, 0.999998927, 0.99999845, 1.059999943, 1.058267951, 0.968919396}, + {5.4, 0.999999166, 0.999998569, 1.059999943, 1.058272362, 0.968922913}, + {5.404167, 0.999999344, 0.999998689, 1.059999943, 1.058276773, 0.96892643}, + {5.408333, 0.999999583, 0.999998748, 1.059999943, 1.058281183, 0.968929946}, + {5.4125, 0.999999762, 0.999998868, 1.059999943, 1.058285594, 0.968933463}, + {5.416667, 0.99999994, 0.999998927, 1.059999943, 1.058290124, 0.96893698}, + {5.420833, 1.000000119, 0.999998987, 1.059999943, 1.058294535, 0.968940437}, + {5.425, 1.000000238, 0.999999046, 1.059999943, 1.058298945, 0.968943954}, + {5.429167, 1.000000477, 0.999999166, 1.059999943, 1.058303356, 0.968947411}, + {5.433333, 1.000000596, 0.999999225, 1.059999943, 1.058307767, 0.968950927}, + {5.4375, 1.000000715, 0.999999225, 1.059999943, 1.058312178, 0.968954384}, + {5.441667, 1.000000834, 0.999999285, 1.059999943, 1.058316469, 0.968957841}, + {5.445833, 1.000000954, 0.999999344, 1.059999943, 1.05832088, 0.968961239}, + {5.45, 1.000000954, 0.999999404, 1.059999943, 1.058325291, 0.968964696}, + {5.454167, 1.000001073, 0.999999404, 1.059999943, 1.058329582, 0.968968093}, + {5.458333, 1.000001192, 0.999999464, 1.059999943, 1.058333993, 0.96897155}, + {5.4625, 1.000001192, 0.999999464, 1.059999943, 1.058338284, 0.968974948}, + {5.466667, 1.000001192, 0.999999464, 1.059999943, 1.058342576, 0.968978286}, + {5.470833, 1.000001311, 0.999999464, 1.059999943, 1.058346868, 0.968981683}, + {5.475, 1.000001311, 0.999999464, 1.059999943, 1.058351159, 0.968985021}, + {5.479167, 1.000001311, 0.999999464, 1.059999943, 1.058355451, 0.968988359}, + {5.483333, 1.000001192, 0.999999464, 1.059999943, 1.058359742, 0.968991697}, + {5.4875, 1.000001192, 0.999999464, 1.059999943, 1.058363914, 0.968994975}, + {5.491667, 1.000001192, 0.999999464, 1.059999943, 1.058368206, 0.968998313}, + {5.495833, 1.000001073, 0.999999404, 1.059999943, 1.058372378, 0.969001532}, + {5.5, 1.000001073, 0.999999404, 1.059999943, 1.058376551, 0.96900481}, + {5.504167, 1.000000954, 0.999999344, 1.059999943, 1.058380723, 0.969008029}, + {5.508333, 1.000000954, 0.999999285, 1.059999943, 1.058384776, 0.969011247}, + {5.5125, 1.000000834, 0.999999285, 1.059999943, 1.058388948, 0.969014466}, + {5.516667, 1.000000715, 0.999999225, 1.059999943, 1.058393002, 0.969017625}, + {5.520833, 1.000000596, 0.999999166, 1.059999943, 1.058397055, 0.969020784}, + {5.525, 1.000000477, 0.999999106, 1.059999943, 1.058401108, 0.969023883}, + {5.529167, 1.000000358, 0.999999046, 1.059999943, 1.058405161, 0.969026983}, + {5.533333, 1.000000238, 0.999998987, 1.059999943, 1.058409095, 0.969030082}, + {5.5375, 1.000000119, 0.999998927, 1.059999943, 1.058413029, 0.969033182}, + {5.541667, 0.99999994, 0.999998868, 1.059999943, 1.058416963, 0.969036222}, + {5.545833, 0.999999762, 0.999998808, 1.059999943, 1.058420897, 0.969039261}, + {5.55, 0.999999583, 0.999998748, 1.059999943, 1.05842483, 0.969042242}, + {5.554167, 0.999999404, 0.999998629, 1.059999943, 1.058428645, 0.969045222}, + {5.558333, 0.999999225, 0.999998569, 1.059999943, 1.05843246, 0.969048202}, + {5.5625, 0.999999046, 0.99999851, 1.059999943, 1.058436275, 0.969051123}, + {5.566667, 0.999998868, 0.99999845, 1.059999943, 1.058440089, 0.969054043}, + {5.570833, 0.999998689, 0.999998331, 1.059999943, 1.058443785, 0.969056964}, + {5.575, 0.99999851, 0.999998271, 1.059999943, 1.05844748, 0.969059825}, + {5.579167, 0.999998331, 0.999998152, 1.059999943, 1.058451176, 0.969062686}, + {5.583333, 0.999998152, 0.999998093, 1.059999943, 1.058454871, 0.969065487}, + {5.5875, 0.999997914, 0.999998033, 1.059999943, 1.058458567, 0.969068289}, + {5.591667, 0.999997735, 0.999997914, 1.059999943, 1.058462143, 0.96907109}, + {5.595833, 0.999997556, 0.999997854, 1.059999943, 1.058465838, 0.969073892}, + {5.6, 0.999997377, 0.999997795, 1.059999943, 1.058469415, 0.969076633}, + {5.604167, 0.999997199, 0.999997675, 1.059999943, 1.058472872, 0.969079316}, + {5.608333, 0.99999702, 0.999997616, 1.059999943, 1.058476448, 0.969082057}, + {5.6125, 0.999996841, 0.999997556, 1.059999943, 1.058480024, 0.96908474}, + {5.616667, 0.999996662, 0.999997497, 1.059999943, 1.058483481, 0.969087422}, + {5.620833, 0.999996483, 0.999997377, 1.059999943, 1.058486938, 0.969090104}, + {5.625, 0.999996305, 0.999997318, 1.059999943, 1.058490396, 0.969092727}, + {5.629167, 0.999996126, 0.999997258, 1.059999943, 1.058493853, 0.969095349}, + {5.633333, 0.999996006, 0.999997199, 1.059999943, 1.05849731, 0.969097972}, + {5.6375, 0.999995828, 0.999997139, 1.059999943, 1.058500648, 0.969100535}, + {5.641667, 0.999995708, 0.999997079, 1.059999943, 1.058503985, 0.969103098}, + {5.645833, 0.99999553, 0.99999702, 1.059999943, 1.058507323, 0.969105661}, + {5.65, 0.99999541, 0.99999696, 1.059999943, 1.05851078, 0.969108224}, + {5.654167, 0.999995291, 0.999996901, 1.059999943, 1.058514118, 0.969110727}, + {5.658333, 0.999995172, 0.999996901, 1.059999943, 1.058517337, 0.969113231}, + {5.6625, 0.999995053, 0.999996841, 1.059999943, 1.058520675, 0.969115734}, + {5.666667, 0.999994934, 0.999996781, 1.059999943, 1.058524013, 0.969118238}, + {5.670833, 0.999994874, 0.999996781, 1.059999943, 1.058527231, 0.969120741}, + {5.675, 0.999994755, 0.999996722, 1.059999943, 1.058530569, 0.969123185}, + {5.679167, 0.999994695, 0.999996722, 1.059999943, 1.058533788, 0.969125628}, + {5.683333, 0.999994636, 0.999996662, 1.059999943, 1.058537006, 0.969128072}, + {5.6875, 0.999994576, 0.999996662, 1.059999943, 1.058540225, 0.969130516}, + {5.691667, 0.999994516, 0.999996662, 1.059999943, 1.058543444, 0.96913296}, + {5.695833, 0.999994457, 0.999996603, 1.059999943, 1.058546662, 0.969135344}, + {5.7, 0.999994397, 0.999996603, 1.059999943, 1.05855, 0.969137788}, + {5.704167, 0.999994397, 0.999996603, 1.059999943, 1.0585531, 0.969140172}, + {5.708333, 0.999994397, 0.999996603, 1.059999943, 1.058556318, 0.969142616}, + {5.7125, 0.999994397, 0.999996603, 1.059999943, 1.058559537, 0.969145}, + {5.716667, 0.999994397, 0.999996603, 1.059999943, 1.058562756, 0.969147384}, + {5.720833, 0.999994397, 0.999996662, 1.059999943, 1.058565974, 0.969149768}, + {5.725, 0.999994397, 0.999996662, 1.059999943, 1.058569193, 0.969152153}, + {5.729167, 0.999994457, 0.999996662, 1.059999943, 1.058572292, 0.969154537}, + {5.733333, 0.999994457, 0.999996722, 1.059999943, 1.058575511, 0.969156861}, + {5.7375, 0.999994516, 0.999996722, 1.059999943, 1.05857873, 0.969159245}, + {5.741667, 0.999994576, 0.999996781, 1.059999943, 1.058581948, 0.96916163}, + {5.745833, 0.999994636, 0.999996781, 1.059999943, 1.058585048, 0.969164014}, + {5.75, 0.999994695, 0.999996841, 1.059999943, 1.058588266, 0.969166338}, + {5.754167, 0.999994755, 0.999996901, 1.059999943, 1.058591485, 0.969168723}, + {5.758333, 0.999994874, 0.999996901, 1.059999943, 1.058594704, 0.969171047}, + {5.7625, 0.999994934, 0.99999696, 1.059999943, 1.058597922, 0.969173431}, + {5.766667, 0.999995053, 0.99999702, 1.059999943, 1.058601022, 0.969175816}, + {5.770833, 0.999995112, 0.999997079, 1.059999943, 1.05860424, 0.96917814}, + {5.775, 0.999995232, 0.999997139, 1.059999943, 1.058607459, 0.969180524}, + {5.779167, 0.999995351, 0.999997199, 1.059999943, 1.058610678, 0.969182849}, + {5.783333, 0.99999547, 0.999997258, 1.059999943, 1.058613896, 0.969185233}, + {5.7875, 0.999995589, 0.999997318, 1.059999943, 1.058617115, 0.969187558}, + {5.791667, 0.999995708, 0.999997377, 1.059999943, 1.058620334, 0.969189942}, + {5.795833, 0.999995828, 0.999997437, 1.059999943, 1.058623552, 0.969192326}, + {5.8, 0.999995947, 0.999997497, 1.059999943, 1.058626771, 0.969194651}, + {5.804167, 0.999996126, 0.999997556, 1.059999943, 1.05862999, 0.969197035}, + {5.808333, 0.999996245, 0.999997616, 1.059999943, 1.058633208, 0.969199359}, + {5.8125, 0.999996364, 0.999997675, 1.059999943, 1.058636427, 0.969201744}, + {5.816667, 0.999996543, 0.999997795, 1.059999943, 1.058639646, 0.969204128}, + {5.820833, 0.999996662, 0.999997854, 1.059999943, 1.058642983, 0.969206452}, + {5.825, 0.999996781, 0.999997914, 1.059999943, 1.058646202, 0.969208837}, + {5.829167, 0.99999696, 0.999997973, 1.059999943, 1.058649421, 0.969211221}, + {5.833333, 0.999997079, 0.999998033, 1.059999943, 1.058652639, 0.969213545}, + {5.8375, 0.999997199, 0.999998093, 1.059999943, 1.058655977, 0.96921593}, + {5.841667, 0.999997377, 0.999998212, 1.059999943, 1.058659196, 0.969218314}, + {5.845833, 0.999997497, 0.999998271, 1.059999943, 1.058662415, 0.969220638}, + {5.85, 0.999997675, 0.999998331, 1.059999943, 1.058665752, 0.969223022}, + {5.854167, 0.999997795, 0.999998391, 1.059999943, 1.058668971, 0.969225407}, + {5.858333, 0.999997914, 0.99999845, 1.059999943, 1.058672309, 0.969227791}, + {5.8625, 0.999998033, 0.99999851, 1.059999943, 1.058675528, 0.969230115}, + {5.866667, 0.999998152, 0.999998569, 1.059999943, 1.058678746, 0.9692325}, + {5.870833, 0.999998331, 0.999998629, 1.059999943, 1.058682084, 0.969234824}, + {5.875, 0.99999845, 0.999998689, 1.059999943, 1.058685303, 0.969237208}, + {5.879167, 0.999998569, 0.999998748, 1.059999943, 1.058688641, 0.969239593}, + {5.883333, 0.999998629, 0.999998808, 1.059999943, 1.058691859, 0.969241917}, + {5.8875, 0.999998748, 0.999998868, 1.059999943, 1.058695078, 0.969244301}, + {5.891667, 0.999998868, 0.999998927, 1.059999943, 1.058698416, 0.969246626}, + {5.895833, 0.999998987, 0.999998987, 1.059999943, 1.058701634, 0.96924895}, + {5.9, 0.999999046, 0.999998987, 1.059999943, 1.058704853, 0.969251335}, + {5.904167, 0.999999166, 0.999999046, 1.059999943, 1.058708191, 0.969253659}, + {5.908333, 0.999999225, 0.999999106, 1.059999943, 1.05871141, 0.969255984}, + {5.9125, 0.999999344, 0.999999106, 1.059999943, 1.058714628, 0.969258308}, + {5.916667, 0.999999404, 0.999999166, 1.059999943, 1.058717847, 0.969260633}, + {5.920833, 0.999999464, 0.999999166, 1.059999943, 1.058721066, 0.969262958}, + {5.925, 0.999999523, 0.999999225, 1.059999943, 1.058724284, 0.969265282}, + {5.929167, 0.999999583, 0.999999225, 1.059999943, 1.058727503, 0.969267547}, + {5.933333, 0.999999642, 0.999999285, 1.059999943, 1.058730721, 0.969269872}, + {5.9375, 0.999999642, 0.999999285, 1.059999943, 1.05873394, 0.969272137}, + {5.941667, 0.999999702, 0.999999285, 1.059999943, 1.058737159, 0.969274402}, + {5.945833, 0.999999702, 0.999999344, 1.059999943, 1.058740377, 0.969276667}, + {5.95, 0.999999762, 0.999999344, 1.059999943, 1.058743477, 0.969278991}, + {5.954167, 0.999999762, 0.999999344, 1.059999943, 1.058746696, 0.969281197}, + {5.958333, 0.999999762, 0.999999344, 1.059999943, 1.058749795, 0.969283462}, + {5.9625, 0.999999762, 0.999999344, 1.059999943, 1.058753014, 0.969285727}, + {5.966667, 0.999999762, 0.999999344, 1.059999943, 1.058756113, 0.969287932}, + {5.970833, 0.999999762, 0.999999344, 1.059999943, 1.058759212, 0.969290137}, + {5.975, 0.999999762, 0.999999344, 1.059999943, 1.058762312, 0.969292343}, + {5.979167, 0.999999762, 0.999999344, 1.059999943, 1.058765411, 0.969294548}, + {5.983333, 0.999999702, 0.999999344, 1.059999943, 1.058768511, 0.969296753}, + {5.9875, 0.999999702, 0.999999285, 1.059999943, 1.05877161, 0.969298959}, + {5.991667, 0.999999642, 0.999999285, 1.059999943, 1.05877471, 0.969301105}, + {5.995833, 0.999999583, 0.999999285, 1.059999943, 1.05877769, 0.96930325}, + {6, 0.999999583, 0.999999225, 1.059999943, 1.058780789, 0.969305396}, + {6.004167, 0.999999523, 0.999999225, 1.059999943, 1.05878377, 0.969307542}, + {6.008333, 0.999999464, 0.999999225, 1.059999943, 1.05878675, 0.969309628}, + {6.0125, 0.999999404, 0.999999166, 1.059999943, 1.05878973, 0.969311774}, + {6.016667, 0.999999344, 0.999999166, 1.059999943, 1.05879271, 0.96931386}, + {6.020833, 0.999999285, 0.999999106, 1.059999943, 1.058795691, 0.969315946}, + {6.025, 0.999999166, 0.999999106, 1.059999943, 1.058798671, 0.969318032}, + {6.029167, 0.999999106, 0.999999046, 1.059999943, 1.058801532, 0.969320059}, + {6.033333, 0.999999046, 0.999999046, 1.059999943, 1.058804512, 0.969322145}, + {6.0375, 0.999998987, 0.999998987, 1.059999943, 1.058807373, 0.969324172}, + {6.041667, 0.999998868, 0.999998927, 1.059999943, 1.058810234, 0.969326198}, + {6.045833, 0.999998808, 0.999998927, 1.059999943, 1.058813095, 0.969328165}, + {6.05, 0.999998689, 0.999998868, 1.059999943, 1.058815956, 0.969330192}, + {6.054167, 0.999998629, 0.999998808, 1.059999943, 1.058818817, 0.969332159}, + {6.058333, 0.99999851, 0.999998808, 1.059999943, 1.058821678, 0.969334126}, + {6.0625, 0.99999845, 0.999998748, 1.059999943, 1.05882442, 0.969336092}, + {6.066667, 0.999998331, 0.999998689, 1.059999943, 1.058827281, 0.969338059}, + {6.070833, 0.999998271, 0.999998689, 1.059999943, 1.058830023, 0.969339967}, + {6.075, 0.999998152, 0.999998629, 1.059999943, 1.058832765, 0.969341874}, + {6.079167, 0.999998093, 0.999998569, 1.059999943, 1.058835626, 0.969343781}, + {6.083333, 0.999997973, 0.999998569, 1.059999943, 1.058838367, 0.969345689}, + {6.0875, 0.999997914, 0.99999851, 1.059999943, 1.05884099, 0.969347596}, + {6.091667, 0.999997795, 0.99999845, 1.059999943, 1.058843732, 0.969349504}, + {6.095833, 0.999997735, 0.99999845, 1.059999943, 1.058846474, 0.969351351}, + {6.1, 0.999997675, 0.999998391, 1.059999943, 1.058849096, 0.969353199}, + {6.104167, 0.999997556, 0.999998391, 1.059999943, 1.058851838, 0.969355047}, + {6.108333, 0.999997497, 0.999998331, 1.059999943, 1.058854461, 0.969356894}, + {6.1125, 0.999997377, 0.999998271, 1.059999943, 1.058857083, 0.969358683}, + {6.116667, 0.999997318, 0.999998271, 1.059999943, 1.058859706, 0.96936053}, + {6.120833, 0.999997258, 0.999998212, 1.059999943, 1.058862329, 0.969362319}, + {6.125, 0.999997199, 0.999998212, 1.059999943, 1.058864951, 0.969364107}, + {6.129167, 0.999997139, 0.999998152, 1.059999943, 1.058867574, 0.969365895}, + {6.133333, 0.99999702, 0.999998152, 1.059999943, 1.058870196, 0.969367683}, + {6.1375, 0.99999696, 0.999998152, 1.059999943, 1.058872819, 0.969369411}, + {6.141667, 0.999996901, 0.999998093, 1.059999943, 1.058875322, 0.9693712}, + {6.145833, 0.999996901, 0.999998093, 1.059999943, 1.058877945, 0.969372928}, + {6.15, 0.999996841, 0.999998033, 1.059999943, 1.058880448, 0.969374716}, + {6.154167, 0.999996781, 0.999998033, 1.059999943, 1.058883071, 0.969376445}, + {6.158333, 0.999996722, 0.999998033, 1.059999943, 1.058885574, 0.969378173}, + {6.1625, 0.999996722, 0.999998033, 1.059999943, 1.058888078, 0.969379902}, + {6.166667, 0.999996662, 0.999997973, 1.059999943, 1.0588907, 0.969381571}, + {6.170833, 0.999996603, 0.999997973, 1.059999943, 1.058893204, 0.969383299}, + {6.175, 0.999996603, 0.999997973, 1.059999943, 1.058895707, 0.969385028}, + {6.179167, 0.999996603, 0.999997973, 1.059999943, 1.058898211, 0.969386697}, + {6.183333, 0.999996543, 0.999997973, 1.059999943, 1.058900714, 0.969388425}, + {6.1875, 0.999996543, 0.999997973, 1.059999943, 1.058903217, 0.969390094}, + {6.191667, 0.999996543, 0.999997973, 1.059999943, 1.058905721, 0.969391763}, + {6.195833, 0.999996543, 0.999997973, 1.059999943, 1.058908105, 0.969393432}, + {6.2, 0.999996543, 0.999997973, 1.059999943, 1.058910608, 0.969395101}, + {6.204167, 0.999996543, 0.999997973, 1.059999943, 1.058913112, 0.96939677}, + {6.208333, 0.999996543, 0.999997973, 1.059999943, 1.058915615, 0.969398439}, + {6.2125, 0.999996543, 0.999998033, 1.059999943, 1.058918118, 0.969400108}, + {6.216667, 0.999996603, 0.999998033, 1.059999943, 1.058920503, 0.969401777}, + {6.220833, 0.999996603, 0.999998033, 1.059999943, 1.058923006, 0.969403446}, + {6.225, 0.999996603, 0.999998033, 1.059999943, 1.058925509, 0.969405115}, + {6.229167, 0.999996662, 0.999998093, 1.059999943, 1.058927894, 0.969406724}, + {6.233333, 0.999996722, 0.999998093, 1.059999943, 1.058930397, 0.969408393}, + {6.2375, 0.999996722, 0.999998093, 1.059999943, 1.0589329, 0.969410062}, + {6.241667, 0.999996781, 0.999998152, 1.059999943, 1.058935285, 0.969411671}, + {6.245833, 0.999996781, 0.999998152, 1.059999943, 1.058937788, 0.96941334}, + {6.25, 0.999996841, 0.999998152, 1.059999943, 1.058940291, 0.969414949}, + {6.254167, 0.999996901, 0.999998212, 1.059999943, 1.058942676, 0.969416618}, + {6.258333, 0.99999696, 0.999998212, 1.059999943, 1.058945179, 0.969418228}, + {6.2625, 0.99999702, 0.999998271, 1.059999943, 1.058947563, 0.969419897}, + {6.266667, 0.999997079, 0.999998271, 1.059999943, 1.058950067, 0.969421506}, + {6.270833, 0.999997139, 0.999998331, 1.059999943, 1.058952451, 0.969423175}, + {6.275, 0.999997199, 0.999998331, 1.059999943, 1.058954954, 0.969424784}, + {6.279167, 0.999997258, 0.999998391, 1.059999943, 1.058957458, 0.969426453}, + {6.283333, 0.999997318, 0.99999845, 1.059999943, 1.058959842, 0.969428062}, + {6.2875, 0.999997377, 0.99999845, 1.059999943, 1.058962345, 0.969429672}, + {6.291667, 0.999997437, 0.99999851, 1.059999943, 1.058964729, 0.969431341}, + {6.295833, 0.999997497, 0.99999851, 1.059999943, 1.058967233, 0.96943295}, + {6.3, 0.999997556, 0.999998569, 1.059999943, 1.058969617, 0.969434559}, + {6.304167, 0.999997675, 0.999998629, 1.059999943, 1.05897212, 0.969436228}, + {6.308333, 0.999997735, 0.999998629, 1.059999943, 1.058974504, 0.969437838}, + {6.3125, 0.999997795, 0.999998689, 1.059999943, 1.058977008, 0.969439447}, + {6.316667, 0.999997854, 0.999998689, 1.059999943, 1.058979511, 0.969441116}, + {6.320833, 0.999997914, 0.999998748, 1.059999943, 1.058981895, 0.969442725}, + {6.325, 0.999998033, 0.999998808, 1.059999943, 1.058984399, 0.969444335}, + {6.329167, 0.999998093, 0.999998808, 1.059999943, 1.058986783, 0.969445944}, + {6.333333, 0.999998152, 0.999998868, 1.059999943, 1.058989286, 0.969447553}, + {6.3375, 0.999998212, 0.999998868, 1.059999943, 1.058991671, 0.969449222}, + {6.341667, 0.999998271, 0.999998927, 1.059999943, 1.058994174, 0.969450831}, + {6.345833, 0.999998331, 0.999998927, 1.059999943, 1.058996558, 0.969452441}, + {6.35, 0.999998391, 0.999998987, 1.059999943, 1.058999062, 0.96945405}, + {6.354167, 0.99999845, 0.999998987, 1.059999943, 1.059001446, 0.969455659}, + {6.358333, 0.99999851, 0.999999046, 1.059999943, 1.05900383, 0.969457269}, + {6.3625, 0.999998569, 0.999999046, 1.059999943, 1.059006333, 0.969458878}, + {6.366667, 0.999998629, 0.999999106, 1.059999943, 1.059008718, 0.969460487}, + {6.370833, 0.999998689, 0.999999106, 1.059999943, 1.059011221, 0.969462097}, + {6.375, 0.999998748, 0.999999166, 1.059999943, 1.059013605, 0.969463706}, + {6.379167, 0.999998808, 0.999999166, 1.059999943, 1.059015989, 0.969465256}, + {6.383333, 0.999998868, 0.999999225, 1.059999943, 1.059018493, 0.969466865}, + {6.3875, 0.999998927, 0.999999225, 1.059999943, 1.059020877, 0.969468474}, + {6.391667, 0.999998927, 0.999999225, 1.059999943, 1.059023261, 0.969470024}, + {6.395833, 0.999998987, 0.999999285, 1.059999943, 1.059025645, 0.969471633}, + {6.4, 0.999999046, 0.999999285, 1.059999943, 1.059028029, 0.969473183}, + {6.404167, 0.999999046, 0.999999285, 1.059999943, 1.059030533, 0.969474792}, + {6.408333, 0.999999106, 0.999999344, 1.059999943, 1.059032917, 0.969476342}, + {6.4125, 0.999999106, 0.999999344, 1.059999943, 1.059035301, 0.969477892}, + {6.416667, 0.999999166, 0.999999344, 1.059999943, 1.059037685, 0.969479501}, + {6.420833, 0.999999166, 0.999999344, 1.059999943, 1.05904007, 0.969481051}, + {6.425, 0.999999225, 0.999999344, 1.059999943, 1.059042335, 0.969482601}, + {6.429167, 0.999999225, 0.999999404, 1.059999943, 1.059044719, 0.96948415}, + {6.433333, 0.999999225, 0.999999404, 1.059999943, 1.059047103, 0.9694857}, + {6.4375, 0.999999225, 0.999999404, 1.059999943, 1.059049487, 0.96948719}, + {6.441667, 0.999999225, 0.999999404, 1.059999943, 1.059051752, 0.96948874}, + {6.445833, 0.999999285, 0.999999404, 1.059999943, 1.059054136, 0.96949029}, + {6.45, 0.999999285, 0.999999404, 1.059999943, 1.05905652, 0.96949178}, + {6.454167, 0.999999285, 0.999999404, 1.059999943, 1.059058785, 0.96949327}, + {6.458333, 0.999999225, 0.999999404, 1.059999943, 1.05906117, 0.96949482}, + {6.4625, 0.999999225, 0.999999404, 1.059999943, 1.059063435, 0.96949631}, + {6.466667, 0.999999225, 0.999999404, 1.059999943, 1.0590657, 0.9694978}, + {6.470833, 0.999999225, 0.999999404, 1.059999943, 1.059067965, 0.96949929}, + {6.475, 0.999999225, 0.999999344, 1.059999943, 1.059070349, 0.96950078}, + {6.479167, 0.999999225, 0.999999344, 1.059999943, 1.059072614, 0.96950227}, + {6.483333, 0.999999166, 0.999999344, 1.059999943, 1.059074879, 0.969503701}, + {6.4875, 0.999999166, 0.999999344, 1.059999943, 1.059077144, 0.969505191}, + {6.491667, 0.999999106, 0.999999344, 1.059999943, 1.059079289, 0.969506621}, + {6.495833, 0.999999106, 0.999999344, 1.059999943, 1.059081554, 0.969508052}, + {6.5, 0.999999046, 0.999999285, 1.059999943, 1.059083819, 0.969509542}, + {6.504167, 0.999999046, 0.999999285, 1.059999943, 1.059086084, 0.969510913}, + {6.508333, 0.999998987, 0.999999285, 1.059999943, 1.05908823, 0.969512343}, + {6.5125, 0.999998987, 0.999999285, 1.059999943, 1.059090495, 0.969513774}, + {6.516667, 0.999998927, 0.999999225, 1.059999943, 1.059092641, 0.969515204}, + {6.520833, 0.999998927, 0.999999225, 1.059999943, 1.059094787, 0.969516575}, + {6.525, 0.999998868, 0.999999225, 1.059999943, 1.059097052, 0.969518006}, + {6.529167, 0.999998808, 0.999999225, 1.059999943, 1.059099197, 0.969519377}, + {6.533333, 0.999998808, 0.999999166, 1.059999943, 1.059101343, 0.969520748}, + {6.5375, 0.999998748, 0.999999166, 1.059999943, 1.059103489, 0.969522119}, + {6.541667, 0.999998689, 0.999999166, 1.059999943, 1.059105635, 0.969523489}, + {6.545833, 0.999998689, 0.999999106, 1.059999943, 1.05910778, 0.96952486}, + {6.55, 0.999998629, 0.999999106, 1.059999943, 1.059109926, 0.969526231}, + {6.554167, 0.999998569, 0.999999106, 1.059999943, 1.059111953, 0.969527543}, + {6.558333, 0.999998569, 0.999999046, 1.059999943, 1.059114099, 0.969528914}, + {6.5625, 0.99999851, 0.999999046, 1.059999943, 1.059116125, 0.969530225}, + {6.566667, 0.99999845, 0.999999046, 1.059999943, 1.059118271, 0.969531536}, + {6.570833, 0.999998391, 0.999998987, 1.059999943, 1.059120297, 0.969532847}, + {6.575, 0.999998391, 0.999998987, 1.059999943, 1.059122443, 0.969534159}, + {6.579167, 0.999998331, 0.999998987, 1.059999943, 1.05912447, 0.96953547}, + {6.583333, 0.999998271, 0.999998927, 1.059999943, 1.059126496, 0.969536781}, + {6.5875, 0.999998271, 0.999998927, 1.059999943, 1.059128523, 0.969538093}, + {6.591667, 0.999998212, 0.999998927, 1.059999943, 1.059130669, 0.969539344}, + {6.595833, 0.999998152, 0.999998927, 1.059999943, 1.059132695, 0.969540656}, + {6.6, 0.999998152, 0.999998868, 1.059999943, 1.059134722, 0.969541907}, + {6.604167, 0.999998093, 0.999998868, 1.059999943, 1.059136629, 0.969543159}, + {6.608333, 0.999998093, 0.999998868, 1.059999943, 1.059138656, 0.96954447}, + {6.6125, 0.999998033, 0.999998868, 1.059999943, 1.059140682, 0.969545722}, + {6.616667, 0.999998033, 0.999998808, 1.059999943, 1.059142709, 0.969546974}, + {6.620833, 0.999997973, 0.999998808, 1.059999943, 1.059144616, 0.969548166}, + {6.625, 0.999997973, 0.999998808, 1.059999943, 1.059146643, 0.969549418}, + {6.629167, 0.999997914, 0.999998808, 1.059999943, 1.059148669, 0.969550669}, + {6.633333, 0.999997914, 0.999998808, 1.059999943, 1.059150577, 0.969551921}, + {6.6375, 0.999997854, 0.999998808, 1.059999943, 1.059152603, 0.969553113}, + {6.641667, 0.999997854, 0.999998748, 1.059999943, 1.059154511, 0.969554365}, + {6.645833, 0.999997854, 0.999998748, 1.059999943, 1.059156418, 0.969555557}, + {6.65, 0.999997795, 0.999998748, 1.059999943, 1.059158444, 0.969556749}, + {6.654167, 0.999997795, 0.999998748, 1.059999943, 1.059160352, 0.969558001}, + {6.658333, 0.999997795, 0.999998748, 1.059999943, 1.059162259, 0.969559193}, + {6.6625, 0.999997795, 0.999998748, 1.059999943, 1.059164166, 0.969560385}, + {6.666667, 0.999997795, 0.999998748, 1.059999943, 1.059166193, 0.969561577}, + {6.670833, 0.999997795, 0.999998748, 1.059999943, 1.0591681, 0.969562769}, + {6.675, 0.999997795, 0.999998748, 1.059999943, 1.059170008, 0.969563961}, + {6.679167, 0.999997795, 0.999998748, 1.059999943, 1.059171915, 0.969565153}, + {6.683333, 0.999997795, 0.999998748, 1.059999943, 1.059173822, 0.969566345}, + {6.6875, 0.999997795, 0.999998748, 1.059999943, 1.05917573, 0.969567478}, + {6.691667, 0.999997795, 0.999998748, 1.059999943, 1.059177637, 0.96956867}, + {6.695833, 0.999997795, 0.999998748, 1.059999943, 1.059179544, 0.969569862}, + {6.7, 0.999997795, 0.999998808, 1.059999943, 1.059181452, 0.969571054}, + {6.704167, 0.999997795, 0.999998808, 1.059999943, 1.059183359, 0.969572186}, + {6.708333, 0.999997795, 0.999998808, 1.059999943, 1.059185266, 0.969573379}, + {6.7125, 0.999997854, 0.999998808, 1.059999943, 1.059187055, 0.969574511}, + {6.716667, 0.999997854, 0.999998808, 1.059999943, 1.059188962, 0.969575703}, + {6.720833, 0.999997854, 0.999998808, 1.059999943, 1.059190869, 0.969576836}, + {6.725, 0.999997854, 0.999998868, 1.059999943, 1.059192777, 0.969578028}, + {6.729167, 0.999997914, 0.999998868, 1.059999943, 1.059194684, 0.96957916}, + {6.733333, 0.999997914, 0.999998868, 1.059999943, 1.059196472, 0.969580352}, + {6.7375, 0.999997973, 0.999998868, 1.059999943, 1.05919838, 0.969581485}, + {6.741667, 0.999997973, 0.999998868, 1.059999943, 1.059200287, 0.969582617}, + {6.745833, 0.999997973, 0.999998927, 1.059999943, 1.059202075, 0.96958375}, + {6.75, 0.999998033, 0.999998927, 1.059999943, 1.059203982, 0.969584942}, + {6.754167, 0.999998033, 0.999998927, 1.059999943, 1.05920589, 0.969586074}, + {6.758333, 0.999998093, 0.999998987, 1.059999943, 1.059207678, 0.969587207}, + {6.7625, 0.999998093, 0.999998987, 1.059999943, 1.059209585, 0.969588339}, + {6.766667, 0.999998152, 0.999998987, 1.059999943, 1.059211493, 0.969589531}, + {6.770833, 0.999998212, 0.999998987, 1.059999943, 1.059213281, 0.969590664}, + {6.775, 0.999998212, 0.999999046, 1.059999943, 1.059215188, 0.969591796}, + {6.779167, 0.999998271, 0.999999046, 1.059999943, 1.059216976, 0.969592929}, + {6.783333, 0.999998271, 0.999999046, 1.059999943, 1.059218884, 0.969594061}, + {6.7875, 0.999998331, 0.999999106, 1.059999943, 1.059220791, 0.969595194}, + {6.791667, 0.999998331, 0.999999106, 1.059999943, 1.059222579, 0.969596326}, + {6.795833, 0.999998391, 0.999999106, 1.059999943, 1.059224486, 0.969597459}, + {6.8, 0.99999845, 0.999999166, 1.059999943, 1.059226274, 0.969598591}, + {6.804167, 0.99999845, 0.999999166, 1.059999943, 1.059228182, 0.969599724}, + {6.808333, 0.99999851, 0.999999166, 1.059999943, 1.05922997, 0.969600856}, + {6.8125, 0.99999851, 0.999999166, 1.059999943, 1.059231758, 0.969601989}, + {6.816667, 0.999998569, 0.999999225, 1.059999943, 1.059233665, 0.969603121}, + {6.820833, 0.999998629, 0.999999225, 1.059999943, 1.059235454, 0.969604194}, + {6.825, 0.999998629, 0.999999225, 1.059999943, 1.059237361, 0.969605327}, + {6.829167, 0.999998689, 0.999999285, 1.059999943, 1.059239149, 0.969606459}, + {6.833333, 0.999998689, 0.999999285, 1.059999943, 1.059240937, 0.969607592}, + {6.8375, 0.999998748, 0.999999285, 1.059999943, 1.059242845, 0.969608724}, + {6.841667, 0.999998748, 0.999999285, 1.059999943, 1.059244633, 0.969609797}, + {6.845833, 0.999998808, 0.999999344, 1.059999943, 1.059246421, 0.969610929}, + {6.85, 0.999998808, 0.999999344, 1.059999943, 1.059248328, 0.969612062}, + {6.854167, 0.999998868, 0.999999344, 1.059999943, 1.059250116, 0.969613135}, + {6.858333, 0.999998868, 0.999999344, 1.059999943, 1.059251904, 0.969614267}, + {6.8625, 0.999998927, 0.999999404, 1.059999943, 1.059253693, 0.96961534}, + {6.866667, 0.999998927, 0.999999404, 1.059999943, 1.0592556, 0.969616473}, + {6.870833, 0.999998987, 0.999999404, 1.059999943, 1.059257388, 0.969617546}, + {6.875, 0.999998987, 0.999999404, 1.059999943, 1.059259176, 0.969618618}, + {6.879167, 0.999998987, 0.999999404, 1.059999943, 1.059260964, 0.969619751}, + {6.883333, 0.999999046, 0.999999464, 1.059999943, 1.059262753, 0.969620824}, + {6.8875, 0.999999046, 0.999999464, 1.059999943, 1.059264541, 0.969621897}, + {6.891667, 0.999999046, 0.999999464, 1.059999943, 1.059266329, 0.96962297}, + {6.895833, 0.999999106, 0.999999464, 1.059999943, 1.059268117, 0.969624102}, + {6.9, 0.999999106, 0.999999464, 1.059999943, 1.059269905, 0.969625175}, + {6.904167, 0.999999106, 0.999999464, 1.059999943, 1.059271693, 0.969626248}, + {6.908333, 0.999999106, 0.999999464, 1.059999943, 1.059273481, 0.969627321}, + {6.9125, 0.999999106, 0.999999464, 1.059999943, 1.05927515, 0.969628394}, + {6.916667, 0.999999166, 0.999999464, 1.059999943, 1.059276938, 0.969629467}, + {6.920833, 0.999999166, 0.999999464, 1.059999943, 1.059278727, 0.96963048}, + {6.925, 0.999999166, 0.999999464, 1.059999943, 1.059280515, 0.969631553}, + {6.929167, 0.999999166, 0.999999523, 1.059999943, 1.059282184, 0.969632626}, + {6.933333, 0.999999166, 0.999999523, 1.059999943, 1.059283972, 0.969633639}, + {6.9375, 0.999999166, 0.999999523, 1.059999943, 1.05928576, 0.969634712}, + {6.941667, 0.999999166, 0.999999523, 1.059999943, 1.059287429, 0.969635725}, + {6.945833, 0.999999166, 0.999999523, 1.059999943, 1.059289217, 0.969636798}, + {6.95, 0.999999166, 0.999999523, 1.059999943, 1.059290886, 0.969637811}, + {6.954167, 0.999999166, 0.999999464, 1.059999943, 1.059292555, 0.969638884}, + {6.958333, 0.999999166, 0.999999464, 1.059999943, 1.059294343, 0.969639897}, + {6.9625, 0.999999166, 0.999999464, 1.059999943, 1.059296012, 0.969640911}, + {6.966667, 0.999999106, 0.999999464, 1.059999943, 1.059297681, 0.969641924}, + {6.970833, 0.999999106, 0.999999464, 1.059999943, 1.059299469, 0.969642937}, + {6.975, 0.999999106, 0.999999464, 1.059999943, 1.059301138, 0.96964395}, + {6.979167, 0.999999106, 0.999999464, 1.059999943, 1.059302807, 0.969644964}, + {6.983333, 0.999999106, 0.999999464, 1.059999943, 1.059304476, 0.969645977}, + {6.9875, 0.999999106, 0.999999464, 1.059999943, 1.059306145, 0.969646931}, + {6.991667, 0.999999046, 0.999999464, 1.059999943, 1.059307814, 0.969647944}, + {6.995833, 0.999999046, 0.999999464, 1.059999943, 1.059309483, 0.969648957}, + {7, 0.999999046, 0.999999464, 1.059999943, 1.059311152, 0.969649911}, + {7.004167, 0.999999046, 0.999999404, 1.059999943, 1.05931282, 0.969650924}, + {7.008333, 0.999998987, 0.999999404, 1.059999943, 1.05931437, 0.969651878}, + {7.0125, 0.999998987, 0.999999404, 1.059999943, 1.059316039, 0.969652832}, + {7.016667, 0.999998987, 0.999999404, 1.059999943, 1.059317708, 0.969653785}, + {7.020833, 0.999998927, 0.999999404, 1.059999943, 1.059319258, 0.969654799}, + {7.025, 0.999998927, 0.999999404, 1.059999943, 1.059320927, 0.969655752}, + {7.029167, 0.999998927, 0.999999404, 1.059999943, 1.059322596, 0.969656706}, + {7.033333, 0.999998868, 0.999999344, 1.059999943, 1.059324145, 0.96965766}, + {7.0375, 0.999998868, 0.999999344, 1.059999943, 1.059325695, 0.969658554}, + {7.041667, 0.999998868, 0.999999344, 1.059999943, 1.059327364, 0.969659507}, + {7.045833, 0.999998808, 0.999999344, 1.059999943, 1.059328914, 0.969660461}, + {7.05, 0.999998808, 0.999999344, 1.059999943, 1.059330583, 0.969661415}, + {7.054167, 0.999998808, 0.999999344, 1.059999943, 1.059332132, 0.969662309}, + {7.058333, 0.999998748, 0.999999344, 1.059999943, 1.059333682, 0.969663262}, + {7.0625, 0.999998748, 0.999999285, 1.059999943, 1.059335232, 0.969664156}, + {7.066667, 0.999998748, 0.999999285, 1.059999943, 1.059336782, 0.96966511}, + {7.070833, 0.999998689, 0.999999285, 1.059999943, 1.059338331, 0.969666004}, + {7.075, 0.999998689, 0.999999285, 1.059999943, 1.059339881, 0.969666898}, + {7.079167, 0.999998689, 0.999999285, 1.059999943, 1.059341431, 0.969667792}, + {7.083333, 0.999998689, 0.999999285, 1.059999943, 1.05934298, 0.969668686}, + {7.0875, 0.999998629, 0.999999285, 1.059999943, 1.05934453, 0.96966958}, + {7.091667, 0.999998629, 0.999999285, 1.059999943, 1.05934608, 0.969670475}, + {7.095833, 0.999998629, 0.999999225, 1.059999943, 1.05934763, 0.969671369}, + {7.1, 0.999998629, 0.999999225, 1.059999943, 1.059349179, 0.969672263}, + {7.104167, 0.999998569, 0.999999225, 1.059999943, 1.05935061, 0.969673157}, + {7.108333, 0.999998569, 0.999999225, 1.059999943, 1.05935216, 0.969674051}, + {7.1125, 0.999998569, 0.999999225, 1.059999943, 1.059353709, 0.969674945}, + {7.116667, 0.999998569, 0.999999225, 1.059999943, 1.05935514, 0.969675779}, + {7.120833, 0.999998569, 0.999999225, 1.059999943, 1.059356689, 0.969676673}, + {7.125, 0.99999851, 0.999999225, 1.059999943, 1.059358239, 0.969677508}, + {7.129167, 0.99999851, 0.999999225, 1.059999943, 1.05935967, 0.969678402}, + {7.133333, 0.99999851, 0.999999225, 1.059999943, 1.059361219, 0.969679236}, + {7.1375, 0.99999851, 0.999999225, 1.059999943, 1.05936265, 0.96968013}, + {7.141667, 0.99999851, 0.999999225, 1.059999943, 1.0593642, 0.969680965}, + {7.145833, 0.99999851, 0.999999225, 1.059999943, 1.05936563, 0.969681799}, + {7.15, 0.99999851, 0.999999225, 1.059999943, 1.059367061, 0.969682693}, + {7.154167, 0.99999851, 0.999999225, 1.059999943, 1.05936861, 0.969683528}, + {7.158333, 0.99999851, 0.999999225, 1.059999943, 1.059370041, 0.969684362}, + {7.1625, 0.99999851, 0.999999225, 1.059999943, 1.059371471, 0.969685197}, + {7.166667, 0.99999851, 0.999999225, 1.059999943, 1.059373021, 0.969686031}, + {7.170833, 0.99999851, 0.999999225, 1.059999943, 1.059374452, 0.969686925}, + {7.175, 0.99999851, 0.999999225, 1.059999943, 1.059375882, 0.96968776}, + {7.179167, 0.99999851, 0.999999225, 1.059999943, 1.059377313, 0.969688594}, + {7.183333, 0.99999851, 0.999999225, 1.059999943, 1.059378743, 0.969689429}, + {7.1875, 0.99999851, 0.999999225, 1.059999943, 1.059380174, 0.969690263}, + {7.191667, 0.99999851, 0.999999225, 1.059999943, 1.059381723, 0.969691038}, + {7.195833, 0.99999851, 0.999999225, 1.059999943, 1.059383154, 0.969691873}, + {7.2, 0.99999851, 0.999999225, 1.059999943, 1.059384584, 0.969692707}, + {7.204167, 0.999998569, 0.999999285, 1.059999943, 1.059386015, 0.969693542}, + {7.208333, 0.999998569, 0.999999285, 1.059999943, 1.059387445, 0.969694376}, + {7.2125, 0.999998569, 0.999999285, 1.059999943, 1.059388876, 0.96969521}, + {7.216667, 0.999998569, 0.999999285, 1.059999943, 1.059390306, 0.969695985}, + {7.220833, 0.999998569, 0.999999285, 1.059999943, 1.059391737, 0.96969682}, + {7.225, 0.999998629, 0.999999285, 1.059999943, 1.059393168, 0.969697654}, + {7.229167, 0.999998629, 0.999999285, 1.059999943, 1.059394598, 0.969698429}, + {7.233333, 0.999998629, 0.999999285, 1.059999943, 1.059396029, 0.969699264}, + {7.2375, 0.999998629, 0.999999285, 1.059999943, 1.059397459, 0.969700098}, + {7.241667, 0.999998689, 0.999999344, 1.059999943, 1.05939877, 0.969700873}, + {7.245833, 0.999998689, 0.999999344, 1.059999943, 1.059400201, 0.969701707}, + {7.25, 0.999998689, 0.999999344, 1.059999943, 1.059401631, 0.969702482}, + {7.254167, 0.999998689, 0.999999344, 1.059999943, 1.059403062, 0.969703317}, + {7.258333, 0.999998748, 0.999999344, 1.059999943, 1.059404492, 0.969704092}, + {7.2625, 0.999998748, 0.999999344, 1.059999943, 1.059405923, 0.969704926}, + {7.266667, 0.999998748, 0.999999404, 1.059999943, 1.059407234, 0.969705701}, + {7.270833, 0.999998808, 0.999999404, 1.059999943, 1.059408665, 0.969706535}, + {7.275, 0.999998808, 0.999999404, 1.059999943, 1.059410095, 0.96970731}, + {7.279167, 0.999998808, 0.999999404, 1.059999943, 1.059411526, 0.969708145}, + {7.283333, 0.999998808, 0.999999404, 1.059999943, 1.059412837, 0.96970892}, + {7.2875, 0.999998868, 0.999999404, 1.059999943, 1.059414268, 0.969709694}, + {7.291667, 0.999998868, 0.999999404, 1.059999943, 1.059415698, 0.969710529}, + {7.295833, 0.999998868, 0.999999464, 1.059999943, 1.059417009, 0.969711304}, + {7.3, 0.999998927, 0.999999464, 1.059999943, 1.05941844, 0.969712079}, + {7.304167, 0.999998927, 0.999999464, 1.059999943, 1.05941987, 0.969712853}, + {7.308333, 0.999998927, 0.999999464, 1.059999943, 1.059421182, 0.969713688}, + {7.3125, 0.999998987, 0.999999464, 1.059999943, 1.059422612, 0.969714463}, + {7.316667, 0.999998987, 0.999999464, 1.059999943, 1.059423923, 0.969715238}, + {7.320833, 0.999998987, 0.999999523, 1.059999943, 1.059425354, 0.969716012}, + {7.325, 0.999998987, 0.999999523, 1.059999943, 1.059426665, 0.969716787}, + {7.329167, 0.999999046, 0.999999523, 1.059999943, 1.059428096, 0.969717562}, + {7.333333, 0.999999046, 0.999999523, 1.059999943, 1.059429407, 0.969718337}, + {7.3375, 0.999999046, 0.999999523, 1.059999943, 1.059430838, 0.969719112}, + {7.341667, 0.999999046, 0.999999523, 1.059999943, 1.059432149, 0.969719887}, + {7.345833, 0.999999106, 0.999999523, 1.059999943, 1.059433579, 0.969720662}, + {7.35, 0.999999106, 0.999999523, 1.059999943, 1.059434891, 0.969721437}, + {7.354167, 0.999999106, 0.999999523, 1.059999943, 1.059436321, 0.969722211}, + {7.358333, 0.999999106, 0.999999583, 1.059999943, 1.059437633, 0.969722986}, + {7.3625, 0.999999166, 0.999999583, 1.059999943, 1.059438944, 0.969723761}, + {7.366667, 0.999999166, 0.999999583, 1.059999943, 1.059440374, 0.969724536}, + {7.370833, 0.999999166, 0.999999583, 1.059999943, 1.059441686, 0.969725251}, + {7.375, 0.999999166, 0.999999583, 1.059999943, 1.059442997, 0.969726026}, + {7.379167, 0.999999166, 0.999999583, 1.059999943, 1.059444308, 0.969726801}, + {7.383333, 0.999999166, 0.999999583, 1.059999943, 1.05944562, 0.969727576}, + {7.3875, 0.999999225, 0.999999583, 1.059999943, 1.05944705, 0.969728291}, + {7.391667, 0.999999225, 0.999999583, 1.059999943, 1.059448361, 0.969729066}, + {7.395833, 0.999999225, 0.999999583, 1.059999943, 1.059449673, 0.969729781}, + {7.4, 0.999999225, 0.999999583, 1.059999943, 1.059450984, 0.969730556}, + {7.404167, 0.999999225, 0.999999583, 1.059999943, 1.059452295, 0.969731271}, + {7.408333, 0.999999225, 0.999999583, 1.059999943, 1.059453607, 0.969732046}, + {7.4125, 0.999999225, 0.999999583, 1.059999943, 1.059454918, 0.969732761}, + {7.416667, 0.999999225, 0.999999583, 1.059999943, 1.059456229, 0.969733536}, + {7.420833, 0.999999225, 0.999999583, 1.059999943, 1.059457541, 0.969734252}, + {7.425, 0.999999225, 0.999999583, 1.059999943, 1.059458852, 0.969734967}, + {7.429167, 0.999999225, 0.999999583, 1.059999943, 1.059460163, 0.969735682}, + {7.433333, 0.999999225, 0.999999583, 1.059999943, 1.059461474, 0.969736457}, + {7.4375, 0.999999225, 0.999999583, 1.059999943, 1.059462786, 0.969737172}, + {7.441667, 0.999999225, 0.999999583, 1.059999943, 1.059463978, 0.969737887}, + {7.445833, 0.999999225, 0.999999583, 1.059999943, 1.059465289, 0.969738603}, + {7.45, 0.999999225, 0.999999583, 1.059999943, 1.0594666, 0.969739318}, + {7.454167, 0.999999225, 0.999999583, 1.059999943, 1.059467912, 0.969740033}, + {7.458333, 0.999999225, 0.999999583, 1.059999943, 1.059469104, 0.969740748}, + {7.4625, 0.999999225, 0.999999583, 1.059999943, 1.059470415, 0.969741464}, + {7.466667, 0.999999225, 0.999999583, 1.059999943, 1.059471726, 0.969742179}, + {7.470833, 0.999999225, 0.999999583, 1.059999943, 1.059472919, 0.969742835}, + {7.475, 0.999999225, 0.999999583, 1.059999943, 1.05947423, 0.96974355}, + {7.479167, 0.999999166, 0.999999583, 1.059999943, 1.059475422, 0.969744265}, + {7.483333, 0.999999166, 0.999999583, 1.059999943, 1.059476733, 0.96974498}, + {7.4875, 0.999999166, 0.999999583, 1.059999943, 1.059477925, 0.969745636}, + {7.491667, 0.999999166, 0.999999583, 1.059999943, 1.059479117, 0.969746351}, + {7.495833, 0.999999166, 0.999999583, 1.059999943, 1.059480429, 0.969747007}, + {7.5, 0.999999166, 0.999999583, 1.059999943, 1.059481621, 0.969747722}, + {7.504167, 0.999999166, 0.999999583, 1.059999943, 1.059482932, 0.969748378}, + {7.508333, 0.999999166, 0.999999583, 1.059999943, 1.059484124, 0.969749093}, + {7.5125, 0.999999106, 0.999999583, 1.059999943, 1.059485316, 0.969749749}, + {7.516667, 0.999999106, 0.999999583, 1.059999943, 1.059486508, 0.969750404}, + {7.520833, 0.999999106, 0.999999523, 1.059999943, 1.0594877, 0.96975106}, + {7.525, 0.999999106, 0.999999523, 1.059999943, 1.059489012, 0.969751775}, + {7.529167, 0.999999106, 0.999999523, 1.059999943, 1.059490204, 0.969752431}, + {7.533333, 0.999999106, 0.999999523, 1.059999943, 1.059491396, 0.969753087}, + {7.5375, 0.999999106, 0.999999523, 1.059999943, 1.059492588, 0.969753742}, + {7.541667, 0.999999046, 0.999999523, 1.059999943, 1.05949378, 0.969754398}, + {7.545833, 0.999999046, 0.999999523, 1.059999943, 1.059494972, 0.969755054}, + {7.55, 0.999999046, 0.999999523, 1.059999943, 1.059496164, 0.969755709}, + {7.554167, 0.999999046, 0.999999523, 1.059999943, 1.059497356, 0.969756365}, + {7.558333, 0.999999046, 0.999999523, 1.059999943, 1.059498549, 0.96975702}, + {7.5625, 0.999999046, 0.999999523, 1.059999943, 1.059499741, 0.969757676}, + {7.566667, 0.999999046, 0.999999523, 1.059999943, 1.059500813, 0.969758272}, + {7.570833, 0.999998987, 0.999999523, 1.059999943, 1.059502006, 0.969758928}, + {7.575, 0.999998987, 0.999999523, 1.059999943, 1.059503198, 0.969759583}, + {7.579167, 0.999998987, 0.999999523, 1.059999943, 1.05950439, 0.969760239}, + {7.583333, 0.999998987, 0.999999523, 1.059999943, 1.059505582, 0.969760835}, + {7.5875, 0.999998987, 0.999999523, 1.059999943, 1.059506655, 0.969761491}, + {7.591667, 0.999998987, 0.999999523, 1.059999943, 1.059507847, 0.969762087}, + {7.595833, 0.999998987, 0.999999523, 1.059999943, 1.059509039, 0.969762743}, + {7.6, 0.999998987, 0.999999523, 1.059999943, 1.059510112, 0.969763339}, + {7.604167, 0.999998987, 0.999999523, 1.059999943, 1.059511304, 0.969763994}, + {7.608333, 0.999998987, 0.999999464, 1.059999943, 1.059512377, 0.96976459}, + {7.6125, 0.999998987, 0.999999464, 1.059999943, 1.059513569, 0.969765246}, + {7.616667, 0.999998927, 0.999999464, 1.059999943, 1.059514642, 0.969765842}, + {7.620833, 0.999998927, 0.999999464, 1.059999943, 1.059515834, 0.969766438}, + {7.625, 0.999998927, 0.999999464, 1.059999943, 1.059516907, 0.969767094}, + {7.629167, 0.999998927, 0.999999464, 1.059999943, 1.059518099, 0.96976769}, + {7.633333, 0.999998927, 0.999999464, 1.059999943, 1.059519172, 0.969768286}, + {7.6375, 0.999998927, 0.999999464, 1.059999943, 1.059520364, 0.969768882}, + {7.641667, 0.999998927, 0.999999464, 1.059999943, 1.059521437, 0.969769537}, + {7.645833, 0.999998927, 0.999999464, 1.059999943, 1.05952251, 0.969770134}, + {7.65, 0.999998927, 0.999999523, 1.059999943, 1.059523702, 0.96977073}, + {7.654167, 0.999998927, 0.999999523, 1.059999943, 1.059524775, 0.969771326}, + {7.658333, 0.999998927, 0.999999523, 1.059999943, 1.059525847, 0.969771922}, + {7.6625, 0.999998927, 0.999999523, 1.059999943, 1.05952704, 0.969772518}, + {7.666667, 0.999998987, 0.999999523, 1.059999943, 1.059528112, 0.969773114}, + {7.670833, 0.999998987, 0.999999523, 1.059999943, 1.059529185, 0.96977371}, + {7.675, 0.999998987, 0.999999523, 1.059999943, 1.059530258, 0.969774306}, + {7.679167, 0.999998987, 0.999999523, 1.059999943, 1.05953145, 0.969774902}, + {7.683333, 0.999998987, 0.999999523, 1.059999943, 1.059532523, 0.969775498}, + {7.6875, 0.999998987, 0.999999523, 1.059999943, 1.059533596, 0.969776094}, + {7.691667, 0.999998987, 0.999999523, 1.059999943, 1.059534669, 0.96977669}, + {7.695833, 0.999998987, 0.999999523, 1.059999943, 1.059535742, 0.969777226}, + {7.7, 0.999998987, 0.999999523, 1.059999943, 1.059536815, 0.969777822}, + {7.704167, 0.999998987, 0.999999523, 1.059999943, 1.059538007, 0.969778419}, + {7.708333, 0.999998987, 0.999999523, 1.059999943, 1.05953908, 0.969779015}, + {7.7125, 0.999999046, 0.999999523, 1.059999943, 1.059540153, 0.969779611}, + {7.716667, 0.999999046, 0.999999523, 1.059999943, 1.059541225, 0.969780147}, + {7.720833, 0.999999046, 0.999999523, 1.059999943, 1.059542298, 0.969780743}, + {7.725, 0.999999046, 0.999999523, 1.059999943, 1.059543371, 0.969781339}, + {7.729167, 0.999999046, 0.999999523, 1.059999943, 1.059544444, 0.969781935}, + {7.733333, 0.999999046, 0.999999583, 1.059999943, 1.059545517, 0.969782472}, + {7.7375, 0.999999046, 0.999999583, 1.059999943, 1.05954659, 0.969783068}, + {7.741667, 0.999999106, 0.999999583, 1.059999943, 1.059547663, 0.969783604}, + {7.745833, 0.999999106, 0.999999583, 1.059999943, 1.059548736, 0.9697842}, + {7.75, 0.999999106, 0.999999583, 1.059999943, 1.059549809, 0.969784796}, + {7.754167, 0.999999106, 0.999999583, 1.059999943, 1.059550762, 0.969785333}, + {7.758333, 0.999999106, 0.999999583, 1.059999943, 1.059551835, 0.969785929}, + {7.7625, 0.999999106, 0.999999583, 1.059999943, 1.059552908, 0.969786465}, + {7.766667, 0.999999106, 0.999999583, 1.059999943, 1.059553981, 0.969787061}, + {7.770833, 0.999999166, 0.999999583, 1.059999943, 1.059555054, 0.969787598}, + {7.775, 0.999999166, 0.999999583, 1.059999943, 1.059556127, 0.969788194}, + {7.779167, 0.999999166, 0.999999583, 1.059999943, 1.059557199, 0.96978873}, + {7.783333, 0.999999166, 0.999999642, 1.059999943, 1.059558153, 0.969789326}, + {7.7875, 0.999999166, 0.999999642, 1.059999943, 1.059559226, 0.969789863}, + {7.791667, 0.999999166, 0.999999642, 1.059999943, 1.059560299, 0.969790399}, + {7.795833, 0.999999225, 0.999999642, 1.059999943, 1.059561372, 0.969790995}, + {7.8, 0.999999225, 0.999999642, 1.059999943, 1.059562325, 0.969791532}, + {7.804167, 0.999999225, 0.999999642, 1.059999943, 1.059563398, 0.969792128}, + {7.808333, 0.999999225, 0.999999642, 1.059999943, 1.059564471, 0.969792664}, + {7.8125, 0.999999225, 0.999999642, 1.059999943, 1.059565425, 0.9697932}, + {7.816667, 0.999999225, 0.999999642, 1.059999943, 1.059566498, 0.969793737}, + {7.820833, 0.999999225, 0.999999642, 1.059999943, 1.059567571, 0.969794333}, + {7.825, 0.999999285, 0.999999642, 1.059999943, 1.059568524, 0.969794869}, + {7.829167, 0.999999285, 0.999999642, 1.059999943, 1.059569597, 0.969795406}, + {7.833333, 0.999999285, 0.999999642, 1.059999943, 1.05957067, 0.969795942}, + {7.8375, 0.999999285, 0.999999642, 1.059999943, 1.059571624, 0.969796479}, + {7.841667, 0.999999285, 0.999999702, 1.059999943, 1.059572697, 0.969797075}, + {7.845833, 0.999999285, 0.999999702, 1.059999943, 1.05957365, 0.969797611}, + {7.85, 0.999999285, 0.999999702, 1.059999943, 1.059574723, 0.969798148}, + {7.854167, 0.999999285, 0.999999702, 1.059999943, 1.059575677, 0.969798684}, + {7.858333, 0.999999285, 0.999999702, 1.059999943, 1.05957675, 0.969799221}, + {7.8625, 0.999999344, 0.999999702, 1.059999943, 1.059577703, 0.969799757}, + {7.866667, 0.999999344, 0.999999702, 1.059999943, 1.059578776, 0.969800293}, + {7.870833, 0.999999344, 0.999999702, 1.059999943, 1.05957973, 0.96980083}, + {7.875, 0.999999344, 0.999999702, 1.059999943, 1.059580684, 0.969801366}, + {7.879167, 0.999999344, 0.999999702, 1.059999943, 1.059581757, 0.969801903}, + {7.883333, 0.999999344, 0.999999702, 1.059999943, 1.05958271, 0.969802439}, + {7.8875, 0.999999344, 0.999999702, 1.059999943, 1.059583664, 0.969802916}, + {7.891667, 0.999999344, 0.999999702, 1.059999943, 1.059584737, 0.969803452}, + {7.895833, 0.999999344, 0.999999702, 1.059999943, 1.059585691, 0.969803989}, + {7.9, 0.999999344, 0.999999702, 1.059999943, 1.059586644, 0.969804525}, + {7.904167, 0.999999344, 0.999999702, 1.059999943, 1.059587717, 0.969805062}, + {7.908333, 0.999999344, 0.999999702, 1.059999943, 1.059588671, 0.969805539}, + {7.9125, 0.999999344, 0.999999702, 1.059999943, 1.059589624, 0.969806075}, + {7.916667, 0.999999344, 0.999999702, 1.059999943, 1.059590578, 0.969806612}, + {7.920833, 0.999999344, 0.999999702, 1.059999943, 1.059591532, 0.969807088}, + {7.925, 0.999999344, 0.999999702, 1.059999943, 1.059592605, 0.969807625}, + {7.929167, 0.999999344, 0.999999702, 1.059999943, 1.059593558, 0.969808161}, + {7.933333, 0.999999344, 0.999999702, 1.059999943, 1.059594512, 0.969808638}, + {7.9375, 0.999999344, 0.999999702, 1.059999943, 1.059595466, 0.969809175}, + {7.941667, 0.999999344, 0.999999702, 1.059999943, 1.059596419, 0.969809651}, + {7.945833, 0.999999344, 0.999999702, 1.059999943, 1.059597373, 0.969810188}, + {7.95, 0.999999344, 0.999999702, 1.059999943, 1.059598327, 0.969810665}, + {7.954167, 0.999999344, 0.999999702, 1.059999943, 1.05959928, 0.969811141}, + {7.958333, 0.999999344, 0.999999702, 1.059999943, 1.059600234, 0.969811678}, + {7.9625, 0.999999344, 0.999999702, 1.059999943, 1.059601188, 0.969812155}, + {7.966667, 0.999999344, 0.999999702, 1.059999943, 1.059602141, 0.969812691}, + {7.970833, 0.999999344, 0.999999702, 1.059999943, 1.059603095, 0.969813168}, + {7.975, 0.999999344, 0.999999702, 1.059999943, 1.05960393, 0.969813645}, + {7.979167, 0.999999344, 0.999999702, 1.059999943, 1.059604883, 0.969814122}, + {7.983333, 0.999999344, 0.999999702, 1.059999943, 1.059605837, 0.969814658}, + {7.9875, 0.999999344, 0.999999702, 1.059999943, 1.059606791, 0.969815135}, + {7.991667, 0.999999344, 0.999999702, 1.059999943, 1.059607744, 0.969815612}, + {7.995833, 0.999999344, 0.999999702, 1.059999943, 1.059608579, 0.969816089}, + {8, 0.999999344, 0.999999702, 1.059999943, 1.059609532, 0.969816566}, + {8.004167, 0.999999285, 0.999999702, 1.059999943, 1.059610486, 0.969817042}, + {8.008333, 0.999999285, 0.999999702, 1.059999943, 1.05961144, 0.969817519}, + {8.0125, 0.999999285, 0.999999702, 1.059999943, 1.059612274, 0.969817996}, + {8.016667, 0.999999285, 0.999999702, 1.059999943, 1.059613228, 0.969818473}, + {8.020833, 0.999999285, 0.999999702, 1.059999943, 1.059614182, 0.96981895}, + {8.025, 0.999999285, 0.999999702, 1.059999943, 1.059615016, 0.969819427}, + {8.029167, 0.999999285, 0.999999702, 1.059999943, 1.05961597, 0.969819903}, + {8.033333, 0.999999285, 0.999999702, 1.059999943, 1.059616804, 0.96982038}, + {8.0375, 0.999999285, 0.999999642, 1.059999943, 1.059617758, 0.969820857}, + {8.041667, 0.999999285, 0.999999642, 1.059999943, 1.059618592, 0.969821274}, + {8.045833, 0.999999285, 0.999999642, 1.059999943, 1.059619546, 0.969821751}, + {8.05, 0.999999285, 0.999999642, 1.059999943, 1.05962038, 0.969822228}, + {8.054167, 0.999999285, 0.999999642, 1.059999943, 1.059621334, 0.969822705}, + {8.058333, 0.999999285, 0.999999642, 1.059999943, 1.059622169, 0.969823182}, + {8.0625, 0.999999285, 0.999999642, 1.059999943, 1.059623122, 0.969823599}, + {8.066667, 0.999999285, 0.999999642, 1.059999943, 1.059623957, 0.969824076}, + {8.070833, 0.999999285, 0.999999642, 1.059999943, 1.059624791, 0.969824493}, + {8.075, 0.999999285, 0.999999642, 1.059999943, 1.059625745, 0.96982497}, + {8.079167, 0.999999225, 0.999999642, 1.059999943, 1.059626579, 0.969825447}, + {8.083333, 0.999999225, 0.999999642, 1.059999943, 1.059627414, 0.969825864}, + {8.0875, 0.999999225, 0.999999642, 1.059999943, 1.059628367, 0.969826341}, + {8.091667, 0.999999225, 0.999999642, 1.059999943, 1.059629202, 0.969826758}, + {8.095833, 0.999999225, 0.999999642, 1.059999943, 1.059630036, 0.969827235}, + {8.1, 0.999999225, 0.999999642, 1.059999943, 1.05963099, 0.969827652}, + {8.104167, 0.999999225, 0.999999642, 1.059999943, 1.059631824, 0.969828129}, + {8.108333, 0.999999225, 0.999999642, 1.059999943, 1.059632659, 0.969828546}, + {8.1125, 0.999999225, 0.999999642, 1.059999943, 1.059633493, 0.969829023}, + {8.116667, 0.999999225, 0.999999642, 1.059999943, 1.059634328, 0.96982944}, + {8.120833, 0.999999225, 0.999999642, 1.059999943, 1.059635162, 0.969829857}, + {8.125, 0.999999225, 0.999999642, 1.059999943, 1.059636116, 0.969830334}, + {8.129167, 0.999999225, 0.999999642, 1.059999943, 1.05963695, 0.969830751}, + {8.133333, 0.999999225, 0.999999642, 1.059999943, 1.059637785, 0.969831169}, + {8.1375, 0.999999225, 0.999999642, 1.059999943, 1.059638619, 0.969831645}, + {8.141667, 0.999999225, 0.999999642, 1.059999943, 1.059639454, 0.969832063}, + {8.145833, 0.999999225, 0.999999642, 1.059999943, 1.059640288, 0.96983248}, + {8.15, 0.999999225, 0.999999642, 1.059999943, 1.059641123, 0.969832897}, + {8.154167, 0.999999285, 0.999999642, 1.059999943, 1.059641957, 0.969833374}, + {8.158333, 0.999999285, 0.999999642, 1.059999943, 1.059642792, 0.969833791}, + {8.1625, 0.999999285, 0.999999642, 1.059999943, 1.059643626, 0.969834208}, + {8.166667, 0.999999285, 0.999999642, 1.059999943, 1.059644461, 0.969834626}, + {8.170833, 0.999999285, 0.999999702, 1.059999943, 1.059645295, 0.969835043}, + {8.175, 0.999999285, 0.999999702, 1.059999943, 1.05964613, 0.96983546}, + {8.179167, 0.999999285, 0.999999702, 1.059999943, 1.059646964, 0.969835877}, + {8.183333, 0.999999285, 0.999999702, 1.059999943, 1.059647799, 0.969836354}, + {8.1875, 0.999999285, 0.999999702, 1.059999943, 1.059648633, 0.969836771}, + {8.191667, 0.999999285, 0.999999702, 1.059999943, 1.059649467, 0.969837189}, + {8.195833, 0.999999285, 0.999999702, 1.059999943, 1.059650302, 0.969837606}, + {8.2, 0.999999285, 0.999999702, 1.059999943, 1.059651017, 0.969838023}, + {8.204167, 0.999999285, 0.999999702, 1.059999943, 1.059651852, 0.96983844}, + {8.208333, 0.999999285, 0.999999702, 1.059999943, 1.059652686, 0.969838858}, + {8.2125, 0.999999285, 0.999999702, 1.059999943, 1.059653521, 0.969839275}, + {8.216667, 0.999999285, 0.999999702, 1.059999943, 1.059654355, 0.969839692}, + {8.220833, 0.999999344, 0.999999702, 1.059999943, 1.05965519, 0.969840109}, + {8.225, 0.999999344, 0.999999702, 1.059999943, 1.059655905, 0.969840527}, + {8.229167, 0.999999344, 0.999999702, 1.059999943, 1.059656739, 0.969840884}, + {8.233333, 0.999999344, 0.999999702, 1.059999943, 1.059657574, 0.969841301}, + {8.2375, 0.999999344, 0.999999702, 1.059999943, 1.059658408, 0.969841719}, + {8.241667, 0.999999344, 0.999999702, 1.059999943, 1.059659123, 0.969842136}, + {8.245833, 0.999999344, 0.999999702, 1.059999943, 1.059659958, 0.969842553}, + {8.25, 0.999999344, 0.999999702, 1.059999943, 1.059660792, 0.96984297}, + {8.254167, 0.999999344, 0.999999702, 1.059999943, 1.059661508, 0.969843388}, + {8.258333, 0.999999344, 0.999999702, 1.059999943, 1.059662342, 0.969843745}, + {8.2625, 0.999999344, 0.999999702, 1.059999943, 1.059663177, 0.969844162}, + {8.266667, 0.999999344, 0.999999702, 1.059999943, 1.059663892, 0.96984458}, + {8.270833, 0.999999404, 0.999999702, 1.059999943, 1.059664726, 0.969844997}, + {8.275, 0.999999404, 0.999999762, 1.059999943, 1.059665561, 0.969845355}, + {8.279167, 0.999999404, 0.999999762, 1.059999943, 1.059666276, 0.969845772}, + {8.283333, 0.999999404, 0.999999762, 1.059999943, 1.05966711, 0.969846189}, + {8.2875, 0.999999404, 0.999999762, 1.059999943, 1.059667826, 0.969846606}, + {8.291667, 0.999999404, 0.999999762, 1.059999943, 1.05966866, 0.969846964}, + {8.295833, 0.999999404, 0.999999762, 1.059999943, 1.059669495, 0.969847381}, + {8.3, 0.999999404, 0.999999762, 1.059999943, 1.05967021, 0.969847798}, + {8.304167, 0.999999404, 0.999999762, 1.059999943, 1.059671044, 0.969848156}, + {8.308333, 0.999999404, 0.999999762, 1.059999943, 1.05967176, 0.969848573}, + {8.3125, 0.999999404, 0.999999762, 1.059999943, 1.059672594, 0.969848931}, + {8.316667, 0.999999404, 0.999999762, 1.059999943, 1.059673309, 0.969849348}, + {8.320833, 0.999999404, 0.999999762, 1.059999943, 1.059674144, 0.969849765}, + {8.325, 0.999999464, 0.999999762, 1.059999943, 1.059674859, 0.969850123}, + {8.329167, 0.999999464, 0.999999762, 1.059999943, 1.059675574, 0.96985054}, + {8.333333, 0.999999464, 0.999999762, 1.059999943, 1.059676409, 0.969850898}, + {8.3375, 0.999999464, 0.999999762, 1.059999943, 1.059677124, 0.969851315}, + {8.341667, 0.999999464, 0.999999762, 1.059999943, 1.059677958, 0.969851673}, + {8.345833, 0.999999464, 0.999999762, 1.059999943, 1.059678674, 0.96985209}, + {8.35, 0.999999464, 0.999999762, 1.059999943, 1.059679389, 0.969852448}, + {8.354167, 0.999999464, 0.999999762, 1.059999943, 1.059680223, 0.969852865}, + {8.358333, 0.999999464, 0.999999762, 1.059999943, 1.059680939, 0.969853222}, + {8.3625, 0.999999464, 0.999999762, 1.059999943, 1.059681654, 0.96985358}, + {8.366667, 0.999999464, 0.999999762, 1.059999943, 1.059682488, 0.969853997}, + {8.370833, 0.999999464, 0.999999762, 1.059999943, 1.059683204, 0.969854355}, + {8.375, 0.999999464, 0.999999762, 1.059999943, 1.059683919, 0.969854712}, + {8.379167, 0.999999464, 0.999999762, 1.059999943, 1.059684753, 0.96985513}, + {8.383333, 0.999999464, 0.999999762, 1.059999943, 1.059685469, 0.969855487}, + {8.3875, 0.999999464, 0.999999762, 1.059999943, 1.059686184, 0.969855845}, + {8.391667, 0.999999464, 0.999999762, 1.059999943, 1.059686899, 0.969856262}, + {8.395833, 0.999999464, 0.999999762, 1.059999943, 1.059687614, 0.96985662}, + {8.4, 0.999999464, 0.999999762, 1.059999943, 1.059688449, 0.969856977}, + {8.404167, 0.999999464, 0.999999762, 1.059999943, 1.059689164, 0.969857335}, + {8.408333, 0.999999464, 0.999999762, 1.059999943, 1.059689879, 0.969857752}, + {8.4125, 0.999999464, 0.999999762, 1.059999943, 1.059690595, 0.96985811}, + {8.416667, 0.999999464, 0.999999762, 1.059999943, 1.05969131, 0.969858468}, + {8.420833, 0.999999464, 0.999999762, 1.059999943, 1.059692025, 0.969858825}, + {8.425, 0.999999464, 0.999999762, 1.059999943, 1.05969274, 0.969859183}, + {8.429167, 0.999999464, 0.999999762, 1.059999943, 1.059693456, 0.96985954}, + {8.433333, 0.999999464, 0.999999762, 1.059999943, 1.059694171, 0.969859898}, + {8.4375, 0.999999464, 0.999999762, 1.059999943, 1.059694886, 0.969860256}, + {8.441667, 0.999999464, 0.999999762, 1.059999943, 1.059695601, 0.969860613}, + {8.445833, 0.999999464, 0.999999762, 1.059999943, 1.059696317, 0.969860971}, + {8.45, 0.999999464, 0.999999762, 1.059999943, 1.059697032, 0.969861329}, + {8.454167, 0.999999464, 0.999999762, 1.059999943, 1.059697747, 0.969861686}, + {8.458333, 0.999999464, 0.999999762, 1.059999943, 1.059698462, 0.969862044}, + {8.4625, 0.999999464, 0.999999762, 1.059999943, 1.059699178, 0.969862401}, + {8.466667, 0.999999464, 0.999999762, 1.059999943, 1.059699893, 0.969862759}, + {8.470833, 0.999999464, 0.999999762, 1.059999943, 1.059700608, 0.969863117}, + {8.475, 0.999999464, 0.999999762, 1.059999943, 1.059701324, 0.969863474}, + {8.479167, 0.999999464, 0.999999762, 1.059999943, 1.059702039, 0.969863832}, + {8.483333, 0.999999464, 0.999999762, 1.059999943, 1.059702754, 0.96986419}, + {8.4875, 0.999999464, 0.999999762, 1.059999943, 1.059703469, 0.969864547}, + {8.491667, 0.999999464, 0.999999762, 1.059999943, 1.059704065, 0.969864845}, + {8.495833, 0.999999464, 0.999999762, 1.059999943, 1.059704781, 0.969865203}, + {8.5, 0.999999464, 0.999999762, 1.059999943, 1.059705496, 0.969865561}, + {8.504167, 0.999999464, 0.999999762, 1.059999943, 1.059706211, 0.969865918}, + {8.508333, 0.999999464, 0.999999762, 1.059999943, 1.059706926, 0.969866216}, + {8.5125, 0.999999464, 0.999999762, 1.059999943, 1.059707522, 0.969866574}, + {8.516667, 0.999999464, 0.999999762, 1.059999943, 1.059708238, 0.969866931}, + {8.520833, 0.999999464, 0.999999762, 1.059999943, 1.059708953, 0.969867229}, + {8.525, 0.999999464, 0.999999762, 1.059999943, 1.059709549, 0.969867587}, + {8.529167, 0.999999464, 0.999999762, 1.059999943, 1.059710264, 0.969867945}, + {8.533333, 0.999999464, 0.999999762, 1.059999943, 1.059710979, 0.969868243}, + {8.5375, 0.999999464, 0.999999762, 1.059999943, 1.059711576, 0.9698686}, + {8.541667, 0.999999464, 0.999999762, 1.059999943, 1.059712291, 0.969868958}, + {8.545833, 0.999999464, 0.999999762, 1.059999943, 1.059713006, 0.969869256}, + {8.55, 0.999999464, 0.999999762, 1.059999943, 1.059713602, 0.969869614}, + {8.554167, 0.999999464, 0.999999762, 1.059999943, 1.059714317, 0.969869912}, + {8.558333, 0.999999464, 0.999999762, 1.059999943, 1.059715033, 0.969870269}, + {8.5625, 0.999999464, 0.999999762, 1.059999943, 1.059715629, 0.969870567}, + {8.566667, 0.999999464, 0.999999762, 1.059999943, 1.059716344, 0.969870925}, + {8.570833, 0.999999464, 0.999999762, 1.059999943, 1.05971694, 0.969871223}, + {8.575, 0.999999464, 0.999999762, 1.059999943, 1.059717655, 0.969871581}, + {8.579167, 0.999999464, 0.999999762, 1.059999943, 1.059718251, 0.969871879}, + {8.583333, 0.999999464, 0.999999762, 1.059999943, 1.059718966, 0.969872236}, + {8.5875, 0.999999464, 0.999999762, 1.059999943, 1.059719563, 0.969872534}, + {8.591667, 0.999999464, 0.999999762, 1.059999943, 1.059720278, 0.969872832}, + {8.595833, 0.999999464, 0.999999762, 1.059999943, 1.059720874, 0.96987319}, + {8.6, 0.999999464, 0.999999762, 1.059999943, 1.059721589, 0.969873488}, + {8.604167, 0.999999464, 0.999999762, 1.059999943, 1.059722185, 0.969873846}, + {8.608333, 0.999999464, 0.999999762, 1.059999943, 1.059722781, 0.969874144}, + {8.6125, 0.999999464, 0.999999762, 1.059999943, 1.059723496, 0.969874442}, + {8.616667, 0.999999464, 0.999999762, 1.059999943, 1.059724092, 0.969874799}, + {8.620833, 0.999999464, 0.999999762, 1.059999943, 1.059724808, 0.969875097}, + {8.625, 0.999999464, 0.999999762, 1.059999943, 1.059725404, 0.969875395}, + {8.629167, 0.999999464, 0.999999762, 1.059999943, 1.059726, 0.969875693}, + {8.633333, 0.999999464, 0.999999762, 1.059999943, 1.059726715, 0.969876051}, + {8.6375, 0.999999464, 0.999999762, 1.059999943, 1.059727311, 0.969876349}, + {8.641667, 0.999999464, 0.999999762, 1.059999943, 1.059727907, 0.969876647}, + {8.645833, 0.999999464, 0.999999762, 1.059999943, 1.059728622, 0.969876945}, + {8.65, 0.999999464, 0.999999762, 1.059999943, 1.059729218, 0.969877303}, + {8.654167, 0.999999464, 0.999999762, 1.059999943, 1.059729815, 0.969877601}, + {8.658333, 0.999999464, 0.999999762, 1.059999943, 1.05973053, 0.969877899}, + {8.6625, 0.999999464, 0.999999762, 1.059999943, 1.059731126, 0.969878197}, + {8.666667, 0.999999464, 0.999999762, 1.059999943, 1.059731722, 0.969878495}, + {8.670833, 0.999999464, 0.999999762, 1.059999943, 1.059732318, 0.969878793}, + {8.675, 0.999999464, 0.999999762, 1.059999943, 1.059733033, 0.969879091}, + {8.679167, 0.999999464, 0.999999762, 1.059999943, 1.059733629, 0.969879448}, + {8.683333, 0.999999464, 0.999999762, 1.059999943, 1.059734225, 0.969879746}, + {8.6875, 0.999999464, 0.999999762, 1.059999943, 1.059734821, 0.969880044}, + {8.691667, 0.999999464, 0.999999762, 1.059999943, 1.059735417, 0.969880342}, + {8.695833, 0.999999464, 0.999999762, 1.059999943, 1.059736013, 0.969880641}, + {8.7, 0.999999464, 0.999999762, 1.059999943, 1.059736729, 0.969880939}, + {8.704167, 0.999999464, 0.999999762, 1.059999943, 1.059737325, 0.969881237}, + {8.708333, 0.999999523, 0.999999821, 1.059999943, 1.059737921, 0.969881535}, + {8.7125, 0.999999523, 0.999999821, 1.059999943, 1.059738517, 0.969881833}, + {8.716667, 0.999999523, 0.999999821, 1.059999943, 1.059739113, 0.969882131}, + {8.720833, 0.999999523, 0.999999821, 1.059999943, 1.059739709, 0.969882429}, + {8.725, 0.999999523, 0.999999821, 1.059999943, 1.059740305, 0.969882727}, + {8.729167, 0.999999523, 0.999999821, 1.059999943, 1.059740901, 0.969883025}, + {8.733333, 0.999999523, 0.999999821, 1.059999943, 1.059741616, 0.969883323}, + {8.7375, 0.999999523, 0.999999821, 1.059999943, 1.059742212, 0.969883621}, + {8.741667, 0.999999523, 0.999999821, 1.059999943, 1.059742808, 0.969883919}, + {8.745833, 0.999999523, 0.999999821, 1.059999943, 1.059743404, 0.969884217}, + {8.75, 0.999999523, 0.999999821, 1.059999943, 1.059744, 0.969884515}, + {8.754167, 0.999999523, 0.999999821, 1.059999943, 1.059744596, 0.969884813}, + {8.758333, 0.999999523, 0.999999821, 1.059999943, 1.059745193, 0.969885051}, + {8.7625, 0.999999523, 0.999999821, 1.059999943, 1.059745789, 0.969885349}, + {8.766667, 0.999999523, 0.999999821, 1.059999943, 1.059746385, 0.969885647}, + {8.770833, 0.999999523, 0.999999821, 1.059999943, 1.059746981, 0.969885945}, + {8.775, 0.999999523, 0.999999821, 1.059999943, 1.059747577, 0.969886243}, + {8.779167, 0.999999523, 0.999999821, 1.059999943, 1.059748173, 0.969886541}, + {8.783333, 0.999999523, 0.999999821, 1.059999943, 1.059748769, 0.96988678}, + {8.7875, 0.999999523, 0.999999821, 1.059999943, 1.059749246, 0.969887078}, + {8.791667, 0.999999523, 0.999999821, 1.059999943, 1.059749842, 0.969887376}, + {8.795833, 0.999999583, 0.999999821, 1.059999943, 1.059750438, 0.969887674}, + {8.8, 0.999999583, 0.999999821, 1.059999943, 1.059751034, 0.969887972}, + {8.804167, 0.999999583, 0.999999821, 1.059999943, 1.05975163, 0.96988821}, + {8.808333, 0.999999583, 0.999999821, 1.059999943, 1.059752226, 0.969888508}, + {8.8125, 0.999999583, 0.999999821, 1.059999943, 1.059752822, 0.969888806}, + {8.816667, 0.999999583, 0.999999821, 1.059999943, 1.059753418, 0.969889104}, + {8.820833, 0.999999583, 0.999999821, 1.059999943, 1.059753895, 0.969889343}, + {8.825, 0.999999583, 0.999999821, 1.059999943, 1.059754491, 0.969889641}, + {8.829167, 0.999999583, 0.999999821, 1.059999943, 1.059755087, 0.969889939}, + {8.833333, 0.999999583, 0.999999821, 1.059999943, 1.059755683, 0.969890177}, + {8.8375, 0.999999583, 0.999999821, 1.059999943, 1.059756279, 0.969890475}, + {8.841667, 0.999999583, 0.999999821, 1.059999943, 1.059756875, 0.969890773}, + {8.845833, 0.999999583, 0.999999821, 1.059999943, 1.059757352, 0.969891012}, + {8.85, 0.999999583, 0.999999821, 1.059999943, 1.059757948, 0.96989131}, + {8.854167, 0.999999583, 0.999999821, 1.059999943, 1.059758544, 0.969891608}, + {8.858333, 0.999999583, 0.999999821, 1.059999943, 1.05975914, 0.969891846}, + {8.8625, 0.999999583, 0.999999821, 1.059999943, 1.059759617, 0.969892144}, + {8.866667, 0.999999583, 0.999999821, 1.059999943, 1.059760213, 0.969892383}, + {8.870833, 0.999999583, 0.999999821, 1.059999943, 1.059760809, 0.969892681}, + {8.875, 0.999999583, 0.999999821, 1.059999943, 1.059761286, 0.969892919}, + {8.879167, 0.999999583, 0.999999821, 1.059999943, 1.059761882, 0.969893217}, + {8.883333, 0.999999583, 0.999999821, 1.059999943, 1.059762478, 0.969893456}, + {8.8875, 0.999999583, 0.999999821, 1.059999943, 1.059762955, 0.969893754}, + {8.891667, 0.999999583, 0.999999821, 1.059999943, 1.059763551, 0.969893992}, + {8.895833, 0.999999583, 0.999999821, 1.059999943, 1.059764147, 0.96989429}, + {8.9, 0.999999583, 0.999999821, 1.059999943, 1.059764624, 0.969894528}, + {8.904167, 0.999999583, 0.999999821, 1.059999943, 1.05976522, 0.969894826}, + {8.908333, 0.999999583, 0.999999821, 1.059999943, 1.059765697, 0.969895065}, + {8.9125, 0.999999583, 0.999999821, 1.059999943, 1.059766293, 0.969895363}, + {8.916667, 0.999999583, 0.999999821, 1.059999943, 1.059766889, 0.969895601}, + {8.920833, 0.999999583, 0.999999821, 1.059999943, 1.059767365, 0.96989584}, + {8.925, 0.999999583, 0.999999821, 1.059999943, 1.059767962, 0.969896138}, + {8.929167, 0.999999583, 0.999999821, 1.059999943, 1.059768438, 0.969896376}, + {8.933333, 0.999999583, 0.999999821, 1.059999943, 1.059769034, 0.969896674}, + {8.9375, 0.999999583, 0.999999821, 1.059999943, 1.059769511, 0.969896913}, + {8.941667, 0.999999583, 0.999999821, 1.059999943, 1.059770107, 0.969897151}, + {8.945833, 0.999999583, 0.999999821, 1.059999943, 1.059770584, 0.969897449}, + {8.95, 0.999999583, 0.999999821, 1.059999943, 1.05977118, 0.969897687}, + {8.954167, 0.999999583, 0.999999821, 1.059999943, 1.059771657, 0.969897926}, + {8.958333, 0.999999583, 0.999999821, 1.059999943, 1.059772253, 0.969898224}, + {8.9625, 0.999999583, 0.999999821, 1.059999943, 1.05977273, 0.969898462}, + {8.966667, 0.999999583, 0.999999821, 1.059999943, 1.059773326, 0.969898701}, + {8.970833, 0.999999583, 0.999999821, 1.059999943, 1.059773803, 0.969898939}, + {8.975, 0.999999583, 0.999999821, 1.059999943, 1.05977428, 0.969899237}, + {8.979167, 0.999999583, 0.999999821, 1.059999943, 1.059774876, 0.969899476}, + {8.983333, 0.999999583, 0.999999821, 1.059999943, 1.059775352, 0.969899714}, + {8.9875, 0.999999583, 0.999999821, 1.059999943, 1.059775949, 0.969899952}, + {8.991667, 0.999999583, 0.999999821, 1.059999943, 1.059776425, 0.969900191}, + {8.995833, 0.999999583, 0.999999821, 1.059999943, 1.059776902, 0.969900429}, + {9, 0.999999583, 0.999999821, 1.059999943, 1.059777498, 0.969900727}, + {9.004167, 0.999999583, 0.999999821, 1.059999943, 1.059777975, 0.969900966}, + {9.008333, 0.999999583, 0.999999821, 1.059999943, 1.059778452, 0.969901204}, + {9.0125, 0.999999583, 0.999999821, 1.059999943, 1.059779048, 0.969901443}, + {9.016667, 0.999999583, 0.999999821, 1.059999943, 1.059779525, 0.969901681}, + {9.020833, 0.999999583, 0.999999821, 1.059999943, 1.059780002, 0.969901919}, + {9.025, 0.999999583, 0.999999821, 1.059999943, 1.059780598, 0.969902158}, + {9.029167, 0.999999583, 0.999999821, 1.059999943, 1.059781075, 0.969902396}, + {9.033333, 0.999999583, 0.999999821, 1.059999943, 1.059781551, 0.969902635}, + {9.0375, 0.999999583, 0.999999821, 1.059999943, 1.059782028, 0.969902873}, + {9.041667, 0.999999583, 0.999999821, 1.059999943, 1.059782505, 0.969903171}, + {9.045833, 0.999999583, 0.999999821, 1.059999943, 1.059783101, 0.969903409}, + {9.05, 0.999999583, 0.999999821, 1.059999943, 1.059783578, 0.969903648}, + {9.054167, 0.999999583, 0.999999821, 1.059999943, 1.059784055, 0.969903886}, + {9.058333, 0.999999583, 0.999999821, 1.059999943, 1.059784532, 0.969904125}, + {9.0625, 0.999999583, 0.999999821, 1.059999943, 1.059785128, 0.969904363}, + {9.066667, 0.999999583, 0.999999821, 1.059999943, 1.059785604, 0.969904542}, + {9.070833, 0.999999583, 0.999999821, 1.059999943, 1.059786081, 0.96990478}, + {9.075, 0.999999583, 0.999999821, 1.059999943, 1.059786558, 0.969905019}, + {9.079167, 0.999999583, 0.999999821, 1.059999943, 1.059787035, 0.969905257}, + {9.083333, 0.999999583, 0.999999821, 1.059999943, 1.059787512, 0.969905496}, + {9.0875, 0.999999583, 0.999999821, 1.059999943, 1.059787989, 0.969905734}, + {9.091667, 0.999999583, 0.999999821, 1.059999943, 1.059788466, 0.969905972}, + {9.095833, 0.999999583, 0.999999821, 1.059999943, 1.059789062, 0.969906211}, + {9.1, 0.999999583, 0.999999821, 1.059999943, 1.059789538, 0.969906449}, + {9.104167, 0.999999583, 0.999999821, 1.059999943, 1.059790015, 0.969906688}, + {9.108333, 0.999999583, 0.999999821, 1.059999943, 1.059790492, 0.969906926}, + {9.1125, 0.999999583, 0.999999821, 1.059999943, 1.059790969, 0.969907105}, + {9.116667, 0.999999583, 0.999999821, 1.059999943, 1.059791446, 0.969907343}, + {9.120833, 0.999999583, 0.999999821, 1.059999943, 1.059791923, 0.969907582}, + {9.125, 0.999999583, 0.999999821, 1.059999943, 1.059792399, 0.96990782}, + {9.129167, 0.999999583, 0.999999821, 1.059999943, 1.059792876, 0.969908059}, + {9.133333, 0.999999583, 0.999999821, 1.059999943, 1.059793353, 0.969908297}, + {9.1375, 0.999999583, 0.999999821, 1.059999943, 1.05979383, 0.969908476}, + {9.141667, 0.999999583, 0.999999821, 1.059999943, 1.059794307, 0.969908714}, + {9.145833, 0.999999583, 0.999999821, 1.059999943, 1.059794784, 0.969908953}, + {9.15, 0.999999583, 0.999999821, 1.059999943, 1.05979526, 0.969909191}, + {9.154167, 0.999999583, 0.999999821, 1.059999943, 1.059795737, 0.96990937}, + {9.158333, 0.999999583, 0.999999821, 1.059999943, 1.059796214, 0.969909608}, + {9.1625, 0.999999583, 0.999999821, 1.059999943, 1.059796691, 0.969909847}, + {9.166667, 0.999999642, 0.999999821, 1.059999943, 1.059797168, 0.969910085}, + {9.170833, 0.999999642, 0.999999821, 1.059999943, 1.059797645, 0.969910264}, + {9.175, 0.999999642, 0.999999821, 1.059999943, 1.059798121, 0.969910502}, + {9.179167, 0.999999642, 0.999999821, 1.059999943, 1.059798598, 0.969910741}, + {9.183333, 0.999999642, 0.999999881, 1.059999943, 1.059799075, 0.96991092}, + {9.1875, 0.999999642, 0.999999881, 1.059999943, 1.059799433, 0.969911158}, + {9.191667, 0.999999642, 0.999999881, 1.059999943, 1.05979991, 0.969911397}, + {9.195833, 0.999999642, 0.999999881, 1.059999943, 1.059800386, 0.969911575}, + {9.2, 0.999999642, 0.999999881, 1.059999943, 1.059800863, 0.969911814}, + {9.204167, 0.999999642, 0.999999881, 1.059999943, 1.05980134, 0.969912052}, + {9.208333, 0.999999642, 0.999999881, 1.059999943, 1.059801817, 0.969912231}, + {9.2125, 0.999999642, 0.999999881, 1.059999943, 1.059802294, 0.969912469}, + {9.216667, 0.999999642, 0.999999881, 1.059999943, 1.059802771, 0.969912708}, + {9.220833, 0.999999642, 0.999999881, 1.059999943, 1.059803128, 0.969912887}, + {9.225, 0.999999642, 0.999999881, 1.059999943, 1.059803605, 0.969913125}, + {9.229167, 0.999999642, 0.999999881, 1.059999943, 1.059804082, 0.969913304}, + {9.233333, 0.999999642, 0.999999881, 1.059999943, 1.059804559, 0.969913542}, + {9.2375, 0.999999642, 0.999999881, 1.059999943, 1.059805036, 0.969913781}, + {9.241667, 0.999999642, 0.999999881, 1.059999943, 1.059805393, 0.96991396}, + {9.245833, 0.999999642, 0.999999881, 1.059999943, 1.05980587, 0.969914198}, + {9.25, 0.999999642, 0.999999881, 1.059999943, 1.059806347, 0.969914377}, + {9.254167, 0.999999642, 0.999999881, 1.059999943, 1.059806824, 0.969914615}, + {9.258333, 0.999999642, 0.999999881, 1.059999943, 1.059807181, 0.969914794}, + {9.2625, 0.999999642, 0.999999881, 1.059999943, 1.059807658, 0.969915032}, + {9.266667, 0.999999642, 0.999999881, 1.059999943, 1.059808135, 0.969915211}, + {9.270833, 0.999999642, 0.999999881, 1.059999943, 1.059808612, 0.96991545}, + {9.275, 0.999999642, 0.999999881, 1.059999943, 1.05980897, 0.969915628}, + {9.279167, 0.999999642, 0.999999881, 1.059999943, 1.059809446, 0.969915867}, + {9.283333, 0.999999642, 0.999999881, 1.059999943, 1.059809923, 0.969916046}, + {9.2875, 0.999999642, 0.999999881, 1.059999943, 1.059810281, 0.969916284}, + {9.291667, 0.999999642, 0.999999881, 1.059999943, 1.059810758, 0.969916463}, + {9.295833, 0.999999642, 0.999999881, 1.059999943, 1.059811234, 0.969916701}, + {9.3, 0.999999642, 0.999999881, 1.059999943, 1.059811592, 0.96991688}, + {9.304167, 0.999999642, 0.999999881, 1.059999943, 1.059812069, 0.969917119}, + {9.308333, 0.999999642, 0.999999881, 1.059999943, 1.059812546, 0.969917297}, + {9.3125, 0.999999642, 0.999999881, 1.059999943, 1.059812903, 0.969917536}, + {9.316667, 0.999999642, 0.999999881, 1.059999943, 1.05981338, 0.969917715}, + {9.320833, 0.999999642, 0.999999881, 1.059999943, 1.059813857, 0.969917893}, + {9.325, 0.999999702, 0.999999881, 1.059999943, 1.059814215, 0.969918132}, + {9.329167, 0.999999702, 0.999999881, 1.059999943, 1.059814692, 0.969918311}, + {9.333333, 0.999999702, 0.999999881, 1.059999943, 1.059815168, 0.969918489}, + {9.3375, 0.999999702, 0.999999881, 1.059999943, 1.059815526, 0.969918728}, + {9.341667, 0.999999702, 0.999999881, 1.059999943, 1.059816003, 0.969918907}, + {9.345833, 0.999999702, 0.999999881, 1.059999943, 1.05981636, 0.969919145}, + {9.35, 0.999999702, 0.999999881, 1.059999943, 1.059816837, 0.969919324}, + {9.354167, 0.999999702, 0.999999881, 1.059999943, 1.059817195, 0.969919503}, + {9.358333, 0.999999702, 0.999999881, 1.059999943, 1.059817672, 0.969919741}, + {9.3625, 0.999999702, 0.999999881, 1.059999943, 1.059818029, 0.96991992}, + {9.366667, 0.999999702, 0.999999881, 1.059999943, 1.059818506, 0.969920099}, + {9.370833, 0.999999702, 0.999999881, 1.059999943, 1.059818983, 0.969920278}, + {9.375, 0.999999702, 0.999999881, 1.059999943, 1.059819341, 0.969920516}, + {9.379167, 0.999999702, 0.999999881, 1.059999943, 1.059819818, 0.969920695}, + {9.383333, 0.999999702, 0.999999881, 1.059999943, 1.059820175, 0.969920874}, + {9.3875, 0.999999702, 0.999999881, 1.059999943, 1.059820652, 0.969921112}, + {9.391667, 0.999999702, 0.999999881, 1.059999943, 1.05982101, 0.969921291}, + {9.395833, 0.999999702, 0.999999881, 1.059999943, 1.059821367, 0.96992147}, + {9.4, 0.999999702, 0.999999881, 1.059999943, 1.059821844, 0.969921649}, + {9.404167, 0.999999702, 0.999999881, 1.059999943, 1.059822202, 0.969921827}, + {9.408333, 0.999999702, 0.999999881, 1.059999943, 1.059822679, 0.969922066}, + {9.4125, 0.999999702, 0.999999881, 1.059999943, 1.059823036, 0.969922245}, + {9.416667, 0.999999702, 0.999999881, 1.059999943, 1.059823513, 0.969922423}, + {9.420833, 0.999999702, 0.999999881, 1.059999943, 1.059823871, 0.969922602}, + {9.425, 0.999999702, 0.999999881, 1.059999943, 1.059824228, 0.969922781}, + {9.429167, 0.999999702, 0.999999881, 1.059999943, 1.059824705, 0.969923019}, + {9.433333, 0.999999702, 0.999999881, 1.059999943, 1.059825063, 0.969923198}, + {9.4375, 0.999999702, 0.999999881, 1.059999943, 1.05982554, 0.969923377}, + {9.441667, 0.999999702, 0.999999881, 1.059999943, 1.059825897, 0.969923556}, + {9.445833, 0.999999702, 0.999999881, 1.059999943, 1.059826255, 0.969923735}, + {9.45, 0.999999702, 0.999999881, 1.059999943, 1.059826732, 0.969923913}, + {9.454167, 0.999999702, 0.999999881, 1.059999943, 1.059827089, 0.969924092}, + {9.458333, 0.999999702, 0.999999881, 1.059999943, 1.059827447, 0.969924271}, + {9.4625, 0.999999702, 0.999999881, 1.059999943, 1.059827924, 0.96992451}, + {9.466667, 0.999999702, 0.999999881, 1.059999943, 1.059828281, 0.969924688}, + {9.470833, 0.999999702, 0.999999881, 1.059999943, 1.059828639, 0.969924867}, + {9.475, 0.999999702, 0.999999881, 1.059999943, 1.059829116, 0.969925046}, + {9.479167, 0.999999702, 0.999999881, 1.059999943, 1.059829474, 0.969925225}, + {9.483333, 0.999999702, 0.999999881, 1.059999943, 1.059829831, 0.969925404}, + {9.4875, 0.999999702, 0.999999881, 1.059999943, 1.059830308, 0.969925582}, + {9.491667, 0.999999702, 0.999999881, 1.059999943, 1.059830666, 0.969925761}, + {9.495833, 0.999999702, 0.999999881, 1.059999943, 1.059831023, 0.96992594}, + {9.5, 0.999999702, 0.999999881, 1.059999943, 1.059831381, 0.969926119}, + {9.504167, 0.999999702, 0.999999881, 1.059999943, 1.059831858, 0.969926298}, + {9.508333, 0.999999702, 0.999999881, 1.059999943, 1.059832215, 0.969926476}, + {9.5125, 0.999999702, 0.999999881, 1.059999943, 1.059832573, 0.969926655}, + {9.516667, 0.999999702, 0.999999881, 1.059999943, 1.059832931, 0.969926834}, + {9.520833, 0.999999702, 0.999999881, 1.059999943, 1.059833407, 0.969927013}, + {9.525, 0.999999702, 0.999999881, 1.059999943, 1.059833765, 0.969927192}, + {9.529167, 0.999999702, 0.999999881, 1.059999943, 1.059834123, 0.969927371}, + {9.533333, 0.999999702, 0.999999881, 1.059999943, 1.05983448, 0.969927549}, + {9.5375, 0.999999702, 0.999999881, 1.059999943, 1.059834838, 0.969927728}, + {9.541667, 0.999999702, 0.999999881, 1.059999943, 1.059835315, 0.969927907}, + {9.545833, 0.999999702, 0.999999881, 1.059999943, 1.059835672, 0.969928086}, + {9.55, 0.999999702, 0.999999881, 1.059999943, 1.05983603, 0.969928265}, + {9.554167, 0.999999702, 0.999999881, 1.059999943, 1.059836388, 0.969928384}, + {9.558333, 0.999999702, 0.999999881, 1.059999943, 1.059836745, 0.969928563}, + {9.5625, 0.999999702, 0.999999881, 1.059999943, 1.059837103, 0.969928741}, + {9.566667, 0.999999702, 0.999999881, 1.059999943, 1.059837461, 0.96992892}, + {9.570833, 0.999999702, 0.999999881, 1.059999943, 1.059837937, 0.969929099}, + {9.575, 0.999999702, 0.999999881, 1.059999943, 1.059838295, 0.969929278}, + {9.579167, 0.999999702, 0.999999881, 1.059999943, 1.059838653, 0.969929457}, + {9.583333, 0.999999702, 0.999999881, 1.059999943, 1.05983901, 0.969929636}, + {9.5875, 0.999999702, 0.999999881, 1.059999943, 1.059839368, 0.969929755}, + {9.591667, 0.999999702, 0.999999881, 1.059999943, 1.059839725, 0.969929934}, + {9.595833, 0.999999702, 0.999999881, 1.059999943, 1.059840083, 0.969930112}, + {9.6, 0.999999702, 0.999999881, 1.059999943, 1.059840441, 0.969930291}, + {9.604167, 0.999999702, 0.999999881, 1.059999943, 1.059840798, 0.96993047}, + {9.608333, 0.999999702, 0.999999881, 1.059999943, 1.059841156, 0.969930649}, + {9.6125, 0.999999702, 0.999999881, 1.059999943, 1.059841514, 0.969930768}, + {9.616667, 0.999999702, 0.999999881, 1.059999943, 1.059841871, 0.969930947}, + {9.620833, 0.999999702, 0.999999881, 1.059999943, 1.059842229, 0.969931126}, + {9.625, 0.999999702, 0.999999881, 1.059999943, 1.059842587, 0.969931304}, + {9.629167, 0.999999702, 0.999999881, 1.059999943, 1.059842944, 0.969931424}, + {9.633333, 0.999999702, 0.999999881, 1.059999943, 1.059843421, 0.969931602}, + {9.6375, 0.999999702, 0.999999881, 1.059999943, 1.059843779, 0.969931781}, + {9.641667, 0.999999702, 0.999999881, 1.059999943, 1.059844136, 0.96993196}, + {9.645833, 0.999999702, 0.999999881, 1.059999943, 1.059844494, 0.969932139}, + {9.65, 0.999999702, 0.999999881, 1.059999943, 1.059844851, 0.969932258}, + {9.654167, 0.999999702, 0.999999881, 1.059999943, 1.05984509, 0.969932437}, + {9.658333, 0.999999702, 0.999999881, 1.059999943, 1.059845448, 0.969932616}, + {9.6625, 0.999999702, 0.999999881, 1.059999943, 1.059845805, 0.969932735}, + {9.666667, 0.999999702, 0.999999881, 1.059999943, 1.059846163, 0.969932914}, + {9.670833, 0.999999702, 0.999999881, 1.059999943, 1.05984652, 0.969933093}, + {9.675, 0.999999702, 0.999999881, 1.059999943, 1.059846878, 0.969933271}, + {9.679167, 0.999999702, 0.999999881, 1.059999943, 1.059847236, 0.969933391}, + {9.683333, 0.999999702, 0.999999881, 1.059999943, 1.059847593, 0.969933569}, + {9.6875, 0.999999702, 0.999999881, 1.059999943, 1.059847951, 0.969933748}, + {9.691667, 0.999999702, 0.999999881, 1.059999943, 1.059848309, 0.969933867}, + {9.695833, 0.999999702, 0.999999881, 1.059999943, 1.059848666, 0.969934046}, + {9.7, 0.999999702, 0.999999881, 1.059999943, 1.059849024, 0.969934225}, + {9.704167, 0.999999702, 0.999999881, 1.059999943, 1.059849381, 0.969934344}, + {9.708333, 0.999999702, 0.999999881, 1.059999943, 1.059849739, 0.969934523}, + {9.7125, 0.999999702, 0.999999881, 1.059999943, 1.059849977, 0.969934702}, + {9.716667, 0.999999702, 0.999999881, 1.059999943, 1.059850335, 0.969934821}, + {9.720833, 0.999999702, 0.999999881, 1.059999943, 1.059850693, 0.969935}, + {9.725, 0.999999702, 0.999999881, 1.059999943, 1.05985105, 0.969935119}, + {9.729167, 0.999999702, 0.999999881, 1.059999943, 1.059851408, 0.969935298}, + {9.733333, 0.999999702, 0.999999881, 1.059999943, 1.059851766, 0.969935477}, + {9.7375, 0.999999762, 0.999999881, 1.059999943, 1.059852123, 0.969935596}, + {9.741667, 0.999999762, 0.999999881, 1.059999943, 1.059852481, 0.969935775}, + {9.745833, 0.999999762, 0.999999881, 1.059999943, 1.059852719, 0.969935894}, + {9.75, 0.999999762, 0.999999881, 1.059999943, 1.059853077, 0.969936073}, + {9.754167, 0.999999762, 0.999999881, 1.059999943, 1.059853435, 0.969936252}, + {9.758333, 0.999999762, 0.999999881, 1.059999943, 1.059853792, 0.969936371}, + {9.7625, 0.999999762, 0.999999881, 1.059999943, 1.05985415, 0.96993655}, + {9.766667, 0.999999762, 0.999999881, 1.059999943, 1.059854388, 0.969936669}, + {9.770833, 0.999999762, 0.999999881, 1.059999943, 1.059854746, 0.969936848}, + {9.775, 0.999999762, 0.999999881, 1.059999943, 1.059855103, 0.969936967}, + {9.779167, 0.999999762, 0.999999881, 1.059999943, 1.059855461, 0.969937146}, + {9.783333, 0.999999762, 0.999999881, 1.059999943, 1.059855819, 0.969937325}, + {9.7875, 0.999999762, 0.999999881, 1.059999943, 1.059856057, 0.969937444}, + {9.791667, 0.999999762, 0.999999881, 1.059999943, 1.059856415, 0.969937623}, + {9.795833, 0.999999762, 0.999999881, 1.059999943, 1.059856772, 0.969937742}, + {9.8, 0.999999762, 0.999999881, 1.059999943, 1.05985713, 0.969937921}, + {9.804167, 0.999999762, 0.999999881, 1.059999943, 1.059857368, 0.96993804}, + {9.808333, 0.999999762, 0.999999881, 1.059999943, 1.059857726, 0.969938219}, + {9.8125, 0.999999762, 0.999999881, 1.059999943, 1.059858084, 0.969938338}, + {9.816667, 0.999999762, 0.999999881, 1.059999943, 1.059858441, 0.969938517}, + {9.820833, 0.999999762, 0.999999881, 1.059999943, 1.05985868, 0.969938636}, + {9.825, 0.999999762, 0.999999881, 1.059999943, 1.059859037, 0.969938755}, + {9.829167, 0.999999762, 0.999999881, 1.059999943, 1.059859395, 0.969938934}, + {9.833333, 0.999999762, 0.999999881, 1.059999943, 1.059859633, 0.969939053}, + {9.8375, 0.999999762, 0.999999881, 1.059999943, 1.059859991, 0.969939232}, + {9.841667, 0.999999762, 0.99999994, 1.059999943, 1.059860349, 0.969939351}, + {9.845833, 0.999999762, 0.99999994, 1.059999943, 1.059860587, 0.96993953}, + {9.85, 0.999999762, 0.99999994, 1.059999943, 1.059860945, 0.969939649}, + {9.854167, 0.999999762, 0.99999994, 1.059999943, 1.059861302, 0.969939828}, + {9.858333, 0.999999762, 0.99999994, 1.059999943, 1.059861541, 0.969939947}, + {9.8625, 0.999999762, 0.99999994, 1.059999943, 1.059861898, 0.969940066}, + {9.866667, 0.999999762, 0.99999994, 1.059999943, 1.059862256, 0.969940245}, + {9.870833, 0.999999762, 0.99999994, 1.059999943, 1.059862494, 0.969940364}, + {9.875, 0.999999762, 0.99999994, 1.059999943, 1.059862852, 0.969940543}, + {9.879167, 0.999999762, 0.99999994, 1.059999943, 1.05986321, 0.969940662}, + {9.883333, 0.999999762, 0.99999994, 1.059999943, 1.059863448, 0.969940782}, + {9.8875, 0.999999762, 0.99999994, 1.059999943, 1.059863806, 0.96994096}, + {9.891667, 0.999999762, 0.99999994, 1.059999943, 1.059864044, 0.96994108}, + {9.895833, 0.999999762, 0.99999994, 1.059999943, 1.059864402, 0.969941199}, + {9.9, 0.999999762, 0.99999994, 1.059999943, 1.059864759, 0.969941378}, + {9.904167, 0.999999762, 0.99999994, 1.059999943, 1.059864998, 0.969941497}, + {9.908333, 0.999999762, 0.99999994, 1.059999943, 1.059865355, 0.969941616}, + {9.9125, 0.999999762, 0.99999994, 1.059999943, 1.059865594, 0.969941795}, + {9.916667, 0.999999762, 0.99999994, 1.059999943, 1.059865952, 0.969941914}, + {9.920833, 0.999999762, 0.99999994, 1.059999943, 1.05986619, 0.969942033}, + {9.925, 0.999999762, 0.99999994, 1.059999943, 1.059866548, 0.969942212}, + {9.929167, 0.999999762, 0.99999994, 1.059999943, 1.059866905, 0.969942331}, + {9.933333, 0.999999762, 0.99999994, 1.059999943, 1.059867144, 0.969942451}, + {9.9375, 0.999999762, 0.99999994, 1.059999943, 1.059867501, 0.969942629}, + {9.941667, 0.999999762, 0.99999994, 1.059999943, 1.05986774, 0.969942749}, + {9.945833, 0.999999762, 0.99999994, 1.059999943, 1.059868097, 0.969942868}, + {9.95, 0.999999762, 0.99999994, 1.059999943, 1.059868336, 0.969942987}, + {9.954167, 0.999999762, 0.99999994, 1.059999943, 1.059868693, 0.969943166}, + {9.958333, 0.999999762, 0.99999994, 1.059999943, 1.059868932, 0.969943285}, + {9.9625, 0.999999762, 0.99999994, 1.059999943, 1.059869289, 0.969943404}, + {9.966667, 0.999999762, 0.99999994, 1.059999943, 1.059869528, 0.969943583}, + {9.970833, 0.999999762, 0.99999994, 1.059999943, 1.059869885, 0.969943702}, + {9.975, 0.999999762, 0.99999994, 1.059999943, 1.059870124, 0.969943821}, + {9.979167, 0.999999762, 0.99999994, 1.059999943, 1.059870481, 0.969943941}, + {9.983333, 0.999999762, 0.99999994, 1.059999943, 1.05987072, 0.96994406}, + {9.9875, 0.999999762, 0.99999994, 1.059999943, 1.059871078, 0.969944239}, + {9.991667, 0.999999762, 0.99999994, 1.059999943, 1.059871316, 0.969944358}, + {9.995833, 0.999999762, 0.99999994, 1.059999943, 1.059871554, 0.969944477}, + {10, 0.999999762, 0.99999994, 1.059999943, 1.059871912, 0.969944596}}; +} // namespace Example2 diff --git a/examples/PhasorDynamics/Example3/CMakeLists.txt b/examples/PhasorDynamics/Example3/CMakeLists.txt new file mode 100644 index 000000000..22d025f7b --- /dev/null +++ b/examples/PhasorDynamics/Example3/CMakeLists.txt @@ -0,0 +1,13 @@ +add_executable(phasordynamics_example3 example3.cpp) +target_link_libraries(phasordynamics_example3 + GRIDKIT::phasor_dynamics_bus + GRIDKIT::phasor_dynamics_bus_fault + GRIDKIT::phasor_dynamics_branch + GRIDKIT::phasor_dynamics_genrou + GRIDKIT::phasor_dynamics_load + GRIDKIT::solvers_dyn) +install(TARGETS phasordynamics_example3 RUNTIME DESTINATION bin) + +# Not used for tesing for now. +# add_test(NAME GenrouTest3 COMMAND $) +add_test(NAME GenrouTest COMMAND $) diff --git a/examples/PhasorDynamics/Example3/Example3_Powerworld_Reference.hpp b/examples/PhasorDynamics/Example3/Example3_Powerworld_Reference.hpp new file mode 100644 index 000000000..30d868076 --- /dev/null +++ b/examples/PhasorDynamics/Example3/Example3_Powerworld_Reference.hpp @@ -0,0 +1,2406 @@ +#include + +// Columns: +// Time, Machine Speed (PowerWorld), Bus 1 Voltage Magnitude (PowerWorld)}, +std::vector> reference_solution = + {{0, 1, 0}, // It should be {0,1,1.000000477} but something is wrong in GridKit + {0.004167, 1, 1.000000477}, + {0.008333, 1, 1.000000477}, + {0.0125, 0.99999994, 1.000000477}, + {0.016667, 0.99999994, 1.000000477}, + {0.020833, 0.99999994, 1.000000477}, + {0.025, 0.99999994, 1.000000477}, + {0.029167, 0.99999994, 1.000000477}, + {0.033333, 0.99999994, 1.000000477}, + {0.0375, 0.99999994, 1.000000477}, + {0.041667, 0.99999994, 1.000000477}, + {0.045833, 0.99999994, 1.000000477}, + {0.05, 0.999999881, 1.000000477}, + {0.054167, 0.999999881, 1.000000477}, + {0.058333, 0.999999881, 1.000000477}, + {0.0625, 0.999999881, 1.000000477}, + {0.066667, 0.999999881, 1.000000477}, + {0.070833, 0.999999881, 1.000000477}, + {0.075, 0.999999881, 1.000000477}, + {0.079167, 0.999999881, 1.000000477}, + {0.083333, 0.999999881, 1.000000477}, + {0.0875, 0.999999881, 1.000000477}, + {0.091667, 0.999999881, 1.000000477}, + {0.095833, 0.999999881, 1.000000477}, + {0.1, 0.999999881, 1.000000477}, + {0.104167, 0.999999881, 1.000000477}, + {0.108333, 0.999999881, 1.000000477}, + {0.1125, 0.999999881, 1.000000477}, + {0.116667, 0.999999881, 1.000000477}, + {0.120833, 0.999999881, 1.000000477}, + {0.125, 0.999999881, 1.000000477}, + {0.129167, 0.999999881, 1.000000477}, + {0.133333, 0.999999881, 1.000000477}, + {0.1375, 0.99999994, 1.000000477}, + {0.141667, 0.99999994, 1.000000477}, + {0.145833, 0.99999994, 1.000000477}, + {0.15, 0.99999994, 1.000000477}, + {0.154167, 0.99999994, 1.000000477}, + {0.158333, 0.99999994, 1.000000477}, + {0.1625, 0.99999994, 1.000000477}, + {0.166667, 0.99999994, 1.000000477}, + {0.170833, 0.99999994, 1.000000477}, + {0.175, 0.99999994, 1.000000477}, + {0.179167, 0.99999994, 1.000000477}, + {0.183333, 0.99999994, 1.000000477}, + {0.1875, 0.99999994, 1.000000477}, + {0.191667, 0.99999994, 1.000000477}, + {0.195833, 1, 1.000000477}, + {0.2, 1, 1.000000477}, + {0.204167, 1, 1.000000477}, + {0.208333, 1, 1.000000477}, + {0.2125, 1, 1.000000477}, + {0.216667, 1, 1.000000477}, + {0.220833, 1, 1.000000477}, + {0.225, 1, 1.000000477}, + {0.229167, 1, 1.000000477}, + {0.233333, 1, 1.000000477}, + {0.2375, 1, 1.000000477}, + {0.241667, 1, 1.000000477}, + {0.245833, 1, 1.000000477}, + {0.25, 1, 1.000000477}, + {0.254167, 1, 1.000000477}, + {0.258333, 1, 1.000000477}, + {0.2625, 1, 1.000000477}, + {0.266667, 1, 1.000000477}, + {0.270833, 1, 1.000000477}, + {0.275, 1, 1.000000477}, + {0.279167, 1, 1.000000477}, + {0.283333, 1, 1.000000477}, + {0.2875, 1, 1.000000477}, + {0.291667, 1, 1.000000477}, + {0.295833, 1.000000119, 1.000000477}, + {0.3, 1.000000119, 1.000000477}, + {0.304167, 1.000000119, 1.000000477}, + {0.308333, 1.000000119, 1.000000477}, + {0.3125, 1.000000119, 1.000000477}, + {0.316667, 1.000000119, 1.000000477}, + {0.320833, 1.000000119, 1.000000477}, + {0.325, 1.000000119, 1.000000477}, + {0.329167, 1.000000119, 1.000000477}, + {0.333333, 1.000000119, 1.000000477}, + {0.3375, 1.000000119, 1.000000477}, + {0.341667, 1.000000119, 1.000000477}, + {0.345833, 1.000000119, 1.000000477}, + {0.35, 1.000000119, 1.000000477}, + {0.354167, 1.000000119, 1.000000477}, + {0.358333, 1.000000119, 1.000000477}, + {0.3625, 1, 1.000000477}, + {0.366667, 1, 1.000000477}, + {0.370833, 1, 1.000000477}, + {0.375, 1, 1.000000477}, + {0.379167, 1, 1.000000477}, + {0.383333, 1, 1.000000477}, + {0.3875, 1, 1.000000477}, + {0.391667, 1, 1.000000477}, + {0.395833, 1, 1.000000477}, + {0.4, 1, 1.000000477}, + {0.404167, 1, 1.000000477}, + {0.408333, 1, 1.000000477}, + {0.4125, 1, 1.000000477}, + {0.416667, 1, 1.000000477}, + {0.420833, 1, 1.000000477}, + {0.425, 1, 1.000000477}, + {0.429167, 1, 1.000000477}, + {0.433333, 1, 1.000000477}, + {0.4375, 1, 1.000000477}, + {0.441667, 1, 1.000000477}, + {0.445833, 1, 1.000000477}, + {0.45, 1, 1.000000477}, + {0.454167, 1, 1.000000477}, + {0.458333, 1, 1.000000477}, + {0.4625, 1, 1.000000477}, + {0.466667, 1, 1.000000477}, + {0.470833, 1, 1.000000477}, + {0.475, 1, 1.000000477}, + {0.479167, 1, 1.000000477}, + {0.483333, 1, 1.000000477}, + {0.4875, 1, 1.000000477}, + {0.491667, 1, 1.000000477}, + {0.495833, 1, 1.000000477}, + {0.5, 1, 1.000000477}, + {0.504167, 1, 1.000000477}, + {0.508333, 1, 1.000000477}, + {0.5125, 0.99999994, 1.000000477}, + {0.516667, 0.99999994, 1.000000477}, + {0.520833, 0.99999994, 1.000000477}, + {0.525, 0.99999994, 1.000000477}, + {0.529167, 0.99999994, 1.000000477}, + {0.533333, 0.99999994, 1.000000477}, + {0.5375, 0.99999994, 1.000000477}, + {0.541667, 0.99999994, 1.000000477}, + {0.545833, 0.99999994, 1.000000477}, + {0.55, 0.99999994, 1.000000477}, + {0.554167, 0.99999994, 1.000000477}, + {0.558333, 0.99999994, 1.000000477}, + {0.5625, 0.99999994, 1.000000477}, + {0.566667, 0.99999994, 1.000000477}, + {0.570833, 0.99999994, 1.000000477}, + {0.575, 0.99999994, 1.000000477}, + {0.579167, 0.99999994, 1.000000477}, + {0.583333, 0.99999994, 1.000000477}, + {0.5875, 0.99999994, 1.000000477}, + {0.591667, 0.99999994, 1.000000477}, + {0.595833, 0.99999994, 1.000000477}, + {0.6, 0.99999994, 1.000000477}, + {0.604167, 0.99999994, 1.000000477}, + {0.608333, 0.99999994, 1.000000477}, + {0.6125, 0.99999994, 1.000000477}, + {0.616667, 0.99999994, 1.000000477}, + {0.620833, 1, 1.000000477}, + {0.625, 1, 1.000000477}, + {0.629167, 1, 1.000000477}, + {0.633333, 1, 1.000000477}, + {0.6375, 1, 1.000000477}, + {0.641667, 1, 1.000000477}, + {0.645833, 1, 1.000000477}, + {0.65, 1, 1.000000477}, + {0.654167, 1, 1.000000477}, + {0.658333, 1, 1.000000477}, + {0.6625, 1, 1.000000477}, + {0.666667, 1, 1.000000477}, + {0.670833, 1, 1.000000477}, + {0.675, 1, 1.000000477}, + {0.679167, 1, 1.000000477}, + {0.683333, 1, 1.000000477}, + {0.6875, 1, 1.000000477}, + {0.691667, 1, 1.000000477}, + {0.695833, 1, 1.000000477}, + {0.7, 1, 1.000000477}, + {0.704167, 1, 1.000000477}, + {0.708333, 1, 1.000000477}, + {0.7125, 1, 1.000000477}, + {0.716667, 1, 1.000000477}, + {0.720833, 1, 1.000000477}, + {0.725, 1, 1.000000477}, + {0.729167, 1, 1.000000477}, + {0.733333, 1, 1.000000477}, + {0.7375, 1, 1.000000477}, + {0.741667, 1, 1.000000477}, + {0.745833, 1, 1.000000477}, + {0.75, 1, 1.000000477}, + {0.754167, 1, 1.000000477}, + {0.758333, 1, 1.000000477}, + {0.7625, 1, 1.000000477}, + {0.766667, 1, 1.000000477}, + {0.770833, 1, 1.000000477}, + {0.775, 1, 1.000000477}, + {0.779167, 1, 1.000000477}, + {0.783333, 1, 1.000000477}, + {0.7875, 1, 1.000000477}, + {0.791667, 1, 1.000000477}, + {0.795833, 1, 1.000000477}, + {0.8, 1, 1.000000477}, + {0.804167, 1, 1.000000477}, + {0.808333, 1, 1.000000477}, + {0.8125, 1, 1.000000477}, + {0.816667, 1, 1.000000477}, + {0.820833, 1, 1.000000477}, + {0.825, 1, 1.000000477}, + {0.829167, 1, 1.000000477}, + {0.833333, 1, 1.000000477}, + {0.8375, 1, 1.000000477}, + {0.841667, 1, 1.000000477}, + {0.845833, 1, 1.000000477}, + {0.85, 1, 1.000000477}, + {0.854167, 1, 1.000000477}, + {0.858333, 1, 1.000000477}, + {0.8625, 1, 1.000000477}, + {0.866667, 1, 1.000000477}, + {0.870833, 1, 1.000000477}, + {0.875, 1, 1.000000477}, + {0.879167, 1, 1.000000477}, + {0.883333, 1, 1.000000477}, + {0.8875, 1, 1.000000477}, + {0.891667, 1, 1.000000477}, + {0.895833, 1, 1.000000477}, + {0.9, 1, 1.000000477}, + {0.904167, 1, 1.000000477}, + {0.908333, 1, 1.000000477}, + {0.9125, 1, 1.000000477}, + {0.916667, 1, 1.000000477}, + {0.920833, 1, 1.000000477}, + {0.925, 1, 1.000000477}, + {0.929167, 1, 1.000000477}, + {0.933333, 1, 1.000000477}, + {0.9375, 1, 1.000000477}, + {0.941667, 1, 1.000000477}, + {0.945833, 1, 1.000000477}, + {0.95, 1, 1.000000477}, + {0.954167, 1, 1.000000477}, + {0.958333, 1, 1.000000477}, + {0.9625, 1, 1.000000477}, + {0.966667, 1, 1.000000477}, + {0.970833, 1, 1.000000477}, + {0.975, 1, 1.000000477}, + {0.979167, 1, 1.000000477}, + {0.983333, 1, 1.000000477}, + {0.9875, 1, 1.000000477}, + {0.991667, 1, 1.000000477}, + {0.995833, 1, 1.000000477}, + {1, 1, 1.000000477}, + {1.004167, 1.000682712, 0.015128844}, + {1.008333, 1.001363397, 0.014973078}, + {1.0125, 1.002042532, 0.014841928}, + {1.016667, 1.002720356, 0.014729479}, + {1.020833, 1.00339675, 0.014631276}, + {1.025, 1.004072189, 0.014543867}, + {1.029167, 1.004746675, 0.01446466}, + {1.033333, 1.00541997, 0.014391631}, + {1.0375, 1.006092548, 0.01432314}, + {1.041667, 1.006764412, 0.014257919}, + {1.045833, 1.007435203, 0.014194945}, + {1.05, 1.008105278, 0.014133334}, + {1.054167, 1.008774638, 0.014072391}, + {1.058333, 1.009443045, 0.014011139}, + {1.0625, 1.010110855, 0.01395021}, + {1.066667, 1.010777831, 0.013887996}, + {1.070833, 1.011443853, 0.013824509}, + {1.075, 1.01210916, 0.013759368}, + {1.079167, 1.012773633, 0.013692267}, + {1.083333, 1.013437271, 0.013622929}, + {1.0875, 1.014100075, 0.013551049}, + {1.091667, 1.014762163, 0.013476389}, + {1.095833, 1.015423179, 0.013398723}, + {1.1, 1.016083598, 0.013398723}, + {1.104167, 1.015262365, 0.88047874}, + {1.108333, 1.014493585, 0.89023459}, + {1.1125, 1.013762116, 0.898759723}, + {1.116667, 1.013056278, 0.906125188}, + {1.120833, 1.012367129, 0.912427425}, + {1.125, 1.01168704, 0.917777061}, + {1.129167, 1.011010766, 0.922281682}, + {1.133333, 1.010334253, 0.926045954}, + {1.1375, 1.009654403, 0.929170609}, + {1.141667, 1.008969307, 0.931745946}, + {1.145833, 1.008277893, 0.93385452}, + {1.15, 1.007579207, 0.935571969}, + {1.154167, 1.006873131, 0.936964393}, + {1.158333, 1.006160259, 0.938090801}, + {1.1625, 1.005440712, 0.939003944}, + {1.166667, 1.0047158, 0.9397493}, + {1.170833, 1.003986597, 0.940366805}, + {1.175, 1.003253937, 0.940891325}, + {1.179167, 1.002519608, 0.941352487}, + {1.183333, 1.001785278, 0.94177556}, + {1.1875, 1.001052022, 0.942182004}, + {1.191667, 1.000321627, 0.942589283}, + {1.195833, 0.999596179, 0.943011642}, + {1.2, 0.998876929, 0.943460345}, + {1.204167, 0.998165727, 0.943943799}, + {1.208333, 0.997464538, 0.944467604}, + {1.2125, 0.996774673, 0.945035696}, + {1.216667, 0.996098042, 0.945649385}, + {1.220833, 0.995436549, 0.946308196}, + {1.225, 0.994791448, 0.947010458}, + {1.229167, 0.994164526, 0.947752595}, + {1.233333, 0.993557453, 0.948529899}, + {1.2375, 0.99297154, 0.949337125}, + {1.241667, 0.992408335, 0.950167537}, + {1.245833, 0.99186933, 0.951014042}, + {1.25, 0.991355598, 0.951869369}, + {1.254167, 0.990868449, 0.952725708}, + {1.258333, 0.990409136, 0.953574955}, + {1.2625, 0.989978492, 0.954409778}, + {1.266667, 0.989577591, 0.955215633}, + {1.270833, 0.989207327, 0.956005096}, + {1.275, 0.988868177, 0.956751525}, + {1.279167, 0.988560915, 0.957458079}, + {1.283333, 0.988285899, 0.958120406}, + {1.2875, 0.988043547, 0.958723307}, + {1.291667, 0.987834036, 0.959283113}, + {1.295833, 0.987657607, 0.959768534}, + {1.3, 0.987514019, 0.960213661}, + {1.304167, 0.987403274, 0.96057564}, + {1.308333, 0.987325132, 0.96090132}, + {1.3125, 0.987279058, 0.961140752}, + {1.316667, 0.987264812, 0.961349428}, + {1.320833, 0.987281561, 0.961474001}, + {1.325, 0.987328827, 0.961574197}, + {1.329167, 0.987405658, 0.961597323}, + {1.333333, 0.987511337, 0.961602867}, + {1.3375, 0.987644792, 0.96154201}, + {1.341667, 0.987805247, 0.961470485}, + {1.345833, 0.987991393, 0.961345851}, + {1.35, 0.988202393, 0.961207449}, + {1.354167, 0.988437057, 0.961049318}, + {1.358333, 0.988694072, 0.960876703}, + {1.3625, 0.988972366, 0.960694611}, + {1.366667, 0.989270747, 0.960507751}, + {1.370833, 0.989587843, 0.96032083}, + {1.375, 0.989922643, 0.960137904}, + {1.379167, 0.990273893, 0.959962845}, + {1.383333, 0.990640223, 0.95979917}, + {1.3875, 0.991020679, 0.959649861}, + {1.391667, 0.991413951, 0.959517598}, + {1.395833, 0.991818845, 0.959404588}, + {1.4, 0.992234349, 0.959312677}, + {1.404167, 0.99265933, 0.959243178}, + {1.408333, 0.993092477, 0.959197223}, + {1.4125, 0.993533015, 0.959175408}, + {1.416667, 0.993979812, 0.95917803}, + {1.420833, 0.994431734, 0.959205091}, + {1.425, 0.994888008, 0.959256351}, + {1.429167, 0.995347559, 0.959331334}, + {1.433333, 0.995809376, 0.959429204}, + {1.4375, 0.996272743, 0.959549129}, + {1.441667, 0.996736646, 0.95968461}, + {1.445833, 0.997200072, 0.959850907}, + {1.45, 0.997662604, 0.960024655}, + {1.454167, 0.998123169, 0.960226417}, + {1.458333, 0.998580933, 0.960433066}, + {1.4625, 0.999035299, 0.960664332}, + {1.466667, 0.999485552, 0.96089834}, + {1.470833, 0.99993068, 0.961153209}, + {1.475, 1.000370383, 0.961408794}, + {1.479167, 1.000803709, 0.961681604}, + {1.483333, 1.001230001, 0.961953163}, + {1.4875, 1.001648784, 0.962238312}, + {1.491667, 1.00205946, 0.962520778}, + {1.495833, 1.002461076, 0.962813199}, + {1.5, 1.002853513, 0.963101745}, + {1.504167, 1.003236055, 0.963396966}, + {1.508333, 1.003607988, 0.96368736}, + {1.5125, 1.003968954, 0.963981271}, + {1.516667, 1.004318357, 0.964269757}, + {1.520833, 1.004655838, 0.964558721}, + {1.525, 1.004980803, 0.964841962}, + {1.529167, 1.005292892, 0.965122938}, + {1.533333, 1.005591631, 0.965397894}, + {1.5375, 1.00587666, 0.965667963}, + {1.541667, 1.006147623, 0.96593219}, + {1.545833, 1.006403923, 0.966188729}, + {1.55, 1.006645441, 0.966439664}, + {1.554167, 1.00687182, 0.966680348}, + {1.558333, 1.007082582, 0.966915607}, + {1.5625, 1.007277608, 0.967138052}, + {1.566667, 1.00745666, 0.967355549}, + {1.570833, 1.007619381, 0.96755743}, + {1.575, 1.007765532, 0.967754841}, + {1.579167, 1.007894993, 0.967934012}, + {1.583333, 1.008007526, 0.968109071}, + {1.5875, 1.008103132, 0.968263447}, + {1.591667, 1.008181453, 0.968414128}, + {1.595833, 1.008242607, 0.968541622}, + {1.6, 1.008286357, 0.968665838}, + {1.604167, 1.008312702, 0.968764782}, + {1.608333, 1.008321762, 0.968860805}, + {1.6125, 1.008313417, 0.968929827}, + {1.616667, 1.008287787, 0.968996286}, + {1.620833, 1.008244872, 0.969034612}, + {1.625, 1.00818491, 0.969070733}, + {1.629167, 1.00810802, 0.969078183}, + {1.633333, 1.008014202, 0.969083905}, + {1.6375, 1.007904053, 0.969061136}, + {1.641667, 1.007777452, 0.969037175}, + {1.645833, 1.007634878, 0.968985915}, + {1.65, 1.007476687, 0.96893394}, + {1.654167, 1.007303119, 0.968856812}, + {1.658333, 1.007114768, 0.968779624}, + {1.6625, 1.006911874, 0.968680382}, + {1.666667, 1.006694913, 0.968581617}, + {1.670833, 1.00646472, 0.968464911}, + {1.675, 1.006221414, 0.968349338}, + {1.679167, 1.005965829, 0.968220592}, + {1.683333, 1.005698442, 0.968093693}, + {1.6875, 1.005420089, 0.967959166}, + {1.691667, 1.005131125, 0.967827022}, + {1.695833, 1.004832625, 0.967693269}, + {1.7, 1.004525065, 0.967562377}, + {1.704167, 1.00420928, 0.967436075}, + {1.708333, 1.003885984, 0.967313051}, + {1.7125, 1.003556132, 0.967200637}, + {1.716667, 1.003220201, 0.967091799}, + {1.720833, 1.0028795, 0.966999233}, + {1.725, 1.00253439, 0.966910303}, + {1.729167, 1.00218606, 0.966842711}, + {1.733333, 1.001835227, 0.966778576}, + {1.7375, 1.001482844, 0.966739953}, + {1.741667, 1.001129627, 0.966711283}, + {1.745833, 1.000776529, 0.966690898}, + {1.75, 1.000424623, 0.966700375}, + {1.754167, 1.000074387, 0.96671176}, + {1.758333, 0.999727011, 0.966754198}, + {1.7625, 0.999383092, 0.966797709}, + {1.766667, 0.999043643, 0.966872096}, + {1.770833, 0.998709381, 0.966946483}, + {1.775, 0.998381138, 0.967050433}, + {1.779167, 0.99805963, 0.967153192}, + {1.783333, 0.997745872, 0.96728301}, + {1.7875, 0.997440159, 0.967410386}, + {1.791667, 0.997143567, 0.967561364}, + {1.795833, 0.99685663, 0.967714787}, + {1.8, 0.996579885, 0.967869997}, + {1.804167, 0.996314168, 0.968042195}, + {1.808333, 0.996059835, 0.968208969}, + {1.8125, 0.995817542, 0.968387842}, + {1.816667, 0.995587707, 0.968560398}, + {1.820833, 0.995370924, 0.968739927}, + {1.825, 0.995167375, 0.968912601}, + {1.829167, 0.994977593, 0.969087243}, + {1.833333, 0.994801879, 0.969254494}, + {1.8375, 0.99464041, 0.96941936}, + {1.841667, 0.994493544, 0.969576657}, + {1.845833, 0.994361401, 0.969727576}, + {1.85, 0.994244099, 0.969871104}, + {1.854167, 0.994141817, 0.970005214}, + {1.858333, 0.994054556, 0.970132172}, + {1.8625, 0.993982315, 0.970247447}, + {1.866667, 0.993925095, 0.970356286}, + {1.870833, 0.993882775, 0.97045207}, + {1.875, 0.993855238, 0.970542192}, + {1.879167, 0.993842363, 0.970618844}, + {1.883333, 0.993843973, 0.970690787}, + {1.8875, 0.993859708, 0.970749676}, + {1.891667, 0.993889451, 0.97080493}, + {1.895833, 0.993932843, 0.970848203}, + {1.9, 0.993989527, 0.970888972}, + {1.904167, 0.994059205, 0.97091943}, + {1.908333, 0.994141459, 0.970948577}, + {1.9125, 0.994235873, 0.970969498}, + {1.916667, 0.994342029, 0.970990121}, + {1.920833, 0.99445945, 0.971004903}, + {1.925, 0.994587719, 0.971020401}, + {1.929167, 0.9947263, 0.971032619}, + {1.933333, 0.994874775, 0.971046269}, + {1.9375, 0.995032549, 0.971059203}, + {1.941667, 0.995199144, 0.971074224}, + {1.945833, 0.995373964, 0.971090853}, + {1.95, 0.995556593, 0.971110106}, + {1.954167, 0.995746374, 0.971133053}, + {1.958333, 0.995942831, 0.971158922}, + {1.9625, 0.996145368, 0.971190274}, + {1.966667, 0.996353567, 0.971224725}, + {1.970833, 0.996566653, 0.97126615}, + {1.975, 0.996784389, 0.971310556}, + {1.979167, 0.997005939, 0.971363068}, + {1.983333, 0.997230887, 0.971418381}, + {1.9875, 0.997458696, 0.971482456}, + {1.991667, 0.997688949, 0.971549094}, + {1.995833, 0.997920871, 0.971624851}, + {2, 0.998154223, 0.971702695}, + {2.004167, 0.99838829, 0.971789718}, + {2.008333, 0.998622656, 0.971878409}, + {2.0125, 0.998856843, 0.971975863}, + {2.016667, 0.999090433, 0.972074568}, + {2.020833, 0.999322772, 0.972181499}, + {2.025, 0.999553561, 0.972289145}, + {2.029167, 0.999782324, 0.972404182}, + {2.033333, 1.000008583, 0.972519457}, + {2.0375, 1.000231862, 0.97264123}, + {2.041667, 1.000451922, 0.972762704}, + {2.045833, 1.000668168, 0.972889543}, + {2.05, 1.000880361, 0.973015666}, + {2.054167, 1.001088023, 0.973146021}, + {2.058333, 1.001290798, 0.973275185}, + {2.0625, 1.001488328, 0.973407388}, + {2.066667, 1.001680374, 0.973538041}, + {2.070833, 1.00186646, 0.973670363}, + {2.075, 1.002046466, 0.973800957}, + {2.079167, 1.002219915, 0.973931909}, + {2.083333, 1.002386689, 0.974060893}, + {2.0875, 1.00254631, 0.974188983}, + {2.091667, 1.002698779, 0.974314928}, + {2.095833, 1.002843618, 0.974438667}, + {2.1, 1.002980828, 0.974560261}, + {2.104167, 1.003109932, 0.974678457}, + {2.108333, 1.003231049, 0.974794388}, + {2.1125, 1.003343701, 0.974905789}, + {2.116667, 1.003448009, 0.975015044}, + {2.120833, 1.003543615, 0.975118697}, + {2.125, 1.003630638, 0.975220263}, + {2.129167, 1.00370872, 0.975315332}, + {2.133333, 1.003777862, 0.975408375}, + {2.1375, 1.003837943, 0.975494087}, + {2.141667, 1.003889084, 0.97557801}, + {2.145833, 1.003931046, 0.975653946}, + {2.15, 1.003963828, 0.975728214}, + {2.154167, 1.003987551, 0.975794077}, + {2.158333, 1.004002213, 0.97585845}, + {2.1625, 1.004007816, 0.975914061}, + {2.166667, 1.00400424, 0.97596848}, + {2.170833, 1.003991842, 0.976014078}, + {2.175, 1.003970623, 0.976058662}, + {2.179167, 1.003940463, 0.976094544}, + {2.183333, 1.003901839, 0.976129651}, + {2.1875, 1.003854632, 0.976156354}, + {2.191667, 1.003799081, 0.97618264}, + {2.195833, 1.003735423, 0.976201057}, + {2.2, 1.003663778, 0.976219237}, + {2.204167, 1.003584385, 0.976230323}, + {2.208333, 1.003497481, 0.97624141}, + {2.2125, 1.003403306, 0.976246357}, + {2.216667, 1.003302097, 0.976251602}, + {2.220833, 1.003194094, 0.976251721}, + {2.225, 1.003079653, 0.976252377}, + {2.229167, 1.002959013, 0.976249218}, + {2.233333, 1.002832532, 0.976246715}, + {2.2375, 1.002700567, 0.976241708}, + {2.241667, 1.002563357, 0.976237595}, + {2.245833, 1.002421498, 0.97623235}, + {2.25, 1.00227499, 0.976228058}, + {2.254167, 1.002124429, 0.976224005}, + {2.258333, 1.001970172, 0.976221025}, + {2.2625, 1.001812577, 0.976219654}, + {2.266667, 1.001652002, 0.976219356}, + {2.270833, 1.001489043, 0.976221859}, + {2.275, 1.001323819, 0.976225436}, + {2.279167, 1.001156807, 0.976232946}, + {2.283333, 1.000988603, 0.976241529}, + {2.2875, 1.000819445, 0.97625488}, + {2.291667, 1.000649691, 0.976269126}, + {2.295833, 1.000480056, 0.976288915}, + {2.3, 1.00031054, 0.976309478}, + {2.304167, 1.00014174, 0.976336062}, + {2.308333, 0.999974132, 0.976363182}, + {2.3125, 0.999808013, 0.97639662}, + {2.316667, 0.999643743, 0.976430357}, + {2.320833, 0.999481857, 0.976470292}, + {2.325, 0.999322474, 0.976510406}, + {2.329167, 0.999166131, 0.97655654}, + {2.333333, 0.999013186, 0.976602495}, + {2.3375, 0.998863876, 0.976654112}, + {2.341667, 0.998718619, 0.976705313}, + {2.345833, 0.998577714, 0.97676152}, + {2.35, 0.998441339, 0.976817131}, + {2.354167, 0.99830997, 0.976876974}, + {2.358333, 0.998183727, 0.976935983}, + {2.3625, 0.998062968, 0.976998508}, + {2.366667, 0.997947812, 0.97706002}, + {2.370833, 0.997838557, 0.977124095}, + {2.375, 0.997735381, 0.977187037}, + {2.379167, 0.997638524, 0.977251768}, + {2.383333, 0.997548044, 0.977315128}, + {2.3875, 0.99746418, 0.97737956}, + {2.391667, 0.997386992, 0.977442563}, + {2.395833, 0.997316659, 0.977505863}, + {2.4, 0.99725318, 0.977567792}, + {2.404167, 0.997196674, 0.977629304}, + {2.408333, 0.997147202, 0.977689505}, + {2.4125, 0.997104764, 0.977748811}, + {2.416667, 0.997069418, 0.977806926}, + {2.420833, 0.997041106, 0.977863729}, + {2.425, 0.997019887, 0.977919519}, + {2.429167, 0.997005641, 0.977973759}, + {2.433333, 0.99699831, 0.978027105}, + {2.4375, 0.996997893, 0.978078902}, + {2.441667, 0.997004211, 0.978129923}, + {2.445833, 0.997017264, 0.978179455}, + {2.45, 0.997036815, 0.97822845}, + {2.454167, 0.997062802, 0.978276134}, + {2.458333, 0.997095108, 0.97832346}, + {2.4625, 0.997133493, 0.978369713}, + {2.466667, 0.997177839, 0.978415847}, + {2.470833, 0.997227907, 0.978461266}, + {2.475, 0.997283578, 0.978506744}, + {2.479167, 0.997344553, 0.978551865}, + {2.483333, 0.997410715, 0.978597224}, + {2.4875, 0.997481763, 0.978642642}, + {2.491667, 0.99755758, 0.978688478}, + {2.495833, 0.997637749, 0.978734732}, + {2.5, 0.997722149, 0.978781521}, + {2.504167, 0.997810483, 0.978829205}, + {2.508333, 0.997902572, 0.978877366}, + {2.5125, 0.997998059, 0.978926837}, + {2.516667, 0.998096764, 0.978976846}, + {2.520833, 0.99819833, 0.979028463}, + {2.525, 0.998302639, 0.979080617}, + {2.529167, 0.998409212, 0.97913456}, + {2.533333, 0.998517931, 0.979189098}, + {2.5375, 0.998628497, 0.979245543}, + {2.541667, 0.998740673, 0.979302526}, + {2.545833, 0.998854041, 0.979361534}, + {2.55, 0.998968482, 0.97942096}, + {2.554167, 0.999083698, 0.979482412}, + {2.558333, 0.99919939, 0.979544222}, + {2.5625, 0.999315321, 0.97960794}, + {2.566667, 0.999431312, 0.979671896}, + {2.570833, 0.999546885, 0.979737639}, + {2.575, 0.999662042, 0.979803562}, + {2.579167, 0.999776363, 0.979871035}, + {2.583333, 0.999889672, 0.979938447}, + {2.5875, 1.000001788, 0.980007231}, + {2.591667, 1.000112414, 0.980075896}, + {2.595833, 1.000221252, 0.980145454}, + {2.6, 1.000328302, 0.980214894}, + {2.604167, 1.000433087, 0.98028487}, + {2.608333, 1.000535607, 0.980354488}, + {2.6125, 1.000635624, 0.980424404}, + {2.616667, 1.000732899, 0.980493844}, + {2.620833, 1.000827312, 0.980563104}, + {2.625, 1.000918627, 0.980631888}, + {2.629167, 1.001006722, 0.980700076}, + {2.633333, 1.001091361, 0.980767667}, + {2.6375, 1.001172543, 0.980834305}, + {2.641667, 1.001250029, 0.980900288}, + {2.645833, 1.001323581, 0.980964839}, + {2.65, 1.001393318, 0.981028795}, + {2.654167, 1.001459002, 0.981091022}, + {2.658333, 1.001520634, 0.981152534}, + {2.6625, 1.001577854, 0.98121196}, + {2.666667, 1.001630902, 0.98127073}, + {2.670833, 1.00167942, 0.981327116}, + {2.675, 1.001723647, 0.981382847}, + {2.679167, 1.001763225, 0.981435895}, + {2.683333, 1.001798391, 0.981488407}, + {2.6875, 1.001828909, 0.981538057}, + {2.691667, 1.001854777, 0.981587112}, + {2.695833, 1.001875997, 0.981633246}, + {2.7, 1.001892686, 0.981678843}, + {2.704167, 1.001904726, 0.981721342}, + {2.708333, 1.001912117, 0.981763482}, + {2.7125, 1.001914978, 0.981802464}, + {2.716667, 1.001913309, 0.981841147}, + {2.720833, 1.00190711, 0.981876731}, + {2.725, 1.001896501, 0.981912136}, + {2.729167, 1.00188148, 0.981944501}, + {2.733333, 1.001862168, 0.981976748}, + {2.7375, 1.001838684, 0.982006192}, + {2.741667, 1.001811028, 0.982035518}, + {2.745833, 1.001779318, 0.98206234}, + {2.75, 1.001743793, 0.982089102}, + {2.754167, 1.001704335, 0.98211354}, + {2.758333, 1.001661181, 0.982138097}, + {2.7625, 1.001614571, 0.982160687}, + {2.766667, 1.001564503, 0.982183337}, + {2.770833, 1.001511216, 0.982204437}, + {2.775, 1.001454711, 0.982225657}, + {2.779167, 1.001395345, 0.982245624}, + {2.783333, 1.001333117, 0.98226589}, + {2.7875, 1.001268268, 0.982285261}, + {2.791667, 1.001200914, 0.982304871}, + {2.795833, 1.001131415, 0.982324004}, + {2.8, 1.001059771, 0.982343495}, + {2.804167, 1.000986099, 0.982362807}, + {2.808333, 1.000910878, 0.982382476}, + {2.8125, 1.000833988, 0.982402384}, + {2.816667, 1.000755906, 0.98242265}, + {2.820833, 1.000676632, 0.982443452}, + {2.825, 1.000596285, 0.982464552}, + {2.829167, 1.000515342, 0.982486546}, + {2.833333, 1.000433803, 0.982508838}, + {2.8375, 1.000351906, 0.982532263}, + {2.841667, 1.000269771, 0.982555926}, + {2.845833, 1.000187874, 0.9825809}, + {2.85, 1.000106096, 0.982606173}, + {2.854167, 1.000024676, 0.982632816}, + {2.858333, 0.999943972, 0.982659698}, + {2.8625, 0.999864042, 0.982688129}, + {2.866667, 0.999785066, 0.98271668}, + {2.870833, 0.999707282, 0.98274678}, + {2.875, 0.999630749, 0.982777059}, + {2.879167, 0.999555767, 0.982808828}, + {2.883333, 0.999482453, 0.982840717}, + {2.8875, 0.999410987, 0.982874095}, + {2.891667, 0.999341428, 0.982907474}, + {2.895833, 0.999274015, 0.982942283}, + {2.9, 0.999208868, 0.982977033}, + {2.904167, 0.999146104, 0.983013093}, + {2.908333, 0.999085844, 0.983049035}, + {2.9125, 0.999028206, 0.983086228}, + {2.916667, 0.99897325, 0.983123243}, + {2.920833, 0.998921216, 0.98316133}, + {2.925, 0.998872042, 0.983199179}, + {2.929167, 0.998825967, 0.983237982}, + {2.933333, 0.998782873, 0.983276546}, + {2.9375, 0.998742998, 0.983315885}, + {2.941667, 0.998706341, 0.983354986}, + {2.945833, 0.998672962, 0.983394682}, + {2.95, 0.998642862, 0.9834342}, + {2.954167, 0.998616099, 0.983474135}, + {2.958333, 0.998592734, 0.983513892}, + {2.9625, 0.998572767, 0.983554006}, + {2.966667, 0.998556137, 0.983593881}, + {2.970833, 0.998542905, 0.983634114}, + {2.975, 0.99853307, 0.983674109}, + {2.979167, 0.998526633, 0.983714342}, + {2.983333, 0.998523533, 0.983754396}, + {2.9875, 0.998523712, 0.98379463}, + {2.991667, 0.998527169, 0.983834684}, + {2.995833, 0.998533845, 0.983874977}, + {3, 0.998543739, 0.983915091}, + {3.004167, 0.998556674, 0.983955443}, + {3.008333, 0.998572707, 0.983995676}, + {3.0125, 0.998591661, 0.984036088}, + {3.016667, 0.998613536, 0.98407644}, + {3.020833, 0.998638153, 0.984117031}, + {3.025, 0.998665512, 0.984157622}, + {3.029167, 0.998695493, 0.984198391}, + {3.033333, 0.998727977, 0.984239221}, + {3.0375, 0.998762906, 0.984280348}, + {3.041667, 0.998800099, 0.984321475}, + {3.045833, 0.998839438, 0.9843629}, + {3.05, 0.998880863, 0.984404445}, + {3.054167, 0.998924255, 0.984446287}, + {3.058333, 0.998969436, 0.984488249}, + {3.0625, 0.999016345, 0.984530509}, + {3.066667, 0.999064803, 0.984572887}, + {3.070833, 0.999114692, 0.984615624}, + {3.075, 0.999165893, 0.98465848}, + {3.079167, 0.999218225, 0.984701633}, + {3.083333, 0.999271631, 0.984744906}, + {3.0875, 0.999325931, 0.984788537}, + {3.091667, 0.999381006, 0.984832227}, + {3.095833, 0.999436736, 0.984876215}, + {3.1, 0.999492943, 0.984920263}, + {3.104167, 0.999549508, 0.984964609}, + {3.108333, 0.999606311, 0.985008955}, + {3.1125, 0.999663234, 0.98505348}, + {3.116667, 0.999720097, 0.985098004}, + {3.120833, 0.99977684, 0.985142648}, + {3.125, 0.999833286, 0.985187292}, + {3.129167, 0.999889314, 0.985231936}, + {3.133333, 0.999944806, 0.98527652}, + {3.1375, 0.999999642, 0.985321045}, + {3.141667, 1.000053763, 0.98536545}, + {3.145833, 1.000106931, 0.985409677}, + {3.15, 1.000159144, 0.985453784}, + {3.154167, 1.000210285, 0.985497534}, + {3.158333, 1.000260115, 0.985541224}, + {3.1625, 1.000308752, 0.985584378}, + {3.166667, 1.000355959, 0.985627472}, + {3.170833, 1.000401735, 0.985669911}, + {3.175, 1.000445843, 0.98571223}, + {3.179167, 1.0004884, 0.985753834}, + {3.183333, 1.00052917, 0.985795259}, + {3.1875, 1.000568032, 0.98583585}, + {3.191667, 1.000605226, 0.985876262}, + {3.195833, 1.000640273, 0.98591572}, + {3.2, 1.000673413, 0.985955}, + {3.204167, 1.000704527, 0.985993266}, + {3.208333, 1.000733614, 0.986031294}, + {3.2125, 1.000760436, 0.986068249}, + {3.216667, 1.000785112, 0.986105025}, + {3.220833, 1.000807524, 0.986140609}, + {3.225, 1.000827789, 0.986176014}, + {3.229167, 1.00084579, 0.986210167}, + {3.233333, 1.000861406, 0.986244142}, + {3.2375, 1.000874758, 0.986276925}, + {3.241667, 1.000885844, 0.986309528}, + {3.245833, 1.000894666, 0.986340821}, + {3.25, 1.000901222, 0.986372054}, + {3.254167, 1.000905395, 0.986401975}, + {3.258333, 1.000907302, 0.986431777}, + {3.2625, 1.000906944, 0.986460388}, + {3.266667, 1.000904441, 0.986488879}, + {3.270833, 1.000899673, 0.986516178}, + {3.275, 1.000892639, 0.986543477}, + {3.279167, 1.000883579, 0.986569583}, + {3.283333, 1.000872493, 0.98659569}, + {3.2875, 1.000859261, 0.986620784}, + {3.291667, 1.000844121, 0.986645818}, + {3.295833, 1.000826955, 0.986669898}, + {3.3, 1.000807881, 0.986694038}, + {3.304167, 1.000787139, 0.986717284}, + {3.308333, 1.000764608, 0.986740589}, + {3.3125, 1.00074029, 0.986763179}, + {3.316667, 1.000714421, 0.986785829}, + {3.320833, 1.000687122, 0.986807883}, + {3.325, 1.000658274, 0.986829996}, + {3.329167, 1.000628114, 0.986851633}, + {3.333333, 1.000596523, 0.986873388}, + {3.3375, 1.00056386, 0.986894786}, + {3.341667, 1.000530124, 0.986916244}, + {3.345833, 1.000495315, 0.986937523}, + {3.35, 1.000459552, 0.986958921}, + {3.354167, 1.000423074, 0.986980259}, + {3.358333, 1.000385761, 0.987001657}, + {3.3625, 1.000347853, 0.987023056}, + {3.366667, 1.000309348, 0.987044632}, + {3.370833, 1.000270367, 0.987066269}, + {3.375, 1.000231028, 0.987088084}, + {3.379167, 1.000191569, 0.987110138}, + {3.383333, 1.000151753, 0.987132251}, + {3.3875, 1.000112057, 0.987154663}, + {3.391667, 1.000072241, 0.987177193}, + {3.395833, 1.000032663, 0.987200141}, + {3.4, 0.999993145, 0.987223148}, + {3.404167, 0.999954045, 0.987246573}, + {3.408333, 0.999915302, 0.987270117}, + {3.4125, 0.999877036, 0.987294137}, + {3.416667, 0.999839365, 0.987318218}, + {3.420833, 0.999802351, 0.987342775}, + {3.425, 0.999765992, 0.987367451}, + {3.429167, 0.999730527, 0.987392604}, + {3.433333, 0.999695897, 0.987417817}, + {3.4375, 0.99966222, 0.987443566}, + {3.441667, 0.999629617, 0.987469375}, + {3.445833, 0.999598086, 0.98749572}, + {3.45, 0.999567688, 0.987522006}, + {3.454167, 0.999538481, 0.987548888}, + {3.458333, 0.999510586, 0.98757571}, + {3.4625, 0.999484062, 0.987603068}, + {3.466667, 0.999458849, 0.987630427}, + {3.470833, 0.999435067, 0.987658262}, + {3.475, 0.999412715, 0.987686098}, + {3.479167, 0.999391854, 0.98771435}, + {3.483333, 0.999372542, 0.987742543}, + {3.4875, 0.999354839, 0.987771213}, + {3.491667, 0.999338627, 0.987799883}, + {3.495833, 0.999324083, 0.987828851}, + {3.5, 0.999311149, 0.987857878}, + {3.504167, 0.999299824, 0.987887204}, + {3.508333, 0.999290168, 0.987916529}, + {3.5125, 0.999282122, 0.987946153}, + {3.516667, 0.999275744, 0.987975776}, + {3.520833, 0.999270976, 0.988005638}, + {3.525, 0.999267876, 0.9880355}, + {3.529167, 0.999266386, 0.98806566}, + {3.533333, 0.999266505, 0.98809576}, + {3.5375, 0.999268234, 0.988126099}, + {3.541667, 0.999271512, 0.988156438}, + {3.545833, 0.99927634, 0.988187015}, + {3.55, 0.999282718, 0.988217533}, + {3.554167, 0.999290526, 0.988248229}, + {3.558333, 0.999299765, 0.988278985}, + {3.5625, 0.999310493, 0.98830986}, + {3.566667, 0.999322534, 0.988340735}, + {3.570833, 0.999335885, 0.988371789}, + {3.575, 0.999350548, 0.988402784}, + {3.579167, 0.999366403, 0.988433957}, + {3.583333, 0.99938345, 0.98846513}, + {3.5875, 0.999401629, 0.988496423}, + {3.591667, 0.999420881, 0.988527715}, + {3.595833, 0.999441147, 0.988559127}, + {3.6, 0.999462366, 0.988590479}, + {3.604167, 0.999484479, 0.98862195}, + {3.608333, 0.999507427, 0.988653421}, + {3.6125, 0.99953115, 0.988684893}, + {3.616667, 0.999555588, 0.988716424}, + {3.620833, 0.999580622, 0.988747954}, + {3.625, 0.999606252, 0.988779485}, + {3.629167, 0.999632418, 0.988810956}, + {3.633333, 0.999659002, 0.988842487}, + {3.6375, 0.999685943, 0.988873959}, + {3.641667, 0.999713242, 0.98890543}, + {3.645833, 0.99974072, 0.988936782}, + {3.65, 0.999768436, 0.988968134}, + {3.654167, 0.999796212, 0.988999367}, + {3.658333, 0.999824107, 0.9890306}, + {3.6625, 0.999851942, 0.989061654}, + {3.666667, 0.999879658, 0.989092648}, + {3.670833, 0.999907255, 0.989123464}, + {3.675, 0.999934673, 0.989154279}, + {3.679167, 0.999961793, 0.989184797}, + {3.683333, 0.999988556, 0.989215255}, + {3.6875, 1.00001502, 0.989245474}, + {3.691667, 1.000041008, 0.989275634}, + {3.695833, 1.0000664, 0.989305437}, + {3.7, 1.000091314, 0.989335179}, + {3.704167, 1.000115633, 0.989364564}, + {3.708333, 1.000139356, 0.98939383}, + {3.7125, 1.000162244, 0.989422739}, + {3.716667, 1.000184536, 0.989451587}, + {3.720833, 1.000205874, 0.989479899}, + {3.725, 1.000226498, 0.989508212}, + {3.729167, 1.000246286, 0.989535987}, + {3.733333, 1.000265121, 0.989563704}, + {3.7375, 1.000283003, 0.989590943}, + {3.741667, 1.000299931, 0.989618063}, + {3.745833, 1.000315905, 0.989644587}, + {3.75, 1.000330806, 0.989671111}, + {3.754167, 1.000344634, 0.989697039}, + {3.758333, 1.000357509, 0.989722848}, + {3.7625, 1.000369191, 0.98974812}, + {3.766667, 1.000379801, 0.989773333}, + {3.770833, 1.000389338, 0.98979789}, + {3.775, 1.000397801, 0.989822447}, + {3.779167, 1.000405073, 0.989846408}, + {3.783333, 1.000411153, 0.98987025}, + {3.7875, 1.00041616, 0.989893556}, + {3.791667, 1.000419974, 0.989916801}, + {3.795833, 1.000422716, 0.989939451}, + {3.8, 1.000424385, 0.989962041}, + {3.804167, 1.000424862, 0.989984095}, + {3.808333, 1.000424266, 0.990006089}, + {3.8125, 1.000422597, 0.990027547}, + {3.816667, 1.000419736, 0.990049005}, + {3.820833, 1.000415921, 0.990069926}, + {3.825, 1.000411034, 0.990090847}, + {3.829167, 1.000405192, 0.990111291}, + {3.833333, 1.000398278, 0.990131736}, + {3.8375, 1.00039053, 0.990151703}, + {3.841667, 1.000381708, 0.990171731}, + {3.845833, 1.000372052, 0.99019134}, + {3.85, 1.000361443, 0.99021095}, + {3.854167, 1.000350118, 0.990230203}, + {3.858333, 1.000337839, 0.990249455}, + {3.8625, 1.000324965, 0.990268469}, + {3.866667, 1.000311255, 0.990287483}, + {3.870833, 1.000296831, 0.990306258}, + {3.875, 1.000281811, 0.990325034}, + {3.879167, 1.000266194, 0.99034363}, + {3.883333, 1.000249982, 0.990362227}, + {3.8875, 1.000233293, 0.990380764}, + {3.891667, 1.000216126, 0.990399241}, + {3.895833, 1.000198603, 0.990417659}, + {3.9, 1.000180602, 0.990436137}, + {3.904167, 1.000162244, 0.990454555}, + {3.908333, 1.000143766, 0.990473032}, + {3.9125, 1.000124931, 0.990491509}, + {3.916667, 1.000105858, 0.990509987}, + {3.920833, 1.000086665, 0.990528524}, + {3.925, 1.000067472, 0.990547061}, + {3.929167, 1.000048161, 0.990565717}, + {3.933333, 1.000028849, 0.990584433}, + {3.9375, 1.000009537, 0.990603209}, + {3.941667, 0.999990344, 0.990622103}, + {3.945833, 0.999971271, 0.990641057}, + {3.95, 0.999952376, 0.990660071}, + {3.954167, 0.99993372, 0.990679264}, + {3.958333, 0.999915302, 0.990698457}, + {3.9625, 0.999897242, 0.990717828}, + {3.966667, 0.999879479, 0.990737259}, + {3.970833, 0.999862075, 0.990756929}, + {3.975, 0.999845088, 0.990776539}, + {3.979167, 0.999828577, 0.990796447}, + {3.983333, 0.999812543, 0.990816295}, + {3.9875, 0.999797046, 0.990836442}, + {3.991667, 0.999782085, 0.990856528}, + {3.995833, 0.999767721, 0.990876913}, + {4, 0.999753952, 0.990897238}, + {4.004167, 0.999740779, 0.990917861}, + {4.008333, 0.999728322, 0.990938425}, + {4.0125, 0.99971652, 0.990959287}, + {4.016667, 0.999705434, 0.990980089}, + {4.020833, 0.999695063, 0.991001189}, + {4.025, 0.999685407, 0.991022229}, + {4.029167, 0.999676526, 0.991043508}, + {4.033333, 0.999668419, 0.991064787}, + {4.0375, 0.999661088, 0.991086245}, + {4.041667, 0.999654531, 0.991107702}, + {4.045833, 0.99964875, 0.991129398}, + {4.05, 0.999643803, 0.991151035}, + {4.054167, 0.99963963, 0.99117291}, + {4.058333, 0.999636233, 0.991194725}, + {4.0625, 0.99963367, 0.991216719}, + {4.066667, 0.999631941, 0.991238713}, + {4.070833, 0.999630928, 0.991260886}, + {4.075, 0.999630749, 0.991283059}, + {4.079167, 0.999631345, 0.991305292}, + {4.083333, 0.999632716, 0.991327584}, + {4.0875, 0.999634802, 0.991349995}, + {4.091667, 0.999637663, 0.991372347}, + {4.095833, 0.999641299, 0.991394877}, + {4.1, 0.999645591, 0.991417348}, + {4.104167, 0.999650598, 0.991439939}, + {4.108333, 0.99965626, 0.991462469}, + {4.1125, 0.999662578, 0.991485119}, + {4.116667, 0.999669552, 0.991507709}, + {4.120833, 0.999677122, 0.991530359}, + {4.125, 0.999685287, 0.991553009}, + {4.129167, 0.99969399, 0.991575718}, + {4.133333, 0.999703228, 0.991598368}, + {4.1375, 0.999713004, 0.991621077}, + {4.141667, 0.999723196, 0.991643786}, + {4.145833, 0.999733865, 0.991666436}, + {4.15, 0.999745011, 0.991689086}, + {4.154167, 0.999756455, 0.991711676}, + {4.158333, 0.999768317, 0.991734326}, + {4.1625, 0.999780476, 0.991756856}, + {4.166667, 0.999792933, 0.991779447}, + {4.170833, 0.999805629, 0.991801858}, + {4.175, 0.999818563, 0.991824329}, + {4.179167, 0.999831676, 0.991846681}, + {4.183333, 0.999844968, 0.991869032}, + {4.1875, 0.999858439, 0.991891265}, + {4.191667, 0.999871969, 0.991913497}, + {4.195833, 0.999885499, 0.991935551}, + {4.2, 0.999899149, 0.991957605}, + {4.204167, 0.999912739, 0.99197948}, + {4.208333, 0.999926329, 0.992001355}, + {4.2125, 0.999939859, 0.992023051}, + {4.216667, 0.99995327, 0.992044747}, + {4.220833, 0.999966562, 0.992066205}, + {4.225, 0.999979734, 0.992087603}, + {4.229167, 0.999992669, 0.992108822}, + {4.233333, 1.000005484, 0.992130041}, + {4.2375, 1.000018001, 0.992150962}, + {4.241667, 1.00003016, 0.992171884}, + {4.245833, 1.0000422, 0.992192566}, + {4.25, 1.000053763, 0.99221319}, + {4.254167, 1.000065088, 0.992233574}, + {4.258333, 1.000076056, 0.9922539}, + {4.2625, 1.000086665, 0.992273927}, + {4.266667, 1.000096798, 0.992293954}, + {4.270833, 1.000106454, 0.992313683}, + {4.275, 1.000115752, 0.992333353}, + {4.279167, 1.000124574, 0.992352784}, + {4.283333, 1.000133038, 0.992372096}, + {4.2875, 1.000140905, 0.992391169}, + {4.291667, 1.000148177, 0.992410183}, + {4.295833, 1.000155091, 0.992428839}, + {4.3, 1.000161409, 0.992447555}, + {4.304167, 1.000167251, 0.992465854}, + {4.308333, 1.000172496, 0.992484212}, + {4.3125, 1.000177264, 0.992502213}, + {4.316667, 1.000181437, 0.992520213}, + {4.320833, 1.000185013, 0.992537856}, + {4.325, 1.000188112, 0.992555499}, + {4.329167, 1.000190616, 0.992572844}, + {4.333333, 1.000192642, 0.992590189}, + {4.3375, 1.000193954, 0.992607176}, + {4.341667, 1.000194788, 0.992624164}, + {4.345833, 1.000195146, 0.992640913}, + {4.35, 1.000194907, 0.992657602}, + {4.354167, 1.000194073, 0.992673993}, + {4.358333, 1.000192881, 0.992690444}, + {4.3625, 1.000190973, 0.992706597}, + {4.366667, 1.000188708, 0.99272275}, + {4.370833, 1.000185847, 0.992738664}, + {4.375, 1.000182509, 0.992754579}, + {4.379167, 1.000178695, 0.992770255}, + {4.383333, 1.000174522, 0.992785931}, + {4.3875, 1.000169754, 0.992801368}, + {4.391667, 1.000164747, 0.992816865}, + {4.395833, 1.000159144, 0.992832184}, + {4.4, 1.000153303, 0.992847502}, + {4.404167, 1.000146985, 0.992862642}, + {4.408333, 1.000140309, 0.992877781}, + {4.4125, 1.000133276, 0.992892802}, + {4.416667, 1.000126004, 0.992907822}, + {4.420833, 1.000118494, 0.992922723}, + {4.425, 1.000110626, 0.992937624}, + {4.429167, 1.00010252, 0.992952466}, + {4.433333, 1.000094175, 0.992967308}, + {4.4375, 1.000085592, 0.99298209}, + {4.441667, 1.00007689, 0.992996871}, + {4.445833, 1.000067949, 0.993011653}, + {4.45, 1.000058889, 0.993026376}, + {4.454167, 1.00004971, 0.993041158}, + {4.458333, 1.000040531, 0.99305588}, + {4.4625, 1.000031233, 0.993070602}, + {4.466667, 1.000021815, 0.993085384}, + {4.470833, 1.000012517, 0.993100107}, + {4.475, 1.000003099, 0.993114889}, + {4.479167, 0.999993742, 0.99312973}, + {4.483333, 0.999984443, 0.993144512}, + {4.4875, 0.999975204, 0.993159413}, + {4.491667, 0.999966025, 0.993174255}, + {4.495833, 0.999956965, 0.993189216}, + {4.5, 0.999948025, 0.993204176}, + {4.504167, 0.999939263, 0.993219137}, + {4.508333, 0.99993062, 0.993234158}, + {4.5125, 0.999922216, 0.993249297}, + {4.516667, 0.999913991, 0.993264377}, + {4.520833, 0.999906003, 0.993279576}, + {4.525, 0.999898255, 0.993294775}, + {4.529167, 0.999890745, 0.993310034}, + {4.533333, 0.999883533, 0.993325353}, + {4.5375, 0.999876559, 0.993340731}, + {4.541667, 0.999869883, 0.993356109}, + {4.545833, 0.999863565, 0.993371606}, + {4.55, 0.999857545, 0.993387103}, + {4.554167, 0.999851882, 0.993402719}, + {4.558333, 0.999846518, 0.993418276}, + {4.5625, 0.999841511, 0.993434012}, + {4.566667, 0.999836922, 0.993449688}, + {4.570833, 0.99983263, 0.993465483}, + {4.575, 0.999828756, 0.993481219}, + {4.579167, 0.999825239, 0.993497133}, + {4.583333, 0.99982208, 0.993512988}, + {4.5875, 0.999819338, 0.993528962}, + {4.591667, 0.999817014, 0.993544877}, + {4.595833, 0.999815047, 0.99356091}, + {4.6, 0.999813497, 0.993576944}, + {4.604167, 0.999812305, 0.993593037}, + {4.608333, 0.99981153, 0.99360913}, + {4.6125, 0.999811113, 0.993625283}, + {4.616667, 0.999811053, 0.993641496}, + {4.620833, 0.999811411, 0.993657649}, + {4.625, 0.999812186, 0.993673861}, + {4.629167, 0.999813259, 0.993690133}, + {4.633333, 0.999814749, 0.993706405}, + {4.6375, 0.999816537, 0.993722677}, + {4.641667, 0.999818742, 0.993738949}, + {4.645833, 0.999821246, 0.993755221}, + {4.65, 0.999824047, 0.993771493}, + {4.654167, 0.999827206, 0.993787825}, + {4.658333, 0.999830663, 0.993804097}, + {4.6625, 0.999834418, 0.993820429}, + {4.666667, 0.999838471, 0.993836701}, + {4.670833, 0.999842763, 0.993852973}, + {4.675, 0.999847353, 0.993869245}, + {4.679167, 0.999852121, 0.993885517}, + {4.683333, 0.999857187, 0.99390173}, + {4.6875, 0.999862432, 0.993917942}, + {4.691667, 0.999867916, 0.993934095}, + {4.695833, 0.999873579, 0.993950248}, + {4.7, 0.99987936, 0.993966401}, + {4.704167, 0.99988538, 0.993982494}, + {4.708333, 0.99989146, 0.993998528}, + {4.7125, 0.999897718, 0.994014502}, + {4.716667, 0.999904037, 0.994030535}, + {4.720833, 0.999910533, 0.99404639}, + {4.725, 0.99991703, 0.994062304}, + {4.729167, 0.999923587, 0.9940781}, + {4.733333, 0.999930203, 0.994093835}, + {4.7375, 0.999936879, 0.994109511}, + {4.741667, 0.999943554, 0.994125187}, + {4.745833, 0.999950171, 0.994140744}, + {4.75, 0.999956846, 0.994156241}, + {4.754167, 0.999963462, 0.994171679}, + {4.758333, 0.999970019, 0.994187057}, + {4.7625, 0.999976516, 0.994202256}, + {4.766667, 0.999982893, 0.994217515}, + {4.770833, 0.999989212, 0.994232595}, + {4.775, 0.99999547, 0.994247675}, + {4.779167, 1.00000155, 0.994262576}, + {4.783333, 1.00000751, 0.994277477}, + {4.7875, 1.000013351, 0.994292259}, + {4.791667, 1.000018954, 0.994306982}, + {4.795833, 1.000024438, 0.994321525}, + {4.8, 1.000029802, 0.994336069}, + {4.804167, 1.000034928, 0.994350433}, + {4.808333, 1.000039816, 0.994364798}, + {4.8125, 1.000044584, 0.994378984}, + {4.816667, 1.000048995, 0.99439317}, + {4.820833, 1.000053287, 0.994407177}, + {4.825, 1.00005734, 0.994421124}, + {4.829167, 1.000061154, 0.994434953}, + {4.833333, 1.000064611, 0.994448721}, + {4.8375, 1.000067949, 0.994462311}, + {4.841667, 1.000071049, 0.994475901}, + {4.845833, 1.000073791, 0.994489312}, + {4.85, 1.000076294, 0.994502723}, + {4.854167, 1.000078559, 0.994515955}, + {4.858333, 1.000080466, 0.994529188}, + {4.8625, 1.000082254, 0.994542241}, + {4.866667, 1.000083685, 0.994555235}, + {4.870833, 1.000084758, 0.99456811}, + {4.875, 1.000085711, 0.994580984}, + {4.879167, 1.000086308, 0.99459368}, + {4.883333, 1.000086665, 0.994606376}, + {4.8875, 1.000086784, 0.994618893}, + {4.891667, 1.000086546, 0.99463141}, + {4.895833, 1.000086069, 0.994643748}, + {4.9, 1.000085354, 0.994656146}, + {4.904167, 1.0000844, 0.994668365}, + {4.908333, 1.000083208, 0.994680583}, + {4.9125, 1.000081778, 0.994692683}, + {4.916667, 1.000080109, 0.994704783}, + {4.920833, 1.000078201, 0.994716704}, + {4.925, 1.000076056, 0.994728684}, + {4.929167, 1.000073791, 0.994740546}, + {4.933333, 1.000071168, 0.994752407}, + {4.9375, 1.000068426, 0.994764149}, + {4.941667, 1.000065565, 0.994775891}, + {4.945833, 1.000062346, 0.994787514}, + {4.95, 1.000059128, 0.994799197}, + {4.954167, 1.000055671, 0.99481076}, + {4.958333, 1.000052094, 0.994822323}, + {4.9625, 1.000048399, 0.994833887}, + {4.966667, 1.000044465, 0.99484539}, + {4.970833, 1.000040531, 0.994856834}, + {4.975, 1.000036478, 0.994868279}, + {4.979167, 1.000032187, 0.994879723}, + {4.983333, 1.000028014, 0.994891107}, + {4.9875, 1.000023603, 0.994902492}, + {4.991667, 1.000019193, 0.994913876}, + {4.995833, 1.000014782, 0.994925261}, + {5, 1.000010252, 0.994936585}, + {5.004167, 1.000005722, 0.99494797}, + {5.008333, 1.000001192, 0.994959295}, + {5.0125, 0.999996662, 0.99497062}, + {5.016667, 0.999992073, 0.994981945}, + {5.020833, 0.999987543, 0.994993329}, + {5.025, 0.999983072, 0.995004654}, + {5.029167, 0.999978602, 0.995015979}, + {5.033333, 0.999974132, 0.995027363}, + {5.0375, 0.99996978, 0.995038688}, + {5.041667, 0.999965489, 0.995050073}, + {5.045833, 0.999961257, 0.995061457}, + {5.05, 0.999957144, 0.995072842}, + {5.054167, 0.999953091, 0.995084286}, + {5.058333, 0.999949157, 0.99509567}, + {5.0625, 0.999945343, 0.995107114}, + {5.066667, 0.999941587, 0.995118558}, + {5.070833, 0.999938011, 0.995130002}, + {5.075, 0.999934614, 0.995141506}, + {5.079167, 0.999931276, 0.99515301}, + {5.083333, 0.999928117, 0.995164514}, + {5.0875, 0.999925137, 0.995176017}, + {5.091667, 0.999922276, 0.995187581}, + {5.095833, 0.999919593, 0.995199144}, + {5.1, 0.99991709, 0.995210707}, + {5.104167, 0.999914765, 0.99522233}, + {5.108333, 0.99991262, 0.995233953}, + {5.1125, 0.999910653, 0.995245576}, + {5.116667, 0.999908865, 0.995257199}, + {5.120833, 0.999907255, 0.995268881}, + {5.125, 0.999905825, 0.995280504}, + {5.129167, 0.999904573, 0.995292187}, + {5.133333, 0.99990356, 0.995303869}, + {5.1375, 0.999902725, 0.995315611}, + {5.141667, 0.99990201, 0.995327294}, + {5.145833, 0.999901593, 0.995339036}, + {5.15, 0.999901295, 0.995350778}, + {5.154167, 0.999901176, 0.99536252}, + {5.158333, 0.999901295, 0.995374262}, + {5.1625, 0.999901593, 0.995386004}, + {5.166667, 0.99990201, 0.995397747}, + {5.170833, 0.999902666, 0.995409489}, + {5.175, 0.9999035, 0.995421231}, + {5.179167, 0.999904454, 0.995432973}, + {5.183333, 0.999905646, 0.995444715}, + {5.1875, 0.999906957, 0.995456457}, + {5.191667, 0.999908388, 0.995468199}, + {5.195833, 0.999910057, 0.995479882}, + {5.2, 0.999911845, 0.995491624}, + {5.204167, 0.999913752, 0.995503306}, + {5.208333, 0.999915779, 0.995514989}, + {5.2125, 0.999917984, 0.995526671}, + {5.216667, 0.999920249, 0.995538294}, + {5.220833, 0.999922693, 0.995549917}, + {5.225, 0.999925196, 0.99556154}, + {5.229167, 0.999927878, 0.995573103}, + {5.233333, 0.999930561, 0.995584726}, + {5.2375, 0.999933362, 0.99559623}, + {5.241667, 0.999936283, 0.995607734}, + {5.245833, 0.999939263, 0.995619237}, + {5.25, 0.999942303, 0.995630682}, + {5.254167, 0.999945343, 0.995642126}, + {5.258333, 0.999948502, 0.99565351}, + {5.2625, 0.999951661, 0.995664835}, + {5.266667, 0.999954879, 0.99567616}, + {5.270833, 0.999958098, 0.995687425}, + {5.275, 0.999961376, 0.99569869}, + {5.279167, 0.999964654, 0.995709896}, + {5.283333, 0.999967933, 0.995721042}, + {5.2875, 0.999971151, 0.995732129}, + {5.291667, 0.99997443, 0.995743215}, + {5.295833, 0.999977648, 0.995754182}, + {5.3, 0.999980807, 0.995765209}, + {5.304167, 0.999983966, 0.995776117}, + {5.308333, 0.999987125, 0.995787024}, + {5.3125, 0.999990165, 0.995797813}, + {5.316667, 0.999993205, 0.995808601}, + {5.320833, 0.999996126, 0.995819271}, + {5.325, 0.999999046, 0.995829999}, + {5.329167, 1.000001788, 0.995840549}, + {5.333333, 1.00000453, 0.995851159}, + {5.3375, 1.000007153, 0.99586159}, + {5.341667, 1.000009775, 0.99587208}, + {5.345833, 1.000012159, 0.995882452}, + {5.35, 1.000014544, 0.995892823}, + {5.354167, 1.000016809, 0.995903075}, + {5.358333, 1.000018954, 0.995913327}, + {5.3625, 1.000020981, 0.99592346}, + {5.366667, 1.000022888, 0.995933592}, + {5.370833, 1.000024676, 0.995943606}, + {5.375, 1.000026345, 0.995953619}, + {5.379167, 1.000027895, 0.995963573}, + {5.383333, 1.000029325, 0.995973468}, + {5.3875, 1.000030637, 0.995983303}, + {5.391667, 1.000031829, 0.995993078}, + {5.395833, 1.000032783, 0.996002793}, + {5.4, 1.000033736, 0.996012509}, + {5.404167, 1.000034451, 0.996022105}, + {5.408333, 1.000035167, 0.996031642}, + {5.4125, 1.000035644, 0.996041179}, + {5.416667, 1.000036001, 0.996050656}, + {5.420833, 1.00003624, 0.996060073}, + {5.425, 1.000036359, 0.996069431}, + {5.429167, 1.00003624, 0.99607873}, + {5.433333, 1.00003612, 0.996088028}, + {5.4375, 1.000035882, 0.996097267}, + {5.441667, 1.000035405, 0.996106446}, + {5.445833, 1.000034928, 0.996115625}, + {5.45, 1.000034213, 0.996124744}, + {5.454167, 1.000033498, 0.996133745}, + {5.458333, 1.000032663, 0.996142805}, + {5.4625, 1.00003159, 0.996151805}, + {5.466667, 1.000030518, 0.996160746}, + {5.470833, 1.000029325, 0.996169686}, + {5.475, 1.000028014, 0.996178567}, + {5.479167, 1.000026703, 0.996187449}, + {5.483333, 1.000025153, 0.99619627}, + {5.4875, 1.000023603, 0.996205091}, + {5.491667, 1.000022054, 0.996213853}, + {5.495833, 1.000020266, 0.996222615}, + {5.5, 1.000018477, 0.996231318}, + {5.504167, 1.000016689, 0.99624002}, + {5.508333, 1.000014782, 0.996248722}, + {5.5125, 1.000012755, 0.996257365}, + {5.516667, 1.000010729, 0.996266007}, + {5.520833, 1.000008702, 0.99627465}, + {5.525, 1.000006676, 0.996283293}, + {5.529167, 1.00000453, 0.996291876}, + {5.533333, 1.000002384, 0.996300459}, + {5.5375, 1.000000238, 0.996309042}, + {5.541667, 0.999998033, 0.996317625}, + {5.545833, 0.999995828, 0.996326149}, + {5.55, 0.999993622, 0.996334672}, + {5.554167, 0.999991417, 0.996343195}, + {5.558333, 0.999989212, 0.996351779}, + {5.5625, 0.999987006, 0.996360302}, + {5.566667, 0.99998486, 0.996368825}, + {5.570833, 0.999982715, 0.996377289}, + {5.575, 0.999980569, 0.996385813}, + {5.579167, 0.999978483, 0.996394336}, + {5.583333, 0.999976397, 0.99640286}, + {5.5875, 0.99997443, 0.996411324}, + {5.591667, 0.999972463, 0.996419847}, + {5.595833, 0.999970496, 0.99642837}, + {5.6, 0.999968648, 0.996436894}, + {5.604167, 0.99996686, 0.996445358}, + {5.608333, 0.999965072, 0.996453881}, + {5.6125, 0.999963403, 0.996462405}, + {5.616667, 0.999961793, 0.996470869}, + {5.620833, 0.999960244, 0.996479392}, + {5.625, 0.999958754, 0.996487916}, + {5.629167, 0.999957383, 0.996496439}, + {5.633333, 0.999956071, 0.996504962}, + {5.6375, 0.99995482, 0.996513486}, + {5.641667, 0.999953687, 0.996522009}, + {5.645833, 0.999952614, 0.996530533}, + {5.65, 0.999951661, 0.996539056}, + {5.654167, 0.999950767, 0.99654758}, + {5.658333, 0.999949932, 0.996556044}, + {5.6625, 0.999949276, 0.996564627}, + {5.666667, 0.999948621, 0.99657315}, + {5.670833, 0.999948144, 0.996581614}, + {5.675, 0.999947667, 0.996590137}, + {5.679167, 0.999947369, 0.996598661}, + {5.683333, 0.999947131, 0.996607184}, + {5.6875, 0.999946952, 0.996615708}, + {5.691667, 0.999946892, 0.996624231}, + {5.695833, 0.999946952, 0.996632755}, + {5.7, 0.999947071, 0.996641219}, + {5.704167, 0.999947309, 0.996649742}, + {5.708333, 0.999947608, 0.996658266}, + {5.7125, 0.999947965, 0.996666729}, + {5.716667, 0.999948442, 0.996675193}, + {5.720833, 0.999948978, 0.996683657}, + {5.725, 0.999949634, 0.996692121}, + {5.729167, 0.999950349, 0.996700585}, + {5.733333, 0.999951124, 0.996709049}, + {5.7375, 0.999952018, 0.996717453}, + {5.741667, 0.999952912, 0.996725857}, + {5.745833, 0.999953926, 0.996734262}, + {5.75, 0.999954998, 0.996742666}, + {5.754167, 0.999956131, 0.99675101}, + {5.758333, 0.999957263, 0.996759415}, + {5.7625, 0.999958515, 0.9967677}, + {5.766667, 0.999959826, 0.996776044}, + {5.770833, 0.999961138, 0.996784329}, + {5.775, 0.999962509, 0.996792674}, + {5.779167, 0.999963939, 0.9968009}, + {5.783333, 0.99996537, 0.996809185}, + {5.7875, 0.99996686, 0.99681735}, + {5.791667, 0.99996835, 0.996825576}, + {5.795833, 0.9999699, 0.996833742}, + {5.8, 0.999971449, 0.996841908}, + {5.804167, 0.999972999, 0.996850014}, + {5.808333, 0.999974608, 0.99685812}, + {5.8125, 0.999976218, 0.996866167}, + {5.816667, 0.999977827, 0.996874273}, + {5.820833, 0.999979436, 0.99688226}, + {5.825, 0.999980986, 0.996890247}, + {5.829167, 0.999982595, 0.996898234}, + {5.833333, 0.999984205, 0.996906161}, + {5.8375, 0.999985754, 0.996914029}, + {5.841667, 0.999987304, 0.996921897}, + {5.845833, 0.999988854, 0.996929765}, + {5.85, 0.999990344, 0.996937573}, + {5.854167, 0.999991834, 0.996945322}, + {5.858333, 0.999993324, 0.99695307}, + {5.8625, 0.999994755, 0.996960759}, + {5.866667, 0.999996126, 0.996968508}, + {5.870833, 0.999997497, 0.996976137}, + {5.875, 0.999998748, 0.996983767}, + {5.879167, 1, 0.996991277}, + {5.883333, 1.000001311, 0.996998847}, + {5.8875, 1.000002384, 0.997006357}, + {5.891667, 1.000003576, 0.997013867}, + {5.895833, 1.000004649, 0.997021258}, + {5.9, 1.000005603, 0.997028708}, + {5.904167, 1.000006557, 0.99703604}, + {5.908333, 1.00000751, 0.997043431}, + {5.9125, 1.000008345, 0.997050703}, + {5.916667, 1.00000906, 0.997057974}, + {5.920833, 1.000009775, 0.997065246}, + {5.925, 1.00001049, 0.997072458}, + {5.929167, 1.000011086, 0.997079611}, + {5.933333, 1.000011563, 0.997086763}, + {5.9375, 1.00001204, 0.997093856}, + {5.941667, 1.000012398, 0.997100949}, + {5.945833, 1.000012755, 0.997107983}, + {5.95, 1.000012994, 0.997115016}, + {5.954167, 1.000013232, 0.99712199}, + {5.958333, 1.000013351, 0.997128963}, + {5.9625, 1.000013351, 0.997135878}, + {5.966667, 1.000013471, 0.997142792}, + {5.970833, 1.000013351, 0.997149646}, + {5.975, 1.000013232, 0.997156501}, + {5.979167, 1.000013113, 0.997163296}, + {5.983333, 1.000012875, 0.99717015}, + {5.9875, 1.000012517, 0.997176886}, + {5.991667, 1.000012159, 0.997183621}, + {5.995833, 1.000011802, 0.997190356}, + {6, 1.000011325, 0.997197032}, + {6.004167, 1.000010729, 0.997203708}, + {6.008333, 1.000010252, 0.997210383}, + {6.0125, 1.000009656, 0.997217}, + {6.016667, 1.000008941, 0.997223616}, + {6.020833, 1.000008225, 0.997230172}, + {6.025, 1.00000751, 0.997236729}, + {6.029167, 1.000006676, 0.997243285}, + {6.033333, 1.00000596, 0.997249842}, + {6.0375, 1.000005007, 0.997256339}, + {6.041667, 1.000004172, 0.997262836}, + {6.045833, 1.000003219, 0.997269332}, + {6.05, 1.000002265, 0.99727577}, + {6.054167, 1.000001311, 0.997282207}, + {6.058333, 1.000000358, 0.997288644}, + {6.0625, 0.999999344, 0.997295082}, + {6.066667, 0.999998331, 0.997301519}, + {6.070833, 0.999997258, 0.997307897}, + {6.075, 0.999996245, 0.997314274}, + {6.079167, 0.999995172, 0.997320652}, + {6.083333, 0.999994099, 0.99732703}, + {6.0875, 0.999993026, 0.997333407}, + {6.091667, 0.999992013, 0.997339785}, + {6.095833, 0.99999094, 0.997346103}, + {6.1, 0.999989867, 0.997352421}, + {6.104167, 0.999988794, 0.997358739}, + {6.108333, 0.999987781, 0.997365057}, + {6.1125, 0.999986768, 0.997371376}, + {6.116667, 0.999985754, 0.997377694}, + {6.120833, 0.999984741, 0.997384012}, + {6.125, 0.999983788, 0.99739027}, + {6.129167, 0.999982834, 0.997396588}, + {6.133333, 0.99998188, 0.997402847}, + {6.1375, 0.999980986, 0.997409165}, + {6.141667, 0.999980092, 0.997415423}, + {6.145833, 0.999979258, 0.997421682}, + {6.15, 0.999978423, 0.99742794}, + {6.154167, 0.999977648, 0.997434199}, + {6.158333, 0.999976933, 0.997440457}, + {6.1625, 0.999976218, 0.997446716}, + {6.166667, 0.999975562, 0.997452974}, + {6.170833, 0.999974906, 0.997459233}, + {6.175, 0.99997431, 0.997465432}, + {6.179167, 0.999973774, 0.99747169}, + {6.183333, 0.999973238, 0.997477889}, + {6.1875, 0.999972761, 0.997484148}, + {6.191667, 0.999972343, 0.997490346}, + {6.195833, 0.999971986, 0.997496605}, + {6.2, 0.999971628, 0.997502804}, + {6.204167, 0.99997133, 0.997509003}, + {6.208333, 0.999971092, 0.997515202}, + {6.2125, 0.999970913, 0.9975214}, + {6.216667, 0.999970734, 0.997527599}, + {6.220833, 0.999970615, 0.997533798}, + {6.225, 0.999970555, 0.997539937}, + {6.229167, 0.999970555, 0.997546136}, + {6.233333, 0.999970555, 0.997552276}, + {6.2375, 0.999970615, 0.997558475}, + {6.241667, 0.999970734, 0.997564614}, + {6.245833, 0.999970853, 0.997570753}, + {6.25, 0.999971092, 0.997576892}, + {6.254167, 0.99997133, 0.997583032}, + {6.258333, 0.999971569, 0.997589111}, + {6.2625, 0.999971926, 0.997595251}, + {6.266667, 0.999972284, 0.99760133}, + {6.270833, 0.999972641, 0.99760741}, + {6.275, 0.999973059, 0.99761349}, + {6.279167, 0.999973536, 0.997619569}, + {6.283333, 0.999974012, 0.997625649}, + {6.2875, 0.999974549, 0.997631669}, + {6.291667, 0.999975085, 0.997637689}, + {6.295833, 0.999975681, 0.997643709}, + {6.3, 0.999976277, 0.997649729}, + {6.304167, 0.999976933, 0.997655749}, + {6.308333, 0.999977589, 0.99766171}, + {6.3125, 0.999978244, 0.99766767}, + {6.316667, 0.99997896, 0.997673631}, + {6.320833, 0.999979675, 0.997679532}, + {6.325, 0.99998039, 0.997685492}, + {6.329167, 0.999981165, 0.997691393}, + {6.333333, 0.99998188, 0.997697234}, + {6.3375, 0.999982655, 0.997703135}, + {6.341667, 0.99998343, 0.997708976}, + {6.345833, 0.999984205, 0.997714818}, + {6.35, 0.999985039, 0.997720659}, + {6.354167, 0.999985814, 0.99772644}, + {6.358333, 0.999986589, 0.997732222}, + {6.3625, 0.999987364, 0.997737944}, + {6.366667, 0.999988139, 0.997743726}, + {6.370833, 0.999988973, 0.997749448}, + {6.375, 0.999989748, 0.99775517}, + {6.379167, 0.999990463, 0.997760832}, + {6.383333, 0.999991238, 0.997766495}, + {6.3875, 0.999992013, 0.997772098}, + {6.391667, 0.999992728, 0.99777776}, + {6.395833, 0.999993443, 0.997783363}, + {6.4, 0.999994159, 0.997788966}, + {6.404167, 0.999994814, 0.997794509}, + {6.408333, 0.99999547, 0.997800052}, + {6.4125, 0.999996126, 0.997805536}, + {6.416667, 0.999996781, 0.997811079}, + {6.420833, 0.999997377, 0.997816503}, + {6.425, 0.999997973, 0.997821987}, + {6.429167, 0.99999851, 0.997827411}, + {6.433333, 0.999999046, 0.997832835}, + {6.4375, 0.999999523, 0.997838199}, + {6.441667, 1, 0.997843623}, + {6.445833, 1.000000477, 0.997848928}, + {6.45, 1.000000834, 0.997854292}, + {6.454167, 1.000001192, 0.997859597}, + {6.458333, 1.00000155, 0.997864902}, + {6.4625, 1.000001907, 0.997870147}, + {6.466667, 1.000002265, 0.997875392}, + {6.470833, 1.000002503, 0.997880638}, + {6.475, 1.000002742, 0.997885823}, + {6.479167, 1.000002861, 0.997891009}, + {6.483333, 1.000003099, 0.997896194}, + {6.4875, 1.000003219, 0.99790132}, + {6.491667, 1.000003338, 0.997906446}, + {6.495833, 1.000003457, 0.997911572}, + {6.5, 1.000003457, 0.997916639}, + {6.504167, 1.000003457, 0.997921705}, + {6.508333, 1.000003457, 0.997926772}, + {6.5125, 1.000003338, 0.997931838}, + {6.516667, 1.000003338, 0.997936845}, + {6.520833, 1.000003219, 0.997941852}, + {6.525, 1.000003099, 0.997946858}, + {6.529167, 1.000002861, 0.997951806}, + {6.533333, 1.000002742, 0.997956753}, + {6.5375, 1.000002503, 0.9979617}, + {6.541667, 1.000002265, 0.997966647}, + {6.545833, 1.000002027, 0.997971535}, + {6.55, 1.000001669, 0.997976422}, + {6.554167, 1.000001311, 0.99798131}, + {6.558333, 1.000001073, 0.997986197}, + {6.5625, 1.000000715, 0.997991025}, + {6.566667, 1.000000238, 0.997995913}, + {6.570833, 0.999999881, 0.998000741}, + {6.575, 0.999999523, 0.998005509}, + {6.579167, 0.999999046, 0.998010337}, + {6.583333, 0.999998629, 0.998015106}, + {6.5875, 0.999998152, 0.998019934}, + {6.591667, 0.999997735, 0.998024702}, + {6.595833, 0.999997258, 0.998029411}, + {6.6, 0.999996781, 0.998034179}, + {6.604167, 0.999996245, 0.998038948}, + {6.608333, 0.999995768, 0.998043656}, + {6.6125, 0.999995232, 0.998048365}, + {6.616667, 0.999994755, 0.998053074}, + {6.620833, 0.999994218, 0.998057783}, + {6.625, 0.999993742, 0.998062491}, + {6.629167, 0.999993205, 0.998067141}, + {6.633333, 0.999992728, 0.998071849}, + {6.6375, 0.999992192, 0.998076499}, + {6.641667, 0.999991715, 0.998081207}, + {6.645833, 0.999991179, 0.998085856}, + {6.65, 0.999990702, 0.998090506}, + {6.654167, 0.999990225, 0.998095095}, + {6.658333, 0.999989748, 0.998099744}, + {6.6625, 0.999989271, 0.998104393}, + {6.666667, 0.999988794, 0.998108983}, + {6.670833, 0.999988377, 0.998113632}, + {6.675, 0.99998796, 0.998118222}, + {6.679167, 0.999987543, 0.998122811}, + {6.683333, 0.999987125, 0.998127401}, + {6.6875, 0.999986708, 0.99813199}, + {6.691667, 0.999986351, 0.99813658}, + {6.695833, 0.999985993, 0.99814117}, + {6.7, 0.999985635, 0.998145759}, + {6.704167, 0.999985337, 0.998150289}, + {6.708333, 0.999985039, 0.998154879}, + {6.7125, 0.999984741, 0.998159409}, + {6.716667, 0.999984503, 0.998163998}, + {6.720833, 0.999984264, 0.998168528}, + {6.725, 0.999984026, 0.998173058}, + {6.729167, 0.999983847, 0.998177588}, + {6.733333, 0.999983668, 0.998182118}, + {6.7375, 0.99998349, 0.998186648}, + {6.741667, 0.99998337, 0.998191178}, + {6.745833, 0.999983251, 0.998195648}, + {6.75, 0.999983132, 0.998200178}, + {6.754167, 0.999983072, 0.998204648}, + {6.758333, 0.999983072, 0.998209178}, + {6.7625, 0.999983013, 0.998213649}, + {6.766667, 0.999983013, 0.998218119}, + {6.770833, 0.999983013, 0.998222589}, + {6.775, 0.999983072, 0.99822706}, + {6.779167, 0.999983132, 0.99823153}, + {6.783333, 0.999983251, 0.998235941}, + {6.7875, 0.999983311, 0.998240411}, + {6.791667, 0.99998343, 0.998244822}, + {6.795833, 0.999983609, 0.998249233}, + {6.8, 0.999983728, 0.998253644}, + {6.804167, 0.999983907, 0.998258054}, + {6.808333, 0.999984145, 0.998262465}, + {6.8125, 0.999984324, 0.998266876}, + {6.816667, 0.999984562, 0.998271227}, + {6.820833, 0.999984801, 0.998275638}, + {6.825, 0.999985099, 0.998279989}, + {6.829167, 0.999985337, 0.99828434}, + {6.833333, 0.999985635, 0.998288691}, + {6.8375, 0.999985933, 0.998292983}, + {6.841667, 0.999986291, 0.998297334}, + {6.845833, 0.999986589, 0.998301625}, + {6.85, 0.999986947, 0.998305976}, + {6.854167, 0.999987304, 0.998310208}, + {6.858333, 0.999987662, 0.9983145}, + {6.8625, 0.999988019, 0.998318791}, + {6.866667, 0.999988377, 0.998323023}, + {6.870833, 0.999988735, 0.998327315}, + {6.875, 0.999989152, 0.998331547}, + {6.879167, 0.99998951, 0.998335719}, + {6.883333, 0.999989927, 0.998339951}, + {6.8875, 0.999990284, 0.998344183}, + {6.891667, 0.999990702, 0.998348355}, + {6.895833, 0.999991059, 0.998352528}, + {6.9, 0.999991477, 0.9983567}, + {6.904167, 0.999991834, 0.998360813}, + {6.908333, 0.999992251, 0.998364985}, + {6.9125, 0.999992609, 0.998369098}, + {6.916667, 0.999993026, 0.99837321}, + {6.920833, 0.999993384, 0.998377264}, + {6.925, 0.999993742, 0.998381376}, + {6.929167, 0.999994099, 0.998385429}, + {6.933333, 0.999994457, 0.998389482}, + {6.9375, 0.999994814, 0.998393536}, + {6.941667, 0.999995172, 0.998397589}, + {6.945833, 0.99999547, 0.998401582}, + {6.95, 0.999995768, 0.998405576}, + {6.954167, 0.999996126, 0.998409569}, + {6.958333, 0.999996424, 0.998413563}, + {6.9625, 0.999996662, 0.998417497}, + {6.966667, 0.99999696, 0.99842149}, + {6.970833, 0.999997199, 0.998425424}, + {6.975, 0.999997497, 0.998429298}, + {6.979167, 0.999997735, 0.998433232}, + {6.983333, 0.999997914, 0.998437107}, + {6.9875, 0.999998152, 0.998440981}, + {6.991667, 0.999998331, 0.998444855}, + {6.995833, 0.99999851, 0.99844873}, + {7, 0.999998689, 0.998452544}, + {7.004167, 0.999998808, 0.998456359}, + {7.008333, 0.999998927, 0.998460233}, + {7.0125, 0.999999046, 0.998463988}, + {7.016667, 0.999999166, 0.998467803}, + {7.020833, 0.999999225, 0.998471558}, + {7.025, 0.999999344, 0.998475313}, + {7.029167, 0.999999404, 0.998479068}, + {7.033333, 0.999999404, 0.998482823}, + {7.0375, 0.999999464, 0.998486519}, + {7.041667, 0.999999464, 0.998490274}, + {7.045833, 0.999999464, 0.998493969}, + {7.05, 0.999999404, 0.998497665}, + {7.054167, 0.999999404, 0.99850136}, + {7.058333, 0.999999344, 0.998504996}, + {7.0625, 0.999999285, 0.998508692}, + {7.066667, 0.999999225, 0.998512328}, + {7.070833, 0.999999106, 0.998515964}, + {7.075, 0.999998987, 0.998519599}, + {7.079167, 0.999998868, 0.998523176}, + {7.083333, 0.999998748, 0.998526812}, + {7.0875, 0.999998629, 0.998530388}, + {7.091667, 0.99999845, 0.998533964}, + {7.095833, 0.999998331, 0.99853754}, + {7.1, 0.999998152, 0.998541117}, + {7.104167, 0.999997973, 0.998544693}, + {7.108333, 0.999997795, 0.99854821}, + {7.1125, 0.999997616, 0.998551726}, + {7.116667, 0.999997377, 0.998555303}, + {7.120833, 0.999997199, 0.998558819}, + {7.125, 0.99999696, 0.998562336}, + {7.129167, 0.999996722, 0.998565793}, + {7.133333, 0.999996483, 0.99856931}, + {7.1375, 0.999996305, 0.998572826}, + {7.141667, 0.999996066, 0.998576283}, + {7.145833, 0.999995828, 0.998579741}, + {7.15, 0.999995589, 0.998583198}, + {7.154167, 0.999995351, 0.998586655}, + {7.158333, 0.999995053, 0.998590112}, + {7.1625, 0.999994814, 0.998593569}, + {7.166667, 0.999994576, 0.998597026}, + {7.170833, 0.999994338, 0.998600423}, + {7.175, 0.999994099, 0.99860388}, + {7.179167, 0.999993861, 0.998607278}, + {7.183333, 0.999993622, 0.998610675}, + {7.1875, 0.999993384, 0.998614073}, + {7.191667, 0.999993145, 0.99861753}, + {7.195833, 0.999992907, 0.998620868}, + {7.2, 0.999992728, 0.998624265}, + {7.204167, 0.99999249, 0.998627663}, + {7.208333, 0.999992311, 0.99863106}, + {7.2125, 0.999992073, 0.998634398}, + {7.216667, 0.999991894, 0.998637795}, + {7.220833, 0.999991715, 0.998641133}, + {7.225, 0.999991536, 0.998644471}, + {7.229167, 0.999991357, 0.998647809}, + {7.233333, 0.999991179, 0.998651147}, + {7.2375, 0.999991, 0.998654485}, + {7.241667, 0.99999088, 0.998657823}, + {7.245833, 0.999990702, 0.99866116}, + {7.25, 0.999990582, 0.998664498}, + {7.254167, 0.999990463, 0.998667777}, + {7.258333, 0.999990344, 0.998671114}, + {7.2625, 0.999990225, 0.998674393}, + {7.266667, 0.999990165, 0.998677671}, + {7.270833, 0.999990106, 0.998681009}, + {7.275, 0.999989986, 0.998684287}, + {7.279167, 0.999989927, 0.998687565}, + {7.283333, 0.999989927, 0.998690844}, + {7.2875, 0.999989867, 0.998694062}, + {7.291667, 0.999989867, 0.99869734}, + {7.295833, 0.999989808, 0.998700619}, + {7.3, 0.999989808, 0.998703837}, + {7.304167, 0.999989808, 0.998707116}, + {7.308333, 0.999989867, 0.998710334}, + {7.3125, 0.999989867, 0.998713553}, + {7.316667, 0.999989927, 0.998716831}, + {7.320833, 0.999989927, 0.99872005}, + {7.325, 0.999989986, 0.998723269}, + {7.329167, 0.999990046, 0.998726428}, + {7.333333, 0.999990165, 0.998729646}, + {7.3375, 0.999990225, 0.998732865}, + {7.341667, 0.999990344, 0.998736024}, + {7.345833, 0.999990404, 0.998739183}, + {7.35, 0.999990523, 0.998742402}, + {7.354167, 0.999990642, 0.998745561}, + {7.358333, 0.999990761, 0.99874872}, + {7.3625, 0.99999094, 0.998751879}, + {7.366667, 0.999991059, 0.998755038}, + {7.370833, 0.999991238, 0.998758137}, + {7.375, 0.999991357, 0.998761296}, + {7.379167, 0.999991536, 0.998764396}, + {7.383333, 0.999991715, 0.998767495}, + {7.3875, 0.999991834, 0.998770654}, + {7.391667, 0.999992013, 0.998773754}, + {7.395833, 0.999992192, 0.998776793}, + {7.4, 0.999992371, 0.998779893}, + {7.404167, 0.999992549, 0.998782992}, + {7.408333, 0.999992788, 0.998786032}, + {7.4125, 0.999992967, 0.998789132}, + {7.416667, 0.999993145, 0.998792171}, + {7.420833, 0.999993324, 0.998795211}, + {7.425, 0.999993563, 0.998798251}, + {7.429167, 0.999993742, 0.998801291}, + {7.433333, 0.99999392, 0.998804271}, + {7.4375, 0.999994099, 0.998807311}, + {7.441667, 0.999994338, 0.998810291}, + {7.445833, 0.999994516, 0.998813272}, + {7.45, 0.999994695, 0.998816252}, + {7.454167, 0.999994874, 0.998819232}, + {7.458333, 0.999995053, 0.998822212}, + {7.4625, 0.999995232, 0.998825133}, + {7.466667, 0.99999541, 0.998828113}, + {7.470833, 0.999995589, 0.998831034}, + {7.475, 0.999995768, 0.998833954}, + {7.479167, 0.999995947, 0.998836875}, + {7.483333, 0.999996126, 0.998839796}, + {7.4875, 0.999996305, 0.998842716}, + {7.491667, 0.999996424, 0.998845577}, + {7.495833, 0.999996603, 0.998848498}, + {7.5, 0.999996722, 0.998851359}, + {7.504167, 0.999996841, 0.99885422}, + {7.508333, 0.99999696, 0.998857081}, + {7.5125, 0.999997139, 0.998859942}, + {7.516667, 0.999997258, 0.998862803}, + {7.520833, 0.999997318, 0.998865604}, + {7.525, 0.999997437, 0.998868406}, + {7.529167, 0.999997556, 0.998871207}, + {7.533333, 0.999997616, 0.998874068}, + {7.5375, 0.999997735, 0.99887681}, + {7.541667, 0.999997795, 0.998879611}, + {7.545833, 0.999997854, 0.998882413}, + {7.55, 0.999997914, 0.998885155}, + {7.554167, 0.999997973, 0.998887956}, + {7.558333, 0.999998033, 0.998890698}, + {7.5625, 0.999998033, 0.99889344}, + {7.566667, 0.999998093, 0.998896182}, + {7.570833, 0.999998093, 0.998898864}, + {7.575, 0.999998093, 0.998901606}, + {7.579167, 0.999998093, 0.998904347}, + {7.583333, 0.999998093, 0.99890703}, + {7.5875, 0.999998093, 0.998909712}, + {7.591667, 0.999998093, 0.998912394}, + {7.595833, 0.999998093, 0.998915076}, + {7.6, 0.999998033, 0.998917758}, + {7.604167, 0.999998033, 0.998920441}, + {7.608333, 0.999997973, 0.998923063}, + {7.6125, 0.999997914, 0.998925745}, + {7.616667, 0.999997854, 0.998928368}, + {7.620833, 0.999997795, 0.998930991}, + {7.625, 0.999997735, 0.998933613}, + {7.629167, 0.999997675, 0.998936236}, + {7.633333, 0.999997616, 0.998938859}, + {7.6375, 0.999997497, 0.998941481}, + {7.641667, 0.999997437, 0.998944104}, + {7.645833, 0.999997318, 0.998946667}, + {7.65, 0.999997258, 0.998949289}, + {7.654167, 0.999997139, 0.998951852}, + {7.658333, 0.999997079, 0.998954415}, + {7.6625, 0.99999696, 0.998956978}, + {7.666667, 0.999996841, 0.998959541}, + {7.670833, 0.999996722, 0.998962104}, + {7.675, 0.999996662, 0.998964667}, + {7.679167, 0.999996543, 0.99896723}, + {7.683333, 0.999996424, 0.998969734}, + {7.6875, 0.999996305, 0.998972297}, + {7.691667, 0.999996185, 0.9989748}, + {7.695833, 0.999996066, 0.998977304}, + {7.7, 0.999995947, 0.998979867}, + {7.704167, 0.999995828, 0.99898237}, + {7.708333, 0.999995708, 0.998984873}, + {7.7125, 0.999995589, 0.998987377}, + {7.716667, 0.99999547, 0.99898988}, + {7.720833, 0.99999541, 0.998992324}, + {7.725, 0.999995291, 0.998994827}, + {7.729167, 0.999995172, 0.998997331}, + {7.733333, 0.999995053, 0.998999774}, + {7.7375, 0.999994934, 0.999002278}, + {7.741667, 0.999994874, 0.999004722}, + {7.745833, 0.999994755, 0.999007165}, + {7.75, 0.999994636, 0.999009669}, + {7.754167, 0.999994576, 0.999012113}, + {7.758333, 0.999994457, 0.999014556}, + {7.7625, 0.999994397, 0.999017}, + {7.766667, 0.999994338, 0.999019444}, + {7.770833, 0.999994218, 0.999021828}, + {7.775, 0.999994159, 0.999024272}, + {7.779167, 0.999994099, 0.999026716}, + {7.783333, 0.99999404, 0.9990291}, + {7.7875, 0.99999398, 0.999031544}, + {7.791667, 0.99999392, 0.999033928}, + {7.795833, 0.999993861, 0.999036372}, + {7.8, 0.999993801, 0.999038756}, + {7.804167, 0.999993801, 0.99904114}, + {7.808333, 0.999993742, 0.999043524}, + {7.8125, 0.999993742, 0.999045908}, + {7.816667, 0.999993682, 0.999048293}, + {7.820833, 0.999993682, 0.999050677}, + {7.825, 0.999993682, 0.999053061}, + {7.829167, 0.999993682, 0.999055445}, + {7.833333, 0.999993682, 0.99905777}, + {7.8375, 0.999993682, 0.999060154}, + {7.841667, 0.999993682, 0.999062479}, + {7.845833, 0.999993682, 0.999064863}, + {7.85, 0.999993682, 0.999067187}, + {7.854167, 0.999993742, 0.999069512}, + {7.858333, 0.999993742, 0.999071836}, + {7.8625, 0.999993801, 0.999074161}, + {7.866667, 0.999993801, 0.999076486}, + {7.870833, 0.999993861, 0.99907881}, + {7.875, 0.99999392, 0.999081135}, + {7.879167, 0.99999398, 0.999083459}, + {7.883333, 0.99999398, 0.999085724}, + {7.8875, 0.99999404, 0.999088049}, + {7.891667, 0.999994099, 0.999090314}, + {7.895833, 0.999994218, 0.999092638}, + {7.9, 0.999994278, 0.999094903}, + {7.904167, 0.999994338, 0.999097168}, + {7.908333, 0.999994397, 0.999099433}, + {7.9125, 0.999994516, 0.999101698}, + {7.916667, 0.999994576, 0.999103963}, + {7.920833, 0.999994636, 0.999106228}, + {7.925, 0.999994755, 0.999108434}, + {7.929167, 0.999994814, 0.999110699}, + {7.933333, 0.999994934, 0.999112964}, + {7.9375, 0.999994993, 0.999115169}, + {7.941667, 0.999995112, 0.999117374}, + {7.945833, 0.999995232, 0.999119639}, + {7.95, 0.999995291, 0.999121845}, + {7.954167, 0.99999541, 0.99912405}, + {7.958333, 0.99999547, 0.999126256}, + {7.9625, 0.999995589, 0.999128401}, + {7.966667, 0.999995708, 0.999130607}, + {7.970833, 0.999995768, 0.999132812}, + {7.975, 0.999995887, 0.999134958}, + {7.979167, 0.999996006, 0.999137163}, + {7.983333, 0.999996066, 0.999139309}, + {7.9875, 0.999996185, 0.999141455}, + {7.991667, 0.999996245, 0.99914366}, + {7.995833, 0.999996364, 0.999145746}, + {8, 0.999996483, 0.999147892}, + {8.004167, 0.999996543, 0.999150038}, + {8.008333, 0.999996662, 0.999152184}, + {8.0125, 0.999996722, 0.999154329}, + {8.016667, 0.999996781, 0.999156415}, + {8.020833, 0.999996901, 0.999158502}, + {8.025, 0.99999696, 0.999160647}, + {8.029167, 0.99999702, 0.999162734}, + {8.033333, 0.999997139, 0.99916482}, + {8.0375, 0.999997199, 0.999166906}, + {8.041667, 0.999997258, 0.999168992}, + {8.045833, 0.999997318, 0.999171078}, + {8.05, 0.999997377, 0.999173105}, + {8.054167, 0.999997437, 0.999175191}, + {8.058333, 0.999997497, 0.999177277}, + {8.0625, 0.999997556, 0.999179304}, + {8.066667, 0.999997616, 0.99918133}, + {8.070833, 0.999997675, 0.999183357}, + {8.075, 0.999997675, 0.999185443}, + {8.079167, 0.999997735, 0.99918741}, + {8.083333, 0.999997795, 0.999189436}, + {8.0875, 0.999997795, 0.999191463}, + {8.091667, 0.999997854, 0.99919349}, + {8.095833, 0.999997854, 0.999195457}, + {8.1, 0.999997854, 0.999197483}, + {8.104167, 0.999997914, 0.99919945}, + {8.108333, 0.999997914, 0.999201477}, + {8.1125, 0.999997914, 0.999203444}, + {8.116667, 0.999997914, 0.99920541}, + {8.120833, 0.999997914, 0.999207377}, + {8.125, 0.999997914, 0.999209344}, + {8.129167, 0.999997914, 0.999211311}, + {8.133333, 0.999997914, 0.999213278}, + {8.1375, 0.999997914, 0.999215186}, + {8.141667, 0.999997854, 0.999217153}, + {8.145833, 0.999997854, 0.99921906}, + {8.15, 0.999997854, 0.999221027}, + {8.154167, 0.999997795, 0.999222934}, + {8.158333, 0.999997795, 0.999224842}, + {8.1625, 0.999997735, 0.999226749}, + {8.166667, 0.999997735, 0.999228716}, + {8.170833, 0.999997675, 0.999230564}, + {8.175, 0.999997675, 0.999232471}, + {8.179167, 0.999997616, 0.999234378}, + {8.183333, 0.999997556, 0.999236286}, + {8.1875, 0.999997556, 0.999238193}, + {8.191667, 0.999997497, 0.999240041}, + {8.195833, 0.999997437, 0.999241948}, + {8.2, 0.999997377, 0.999243796}, + {8.204167, 0.999997318, 0.999245644}, + {8.208333, 0.999997318, 0.999247551}, + {8.2125, 0.999997258, 0.999249399}, + {8.216667, 0.999997199, 0.999251246}, + {8.220833, 0.999997139, 0.999253094}, + {8.225, 0.999997079, 0.999254942}, + {8.229167, 0.99999702, 0.99925679}, + {8.233333, 0.99999696, 0.999258637}, + {8.2375, 0.999996901, 0.999260485}, + {8.241667, 0.999996901, 0.999262273}, + {8.245833, 0.999996841, 0.999264121}, + {8.25, 0.999996781, 0.999265969}, + {8.254167, 0.999996722, 0.999267757}, + {8.258333, 0.999996662, 0.999269605}, + {8.2625, 0.999996603, 0.999271393}, + {8.266667, 0.999996543, 0.999273181}, + {8.270833, 0.999996483, 0.999274969}, + {8.275, 0.999996483, 0.999276817}, + {8.279167, 0.999996424, 0.999278605}, + {8.283333, 0.999996364, 0.999280393}, + {8.2875, 0.999996305, 0.999282181}, + {8.291667, 0.999996305, 0.999283969}, + {8.295833, 0.999996245, 0.999285758}, + {8.3, 0.999996185, 0.999287486}, + {8.304167, 0.999996185, 0.999289274}, + {8.308333, 0.999996126, 0.999291062}, + {8.3125, 0.999996126, 0.999292791}, + {8.316667, 0.999996066, 0.999294579}, + {8.320833, 0.999996066, 0.999296308}, + {8.325, 0.999996006, 0.999298096}, + {8.329167, 0.999996006, 0.999299824}, + {8.333333, 0.999996006, 0.999301553}, + {8.3375, 0.999995947, 0.999303341}, + {8.341667, 0.999995947, 0.999305069}, + {8.345833, 0.999995947, 0.999306798}, + {8.35, 0.999995947, 0.999308527}, + {8.354167, 0.999995887, 0.999310255}, + {8.358333, 0.999995887, 0.999311984}, + {8.3625, 0.999995887, 0.999313712}, + {8.366667, 0.999995887, 0.999315381}, + {8.370833, 0.999995887, 0.99931711}, + {8.375, 0.999995887, 0.999318838}, + {8.379167, 0.999995887, 0.999320507}, + {8.383333, 0.999995947, 0.999322236}, + {8.3875, 0.999995947, 0.999323905}, + {8.391667, 0.999995947, 0.999325633}, + {8.395833, 0.999995947, 0.999327302}, + {8.4, 0.999996006, 0.999329031}, + {8.404167, 0.999996006, 0.999330699}, + {8.408333, 0.999996006, 0.999332368}, + {8.4125, 0.999996066, 0.999334037}, + {8.416667, 0.999996066, 0.999335706}, + {8.420833, 0.999996126, 0.999337375}, + {8.425, 0.999996126, 0.999339044}, + {8.429167, 0.999996185, 0.999340713}, + {8.433333, 0.999996185, 0.999342322}, + {8.4375, 0.999996245, 0.999343991}, + {8.441667, 0.999996305, 0.99934566}, + {8.445833, 0.999996305, 0.99934727}, + {8.45, 0.999996364, 0.999348938}, + {8.454167, 0.999996424, 0.999350548}, + {8.458333, 0.999996483, 0.999352217}, + {8.4625, 0.999996483, 0.999353826}, + {8.466667, 0.999996543, 0.999355435}, + {8.470833, 0.999996603, 0.999357045}, + {8.475, 0.999996662, 0.999358654}, + {8.479167, 0.999996662, 0.999360263}, + {8.483333, 0.999996722, 0.999361873}, + {8.4875, 0.999996781, 0.999363482}, + {8.491667, 0.999996841, 0.999365091}, + {8.495833, 0.999996901, 0.999366701}, + {8.5, 0.99999696, 0.99936825}, + {8.504167, 0.99999696, 0.99936986}, + {8.508333, 0.99999702, 0.999371409}, + {8.5125, 0.999997079, 0.999373019}, + {8.516667, 0.999997139, 0.999374568}, + {8.520833, 0.999997199, 0.999376178}, + {8.525, 0.999997258, 0.999377728}, + {8.529167, 0.999997258, 0.999379277}, + {8.533333, 0.999997318, 0.999380827}, + {8.5375, 0.999997377, 0.999382377}, + {8.541667, 0.999997437, 0.999383926}, + {8.545833, 0.999997497, 0.999385476}, + {8.55, 0.999997497, 0.999387026}, + {8.554167, 0.999997556, 0.999388516}, + {8.558333, 0.999997616, 0.999390066}, + {8.5625, 0.999997616, 0.999391615}, + {8.566667, 0.999997675, 0.999393106}, + {8.570833, 0.999997735, 0.999394655}, + {8.575, 0.999997735, 0.999396145}, + {8.579167, 0.999997795, 0.999397635}, + {8.583333, 0.999997795, 0.999399185}, + {8.5875, 0.999997854, 0.999400675}, + {8.591667, 0.999997914, 0.999402165}, + {8.595833, 0.999997914, 0.999403656}, + {8.6, 0.999997914, 0.999405146}, + {8.604167, 0.999997973, 0.999406636}, + {8.608333, 0.999997973, 0.999408126}, + {8.6125, 0.999998033, 0.999409556}, + {8.616667, 0.999998033, 0.999411047}, + {8.620833, 0.999998033, 0.999412537}, + {8.625, 0.999998093, 0.999413967}, + {8.629167, 0.999998093, 0.999415457}, + {8.633333, 0.999998093, 0.999416888}, + {8.6375, 0.999998093, 0.999418318}, + {8.641667, 0.999998093, 0.999419808}, + {8.645833, 0.999998152, 0.999421239}, + {8.65, 0.999998152, 0.999422669}, + {8.654167, 0.999998152, 0.9994241}, + {8.658333, 0.999998152, 0.99942553}, + {8.6625, 0.999998152, 0.999426961}, + {8.666667, 0.999998152, 0.999428391}, + {8.670833, 0.999998152, 0.999429822}, + {8.675, 0.999998152, 0.999431252}, + {8.679167, 0.999998152, 0.999432623}, + {8.683333, 0.999998093, 0.999434054}, + {8.6875, 0.999998093, 0.999435425}, + {8.691667, 0.999998093, 0.999436855}, + {8.695833, 0.999998093, 0.999438226}, + {8.7, 0.999998093, 0.999439657}, + {8.704167, 0.999998033, 0.999441028}, + {8.708333, 0.999998033, 0.999442399}, + {8.7125, 0.999998033, 0.999443829}, + {8.716667, 0.999998033, 0.9994452}, + {8.720833, 0.999997973, 0.999446571}, + {8.725, 0.999997973, 0.999447942}, + {8.729167, 0.999997973, 0.999449313}, + {8.733333, 0.999997914, 0.999450684}, + {8.7375, 0.999997914, 0.999452055}, + {8.741667, 0.999997914, 0.999453425}, + {8.745833, 0.999997854, 0.999454737}, + {8.75, 0.999997854, 0.999456108}, + {8.754167, 0.999997795, 0.999457479}, + {8.758333, 0.999997795, 0.99945879}, + {8.7625, 0.999997795, 0.999460161}, + {8.766667, 0.999997735, 0.999461472}, + {8.770833, 0.999997735, 0.999462843}, + {8.775, 0.999997675, 0.999464154}, + {8.779167, 0.999997675, 0.999465525}, + {8.783333, 0.999997675, 0.999466836}, + {8.7875, 0.999997616, 0.999468148}, + {8.791667, 0.999997616, 0.999469459}, + {8.795833, 0.999997616, 0.99947077}, + {8.8, 0.999997556, 0.999472082}, + {8.804167, 0.999997556, 0.999473393}, + {8.808333, 0.999997497, 0.999474704}, + {8.8125, 0.999997497, 0.999476016}, + {8.816667, 0.999997497, 0.999477327}, + {8.820833, 0.999997437, 0.999478638}, + {8.825, 0.999997437, 0.999479949}, + {8.829167, 0.999997437, 0.999481261}, + {8.833333, 0.999997377, 0.999482512}, + {8.8375, 0.999997377, 0.999483824}, + {8.841667, 0.999997377, 0.999485135}, + {8.845833, 0.999997377, 0.999486387}, + {8.85, 0.999997318, 0.999487698}, + {8.854167, 0.999997318, 0.99948895}, + {8.858333, 0.999997318, 0.999490201}, + {8.8625, 0.999997318, 0.999491513}, + {8.866667, 0.999997318, 0.999492764}, + {8.870833, 0.999997318, 0.999494016}, + {8.875, 0.999997258, 0.999495268}, + {8.879167, 0.999997258, 0.999496579}, + {8.883333, 0.999997258, 0.999497831}, + {8.8875, 0.999997258, 0.999499083}, + {8.891667, 0.999997258, 0.999500334}, + {8.895833, 0.999997258, 0.999501586}, + {8.9, 0.999997258, 0.999502838}, + {8.904167, 0.999997258, 0.999504089}, + {8.908333, 0.999997258, 0.999505281}, + {8.9125, 0.999997258, 0.999506533}, + {8.916667, 0.999997258, 0.999507785}, + {8.920833, 0.999997318, 0.999509037}, + {8.925, 0.999997318, 0.999510229}, + {8.929167, 0.999997318, 0.99951148}, + {8.933333, 0.999997318, 0.999512672}, + {8.9375, 0.999997318, 0.999513924}, + {8.941667, 0.999997318, 0.999515116}, + {8.945833, 0.999997377, 0.999516368}, + {8.95, 0.999997377, 0.99951756}, + {8.954167, 0.999997377, 0.999518752}, + {8.958333, 0.999997377, 0.999520004}, + {8.9625, 0.999997437, 0.999521196}, + {8.966667, 0.999997437, 0.999522388}, + {8.970833, 0.999997437, 0.99952358}, + {8.975, 0.999997497, 0.999524772}, + {8.979167, 0.999997497, 0.999525964}, + {8.983333, 0.999997497, 0.999527156}, + {8.9875, 0.999997556, 0.999528348}, + {8.991667, 0.999997556, 0.999529541}, + {8.995833, 0.999997616, 0.999530733}, + {9, 0.999997616, 0.999531865}, + {9.004167, 0.999997616, 0.999533057}, + {9.008333, 0.999997675, 0.999534249}, + {9.0125, 0.999997675, 0.999535382}, + {9.016667, 0.999997735, 0.999536574}, + {9.020833, 0.999997735, 0.999537706}, + {9.025, 0.999997735, 0.999538898}, + {9.029167, 0.999997795, 0.999540031}, + {9.033333, 0.999997795, 0.999541223}, + {9.0375, 0.999997854, 0.999542356}, + {9.041667, 0.999997854, 0.999543488}, + {9.045833, 0.999997914, 0.999544621}, + {9.05, 0.999997914, 0.999545753}, + {9.054167, 0.999997973, 0.999546945}, + {9.058333, 0.999997973, 0.999548078}, + {9.0625, 0.999997973, 0.99954921}, + {9.066667, 0.999998033, 0.999550343}, + {9.070833, 0.999998033, 0.999551415}, + {9.075, 0.999998093, 0.999552548}, + {9.079167, 0.999998093, 0.99955368}, + {9.083333, 0.999998093, 0.999554813}, + {9.0875, 0.999998152, 0.999555945}, + {9.091667, 0.999998152, 0.999557018}, + {9.095833, 0.999998212, 0.999558151}, + {9.1, 0.999998212, 0.999559224}, + {9.104167, 0.999998212, 0.999560356}, + {9.108333, 0.999998271, 0.999561429}, + {9.1125, 0.999998271, 0.999562562}, + {9.116667, 0.999998271, 0.999563634}, + {9.120833, 0.999998331, 0.999564707}, + {9.125, 0.999998331, 0.99956584}, + {9.129167, 0.999998331, 0.999566913}, + {9.133333, 0.999998331, 0.999567986}, + {9.1375, 0.999998391, 0.999569058}, + {9.141667, 0.999998391, 0.999570131}, + {9.145833, 0.999998391, 0.999571204}, + {9.15, 0.999998391, 0.999572277}, + {9.154167, 0.999998391, 0.99957335}, + {9.158333, 0.99999845, 0.999574423}, + {9.1625, 0.99999845, 0.999575496}, + {9.166667, 0.99999845, 0.999576569}, + {9.170833, 0.99999845, 0.999577582}, + {9.175, 0.99999845, 0.999578655}, + {9.179167, 0.99999845, 0.999579728}, + {9.183333, 0.99999845, 0.999580741}, + {9.1875, 0.99999845, 0.999581814}, + {9.191667, 0.99999845, 0.999582827}, + {9.195833, 0.99999851, 0.9995839}, + {9.2, 0.99999851, 0.999584913}, + {9.204167, 0.99999851, 0.999585927}, + {9.208333, 0.99999851, 0.999586999}, + {9.2125, 0.99999851, 0.999588013}, + {9.216667, 0.99999851, 0.999589026}, + {9.220833, 0.99999845, 0.999590039}, + {9.225, 0.99999845, 0.999591053}, + {9.229167, 0.99999845, 0.999592125}, + {9.233333, 0.99999845, 0.999593139}, + {9.2375, 0.99999845, 0.999594152}, + {9.241667, 0.99999845, 0.999595165}, + {9.245833, 0.99999845, 0.999596119}, + {9.25, 0.99999845, 0.999597132}, + {9.254167, 0.99999845, 0.999598145}, + {9.258333, 0.99999845, 0.999599159}, + {9.2625, 0.99999845, 0.999600172}, + {9.266667, 0.999998391, 0.999601126}, + {9.270833, 0.999998391, 0.999602139}, + {9.275, 0.999998391, 0.999603152}, + {9.279167, 0.999998391, 0.999604106}, + {9.283333, 0.999998391, 0.999605119}, + {9.2875, 0.999998391, 0.999606073}, + {9.291667, 0.999998331, 0.999607086}, + {9.295833, 0.999998331, 0.99960804}, + {9.3, 0.999998331, 0.999609053}, + {9.304167, 0.999998331, 0.999610007}, + {9.308333, 0.999998331, 0.99961096}, + {9.3125, 0.999998331, 0.999611914}, + {9.316667, 0.999998271, 0.999612927}, + {9.320833, 0.999998271, 0.999613881}, + {9.325, 0.999998271, 0.999614835}, + {9.329167, 0.999998271, 0.999615788}, + {9.333333, 0.999998271, 0.999616742}, + {9.3375, 0.999998271, 0.999617696}, + {9.341667, 0.999998212, 0.999618649}, + {9.345833, 0.999998212, 0.999619603}, + {9.35, 0.999998212, 0.999620557}, + {9.354167, 0.999998212, 0.999621511}, + {9.358333, 0.999998212, 0.999622464}, + {9.3625, 0.999998212, 0.999623418}, + {9.366667, 0.999998212, 0.999624312}, + {9.370833, 0.999998152, 0.999625266}, + {9.375, 0.999998152, 0.999626219}, + {9.379167, 0.999998152, 0.999627173}, + {9.383333, 0.999998152, 0.999628067}, + {9.3875, 0.999998152, 0.999629021}, + {9.391667, 0.999998152, 0.999629915}, + {9.395833, 0.999998152, 0.999630868}, + {9.4, 0.999998152, 0.999631763}, + {9.404167, 0.999998152, 0.999632716}, + {9.408333, 0.999998152, 0.99963361}, + {9.4125, 0.999998152, 0.999634564}, + {9.416667, 0.999998152, 0.999635458}, + {9.420833, 0.999998152, 0.999636352}, + {9.425, 0.999998152, 0.999637246}, + {9.429167, 0.999998152, 0.9996382}, + {9.433333, 0.999998152, 0.999639094}, + {9.4375, 0.999998152, 0.999639988}, + {9.441667, 0.999998152, 0.999640882}, + {9.445833, 0.999998152, 0.999641776}, + {9.45, 0.999998152, 0.99964267}, + {9.454167, 0.999998152, 0.999643564}, + {9.458333, 0.999998152, 0.999644458}, + {9.4625, 0.999998152, 0.999645352}, + {9.466667, 0.999998152, 0.999646246}, + {9.470833, 0.999998152, 0.999647141}, + {9.475, 0.999998212, 0.999648035}, + {9.479167, 0.999998212, 0.999648929}, + {9.483333, 0.999998212, 0.999649763}, + {9.4875, 0.999998212, 0.999650657}, + {9.491667, 0.999998212, 0.999651551}, + {9.495833, 0.999998212, 0.999652445}, + {9.5, 0.999998212, 0.99965328}, + {9.504167, 0.999998271, 0.999654174}, + {9.508333, 0.999998271, 0.999655008}, + {9.5125, 0.999998271, 0.999655902}, + {9.516667, 0.999998271, 0.999656737}, + {9.520833, 0.999998271, 0.999657631}, + {9.525, 0.999998331, 0.999658465}, + {9.529167, 0.999998331, 0.999659359}, + {9.533333, 0.999998331, 0.999660194}, + {9.5375, 0.999998331, 0.999661028}, + {9.541667, 0.999998331, 0.999661863}, + {9.545833, 0.999998391, 0.999662757}, + {9.55, 0.999998391, 0.999663591}, + {9.554167, 0.999998391, 0.999664426}, + {9.558333, 0.999998391, 0.99966526}, + {9.5625, 0.99999845, 0.999666095}, + {9.566667, 0.99999845, 0.999666929}, + {9.570833, 0.99999845, 0.999667764}, + {9.575, 0.99999845, 0.999668598}, + {9.579167, 0.99999845, 0.999669433}, + {9.583333, 0.99999851, 0.999670267}, + {9.5875, 0.99999851, 0.999671102}, + {9.591667, 0.99999851, 0.999671936}, + {9.595833, 0.99999851, 0.999672771}, + {9.6, 0.999998569, 0.999673545}, + {9.604167, 0.999998569, 0.99967438}, + {9.608333, 0.999998569, 0.999675214}, + {9.6125, 0.999998569, 0.999676049}, + {9.616667, 0.999998629, 0.999676824}, + {9.620833, 0.999998629, 0.999677658}, + {9.625, 0.999998629, 0.999678433}, + {9.629167, 0.999998629, 0.999679267}, + {9.633333, 0.999998629, 0.999680042}, + {9.6375, 0.999998689, 0.999680877}, + {9.641667, 0.999998689, 0.999681652}, + {9.645833, 0.999998689, 0.999682486}, + {9.65, 0.999998689, 0.999683261}, + {9.654167, 0.999998689, 0.999684036}, + {9.658333, 0.999998689, 0.999684811}, + {9.6625, 0.999998748, 0.999685645}, + {9.666667, 0.999998748, 0.99968642}, + {9.670833, 0.999998748, 0.999687195}, + {9.675, 0.999998748, 0.99968797}, + {9.679167, 0.999998748, 0.999688745}, + {9.683333, 0.999998748, 0.999689519}, + {9.6875, 0.999998748, 0.999690294}, + {9.691667, 0.999998748, 0.999691069}, + {9.695833, 0.999998808, 0.999691844}, + {9.7, 0.999998808, 0.999692619}, + {9.704167, 0.999998808, 0.999693394}, + {9.708333, 0.999998808, 0.999694169}, + {9.7125, 0.999998808, 0.999694943}, + {9.716667, 0.999998808, 0.999695718}, + {9.720833, 0.999998808, 0.999696434}, + {9.725, 0.999998808, 0.999697208}, + {9.729167, 0.999998808, 0.999697983}, + {9.733333, 0.999998808, 0.999698699}, + {9.7375, 0.999998808, 0.999699473}, + {9.741667, 0.999998808, 0.999700248}, + {9.745833, 0.999998808, 0.999700963}, + {9.75, 0.999998808, 0.999701738}, + {9.754167, 0.999998808, 0.999702454}, + {9.758333, 0.999998808, 0.999703228}, + {9.7625, 0.999998808, 0.999703944}, + {9.766667, 0.999998808, 0.999704719}, + {9.770833, 0.999998808, 0.999705434}, + {9.775, 0.999998808, 0.999706149}, + {9.779167, 0.999998808, 0.999706924}, + {9.783333, 0.999998808, 0.999707639}, + {9.7875, 0.999998808, 0.999708354}, + {9.791667, 0.999998808, 0.99970907}, + {9.795833, 0.999998808, 0.999709845}, + {9.8, 0.999998808, 0.99971056}, + {9.804167, 0.999998808, 0.999711275}, + {9.808333, 0.999998808, 0.99971199}, + {9.8125, 0.999998808, 0.999712706}, + {9.816667, 0.999998808, 0.999713421}, + {9.820833, 0.999998808, 0.999714136}, + {9.825, 0.999998808, 0.999714851}, + {9.829167, 0.999998808, 0.999715567}, + {9.833333, 0.999998748, 0.999716282}, + {9.8375, 0.999998748, 0.999716997}, + {9.841667, 0.999998748, 0.999717712}, + {9.845833, 0.999998748, 0.999718368}, + {9.85, 0.999998748, 0.999719083}, + {9.854167, 0.999998748, 0.999719799}, + {9.858333, 0.999998748, 0.999720514}, + {9.8625, 0.999998748, 0.999721169}, + {9.866667, 0.999998748, 0.999721885}, + {9.870833, 0.999998748, 0.9997226}, + {9.875, 0.999998748, 0.999723256}, + {9.879167, 0.999998748, 0.999723971}, + {9.883333, 0.999998748, 0.999724686}, + {9.8875, 0.999998748, 0.999725342}, + {9.891667, 0.999998748, 0.999726057}, + {9.895833, 0.999998748, 0.999726713}, + {9.9, 0.999998689, 0.999727428}, + {9.904167, 0.999998689, 0.999728084}, + {9.908333, 0.999998689, 0.999728799}, + {9.9125, 0.999998689, 0.999729455}, + {9.916667, 0.999998689, 0.99973011}, + {9.920833, 0.999998689, 0.999730825}, + {9.925, 0.999998689, 0.999731481}, + {9.929167, 0.999998689, 0.999732137}, + {9.933333, 0.999998689, 0.999732792}, + {9.9375, 0.999998689, 0.999733508}, + {9.941667, 0.999998689, 0.999734163}, + {9.945833, 0.999998689, 0.999734819}, + {9.95, 0.999998689, 0.999735475}, + {9.954167, 0.999998689, 0.99973613}, + {9.958333, 0.999998689, 0.999736786}, + {9.9625, 0.999998689, 0.999737501}, + {9.966667, 0.999998689, 0.999738157}, + {9.970833, 0.999998689, 0.999738812}, + {9.975, 0.999998689, 0.999739468}, + {9.979167, 0.999998689, 0.999740124}, + {9.983333, 0.999998689, 0.99974072}, + {9.9875, 0.999998689, 0.999741375}, + {9.991667, 0.999998748, 0.999742031}, + {9.995833, 0.999998748, 0.999742687}, + {10, 0.999998748, 0.999743342}}; diff --git a/examples/PhasorDynamics/Example3/example3.cpp b/examples/PhasorDynamics/Example3/example3.cpp new file mode 100644 index 000000000..398b92b1e --- /dev/null +++ b/examples/PhasorDynamics/Example3/example3.cpp @@ -0,0 +1,179 @@ +/** + * @file example3.cpp + * @author Adam Birchfield (abirchfield@tamu.edu) + * @author Slaven Peles (peless@ornl.gov) + * @brief Example running a 10-bus system + * + * Simulates a 11-bus system with 10 Genrou 6th order generator models + * split in two groups of five generators. The two groups are connected + * by a high-impedance branch, which makes connection between them weak. + * + */ +#include +#include +#include +#include + +// #include "example3.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using scalar_type = double; +using real_type = double; +using index_type = size_t; + +int main() +{ + using namespace GridKit::PhasorDynamics; + using namespace AnalysisManager::Sundials; + + /* Create model parts */ + BusInfinite bus1(1, 0); + + Bus bus2(0.999733719609643, 0.0230757421433613); + Bus bus3(0.999047460127767, 0.0436368240395443); + Bus bus4(0.998097277498088, 0.061658775943942); + Bus bus5(0.997021447662007, 0.0771246581966912); + Bus bus6(0.946436885707683, 0.322888837484268); + Bus bus7(0.943037519659334, 0.332686393642377); + Bus bus8(0.940418229359708, 0.340019961013984); + Bus bus9(0.938638861502395, 0.344901620288291); + Bus bus10(0.937739191669114, 0.347340277548916); + + Branch branch12(&bus1, &bus2, 0.001, 0.005, 0, 0); + Branch branch23(&bus2, &bus3, 0.001, 0.005, 0, 0); + Branch branch34(&bus3, &bus4, 0.001, 0.005, 0, 0); + Branch branch45(&bus4, &bus5, 0.001, 0.005, 0, 0); + Branch branch56(&bus5, &bus6, 0.001, 0.1, 0, 0); + Branch branch67(&bus6, &bus7, 0.001, 0.005, 0, 0); + Branch branch78(&bus7, &bus8, 0.001, 0.005, 0, 0); + Branch branch89(&bus8, &bus9, 0.001, 0.005, 0, 0); + Branch branch910(&bus9, &bus10, 0.001, 0.005, 0, 0); + + Genrou gen2(&bus2, 1, 0.5, -0.00442101, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + Genrou gen3(&bus3, 1, 0.5, -0.02510812, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + Genrou gen4(&bus4, 1, 0.5, -0.04339553, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + Genrou gen5(&bus5, 1, 0.5, -0.2334993, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + Genrou gen6(&bus6, 1, 0.5, 0.69907194, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + Genrou gen7(&bus7, 1, 0.5, -0.08318208, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + Genrou gen8(&bus8, 1, 0.5, -0.09123614, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + Genrou gen9(&bus9, 1, 0.5, -0.09662372, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + Genrou gen10(&bus10, 1, 0.5, -0.09932297, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + + BusFault fault(&bus10, 0, 1e-5, 0); + + /* Connect everything together */ + SystemModel sys; + + sys.addBus(&bus1); + sys.addBus(&bus2); + sys.addBus(&bus3); + sys.addBus(&bus4); + sys.addBus(&bus5); + sys.addBus(&bus6); + sys.addBus(&bus7); + sys.addBus(&bus8); + sys.addBus(&bus9); + sys.addBus(&bus10); + sys.addComponent(&branch12); + sys.addComponent(&branch23); + sys.addComponent(&branch34); + sys.addComponent(&branch45); + sys.addComponent(&branch56); + sys.addComponent(&branch67); + sys.addComponent(&branch78); + sys.addComponent(&branch89); + sys.addComponent(&branch910); + sys.addComponent(&gen2); + sys.addComponent(&gen3); + sys.addComponent(&gen4); + sys.addComponent(&gen5); + sys.addComponent(&gen6); + sys.addComponent(&gen7); + sys.addComponent(&gen8); + sys.addComponent(&gen9); + sys.addComponent(&gen10); + sys.addComponent(&fault); + sys.allocate(); + + real_type dt = 1.0 / 4.0 / 60.0; + + // Uncomment code below to print output to a file: + std::ofstream fileout; + fileout.open("example3_results.csv"); + std::ostream& out = fileout; + + // Create header for the CSV output file + out << "t,"; + for (size_t i = 0; i < 9; ++i) + { + out << "v" << i + 2 << ","; + } + for (size_t i = 0; i < 9; ++i) + { + out << "omega" << i + 2 << ","; + } + out << "\n"; + + auto output_cb = [&](real_type t) + { + std::vector& yval = sys.y(); + + // Output time + out << t << ","; + + // Output voltage magnitudes on buses + for (size_t i = 0; i < 9; ++i) + { + out << std::sqrt(yval[2 * i] * yval[2 * i] + + yval[2 * i + 1] * yval[2 * i + 1]) + << ","; + } + + // Output generator frequencies + for (size_t i = 0; i < 9; ++i) + { + // 18 is offset for variables of 9 buses. + // Each generator has 21 equations. + // We are outputting second equation of each generator. + out << yval[18 + 21 * i + 1] << ","; + } + out << "\n"; + }; + + // Set up simulation + Ida ida(&sys); + ida.configureSimulation(); + + // Run simulation, output each `dt` interval + scalar_type start = static_cast(clock()); + ida.initializeSimulation(0.0, false); + + // Run for 1s + int nout = static_cast(std::round((1.0 - 0.0) / dt)); + ida.runSimulation(1.0, nout, output_cb); + + // Introduce fault to ground and run for 0.1s + fault.setStatus(1); + ida.initializeSimulation(1.0, false); + nout = static_cast(std::round((1.1 - 1.0) / dt)); + ida.runSimulation(1.1, nout, output_cb); + + // Clear fault and run until t = 10s. + fault.setStatus(0); + ida.initializeSimulation(1.1, false); + nout = static_cast(std::round((10.0 - 1.1) / dt)); + ida.runSimulation(10.0, nout, output_cb); + double stop = static_cast(clock()); + + fileout.close(); + + return 0; +} diff --git a/examples/PhasorDynamics/Example4/CMakeLists.txt b/examples/PhasorDynamics/Example4/CMakeLists.txt new file mode 100644 index 000000000..55d69eaab --- /dev/null +++ b/examples/PhasorDynamics/Example4/CMakeLists.txt @@ -0,0 +1,12 @@ +add_executable(phasordynamics_example4 example4.cpp) +target_link_libraries(phasordynamics_example4 + GRIDKIT::phasor_dynamics_bus + GRIDKIT::phasor_dynamics_bus_fault + GRIDKIT::phasor_dynamics_branch + GRIDKIT::phasor_dynamics_genrou + GRIDKIT::phasor_dynamics_turbinegov + GRIDKIT::phasor_dynamics_load + GRIDKIT::solvers_dyn) +install(TARGETS phasordynamics_example4 RUNTIME DESTINATION bin) + +add_test(NAME GenrouTest1 COMMAND $) diff --git a/examples/PhasorDynamics/Example4/example4.cpp b/examples/PhasorDynamics/Example4/example4.cpp new file mode 100644 index 000000000..268918ff9 --- /dev/null +++ b/examples/PhasorDynamics/Example4/example4.cpp @@ -0,0 +1,267 @@ +/** + * @file example4.cpp + * @author Adam Birchfield (abirchfield@tamu.edu) + * @author Slaven Peles (peless@ornl.gov) + * @brief Example running a 2-bus system + * + * Simulates a 2-bus system with Genrou 6th order generator model and + * compares results with data generated for the same system by Poweworld. + * + */ +#include "example4.hpp" + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int main() +{ + using namespace GridKit::PhasorDynamics; + using namespace AnalysisManager::Sundials; + + using scalar_type = double; + using real_type = double; + using index_type = size_t; + + std::cout << "Example 4 version 2\n"; + + // + // Create model data + // + + SystemModelData data; + + // Set bus data + data.bus.resize(2); + + data.bus[0].bus_id = 0; + data.bus[0].bus_type = BusData::DEFAULT; + data.bus[0].Vr0 = 0.9949877346411762; + data.bus[0].Vi0 = 0.09999703952427966; + + data.bus[1].bus_id = 1; + data.bus[1].bus_type = BusData::SLACK; + data.bus[1].Vr0 = 1.0; + data.bus[1].Vi0 = 0.0; + + // Set branch data + data.branch.resize(1); + + data.branch[0].bus1_id = data.bus[0].bus_id; + data.branch[0].bus2_id = data.bus[1].bus_id; + data.branch[0].R = 0.0; + data.branch[0].X = 0.1; + data.branch[0].G = 0.0; + data.branch[0].B = 0.0; + + // Add faults + data.bus_fault.resize(1); + + data.bus_fault[0].R = 0.0; + data.bus_fault[0].X = 1e-3; + data.bus_fault[0].status = false; + + // + // Instantiate system model + // + + SystemModel sys(data); + + // Set generator data + data.genrou.resize(1); + + data.genrou[0].unit_id = 1; + data.genrou[0].p0 = 1.; + data.genrou[0].q0 = 0.05013; + data.genrou[0].H = 3.; + data.genrou[0].D = 0.; + data.genrou[0].Ra = 0.; + data.genrou[0].Tdop = 7.; + data.genrou[0].Tdopp = .04; + data.genrou[0].Tqopp = .05; + data.genrou[0].Tqop = .75; + data.genrou[0].Xd = 2.1; + data.genrou[0].Xdp = 0.2; + data.genrou[0].Xdpp = 0.18; + data.genrou[0].Xq = 0.5; + data.genrou[0].Xqp = 0.5; + data.genrou[0].Xqpp = 0.18; + data.genrou[0].Xl = 0.15; + data.genrou[0].S10 = 0.; + data.genrou[0].S12 = 0.; + + data.gov.resize(1); + + // Set Gov data (Default PW values) + data.gov[0].R = 0.05; + data.gov[0].Pvmin = 0; + data.gov[0].Pvmax = 1.0; + data.gov[0].T1 = 0.5; + data.gov[0].T2 = 2.5; + data.gov[0].T3 = 7.5; + data.gov[0].Dt = 0; + + // Manual add gen & gov components + // This is a hack since SignalBus not implemented + + // Create Pointers first + Genrou* gen; + TurbineGov* gov; + + // Instatiate Genrou & add to system model + gen = new Genrou( + sys.getBus(0), + data.genrou[0]); + + // Instatiate GovernorTgov1 & add to system model + gov = new TurbineGov( + gen, + data.gov[0]); + gen->setgovenor(gov); + + // Add Generator and Governor to System + sys.addComponent(gen); + sys.addComponent(gov); + + // Allocate Memory + sys.allocate(); + + // Get access to the fault + auto* fault = sys.getBusFault(0); + + // Set time step to 1/4 of a 60Hz cycle + real_type dt = 1.0 / 4.0 / 60.0; + + // A data structure to keep track of the data we want to + // compare to the reference solution. Rather than keeping + // the entire solution vector at every time step around, + // we instead narrow down exactly what we want to keep. + // + // Since this struct is "simple" enough (no constructors or + // assignment operators, and "simple" members), it is a POD + // (plain ol' data), which have some benefits in C++. + struct OutputData + { + // Output variables are time, real and imaginary voltage and + // frequency deviation + real_type ti, Vr, Vi, dw; + }; + + // A list of output for each time step. + std::vector output; + + // A callback which will be called by the integrator after + // each time step. It will be told the time of the current + // state, and it is allowed to access the up-to-date state + // of the components, which are captured by a closure + // due to the [&] notation (every variable that is referenced + // by the callback that is external to the callback itself - + // here output, bus1, and gen - will be considered a + // reference to that variable inside the callback). We select + // the subset of the output we're interested in recording and + // push it into output, which is updated outside the callback. + auto output_cb = [&](real_type t) + { + std::vector& y_val = sys.y(); + + output.push_back(OutputData{t, y_val[0], y_val[1], y_val[3]}); + }; + + // Set up simulation + Ida ida(&sys); + ida.configureSimulation(); + + // Run simulation - making sure to pass the callback to record output + real_type start = static_cast(clock()); + + // Run for 1s + ida.initializeSimulation(0.0, false); + int nout = static_cast(std::round((1.0 - 0.0) / dt)); + ida.runSimulation(1.0, nout, output_cb); + + // Introduce fault and run for the next 0.1s + fault->setStatus(true); + ida.initializeSimulation(1.0, false); + nout = static_cast(std::round((1.1 - 1.0) / dt)); + ida.runSimulation(1.1, nout, output_cb); + + // Clear the fault and run until t = 10s. + fault->setStatus(false); + ida.initializeSimulation(1.1, false); + nout = static_cast(std::round((10.0 - 1.1) / dt)); + ida.runSimulation(10.0, nout, output_cb); + real_type stop = static_cast(clock()); + + real_type error_V = 0.0; // error in |V| + real_type error_w = 0.0; // error in rotor speed + + // Read through the simulation data stored in the buffer. + // Since we captured by reference, output should be available + // for us to read here, outside the callback. + for (size_t i = 0; i < output.size(); i++) + { + OutputData data = output[i]; + std::vector& ref_sol = Example4::reference_solution[i + 1]; + + real_type err = + std::abs(std::sqrt(data.Vr * data.Vr + data.Vi * data.Vi) - ref_sol[2]) + / (1.0 + std::abs(ref_sol[2])); + if (err > error_V) + error_V = err; + + err = std::abs(1.0 + data.dw - ref_sol[1]) / (1.0 + ref_sol[1]); + if (err > error_w) + error_w = err; + + // // Optional output + std::cout << "GridKit: t = " << data.ti + << ", |V| = " << std::sqrt(data.Vr * data.Vr + data.Vi * data.Vi) + << ", w = " << (1.0 + data.dw) << "\n"; + // std::cout << "Ref : t = " << ref_sol[0] + // << ", |V| = " << ref_sol[2] + // << ", w = " << ref_sol[1] + // << "\n"; + // std::cout << "Error in |V| = " + // << err + // << "\n"; + // std::cout << "\n"; + } + + // Errors allowed for agreement with Powerworld results + real_type error_V_allowed = 2e-4; + real_type error_w_allowed = 1e-4; + + // Tolerances based on Powerworld reference accuracy + int status = 0; + std::cout << "Max error in |V| = " << error_V << "\n"; + if (error_V > error_V_allowed) + { + std::cout << "Test failed with error too large!\n"; + status = 1; + } + std::cout << "Max error in w = " << error_w << "\n"; + if (error_w > error_w_allowed) + { + std::cout << "Test failed with error too large!\n"; + status = 1; + } + + std::cout << "\n\nComplete in " << (stop - start) / CLOCKS_PER_SEC << " seconds\n"; + + return status; +} diff --git a/examples/PhasorDynamics/Example4/example4.hpp b/examples/PhasorDynamics/Example4/example4.hpp new file mode 100644 index 000000000..c1d0c1c2d --- /dev/null +++ b/examples/PhasorDynamics/Example4/example4.hpp @@ -0,0 +1,2421 @@ +/** + * @file example4.hpp + * @author Luke Lowery (lukel@tamu.edu) + * @author Adam Birchfield (abirchfield@tamu.edu) + * @author Slaven Peles (peless@ornl.gov) + * @brief Reference solution for the 2-bus system obtained with Powerworld + * + */ +#include + +// Columns: +// Time, Machine Speed (PowerWorld), Bus 1 Voltage Magnitude (PowerWorld)}, +namespace Example4 +{ + std::vector> reference_solution = + { + {0,1,1.000000477}, + {0.004167,1,1.000000477}, + {0.008333,1,1.000000477}, + {0.0125,0.99999994,1.000000477}, + {0.016667,0.99999994,1.000000477}, + {0.020833,0.99999994,1.000000477}, + {0.025,0.99999994,1.000000477}, + {0.029167,0.99999994,1.000000477}, + {0.033333,0.99999994,1.000000477}, + {0.0375,0.99999994,1.000000477}, + {0.041667,0.99999994,1.000000477}, + {0.045833,0.99999994,1.000000477}, + {0.05,0.999999881,1.000000477}, + {0.054167,0.999999881,1.000000477}, + {0.058333,0.999999881,1.000000477}, + {0.0625,0.999999881,1.000000477}, + {0.066667,0.999999881,1.000000477}, + {0.070833,0.999999881,1.000000477}, + {0.075,0.999999881,1.000000477}, + {0.079167,0.999999881,1.000000477}, + {0.083333,0.999999881,1.000000477}, + {0.0875,0.999999881,1.000000477}, + {0.091667,0.999999881,1.000000477}, + {0.095833,0.999999881,1.000000477}, + {0.1,0.999999881,1.000000477}, + {0.104167,0.999999881,1.000000477}, + {0.108333,0.999999881,1.000000477}, + {0.1125,0.999999881,1.000000477}, + {0.116667,0.999999881,1.000000477}, + {0.120833,0.999999881,1.000000477}, + {0.125,0.999999881,1.000000477}, + {0.129167,0.999999881,1.000000477}, + {0.133333,0.999999881,1.000000477}, + {0.1375,0.99999994,1.000000477}, + {0.141667,0.99999994,1.000000477}, + {0.145833,0.99999994,1.000000477}, + {0.15,0.99999994,1.000000477}, + {0.154167,0.99999994,1.000000477}, + {0.158333,0.99999994,1.000000477}, + {0.1625,0.99999994,1.000000477}, + {0.166667,0.99999994,1.000000477}, + {0.170833,0.99999994,1.000000477}, + {0.175,0.99999994,1.000000477}, + {0.179167,0.99999994,1.000000477}, + {0.183333,0.99999994,1.000000477}, + {0.1875,0.99999994,1.000000477}, + {0.191667,0.99999994,1.000000477}, + {0.195833,1,1.000000477}, + {0.2,1,1.000000477}, + {0.204167,1,1.000000477}, + {0.208333,1,1.000000477}, + {0.2125,1,1.000000477}, + {0.216667,1,1.000000477}, + {0.220833,1,1.000000477}, + {0.225,1,1.000000477}, + {0.229167,1,1.000000477}, + {0.233333,1,1.000000477}, + {0.2375,1,1.000000477}, + {0.241667,1,1.000000477}, + {0.245833,1,1.000000477}, + {0.25,1,1.000000477}, + {0.254167,1,1.000000477}, + {0.258333,1,1.000000477}, + {0.2625,1,1.000000477}, + {0.266667,1,1.000000477}, + {0.270833,1,1.000000477}, + {0.275,1,1.000000477}, + {0.279167,1,1.000000477}, + {0.283333,1,1.000000477}, + {0.2875,1,1.000000477}, + {0.291667,1,1.000000477}, + {0.295833,1.000000119,1.000000477}, + {0.3,1.000000119,1.000000477}, + {0.304167,1.000000119,1.000000477}, + {0.308333,1.000000119,1.000000477}, + {0.3125,1.000000119,1.000000477}, + {0.316667,1.000000119,1.000000477}, + {0.320833,1.000000119,1.000000477}, + {0.325,1.000000119,1.000000477}, + {0.329167,1.000000119,1.000000477}, + {0.333333,1.000000119,1.000000477}, + {0.3375,1.000000119,1.000000477}, + {0.341667,1.000000119,1.000000477}, + {0.345833,1.000000119,1.000000477}, + {0.35,1.000000119,1.000000477}, + {0.354167,1.000000119,1.000000477}, + {0.358333,1.000000119,1.000000477}, + {0.3625,1,1.000000477}, + {0.366667,1,1.000000477}, + {0.370833,1,1.000000477}, + {0.375,1,1.000000477}, + {0.379167,1,1.000000477}, + {0.383333,1,1.000000477}, + {0.3875,1,1.000000477}, + {0.391667,1,1.000000477}, + {0.395833,1,1.000000477}, + {0.4,1,1.000000477}, + {0.404167,1,1.000000477}, + {0.408333,1,1.000000477}, + {0.4125,1,1.000000477}, + {0.416667,1,1.000000477}, + {0.420833,1,1.000000477}, + {0.425,1,1.000000477}, + {0.429167,1,1.000000477}, + {0.433333,1,1.000000477}, + {0.4375,1,1.000000477}, + {0.441667,1,1.000000477}, + {0.445833,1,1.000000477}, + {0.45,1,1.000000477}, + {0.454167,1,1.000000477}, + {0.458333,1,1.000000477}, + {0.4625,1,1.000000477}, + {0.466667,1,1.000000477}, + {0.470833,1,1.000000477}, + {0.475,1,1.000000477}, + {0.479167,1,1.000000477}, + {0.483333,1,1.000000477}, + {0.4875,1,1.000000477}, + {0.491667,1,1.000000477}, + {0.495833,1,1.000000477}, + {0.5,1,1.000000477}, + {0.504167,1,1.000000477}, + {0.508333,1,1.000000477}, + {0.5125,0.99999994,1.000000477}, + {0.516667,0.99999994,1.000000477}, + {0.520833,0.99999994,1.000000477}, + {0.525,0.99999994,1.000000477}, + {0.529167,0.99999994,1.000000477}, + {0.533333,0.99999994,1.000000477}, + {0.5375,0.99999994,1.000000477}, + {0.541667,0.99999994,1.000000477}, + {0.545833,0.99999994,1.000000477}, + {0.55,0.99999994,1.000000477}, + {0.554167,0.99999994,1.000000477}, + {0.558333,0.99999994,1.000000477}, + {0.5625,0.99999994,1.000000477}, + {0.566667,0.99999994,1.000000477}, + {0.570833,0.99999994,1.000000477}, + {0.575,0.99999994,1.000000477}, + {0.579167,0.99999994,1.000000477}, + {0.583333,0.99999994,1.000000477}, + {0.5875,0.99999994,1.000000477}, + {0.591667,0.99999994,1.000000477}, + {0.595833,0.99999994,1.000000477}, + {0.6,0.99999994,1.000000477}, + {0.604167,0.99999994,1.000000477}, + {0.608333,0.99999994,1.000000477}, + {0.6125,0.99999994,1.000000477}, + {0.616667,0.99999994,1.000000477}, + {0.620833,1,1.000000477}, + {0.625,1,1.000000477}, + {0.629167,1,1.000000477}, + {0.633333,1,1.000000477}, + {0.6375,1,1.000000477}, + {0.641667,1,1.000000477}, + {0.645833,1,1.000000477}, + {0.65,1,1.000000477}, + {0.654167,1,1.000000477}, + {0.658333,1,1.000000477}, + {0.6625,1,1.000000477}, + {0.666667,1,1.000000477}, + {0.670833,1,1.000000477}, + {0.675,1,1.000000477}, + {0.679167,1,1.000000477}, + {0.683333,1,1.000000477}, + {0.6875,1,1.000000477}, + {0.691667,1,1.000000477}, + {0.695833,1,1.000000477}, + {0.7,1,1.000000477}, + {0.704167,1,1.000000477}, + {0.708333,1,1.000000477}, + {0.7125,1,1.000000477}, + {0.716667,1,1.000000477}, + {0.720833,1,1.000000477}, + {0.725,1,1.000000477}, + {0.729167,1,1.000000477}, + {0.733333,1,1.000000477}, + {0.7375,1,1.000000477}, + {0.741667,1,1.000000477}, + {0.745833,1,1.000000477}, + {0.75,1,1.000000477}, + {0.754167,1,1.000000477}, + {0.758333,1,1.000000477}, + {0.7625,1,1.000000477}, + {0.766667,1,1.000000477}, + {0.770833,1,1.000000477}, + {0.775,1,1.000000477}, + {0.779167,1,1.000000477}, + {0.783333,1,1.000000477}, + {0.7875,1,1.000000477}, + {0.791667,1,1.000000477}, + {0.795833,1,1.000000477}, + {0.8,1,1.000000477}, + {0.804167,1,1.000000477}, + {0.808333,1,1.000000477}, + {0.8125,1,1.000000477}, + {0.816667,1,1.000000477}, + {0.820833,1,1.000000477}, + {0.825,1,1.000000477}, + {0.829167,1,1.000000477}, + {0.833333,1,1.000000477}, + {0.8375,1,1.000000477}, + {0.841667,1,1.000000477}, + {0.845833,1,1.000000477}, + {0.85,1,1.000000477}, + {0.854167,1,1.000000477}, + {0.858333,1,1.000000477}, + {0.8625,1,1.000000477}, + {0.866667,1,1.000000477}, + {0.870833,1,1.000000477}, + {0.875,1,1.000000477}, + {0.879167,1,1.000000477}, + {0.883333,1,1.000000477}, + {0.8875,1,1.000000477}, + {0.891667,1,1.000000477}, + {0.895833,1,1.000000477}, + {0.9,1,1.000000477}, + {0.904167,1,1.000000477}, + {0.908333,1,1.000000477}, + {0.9125,1,1.000000477}, + {0.916667,1,1.000000477}, + {0.920833,1,1.000000477}, + {0.925,1,1.000000477}, + {0.929167,1,1.000000477}, + {0.933333,1,1.000000477}, + {0.9375,1,1.000000477}, + {0.941667,1,1.000000477}, + {0.945833,1,1.000000477}, + {0.95,1,1.000000477}, + {0.954167,1,1.000000477}, + {0.958333,1,1.000000477}, + {0.9625,1,1.000000477}, + {0.966667,1,1.000000477}, + {0.970833,1,1.000000477}, + {0.975,1,1.000000477}, + {0.979167,1,1.000000477}, + {0.983333,1,1.000000477}, + {0.9875,1,1.000000477}, + {0.991667,1,1.000000477}, + {0.995833,1,1.000000477}, + {1,1,1.000000477}, + {1,1,0.015317298}, + {1.004167,1.000682712,0.015128844}, + {1.008333,1.001363277,0.014973078}, + {1.0125,1.002042413,0.014841928}, + {1.016667,1.002720118,0.014729479}, + {1.020833,1.003396153,0.014631275}, + {1.025,1.004071236,0.014543866}, + {1.029167,1.004745126,0.014464659}, + {1.033333,1.005417824,0.014391633}, + {1.0375,1.006089568,0.014323144}, + {1.041667,1.00676012,0.01425793}, + {1.045833,1.0074296,0.014194966}, + {1.05,1.008098006,0.014133369}, + {1.054167,1.008765459,0.014072445}, + {1.058333,1.009431601,0.014011215}, + {1.0625,1.010096669,0.013950324}, + {1.066667,1.010760665,0.013888153}, + {1.070833,1.011423349,0.013824724}, + {1.075,1.012084961,0.013759653}, + {1.079167,1.012745261,0.013692639}, + {1.083333,1.01340425,0.013623408}, + {1.0875,1.014061928,0.013551658}, + {1.091667,1.014718413,0.013477152}, + {1.095833,1.015373349,0.013399672}, + {1.1,1.016027093,0.013318955}, + {1.1,1.016027093,0.869537532}, + {1.104167,1.015199423,0.88055712}, + {1.108333,1.014423966,0.890316248}, + {1.1125,1.013685346,0.89884609}, + {1.116667,1.012972116,0.906217813}, + {1.120833,1.012275338,0.912527978}, + {1.125,1.011587501,0.917887449}, + {1.129167,1.010903358,0.922403812}, + {1.133333,1.010218978,0.926181793}, + {1.1375,1.00953126,0.929322243}, + {1.141667,1.008838177,0.931915462}, + {1.145833,1.008139014,0.934043825}, + {1.15,1.00743258,0.935783029}, + {1.154167,1.006719112,0.937199056}, + {1.158333,1.005998969,0.938350797}, + {1.1625,1.005272508,0.939290762}, + {1.166667,1.00454092,0.94006443}, + {1.170833,1.003805399,0.940711319}, + {1.175,1.003067017,0.941266179}, + {1.179167,1.002327323,0.941758335}, + {1.183333,1.001587987,0.942212701}, + {1.1875,1.00085032,0.942650497}, + {1.191667,1.000116229,0.94308883}, + {1.195833,0.999387562,0.943541586}, + {1.2,0.99866575,0.944019675}, + {1.204167,0.9979527,0.944531143}, + {1.208333,0.997250319,0.945081294}, + {1.2125,0.996560097,0.945673704}, + {1.216667,0.995883822,0.946309268}, + {1.220833,0.995223463,0.946987331}, + {1.225,0.994580328,0.947705865}, + {1.229167,0.993956208,0.948461175}, + {1.233333,0.99335283,0.949248135}, + {1.2375,0.992771327,0.95006144}, + {1.241667,0.992213488,0.950894356}, + {1.245833,0.991680622,0.95173949}, + {1.25,0.991173863,0.95258975}, + {1.254167,0.990694582,0.953437209}, + {1.258333,0.990243912,0.954273999}, + {1.2625,0.989822745,0.955092847}, + {1.266667,0.989432037,0.95588088}, + {1.270833,0.98907274,0.956646562}, + {1.275,0.988745153,0.957369268}, + {1.279167,0.98845017,0.958047032}, + {1.283333,0.988188148,0.958680987}, + {1.2875,0.987959206,0.959251702}, + {1.291667,0.987763703,0.959780037}, + {1.295833,0.987601697,0.960231662}, + {1.3,0.987473011,0.960644007}, + {1.304167,0.987377465,0.96097219}, + {1.308333,0.987314761,0.961265564}, + {1.3125,0.987284482,0.961473107}, + {1.316667,0.98728615,0.961651504}, + {1.320833,0.987318933,0.961747587}, + {1.325,0.987382054,0.961821079}, + {1.329167,0.987474263,0.961820066}, + {1.333333,0.987594843,0.961803436}, + {1.3375,0.987742662,0.961723864}, + {1.341667,0.987916887,0.96163547}, + {1.345833,0.988116205,0.961497962}, + {1.35,0.988339782,0.96134901}, + {1.354167,0.988586307,0.96118331}, + {1.358333,0.988854527,0.961005926}, + {1.3625,0.989143431,0.960821688}, + {1.366667,0.989451706,0.960635245}, + {1.370833,0.989778101,0.960451126}, + {1.375,0.990121484,0.960273087}, + {1.379167,0.990480661,0.960104883}, + {1.383333,0.990854323,0.959949791}, + {1.3875,0.991241395,0.959810555}, + {1.391667,0.991640687,0.959689558}, + {1.395833,0.992050946,0.959588885}, + {1.4,0.992471278,0.959509969}, + {1.404167,0.992900372,0.95945406}, + {1.408333,0.993337214,0.959422052}, + {1.4125,0.993780792,0.959414244}, + {1.416667,0.994230092,0.959430933}, + {1.420833,0.994683981,0.959471881}, + {1.425,0.995141745,0.959536672}, + {1.429167,0.99560225,0.959624708}, + {1.433333,0.996064484,0.959735155}, + {1.4375,0.996527851,0.959861517}, + {1.441667,0.996991217,0.96001929}, + {1.445833,0.997453868,0.960184932}, + {1.45,0.99791497,0.960379183}, + {1.454167,0.998373806,0.960578918}, + {1.458333,0.998829305,0.960803926}, + {1.4625,0.999281228,0.961032093}, + {1.466667,0.999728382,0.961282015}, + {1.470833,1.000170231,0.961532891}, + {1.475,1.000606179,0.961801827}, + {1.479167,1.001035452,0.962069929}, + {1.483333,1.001457334,0.962352216}, + {1.4875,1.001871347,0.962632179}, + {1.491667,1.002276659,0.962922812}, + {1.495833,1.002672791,0.96321249}, + {1.5,1.003059149,0.963501334}, + {1.504167,1.003435135,0.963795781}, + {1.508333,1.003800273,0.964085221}, + {1.5125,1.004153967,0.964377224}, + {1.516667,1.004495859,0.964663684}, + {1.520833,1.004825115,0.964949727}, + {1.525,1.005141735,0.965230048}, + {1.529167,1.005444884,0.965507209}, + {1.533333,1.005734444,0.96577847}, + {1.5375,1.006009698,0.966043949}, + {1.541667,1.006270647,0.966303706}, + {1.545833,1.006516576,0.966554999}, + {1.55,1.006747246,0.966800869}, + {1.554167,1.006962419,0.96703577}, + {1.558333,1.007161736,0.967265427}, + {1.5625,1.007344961,0.967481613}, + {1.566667,1.007511854,0.967693031}, + {1.570833,1.007662058,0.967888296}, + {1.575,1.007795572,0.968079269}, + {1.579167,1.00791204,0.968251586}, + {1.583333,1.008011341,0.968420029}, + {1.5875,1.008093476,0.968567371}, + {1.591667,1.008158088,0.968711317}, + {1.595833,1.008205414,0.968831897}, + {1.6,1.008235216,0.968949437}, + {1.604167,1.008247495,0.969041824}, + {1.608333,1.008242249,0.969131529}, + {1.6125,1.008219719,0.969194531}, + {1.616667,1.008179784,0.969255328}, + {1.620833,1.008122683,0.969288468}, + {1.625,1.008048415,0.96931982}, + {1.629167,1.007957339,0.969323397}, + {1.633333,1.007849574,0.969325662}, + {1.6375,1.007725477,0.969300687}, + {1.641667,1.007585287,0.969274879}, + {1.645833,1.007429361,0.96922344}, + {1.65,1.007257938,0.969171762}, + {1.654167,1.007071495,0.96909678}, + {1.658333,1.006870627,0.969022214}, + {1.6625,1.006655693,0.968927801}, + {1.666667,1.006427169,0.968834341}, + {1.670833,1.00618577,0.968725383}, + {1.675,1.005931735,0.968617976}, + {1.679167,1.005666018,0.968500018}, + {1.683333,1.005389214,0.968384206}, + {1.6875,1.005101919,0.968263447}, + {1.691667,1.00480473,0.96814537}, + {1.695833,1.00449872,0.968028188}, + {1.7,1.004184365,0.967914164}, + {1.704167,1.0038625,0.967806876}, + {1.708333,1.003533959,0.967703104}, + {1.7125,1.003199577,0.96761179}, + {1.716667,1.002860069,0.967524052}, + {1.720833,1.002516627,0.967454076}, + {1.725,1.002169609,0.967387557}, + {1.729167,1.001820326,0.967343271}, + {1.733333,1.001469374,0.967302144}, + {1.7375,1.001117706,0.967286766}, + {1.741667,1.000766158,0.96727407}, + {1.745833,1.000415921,0.967289448}, + {1.75,1.000067353,0.967306793}, + {1.754167,0.999721646,0.967353404}, + {1.758333,0.999379635,0.967401028}, + {1.7625,0.999042094,0.967477858}, + {1.766667,0.998709738,0.967554629}, + {1.770833,0.998383641,0.967659175}, + {1.775,0.99806428,0.967762589}, + {1.779167,0.997752666,0.967891395}, + {1.783333,0.997449398,0.968017757}, + {1.7875,0.997155249,0.968166113}, + {1.791667,0.996870756,0.968310893}, + {1.795833,0.996596813,0.968473554}, + {1.8,0.996333718,0.968631506}, + {1.804167,0.996082246,0.968802691}, + {1.808333,0.995842874,0.968968153}, + {1.8125,0.995616078,0.969142139}, + {1.816667,0.995402277,0.969309628}, + {1.820833,0.995202065,0.969480753}, + {1.825,0.995015502,0.969644964}, + {1.829167,0.994843125,0.96980828}, + {1.833333,0.994685113,0.969964325}, + {1.8375,0.994541705,0.970115602}, + {1.841667,0.994413078,0.970259666}, + {1.845833,0.994299471,0.970395565}, + {1.85,0.994200766,0.970524549}, + {1.854167,0.9941172,0.970642924}, + {1.858333,0.994048655,0.970754802}, + {1.8625,0.99399513,0.97085458}, + {1.866667,0.993956566,0.970948637}, + {1.870833,0.993932784,0.971029758}, + {1.875,0.993923664,0.971106052}, + {1.879167,0.993928909,0.971169591}, + {1.883333,0.9939484,0.971229315}, + {1.8875,0.993981779,0.971277118}, + {1.891667,0.994028807,0.971322179}, + {1.895833,0.994089007,0.971356809}, + {1.9,0.994162202,0.97138983}, + {1.904167,0.994247913,0.971414328}, + {1.908333,0.994345665,0.971438289}, + {1.9125,0.994455099,0.971455932}, + {1.916667,0.994575739,0.971474051}, + {1.920833,0.994707048,0.971488357}, + {1.925,0.994848609,0.971503913}, + {1.929167,0.994999886,0.971518099}, + {1.933333,0.995160341,0.971534252}, + {1.9375,0.995329499,0.971551418}, + {1.941667,0.995506823,0.971571028}, + {1.945833,0.995691657,0.971593738}, + {1.95,0.995883584,0.971619308}, + {1.954167,0.996081889,0.971649826}, + {1.958333,0.996285975,0.971683323}, + {1.9625,0.996495247,0.971723258}, + {1.966667,0.996709347,0.971766174}, + {1.970833,0.99692744,0.971816719}, + {1.975,0.997149348,0.971870184}, + {1.979167,0.997374237,0.971931994}, + {1.983333,0.997601748,0.971996486}, + {1.9875,0.997831225,0.97206974}, + {1.991667,0.998062372,0.972145319}, + {1.995833,0.998294413,0.972229719}, + {2,0.99852705,0.972316027}, + {2.004167,0.998759747,0.972410977}, + {2.008333,0.998991907,0.972507179}, + {2.0125,0.999223232,0.972611666}, + {2.016667,0.999453187,0.972716928}, + {2.020833,0.999681175,0.9728297}, + {2.025,0.999907076,0.97294271}, + {2.029167,1.000130177,0.973062336}, + {2.033333,1.000350118,0.973181725}, + {2.0375,1.000566602,0.973306715}, + {2.041667,1.000779152,0.973430991}, + {2.045833,1.000987291,0.973559618}, + {2.05,1.001190782,0.973687232}, + {2.054167,1.001389265,0.973818004}, + {2.058333,1.001582265,0.973947287}, + {2.0625,1.001769423,0.974078536}, + {2.066667,1.001950622,0.974208057}, + {2.070833,1.002125382,0.974338174}, + {2.075,1.002293587,0.974466383}, + {2.079167,1.002454758,0.974593878}, + {2.083333,1.002608657,0.974719346}, + {2.0875,1.002755165,0.974842906}, + {2.091667,1.002894044,0.974964261}, + {2.095833,1.003024936,0.975082517}, + {2.1,1.00314784,0.975198627}, + {2.104167,1.003262401,0.975310445}, + {2.108333,1.003368497,0.975420117}, + {2.1125,1.00346601,0.975524545}, + {2.116667,1.003554821,0.975626826}, + {2.120833,1.00363481,0.975722969}, + {2.125,1.003705859,0.975817144}, + {2.129167,1.003767848,0.975904286}, + {2.133333,1.003820777,0.97598958}, + {2.1375,1.003864646,0.976067305}, + {2.141667,1.003899455,0.97614336}, + {2.145833,1.003924966,0.97621125}, + {2.15,1.003941417,0.976277709}, + {2.154167,1.003948808,0.976335764}, + {2.158333,1.003947139,0.976392627}, + {2.1625,1.003936529,0.976440907}, + {2.166667,1.003916979,0.976488233}, + {2.170833,1.003888607,0.976527095}, + {2.175,1.003851652,0.976565242}, + {2.179167,1.003806114,0.976595283}, + {2.183333,1.003752351,0.976624846}, + {2.1875,1.003690243,0.976646721}, + {2.191667,1.003620148,0.976668477}, + {2.195833,1.003542423,0.976683259}, + {2.2,1.00345695,0.976698101}, + {2.204167,1.003364325,0.976706862}, + {2.208333,1.003264546,0.976715982}, + {2.2125,1.003158092,0.976720095}, + {2.216667,1.003045082,0.976724744}, + {2.220833,1.002925992,0.976725578}, + {2.225,1.002800941,0.976727068}, + {2.229167,1.002670407,0.976726115}, + {2.233333,1.002534628,0.976725936}, + {2.2375,1.00239408,0.976724625}, + {2.241667,1.002249002,0.976724267}, + {2.245833,1.002099991,0.976724029}, + {2.25,1.001947045,0.976724863}, + {2.254167,1.001790881,0.976727128}, + {2.258333,1.001631737,0.976730466}, + {2.2625,1.001470208,0.976736367}, + {2.266667,1.001306415,0.9767434}, + {2.270833,1.001140952,0.97675401}, + {2.275,1.000974059,0.976765633}, + {2.279167,1.000806451,0.976781845}, + {2.283333,1.000638247,0.976798892}, + {2.2875,1.000470042,0.976821184}, + {2.291667,1.000302076,0.976844132}, + {2.295833,1.000134945,0.976872802}, + {2.3,0.999968946,0.976902008}, + {2.304167,0.999804497,0.976937115}, + {2.308333,0.999641895,0.97697252}, + {2.3125,0.999481678,0.977013826}, + {2.316667,0.999324024,0.977055192}, + {2.320833,0.999169528,0.97710228}, + {2.325,0.999018312,0.977149189}, + {2.329167,0.998870909,0.977201343}, + {2.333333,0.9987275,0.977253079}, + {2.3375,0.998588502,0.977309525}, + {2.341667,0.998454094,0.977365315}, + {2.345833,0.998324692,0.977425158}, + {2.35,0.998200476,0.977484107}, + {2.354167,0.998081684,0.977546275}, + {2.358333,0.997968674,0.977607429}, + {2.3625,0.997861505,0.977671027}, + {2.366667,0.997760475,0.977733433}, + {2.370833,0.997665703,0.977797449}, + {2.375,0.997577429,0.977860212}, + {2.379167,0.997495711,0.97792381}, + {2.383333,0.997420728,0.977986097}, + {2.3875,0.99735254,0.978048563}, + {2.391667,0.997291267,0.978109717}, + {2.395833,0.997237027,0.978170395}, + {2.4,0.997189701,0.97822988}, + {2.404167,0.997149527,0.978288412}, + {2.408333,0.997116327,0.978345752}, + {2.4125,0.99709022,0.978401959}, + {2.416667,0.997071147,0.978457093}, + {2.420833,0.997059047,0.978510797}, + {2.425,0.997053862,0.978563666}, + {2.429167,0.997055471,0.978615046}, + {2.433333,0.997063875,0.978665709}, + {2.4375,0.997078896,0.978715003}, + {2.441667,0.997100413,0.978763878}, + {2.445833,0.997128308,0.978811443}, + {2.45,0.997162461,0.978858829}, + {2.454167,0.997202635,0.978905201}, + {2.458333,0.997248709,0.978951514}, + {2.4625,0.997300446,0.978997231}, + {2.466667,0.997357666,0.979043007}, + {2.470833,0.997420132,0.979088545}, + {2.475,0.997487724,0.979134381}, + {2.479167,0.997560143,0.979180396}, + {2.483333,0.997637093,0.979226708}, + {2.4875,0.997718453,0.979273677}, + {2.491667,0.997803867,0.979321122}, + {2.495833,0.997893035,0.979369462}, + {2.5,0.99798584,0.979418278}, + {2.504167,0.998081803,0.979468405}, + {2.508333,0.998180747,0.979519129}, + {2.5125,0.998282433,0.979571342}, + {2.516667,0.998386621,0.979624152}, + {2.520833,0.998492956,0.97967869}, + {2.525,0.998601258,0.979733765}, + {2.529167,0.998711169,0.979790747}, + {2.533333,0.99882251,0.979848206}, + {2.5375,0.998934984,0.979907632}, + {2.541667,0.999048352,0.979967415}, + {2.545833,0.999162257,0.980029166}, + {2.55,0.999276519,0.980091214}, + {2.554167,0.9993909,0.98015511}, + {2.558333,0.999505103,0.980219126}, + {2.5625,0.999618888,0.98028487}, + {2.566667,0.999732018,0.980350733}, + {2.570833,0.999844193,0.980417967}, + {2.575,0.999955356,0.980485141}, + {2.579167,1.000065088,0.980553508}, + {2.583333,1.000173211,0.980621696}, + {2.5875,1.000279546,0.980690718}, + {2.591667,1.000383854,0.980759501}, + {2.595833,1.000485897,0.980828702}, + {2.6,1.000585556,0.980897605}, + {2.604167,1.000682592,0.980966508}, + {2.608333,1.000776887,0.981034994}, + {2.6125,1.000868082,0.981103122}, + {2.616667,1.000956178,0.981170774}, + {2.620833,1.001040816,0.98123765}, + {2.625,1.001122117,0.98130399}, + {2.629167,1.001199841,0.981369197}, + {2.633333,1.001273751,0.981433809}, + {2.6375,1.001343846,0.98149693}, + {2.641667,1.001409888,0.981559396}, + {2.645833,1.001471877,0.981620014}, + {2.65,1.001529694,0.981679976}, + {2.654167,1.001583219,0.981737852}, + {2.658333,1.001632333,0.981795013}, + {2.6625,1.001677036,0.981849849}, + {2.666667,1.001717329,0.98190403}, + {2.670833,1.001753092,0.981955528}, + {2.675,1.001784325,0.98200649}, + {2.679167,1.001810908,0.982054651}, + {2.683333,1.001832962,0.982102275}, + {2.6875,1.001850367,0.982147038}, + {2.691667,1.001863241,0.982191265}, + {2.695833,1.001871467,0.982232571}, + {2.7,1.001875162,0.982273459}, + {2.704167,1.001874328,0.982311428}, + {2.708333,1.001869082,0.982349038}, + {2.7125,1.001859307,0.982383788}, + {2.716667,1.001845121,0.982418299}, + {2.720833,1.001826763,0.982450008}, + {2.725,1.001804113,0.982481599}, + {2.729167,1.001777411,0.982510626}, + {2.733333,1.001746655,0.982539594}, + {2.7375,1.001711965,0.982566178}, + {2.741667,1.001673579,0.982592821}, + {2.745833,1.001631379,0.982617378}, + {2.75,1.001585722,0.982641995}, + {2.754167,1.001536608,0.982664883}, + {2.758333,1.001484275,0.982687891}, + {2.7625,1.001428843,0.982709527}, + {2.766667,1.00137043,0.982731402}, + {2.770833,1.001309276,0.982752204}, + {2.775,1.001245379,0.982773244}, + {2.779167,1.001179099,0.982793629}, + {2.783333,1.001110673,0.982814312}, + {2.7875,1.001039982,0.982834637}, + {2.791667,1.000967503,0.98285532}, + {2.795833,1.000893354,0.982876003}, + {2.8,1.000817537,0.982897043}, + {2.804167,1.000740528,0.982918441}, + {2.808333,1.000662327,0.982940197}, + {2.8125,1.000583172,0.982962608}, + {2.816667,1.000503302,0.982985318}, + {2.820833,1.000422955,0.983008921}, + {2.825,1.00034225,0.983032882}, + {2.829167,1.000261426,0.983057916}, + {2.833333,1.000180602,0.983083248}, + {2.8375,1.000100017,0.983109832}, + {2.841667,1.000019908,0.983136654}, + {2.845833,0.999940455,0.983164907}, + {2.85,0.999861777,0.983193338}, + {2.854167,0.999784052,0.9832232}, + {2.858333,0.99970758,0.983253241}, + {2.8625,0.999632418,0.983284712}, + {2.866667,0.999558687,0.983316302}, + {2.870833,0.999486744,0.983349323}, + {2.875,0.99941659,0.983382344}, + {2.879167,0.999348402,0.983416796}, + {2.883333,0.99928236,0.983451188}, + {2.8875,0.999218524,0.983486891}, + {2.891667,0.999157131,0.983522534}, + {2.895833,0.999098241,0.98355937}, + {2.9,0.999041975,0.983596027}, + {2.904167,0.998988509,0.983633757}, + {2.908333,0.998937786,0.983671367}, + {2.9125,0.998890042,0.983709812}, + {2.916667,0.998845279,0.983748138}, + {2.920833,0.998803675,0.983787179}, + {2.925,0.998765171,0.983826041}, + {2.929167,0.998729825,0.983865559}, + {2.933333,0.998697817,0.983904779}, + {2.9375,0.998669088,0.983944595}, + {2.941667,0.998643637,0.983984172}, + {2.945833,0.998621583,0.984024107}, + {2.95,0.998602867,0.984063864}, + {2.954167,0.998587549,0.984103918}, + {2.958333,0.998575628,0.984143734}, + {2.9625,0.998566985,0.984183848}, + {2.966667,0.99856174,0.984223783}, + {2.970833,0.998559773,0.984263897}, + {2.975,0.998561144,0.984303892}, + {2.979167,0.998565674,0.984344006}, + {2.983333,0.998573422,0.98438406}, + {2.9875,0.99858433,0.984424233}, + {2.991667,0.998598278,0.984464347}, + {2.995833,0.998615146,0.98450458}, + {3,0.998635054,0.984544814}, + {3.004167,0.998657703,0.984585166}, + {3.008333,0.998683155,0.984625578}, + {3.0125,0.998711228,0.984666169}, + {3.016667,0.998741865,0.984706759}, + {3.020833,0.998774946,0.984747589}, + {3.025,0.99881041,0.984788477}, + {3.029167,0.998848021,0.984829605}, + {3.033333,0.998887777,0.984870791}, + {3.0375,0.998929441,0.984912276}, + {3.041667,0.998973012,0.984953821}, + {3.045833,0.999018192,0.984995663}, + {3.05,0.999065042,0.985037625}, + {3.054167,0.999113321,0.985079944}, + {3.058333,0.999162912,0.985122263}, + {3.0625,0.999213696,0.985165}, + {3.066667,0.999265611,0.985207796}, + {3.070833,0.999318421,0.98525089}, + {3.075,0.999372065,0.985294044}, + {3.079167,0.999426365,0.985337496}, + {3.083333,0.999481201,0.985381007}, + {3.0875,0.999536455,0.985424757}, + {3.091667,0.999592006,0.985468566}, + {3.095833,0.999647677,0.985512555}, + {3.1,0.999703407,0.985556543}, + {3.104167,0.999759018,0.98560065}, + {3.108333,0.999814391,0.985644758}, + {3.1125,0.999869406,0.985688806}, + {3.116667,0.999924004,0.985732913}, + {3.120833,0.999977946,0.985776842}, + {3.125,1.000031233,0.98582077}, + {3.129167,1.000083685,0.98586446}, + {3.133333,1.000135183,0.985908031}, + {3.1375,1.000185728,0.985951364}, + {3.141667,1.000234962,0.985994518}, + {3.145833,1.000283122,0.986037254}, + {3.15,1.000329852,0.986079812}, + {3.154167,1.000375152,0.986121893}, + {3.158333,1.000419021,0.986163735}, + {3.1625,1.000461221,0.986204922}, + {3.166667,1.000501752,0.98624593}, + {3.170833,1.000540495,0.986286163}, + {3.175,1.000577331,0.986326218}, + {3.179167,1.000612378,0.986365378}, + {3.183333,1.000645518,0.9864043}, + {3.1875,1.000676513,0.986442268}, + {3.191667,1.0007056,0.986480117}, + {3.195833,1.000732422,0.986516774}, + {3.2,1.000757217,0.986553311}, + {3.204167,1.000779867,0.986588717}, + {3.208333,1.000800252,0.986623943}, + {3.2125,1.000818372,0.986657977}, + {3.216667,1.000834227,0.986691892}, + {3.220833,1.000847936,0.986724555}, + {3.225,1.000859261,0.98675704}, + {3.229167,1.00086832,0.986788332}, + {3.233333,1.000875115,0.986819506}, + {3.2375,1.000879765,0.986849487}, + {3.241667,1.00088203,0.986879349}, + {3.245833,1.000882149,0.986907959}, + {3.25,1.000880003,0.986936569}, + {3.254167,1.000875711,0.986963987}, + {3.258333,1.000869274,0.986991346}, + {3.2625,1.000860691,0.987017632}, + {3.266667,1.000850081,0.987043858}, + {3.270833,1.000837326,0.98706913}, + {3.275,1.000822783,0.987094343}, + {3.279167,1.000806212,0.987118661}, + {3.283333,1.000787735,0.98714298}, + {3.2875,1.000767589,0.987166524}, + {3.291667,1.000745654,0.987190068}, + {3.295833,1.000722051,0.987212896}, + {3.3,1.000696778,0.987235844}, + {3.304167,1.000670075,0.987258136}, + {3.308333,1.000641942,0.987280548}, + {3.3125,1.000612497,0.987302482}, + {3.316667,1.000581741,0.987324536}, + {3.320833,1.000549793,0.987346232}, + {3.325,1.000516772,0.987368047}, + {3.329167,1.000482678,0.987389624}, + {3.333333,1.00044775,0.98741132}, + {3.3375,1.000411868,0.987432897}, + {3.341667,1.00037539,0.987454593}, + {3.345833,1.000338197,0.987476349}, + {3.35,1.000300527,0.987498164}, + {3.354167,1.00026238,0.987520099}, + {3.358333,1.000223994,0.987542152}, + {3.3625,1.000185251,0.987564445}, + {3.366667,1.000146389,0.987586856}, + {3.370833,1.000107408,0.987609506}, + {3.375,1.000068426,0.987632275}, + {3.379167,1.000029683,0.987655401}, + {3.383333,0.999991119,0.987678587}, + {3.3875,0.999952853,0.98770225}, + {3.391667,0.999915004,0.987725973}, + {3.395833,0.999877632,0.987750113}, + {3.4,0.999840796,0.987774372}, + {3.404167,0.999804676,0.987799108}, + {3.408333,0.99976927,0.987823844}, + {3.4125,0.99973464,0.987849116}, + {3.416667,0.999700904,0.987874448}, + {3.420833,0.999668121,0.987900257}, + {3.425,0.999636352,0.987926066}, + {3.429167,0.999605715,0.987952471}, + {3.433333,0.999576211,0.987978816}, + {3.4375,0.999547899,0.988005698}, + {3.441667,0.999520838,0.98803252}, + {3.445833,0.999495149,0.988059878}, + {3.45,0.99947077,0.988087177}, + {3.454167,0.999447823,0.988114953}, + {3.458333,0.999426365,0.988142729}, + {3.4625,0.999406338,0.988170922}, + {3.466667,0.999387801,0.988199055}, + {3.470833,0.999370873,0.988227606}, + {3.475,0.999355495,0.988256156}, + {3.479167,0.999341667,0.988285065}, + {3.483333,0.999329507,0.988313913}, + {3.4875,0.999318898,0.98834312}, + {3.491667,0.999309897,0.988372266}, + {3.495833,0.999302566,0.988401771}, + {3.5,0.999296844,0.988431156}, + {3.504167,0.999292791,0.988460898}, + {3.508333,0.999290287,0.988490582}, + {3.5125,0.999289393,0.988520503}, + {3.516667,0.999290049,0.988550425}, + {3.520833,0.999292314,0.988580525}, + {3.525,0.999296129,0.988610685}, + {3.529167,0.999301434,0.988640964}, + {3.533333,0.999308228,0.988671243}, + {3.5375,0.999316454,0.988701701}, + {3.541667,0.99932611,0.988732159}, + {3.545833,0.999337137,0.988762796}, + {3.55,0.999349475,0.988793373}, + {3.554167,0.999363124,0.988824129}, + {3.558333,0.999377966,0.988854885}, + {3.5625,0.999394059,0.988885701}, + {3.566667,0.999411225,0.988916576}, + {3.570833,0.999429464,0.988947451}, + {3.575,0.999448717,0.988978386}, + {3.579167,0.999468923,0.98900938}, + {3.583333,0.999490023,0.989040375}, + {3.5875,0.999511957,0.989071429}, + {3.591667,0.999534667,0.989102483}, + {3.595833,0.999558032,0.989133596}, + {3.6,0.999582112,0.98916465}, + {3.604167,0.999606788,0.989195764}, + {3.608333,0.999631941,0.989226818}, + {3.6125,0.999657571,0.989257872}, + {3.616667,0.999683619,0.989288926}, + {3.620833,0.999709964,0.989319921}, + {3.625,0.999736607,0.989350855}, + {3.629167,0.999763429,0.989381731}, + {3.633333,0.99979037,0.989412606}, + {3.6375,0.999817371,0.989443302}, + {3.641667,0.999844432,0.989473999}, + {3.645833,0.999871373,0.989504516}, + {3.65,0.999898255,0.989535034}, + {3.654167,0.999924958,0.989565313}, + {3.658333,0.999951422,0.989595532}, + {3.6625,0.999977589,0.989625514}, + {3.666667,1.000003338,0.989655435}, + {3.670833,1.000028729,0.989685059}, + {3.675,1.000053763,0.989714622}, + {3.679167,1.000078082,0.989743888}, + {3.683333,1.000102043,0.989773035}, + {3.6875,1.000125289,0.989801824}, + {3.691667,1.00014782,0.989830554}, + {3.695833,1.000169635,0.989858806}, + {3.7,1.000190735,0.989887059}, + {3.704167,1.00021112,0.989914834}, + {3.708333,1.000230551,0.989942491}, + {3.7125,1.000249267,0.989969671}, + {3.716667,1.00026691,0.98999685}, + {3.720833,1.000283718,0.990023434}, + {3.725,1.000299573,0.990049958}, + {3.729167,1.000314355,0.990075946}, + {3.733333,1.000328183,0.990101874}, + {3.7375,1.000340939,0.990127265}, + {3.741667,1.000352621,0.990152538}, + {3.745833,1.000363231,0.990177214}, + {3.75,1.000372887,0.99020189}, + {3.754167,1.000381351,0.990225971}, + {3.758333,1.000388622,0.990249991}, + {3.7625,1.00039494,0.990273416}, + {3.766667,1.000400066,0.990296841}, + {3.770833,1.000404119,0.990319669}, + {3.775,1.0004071,0.990342438}, + {3.779167,1.000408888,0.990364671}, + {3.783333,1.000409603,0.990386844}, + {3.7875,1.000409245,0.99040848}, + {3.791667,1.000407815,0.990430117}, + {3.795833,1.000405312,0.990451217}, + {3.8,1.000401855,0.990472317}, + {3.804167,1.000397325,0.99049294}, + {3.808333,1.000391722,0.990513504}, + {3.8125,1.000385165,0.99053371}, + {3.816667,1.000377774,0.990553856}, + {3.820833,1.00036943,0.990573585}, + {3.825,1.000360131,0.990593374}, + {3.829167,1.000349998,0.990612805}, + {3.833333,1.000339031,0.990632176}, + {3.8375,1.000327229,0.990651309}, + {3.841667,1.000314713,0.990670443}, + {3.845833,1.0003016,0.990689278}, + {3.85,1.000287652,0.990708172}, + {3.854167,1.000273108,0.990726829}, + {3.858333,1.000257969,0.990745544}, + {3.8625,1.000242352,0.990764081}, + {3.866667,1.00022614,0.990782619}, + {3.870833,1.00020957,0.990801096}, + {3.875,1.000192404,0.990819573}, + {3.879167,1.000174999,0.990837991}, + {3.883333,1.000157237,0.990856469}, + {3.8875,1.000139236,0.990874887}, + {3.891667,1.000120997,0.990893304}, + {3.895833,1.00010252,0.990911782}, + {3.9,1.000083923,0.990930319}, + {3.904167,1.000065207,0.990948915}, + {3.908333,1.000046372,0.990967512}, + {3.9125,1.000027657,0.990986228}, + {3.916667,1.000008941,0.991004944}, + {3.920833,0.999990344,0.991023779}, + {3.925,0.999971867,0.991042674}, + {3.929167,0.999953508,0.991061687}, + {3.933333,0.999935448,0.991080761}, + {3.9375,0.999917567,0.991100013}, + {3.941667,0.999900043,0.991119266}, + {3.945833,0.999882817,0.991138697}, + {3.95,0.999866009,0.991158128}, + {3.954167,0.999849558,0.991177797}, + {3.958333,0.999833584,0.991197467}, + {3.9625,0.999818146,0.991217375}, + {3.966667,0.999803126,0.991237283}, + {3.970833,0.999788702,0.99125737}, + {3.975,0.999774814,0.991277516}, + {3.979167,0.999761581,0.991297841}, + {3.983333,0.999748945,0.991318226}, + {3.9875,0.999736965,0.991338789}, + {3.991667,0.99972564,0.991359353}, + {3.995833,0.999714971,0.991380095}, + {4,0.999705076,0.991400898}, + {4.004167,0.999695897,0.991421878}, + {4.008333,0.999687433,0.991442859}, + {4.0125,0.999679685,0.991464078}, + {4.016667,0.999672771,0.991485238}, + {4.020833,0.999666572,0.991506577}, + {4.025,0.999661207,0.991527975}, + {4.029167,0.999656618,0.991549492}, + {4.033333,0.999652743,0.991571009}, + {4.0375,0.999649704,0.991592705}, + {4.041667,0.999647439,0.991614401}, + {4.045833,0.999645948,0.991636217}, + {4.05,0.999645233,0.991658032}, + {4.054167,0.999645293,0.991679966}, + {4.058333,0.999646127,0.991701961}, + {4.0625,0.999647737,0.991724014}, + {4.066667,0.999650002,0.991746068}, + {4.070833,0.999653041,0.991768181}, + {4.075,0.999656796,0.991790354}, + {4.079167,0.999661207,0.991812527}, + {4.083333,0.999666333,0.99183476}, + {4.0875,0.999672055,0.991856992}, + {4.091667,0.999678433,0.991879284}, + {4.095833,0.999685407,0.991901577}, + {4.1,0.999692976,0.991923869}, + {4.104167,0.999701023,0.991946161}, + {4.108333,0.999709666,0.991968453}, + {4.1125,0.999718785,0.991990805}, + {4.116667,0.999728382,0.992013097}, + {4.120833,0.999738395,0.992035389}, + {4.125,0.999748886,0.992057681}, + {4.129167,0.999759734,0.992079914}, + {4.133333,0.999770939,0.992102146}, + {4.1375,0.999782443,0.992124319}, + {4.141667,0.999794304,0.992146492}, + {4.145833,0.999806345,0.992168605}, + {4.15,0.999818683,0.992190719}, + {4.154167,0.999831259,0.992212713}, + {4.158333,0.999843955,0.992234707}, + {4.1625,0.99985677,0.992256582}, + {4.166667,0.999869764,0.992278397}, + {4.170833,0.999882758,0.992300153}, + {4.175,0.999895871,0.992321849}, + {4.179167,0.999908924,0.992343366}, + {4.183333,0.999922037,0.992364943}, + {4.1875,0.999935031,0.992386281}, + {4.191667,0.999948025,0.99240762}, + {4.195833,0.99996084,0.99242872}, + {4.2,0.999973595,0.99244988}, + {4.204167,0.999986112,0.992470801}, + {4.208333,0.99999851,0.992491663}, + {4.2125,1.00001061,0.992512286}, + {4.216667,1.000022531,0.992532909}, + {4.220833,1.000034213,0.992553294}, + {4.225,1.000045538,0.992573678}, + {4.229167,1.000056624,0.992593765}, + {4.233333,1.000067234,0.992613792}, + {4.2375,1.000077605,0.992633581}, + {4.241667,1.000087619,0.99265337}, + {4.245833,1.000097156,0.992672801}, + {4.25,1.000106215,0.992692232}, + {4.254167,1.000114918,0.992711365}, + {4.258333,1.000123262,0.992730498}, + {4.2625,1.000131011,0.992749333}, + {4.266667,1.000138283,0.992768109}, + {4.270833,1.000145078,0.992786586}, + {4.275,1.000151396,0.992805064}, + {4.279167,1.000157237,0.992823184}, + {4.283333,1.000162482,0.992841303}, + {4.2875,1.000167251,0.992859125}, + {4.291667,1.000171542,0.992876887}, + {4.295833,1.000175238,0.992894351}, + {4.3,1.000178337,0.992911816}, + {4.304167,1.00018096,0.992928982}, + {4.308333,1.000183105,0.992946148}, + {4.3125,1.000184655,0.992963016}, + {4.316667,1.000185609,0.992979825}, + {4.320833,1.000186086,0.992996395}, + {4.325,1.000185966,0.993012965}, + {4.329167,1.00018549,0.993029237}, + {4.333333,1.000184298,0.993045509}, + {4.3375,1.000182748,0.993061543}, + {4.341667,1.000180602,0.993077576}, + {4.345833,1.000178099,0.993093312}, + {4.35,1.000174999,0.993109107}, + {4.354167,1.000171542,0.993124664}, + {4.358333,1.000167608,0.993140221}, + {4.3625,1.000163198,0.993155599}, + {4.366667,1.00015831,0.993170977}, + {4.370833,1.000153184,0.993186116}, + {4.375,1.000147581,0.993201315}, + {4.379167,1.000141621,0.993216395}, + {4.383333,1.000135303,0.993231416}, + {4.3875,1.000128627,0.993246317}, + {4.391667,1.000121593,0.993261218}, + {4.395833,1.000114441,0.99327606}, + {4.4,1.000106931,0.993290842}, + {4.404167,1.000099182,0.993305564}, + {4.408333,1.000091195,0.993320346}, + {4.4125,1.00008297,0.993335009}, + {4.416667,1.000074625,0.993349671}, + {4.420833,1.000066042,0.993364275}, + {4.425,1.000057459,0.993378937}, + {4.429167,1.000048637,0.9933936}, + {4.433333,1.000039816,0.993408203}, + {4.4375,1.000030875,0.993422806}, + {4.441667,1.000021815,0.993437469}, + {4.445833,1.000012875,0.993452072}, + {4.45,1.000003815,0.993466735}, + {4.454167,0.999994814,0.993481457}, + {4.458333,0.999985874,0.99349612}, + {4.4625,0.999976933,0.993510842}, + {4.466667,0.999968171,0.993525624}, + {4.470833,0.999959469,0.993540406}, + {4.475,0.999950886,0.993555188}, + {4.479167,0.999942422,0.99357003}, + {4.483333,0.999934137,0.993584931}, + {4.4875,0.999926031,0.993599832}, + {4.491667,0.999918163,0.993614793}, + {4.495833,0.999910474,0.993629813}, + {4.5,0.999903023,0.993644893}, + {4.504167,0.999895811,0.993659973}, + {4.508333,0.999888897,0.993675113}, + {4.5125,0.999882221,0.993690312}, + {4.516667,0.999875844,0.993705511}, + {4.520833,0.999869764,0.993720829}, + {4.525,0.999863982,0.993736088}, + {4.529167,0.999858558,0.993751526}, + {4.533333,0.999853432,0.993766904}, + {4.5375,0.999848664,0.993782401}, + {4.541667,0.999844253,0.993797839}, + {4.545833,0.9998402,0.993813396}, + {4.55,0.999836504,0.993828952}, + {4.554167,0.999833167,0.993844628}, + {4.558333,0.999830246,0.993860245}, + {4.5625,0.999827623,0.99387598}, + {4.566667,0.999825418,0.993891716}, + {4.570833,0.99982363,0.993907511}, + {4.575,0.999822199,0.993923247}, + {4.579167,0.999821126,0.993939102}, + {4.583333,0.999820411,0.993954957}, + {4.5875,0.999820113,0.993970871}, + {4.591667,0.999820173,0.993986726}, + {4.595833,0.99982059,0.9940027}, + {4.6,0.999821365,0.994018614}, + {4.604167,0.999822497,0.994034588}, + {4.608333,0.999823987,0.994050562}, + {4.6125,0.999825776,0.994066536}, + {4.616667,0.999827921,0.99408251}, + {4.620833,0.999830425,0.994098485}, + {4.625,0.999833167,0.994114459}, + {4.629167,0.999836266,0.994130492}, + {4.633333,0.999839664,0.994146466}, + {4.6375,0.999843299,0.99416244}, + {4.641667,0.999847174,0.994178414}, + {4.645833,0.999851346,0.994194329}, + {4.65,0.999855757,0.994210303}, + {4.654167,0.999860406,0.994226217}, + {4.658333,0.999865234,0.994242132}, + {4.6625,0.9998703,0.994257987}, + {4.666667,0.999875546,0.994273841}, + {4.670833,0.99988097,0.994289637}, + {4.675,0.999886513,0.994305491}, + {4.679167,0.999892235,0.994321227}, + {4.683333,0.999898136,0.994336963}, + {4.6875,0.999904096,0.994352579}, + {4.691667,0.999910116,0.994368255}, + {4.695833,0.999916255,0.994383812}, + {4.7,0.999922514,0.994399369}, + {4.704167,0.999928772,0.994414806}, + {4.708333,0.999935031,0.994430244}, + {4.7125,0.999941349,0.994445562}, + {4.716667,0.999947727,0.994460881}, + {4.720833,0.999954045,0.99447614}, + {4.725,0.999960363,0.994491339}, + {4.729167,0.999966621,0.994506359}, + {4.733333,0.99997282,0.994521439}, + {4.7375,0.99997896,0.99453634}, + {4.741667,0.999985039,0.994551241}, + {4.745833,0.999991,0.994566023}, + {4.75,0.999996901,0.994580805}, + {4.754167,1.000002623,0.994595349}, + {4.758333,1.000008225,0.994609952}, + {4.7625,1.000013709,0.994624376}, + {4.766667,1.000019073,0.994638801}, + {4.770833,1.000024319,0.994653046}, + {4.775,1.000029206,0.994667292}, + {4.779167,1.000034094,0.994681358}, + {4.783333,1.000038743,0.994695425}, + {4.7875,1.000043154,0.994709313}, + {4.791667,1.000047326,0.994723201}, + {4.795833,1.00005126,0.99473685}, + {4.8,1.000055075,0.994750559}, + {4.804167,1.000058532,0.99476409}, + {4.808333,1.00006187,0.99477756}, + {4.8125,1.00006485,0.994790912}, + {4.816667,1.000067711,0.994804204}, + {4.820833,1.000070214,0.994817376}, + {4.825,1.000072598,0.994830489}, + {4.829167,1.000074625,0.994843483}, + {4.833333,1.000076413,0.994856417}, + {4.8375,1.000077844,0.994869232}, + {4.841667,1.000079155,0.994881988}, + {4.845833,1.000080109,0.994894624}, + {4.85,1.000080824,0.9949072}, + {4.854167,1.000081301,0.994919658}, + {4.858333,1.000081539,0.994932115}, + {4.8625,1.000081539,0.994944394}, + {4.866667,1.000081182,0.994956732}, + {4.870833,1.000080705,0.994968832}, + {4.875,1.00007987,0.994980991}, + {4.879167,1.000078917,0.994993031}, + {4.883333,1.000077605,0.995005012}, + {4.8875,1.000076175,0.995016932}, + {4.891667,1.000074506,0.995028794}, + {4.895833,1.000072479,0.995040536}, + {4.9,1.000070453,0.995052338}, + {4.904167,1.000068069,0.995063961}, + {4.908333,1.000065565,0.995075643}, + {4.9125,1.000062823,0.995087206}, + {4.916667,1.000059962,0.99509877}, + {4.920833,1.000056982,0.995110273}, + {4.925,1.000053763,0.995121717}, + {4.929167,1.000050426,0.995133162}, + {4.933333,1.000046849,0.995144546}, + {4.9375,1.000043273,0.995155871}, + {4.941667,1.000039577,0.995167255}, + {4.945833,1.000035644,0.995178521}, + {4.95,1.00003171,0.995189846}, + {4.954167,1.000027776,0.995201111}, + {4.958333,1.000023603,0.995212317}, + {4.9625,1.000019431,0.995223582}, + {4.966667,1.000015259,0.995234787}, + {4.970833,1.000010967,0.995245993}, + {4.975,1.000006676,0.995257199}, + {4.979167,1.000002384,0.995268345}, + {4.983333,0.999998033,0.995279551}, + {4.9875,0.999993742,0.995290756}, + {4.991667,0.99998945,0.995301902}, + {4.995833,0.999985158,0.995313108}, + {5,0.999980867,0.995324314}, + {5.004167,0.999976695,0.99533546}, + {5.008333,0.999972522,0.995346665}, + {5.0125,0.99996841,0.995357871}, + {5.016667,0.999964356,0.995369077}, + {5.020833,0.999960423,0.995380342}, + {5.025,0.999956548,0.995391548}, + {5.029167,0.999952793,0.995402813}, + {5.033333,0.999949157,0.995414019}, + {5.0375,0.999945641,0.995425284}, + {5.041667,0.999942183,0.995436549}, + {5.045833,0.999938905,0.995447874}, + {5.05,0.999935746,0.995459199}, + {5.054167,0.999932706,0.995470524}, + {5.058333,0.999929845,0.995481849}, + {5.0625,0.999927104,0.995493174}, + {5.066667,0.999924541,0.995504498}, + {5.070833,0.999922156,0.995515883}, + {5.075,0.999919891,0.995527267}, + {5.079167,0.999917865,0.995538712}, + {5.083333,0.999915957,0.995550096}, + {5.0875,0.999914229,0.99556154}, + {5.091667,0.999912679,0.995572984}, + {5.095833,0.999911308,0.995584428}, + {5.1,0.999910116,0.995595872}, + {5.104167,0.999909163,0.995607316}, + {5.108333,0.999908328,0.99561882}, + {5.1125,0.999907672,0.995630264}, + {5.116667,0.999907255,0.995641768}, + {5.120833,0.999906957,0.995653272}, + {5.125,0.999906838,0.995664775}, + {5.129167,0.999906957,0.995676279}, + {5.133333,0.999907196,0.995687723}, + {5.1375,0.999907613,0.995699227}, + {5.141667,0.999908209,0.995710731}, + {5.145833,0.999908984,0.995722234}, + {5.15,0.999909878,0.995733738}, + {5.154167,0.999910951,0.995745182}, + {5.158333,0.999912202,0.995756686}, + {5.1625,0.999913573,0.99576813}, + {5.166667,0.999915063,0.995779634}, + {5.170833,0.999916732,0.995791078}, + {5.175,0.99991852,0.995802522}, + {5.179167,0.999920428,0.995813906}, + {5.183333,0.999922514,0.99582535}, + {5.1875,0.99992466,0.995836735}, + {5.191667,0.999926925,0.99584806}, + {5.195833,0.999929249,0.995859444}, + {5.2,0.999931753,0.995870769}, + {5.204167,0.999934316,0.995882034}, + {5.208333,0.999936938,0.995893359}, + {5.2125,0.99993962,0.995904565}, + {5.216667,0.999942422,0.99591583}, + {5.220833,0.999945283,0.995926976}, + {5.225,0.999948144,0.995938182}, + {5.229167,0.999951065,0.995949268}, + {5.233333,0.999954045,0.995960414}, + {5.2375,0.999957085,0.995971441}, + {5.241667,0.999960124,0.995982468}, + {5.245833,0.999963164,0.995993435}, + {5.25,0.999966204,0.996004403}, + {5.254167,0.999969304,0.996015251}, + {5.258333,0.999972343,0.996026158}, + {5.2625,0.999975383,0.996036947}, + {5.266667,0.999978423,0.996047735}, + {5.270833,0.999981403,0.996058404}, + {5.275,0.999984384,0.996069133}, + {5.279167,0.999987304,0.996079743}, + {5.283333,0.999990225,0.996090353}, + {5.2875,0.999993026,0.996100843}, + {5.291667,0.999995828,0.996111333}, + {5.295833,0.99999851,0.996121764}, + {5.3,1.000001192,0.996132135}, + {5.304167,1.000003695,0.996142447}, + {5.308333,1.000006199,0.996152759}, + {5.3125,1.000008583,0.996162951}, + {5.316667,1.000010848,0.996173143}, + {5.320833,1.000013113,0.996183217}, + {5.325,1.000015259,0.99619329}, + {5.329167,1.000017285,0.996203244}, + {5.333333,1.000019193,0.996213257}, + {5.3375,1.000020981,0.996223092}, + {5.341667,1.00002265,0.996232986}, + {5.345833,1.000024199,0.996242702}, + {5.35,1.00002563,0.996252477}, + {5.354167,1.000026941,0.996262133}, + {5.358333,1.000028253,0.996271789}, + {5.3625,1.000029325,0.996281326}, + {5.366667,1.000030279,0.996290922}, + {5.370833,1.000031114,0.99630034}, + {5.375,1.000031829,0.996309817}, + {5.379167,1.000032425,0.996319115}, + {5.383333,1.000032902,0.996328473}, + {5.3875,1.00003314,0.996337712}, + {5.391667,1.000033379,0.99634701}, + {5.395833,1.000033498,0.99635613}, + {5.4,1.000033498,0.996365309}, + {5.404167,1.000033259,0.996374369}, + {5.408333,1.000033021,0.996383429}, + {5.4125,1.000032663,0.996392429}, + {5.416667,1.000032187,0.996401429}, + {5.420833,1.000031471,0.99641037}, + {5.425,1.000030756,0.996419251}, + {5.429167,1.000029922,0.996428072}, + {5.433333,1.000028968,0.996436954}, + {5.4375,1.000028014,0.996445715}, + {5.441667,1.000026822,0.996454477}, + {5.445833,1.00002563,0.99646318}, + {5.45,1.000024319,0.996471882}, + {5.454167,1.000022888,0.996480525}, + {5.458333,1.000021458,0.996489227}, + {5.4625,1.000019908,0.99649781}, + {5.466667,1.000018239,0.996506393}, + {5.470833,1.00001657,0.996514976}, + {5.475,1.000014901,0.996523499}, + {5.479167,1.000013113,0.996532023}, + {5.483333,1.000011206,0.996540546}, + {5.4875,1.000009298,0.99654901}, + {5.491667,1.000007391,0.996557474}, + {5.495833,1.000005484,0.996565938}, + {5.5,1.000003457,0.996574342}, + {5.504167,1.000001431,0.996582806}, + {5.508333,0.999999404,0.99659121}, + {5.5125,0.999997318,0.996599615}, + {5.516667,0.999995291,0.996608019}, + {5.520833,0.999993205,0.996616364}, + {5.525,0.999991119,0.996624768}, + {5.529167,0.999989092,0.996633112}, + {5.533333,0.999987066,0.996641457}, + {5.5375,0.999985039,0.996649802}, + {5.541667,0.999983013,0.996658206}, + {5.545833,0.999981046,0.996666551}, + {5.55,0.999979079,0.996674895}, + {5.554167,0.999977171,0.99668318}, + {5.558333,0.999975324,0.996691525}, + {5.5625,0.999973476,0.99669987}, + {5.566667,0.999971688,0.996708214}, + {5.570833,0.999969959,0.996716559}, + {5.575,0.99996829,0.996724904}, + {5.579167,0.999966681,0.996733189}, + {5.583333,0.999965131,0.996741533}, + {5.5875,0.999963641,0.996749878}, + {5.591667,0.999962211,0.996758223}, + {5.595833,0.999960899,0.996766508}, + {5.6,0.999959588,0.996774852}, + {5.604167,0.999958396,0.996783197}, + {5.608333,0.999957323,0.996791542}, + {5.6125,0.99995625,0.996799827}, + {5.616667,0.999955297,0.996808171}, + {5.620833,0.999954462,0.996816516}, + {5.625,0.999953687,0.996824861}, + {5.629167,0.999952972,0.996833146}, + {5.633333,0.999952376,0.99684149}, + {5.6375,0.999951839,0.996849835}, + {5.641667,0.999951363,0.99685812}, + {5.645833,0.999951005,0.996866465}, + {5.65,0.999950767,0.99687475}, + {5.654167,0.999950588,0.996883094}, + {5.658333,0.999950469,0.996891379}, + {5.6625,0.999950469,0.996899664}, + {5.666667,0.999950528,0.996907949}, + {5.670833,0.999950647,0.996916234}, + {5.675,0.999950886,0.99692452}, + {5.679167,0.999951184,0.996932805}, + {5.683333,0.999951601,0.99694109}, + {5.6875,0.999952078,0.996949315}, + {5.691667,0.999952614,0.9969576}, + {5.695833,0.99995321,0.996965826}, + {5.7,0.999953926,0.996974051}, + {5.704167,0.9999547,0.996982276}, + {5.708333,0.999955535,0.996990502}, + {5.7125,0.999956369,0.996998668}, + {5.716667,0.999957323,0.997006834}, + {5.720833,0.999958336,0.997014999}, + {5.725,0.999959409,0.997023165}, + {5.729167,0.999960542,0.997031271}, + {5.733333,0.999961674,0.997039437}, + {5.7375,0.999962866,0.997047484}, + {5.741667,0.999964118,0.99705559}, + {5.745833,0.999965429,0.997063637}, + {5.75,0.999966741,0.997071683}, + {5.754167,0.999968112,0.99707967}, + {5.758333,0.999969482,0.997087717}, + {5.7625,0.999970913,0.997095644}, + {5.766667,0.999972343,0.997103631}, + {5.770833,0.999973774,0.997111499}, + {5.775,0.999975264,0.997119427}, + {5.779167,0.999976695,0.997127295}, + {5.783333,0.999978185,0.997135162}, + {5.7875,0.999979675,0.997142971}, + {5.791667,0.999981165,0.997150779}, + {5.795833,0.999982655,0.997158527}, + {5.8,0.999984145,0.997166276}, + {5.804167,0.999985576,0.997173965}, + {5.808333,0.999987066,0.997181654}, + {5.8125,0.999988496,0.997189283}, + {5.816667,0.999989867,0.997196972}, + {5.820833,0.999991298,0.997204542}, + {5.825,0.999992669,0.997212112}, + {5.829167,0.99999398,0.997219622}, + {5.833333,0.999995291,0.997227132}, + {5.8375,0.999996543,0.997234583}, + {5.841667,0.999997795,0.997242033}, + {5.845833,0.999998987,0.997249424}, + {5.85,1.000000119,0.997256756}, + {5.854167,1.000001311,0.997264087}, + {5.858333,1.000002265,0.997271419}, + {5.8625,1.000003338,0.99727869}, + {5.866667,1.000004292,0.997285903}, + {5.870833,1.000005245,0.997293115}, + {5.875,1.00000608,0.997300327}, + {5.879167,1.000006914,0.99730742}, + {5.883333,1.000007629,0.997314572}, + {5.8875,1.000008345,0.997321606}, + {5.891667,1.000008941,0.997328699}, + {5.895833,1.000009537,0.997335672}, + {5.9,1.000010014,0.997342646}, + {5.904167,1.00001049,0.99734962}, + {5.908333,1.000010967,0.997356534}, + {5.9125,1.000011206,0.997363389}, + {5.916667,1.000011563,0.997370303}, + {5.920833,1.000011802,0.997377098}, + {5.925,1.000011921,0.997383893}, + {5.929167,1.00001204,0.997390687}, + {5.933333,1.00001204,0.997397423}, + {5.9375,1.00001204,0.997404158}, + {5.941667,1.000011921,0.997410834}, + {5.945833,1.000011802,0.99741751}, + {5.95,1.000011563,0.997424126}, + {5.954167,1.000011325,0.997430742}, + {5.958333,1.000011086,0.997437358}, + {5.9625,1.000010729,0.997443914}, + {5.966667,1.000010252,0.997450471}, + {5.970833,1.000009894,0.997456968}, + {5.975,1.000009298,0.997463465}, + {5.979167,1.000008821,0.997469962}, + {5.983333,1.000008225,0.997476399}, + {5.9875,1.000007629,0.997482836}, + {5.991667,1.000006914,0.997489274}, + {5.995833,1.000006199,0.997495651}, + {6,1.000005484,0.997502029}, + {6.004167,1.000004649,0.997508407}, + {6.008333,1.000003934,0.997514784}, + {6.0125,1.000003099,0.997521102}, + {6.016667,1.000002146,0.997527421}, + {6.020833,1.000001311,0.997533739}, + {6.025,1.000000358,0.997539997}, + {6.029167,0.999999464,0.997546256}, + {6.033333,0.99999851,0.997552574}, + {6.0375,0.999997556,0.997558773}, + {6.041667,0.999996603,0.997565031}, + {6.045833,0.999995649,0.99757123}, + {6.05,0.999994695,0.997577488}, + {6.054167,0.999993682,0.997583687}, + {6.058333,0.999992728,0.997589886}, + {6.0625,0.999991715,0.997596085}, + {6.066667,0.999990761,0.997602224}, + {6.070833,0.999989748,0.997608423}, + {6.075,0.999988794,0.997614563}, + {6.079167,0.999987841,0.997620761}, + {6.083333,0.999986947,0.997626901}, + {6.0875,0.999985993,0.99763304}, + {6.091667,0.999985099,0.997639179}, + {6.095833,0.999984205,0.997645319}, + {6.1,0.99998337,0.997651398}, + {6.104167,0.999982536,0.997657537}, + {6.108333,0.999981701,0.997663677}, + {6.1125,0.999980927,0.997669756}, + {6.116667,0.999980152,0.997675836}, + {6.120833,0.999979436,0.997681975}, + {6.125,0.999978781,0.997688055}, + {6.129167,0.999978065,0.997694135}, + {6.133333,0.999977469,0.997700214}, + {6.1375,0.999976873,0.997706294}, + {6.141667,0.999976337,0.997712374}, + {6.145833,0.999975801,0.997718394}, + {6.15,0.999975324,0.997724473}, + {6.154167,0.999974847,0.997730494}, + {6.158333,0.999974489,0.997736573}, + {6.1625,0.999974132,0.997742593}, + {6.166667,0.999973774,0.997748673}, + {6.170833,0.999973536,0.997754693}, + {6.175,0.999973297,0.997760713}, + {6.179167,0.999973059,0.997766733}, + {6.183333,0.999972939,0.997772753}, + {6.1875,0.99997282,0.997778773}, + {6.191667,0.999972701,0.997784734}, + {6.195833,0.999972701,0.997790754}, + {6.2,0.999972701,0.997796714}, + {6.204167,0.999972761,0.997802734}, + {6.208333,0.99997282,0.997808695}, + {6.2125,0.999972999,0.997814655}, + {6.216667,0.999973118,0.997820616}, + {6.220833,0.999973357,0.997826517}, + {6.225,0.999973595,0.997832477}, + {6.229167,0.999973834,0.997838438}, + {6.233333,0.999974191,0.997844338}, + {6.2375,0.999974549,0.997850239}, + {6.241667,0.999974906,0.99785614}, + {6.245833,0.999975324,0.997862041}, + {6.25,0.999975741,0.997867882}, + {6.254167,0.999976218,0.997873724}, + {6.258333,0.999976754,0.997879624}, + {6.2625,0.999977231,0.997885466}, + {6.266667,0.999977827,0.997891247}, + {6.270833,0.999978364,0.997897089}, + {6.275,0.99997896,0.99790287}, + {6.279167,0.999979615,0.997908652}, + {6.283333,0.999980211,0.997914433}, + {6.2875,0.999980867,0.997920156}, + {6.291667,0.999981523,0.997925937}, + {6.295833,0.999982238,0.997931659}, + {6.3,0.999982893,0.997937381}, + {6.304167,0.999983609,0.997943044}, + {6.308333,0.999984324,0.997948706}, + {6.3125,0.999985039,0.997954369}, + {6.316667,0.999985754,0.997960031}, + {6.320833,0.99998647,0.997965634}, + {6.325,0.999987185,0.997971237}, + {6.329167,0.9999879,0.99797684}, + {6.333333,0.999988616,0.997982383}, + {6.3375,0.99998939,0.997987926}, + {6.341667,0.999990106,0.997993469}, + {6.345833,0.999990761,0.997999012}, + {6.35,0.999991477,0.998004496}, + {6.354167,0.999992192,0.99800998}, + {6.358333,0.999992847,0.998015404}, + {6.3625,0.999993503,0.998020828}, + {6.366667,0.999994159,0.998026252}, + {6.370833,0.999994814,0.998031616}, + {6.375,0.99999541,0.99803704}, + {6.379167,0.999996006,0.998042345}, + {6.383333,0.999996603,0.998047709}, + {6.3875,0.999997139,0.998053014}, + {6.391667,0.999997675,0.998058319}, + {6.395833,0.999998212,0.998063564}, + {6.4,0.999998689,0.998068869}, + {6.404167,0.999999166,0.998074055}, + {6.408333,0.999999583,0.9980793}, + {6.4125,1,0.998084486}, + {6.416667,1.000000477,0.998089671}, + {6.420833,1.000000834,0.998094797}, + {6.425,1.000001073,0.998099923}, + {6.429167,1.000001431,0.998105049}, + {6.433333,1.000001669,0.998110116}, + {6.4375,1.000001907,0.998115182}, + {6.441667,1.000002146,0.998120248}, + {6.445833,1.000002384,0.998125315}, + {6.45,1.000002503,0.998130322}, + {6.454167,1.000002623,0.998135328}, + {6.458333,1.000002742,0.998140275}, + {6.4625,1.000002861,0.998145223}, + {6.466667,1.000002861,0.99815017}, + {6.470833,1.00000298,0.998155117}, + {6.475,1.00000298,0.998160005}, + {6.479167,1.000002861,0.998164892}, + {6.483333,1.000002861,0.99816978}, + {6.4875,1.000002742,0.998174608}, + {6.491667,1.000002623,0.998179495}, + {6.495833,1.000002503,0.998184323}, + {6.5,1.000002265,0.998189092}, + {6.504167,1.000002146,0.99819392}, + {6.508333,1.000001907,0.998198688}, + {6.5125,1.000001669,0.998203456}, + {6.516667,1.000001431,0.998208225}, + {6.520833,1.000001073,0.998212934}, + {6.525,1.000000834,0.998217642}, + {6.529167,1.000000477,0.998222351}, + {6.533333,1.000000119,0.99822706}, + {6.5375,0.999999821,0.998231709}, + {6.541667,0.999999464,0.998236418}, + {6.545833,0.999999046,0.998241067}, + {6.55,0.999998689,0.998245716}, + {6.554167,0.999998271,0.998250365}, + {6.558333,0.999997854,0.998254955}, + {6.5625,0.999997377,0.998259604}, + {6.566667,0.99999696,0.998264194}, + {6.570833,0.999996543,0.998268783}, + {6.575,0.999996066,0.998273373}, + {6.579167,0.999995589,0.998277962}, + {6.583333,0.999995172,0.998282492}, + {6.5875,0.999994695,0.998287082}, + {6.591667,0.999994218,0.998291612}, + {6.595833,0.999993742,0.998296142}, + {6.6,0.999993265,0.998300672}, + {6.604167,0.999992847,0.998305202}, + {6.608333,0.999992371,0.998309731}, + {6.6125,0.999991894,0.998314202}, + {6.616667,0.999991477,0.998318732}, + {6.620833,0.999991,0.998323202}, + {6.625,0.999990582,0.998327732}, + {6.629167,0.999990165,0.998332202}, + {6.633333,0.999989748,0.998336673}, + {6.6375,0.999989331,0.998341084}, + {6.641667,0.999988914,0.998345554}, + {6.645833,0.999988556,0.998350024}, + {6.65,0.999988198,0.998354495}, + {6.654167,0.999987841,0.998358905}, + {6.658333,0.999987483,0.998363316}, + {6.6625,0.999987125,0.998367786}, + {6.666667,0.999986827,0.998372197}, + {6.670833,0.999986529,0.998376608}, + {6.675,0.999986231,0.998381019}, + {6.679167,0.999985993,0.998385429}, + {6.683333,0.999985754,0.998389781}, + {6.6875,0.999985516,0.998394191}, + {6.691667,0.999985337,0.998398602}, + {6.695833,0.999985158,0.998402953}, + {6.7,0.99998498,0.998407304}, + {6.704167,0.999984801,0.998411715}, + {6.708333,0.999984682,0.998416066}, + {6.7125,0.999984562,0.998420417}, + {6.716667,0.999984503,0.998424768}, + {6.720833,0.999984443,0.99842906}, + {6.725,0.999984384,0.998433411}, + {6.729167,0.999984384,0.998437762}, + {6.733333,0.999984324,0.998442054}, + {6.7375,0.999984384,0.998446345}, + {6.741667,0.999984384,0.998450696}, + {6.745833,0.999984443,0.998454988}, + {6.75,0.999984503,0.99845928}, + {6.754167,0.999984622,0.998463511}, + {6.758333,0.999984741,0.998467803}, + {6.7625,0.99998486,0.998472095}, + {6.766667,0.99998498,0.998476326}, + {6.770833,0.999985158,0.998480558}, + {6.775,0.999985337,0.99848485}, + {6.779167,0.999985516,0.998489082}, + {6.783333,0.999985754,0.998493254}, + {6.7875,0.999985933,0.998497486}, + {6.791667,0.999986172,0.998501718}, + {6.795833,0.99998641,0.99850589}, + {6.8,0.999986708,0.998510063}, + {6.804167,0.999986947,0.998514235}, + {6.808333,0.999987245,0.998518407}, + {6.8125,0.999987543,0.99852258}, + {6.816667,0.999987841,0.998526752}, + {6.820833,0.999988198,0.998530865}, + {6.825,0.999988496,0.998534977}, + {6.829167,0.999988854,0.99853909}, + {6.833333,0.999989152,0.998543203}, + {6.8375,0.99998951,0.998547256}, + {6.841667,0.999989867,0.998551369}, + {6.845833,0.999990225,0.998555422}, + {6.85,0.999990582,0.998559475}, + {6.854167,0.99999094,0.998563528}, + {6.858333,0.999991298,0.998567581}, + {6.8625,0.999991655,0.998571575}, + {6.866667,0.999992013,0.998575568}, + {6.870833,0.999992371,0.998579562}, + {6.875,0.999992728,0.998583555}, + {6.879167,0.999993026,0.998587549}, + {6.883333,0.999993384,0.998591483}, + {6.8875,0.999993742,0.998595417}, + {6.891667,0.999994099,0.99859935}, + {6.895833,0.999994397,0.998603284}, + {6.9,0.999994755,0.998607218}, + {6.904167,0.999995053,0.998611093}, + {6.908333,0.999995351,0.998614967}, + {6.9125,0.999995708,0.998618841}, + {6.916667,0.999996006,0.998622715}, + {6.920833,0.999996245,0.99862653}, + {6.925,0.999996543,0.998630345}, + {6.929167,0.999996781,0.99863416}, + {6.933333,0.999997079,0.998637974}, + {6.9375,0.999997318,0.998641729}, + {6.941667,0.999997556,0.998645544}, + {6.945833,0.999997735,0.998649299}, + {6.95,0.999997973,0.998653054}, + {6.954167,0.999998152,0.99865675}, + {6.958333,0.999998331,0.998660505}, + {6.9625,0.99999851,0.9986642}, + {6.966667,0.999998629,0.998667896}, + {6.970833,0.999998808,0.998671591}, + {6.975,0.999998927,0.998675287}, + {6.979167,0.999999046,0.998678923}, + {6.983333,0.999999106,0.998682559}, + {6.9875,0.999999225,0.998686194}, + {6.991667,0.999999285,0.99868983}, + {6.995833,0.999999344,0.998693466}, + {7,0.999999404,0.998697042}, + {7.004167,0.999999404,0.998700619}, + {7.008333,0.999999404,0.998704195}, + {7.0125,0.999999404,0.998707771}, + {7.016667,0.999999404,0.998711348}, + {7.020833,0.999999344,0.998714864}, + {7.025,0.999999344,0.998718381}, + {7.029167,0.999999285,0.998721898}, + {7.033333,0.999999225,0.998725414}, + {7.0375,0.999999166,0.998728931}, + {7.041667,0.999999046,0.998732388}, + {7.045833,0.999998927,0.998735905}, + {7.05,0.999998808,0.998739362}, + {7.054167,0.999998689,0.998742819}, + {7.058333,0.999998569,0.998746276}, + {7.0625,0.99999845,0.998749673}, + {7.066667,0.999998271,0.99875313}, + {7.070833,0.999998152,0.998756528}, + {7.075,0.999997973,0.998759985}, + {7.079167,0.999997795,0.998763382}, + {7.083333,0.999997616,0.99876678}, + {7.0875,0.999997437,0.998770118}, + {7.091667,0.999997199,0.998773515}, + {7.095833,0.99999702,0.998776853}, + {7.1,0.999996841,0.998780251}, + {7.104167,0.999996603,0.998783588}, + {7.108333,0.999996424,0.998786926}, + {7.1125,0.999996185,0.998790264}, + {7.116667,0.999995947,0.998793602}, + {7.120833,0.999995768,0.99879694}, + {7.125,0.99999553,0.998800218}, + {7.129167,0.999995291,0.998803556}, + {7.133333,0.999995053,0.998806834}, + {7.1375,0.999994874,0.998810112}, + {7.141667,0.999994636,0.99881345}, + {7.145833,0.999994397,0.998816729}, + {7.15,0.999994218,0.998820007}, + {7.154167,0.99999398,0.998823225}, + {7.158333,0.999993801,0.998826504}, + {7.1625,0.999993563,0.998829782}, + {7.166667,0.999993384,0.998833001}, + {7.170833,0.999993145,0.998836279}, + {7.175,0.999992967,0.998839498}, + {7.179167,0.999992788,0.998842716}, + {7.183333,0.999992609,0.998845935}, + {7.1875,0.99999243,0.998849154}, + {7.191667,0.999992251,0.998852372}, + {7.195833,0.999992132,0.998855591}, + {7.2,0.999991953,0.998858809}, + {7.204167,0.999991775,0.998861969}, + {7.208333,0.999991655,0.998865187}, + {7.2125,0.999991536,0.998868346}, + {7.216667,0.999991417,0.998871565}, + {7.220833,0.999991298,0.998874724}, + {7.225,0.999991179,0.998877883}, + {7.229167,0.999991119,0.998881042}, + {7.233333,0.999991,0.998884201}, + {7.2375,0.99999094,0.99888736}, + {7.241667,0.99999088,0.998890519}, + {7.245833,0.999990821,0.998893678}, + {7.25,0.999990761,0.998896778}, + {7.254167,0.999990761,0.998899937}, + {7.258333,0.999990702,0.998903036}, + {7.2625,0.999990702,0.998906136}, + {7.266667,0.999990702,0.998909295}, + {7.270833,0.999990702,0.998912394}, + {7.275,0.999990702,0.998915493}, + {7.279167,0.999990761,0.998918593}, + {7.283333,0.999990761,0.998921633}, + {7.2875,0.999990821,0.998924732}, + {7.291667,0.99999088,0.998927832}, + {7.295833,0.99999094,0.998930871}, + {7.3,0.999991,0.998933971}, + {7.304167,0.999991059,0.998937011}, + {7.308333,0.999991119,0.998940051}, + {7.3125,0.999991238,0.99894309}, + {7.316667,0.999991357,0.99894613}, + {7.320833,0.999991417,0.99894917}, + {7.325,0.999991536,0.99895215}, + {7.329167,0.999991655,0.99895519}, + {7.333333,0.999991834,0.99895817}, + {7.3375,0.999991953,0.99896121}, + {7.341667,0.999992073,0.99896419}, + {7.345833,0.999992251,0.998967171}, + {7.35,0.999992371,0.998970151}, + {7.354167,0.999992549,0.998973131}, + {7.358333,0.999992669,0.998976052}, + {7.3625,0.999992847,0.998979032}, + {7.366667,0.999993026,0.998981953}, + {7.370833,0.999993205,0.998984933}, + {7.375,0.999993384,0.998987854}, + {7.379167,0.999993503,0.998990774}, + {7.383333,0.999993682,0.998993695}, + {7.3875,0.999993861,0.998996556}, + {7.391667,0.99999404,0.998999476}, + {7.395833,0.999994218,0.999002397}, + {7.4,0.999994397,0.999005258}, + {7.404167,0.999994576,0.999008119}, + {7.408333,0.999994755,0.99901098}, + {7.4125,0.999994934,0.999013841}, + {7.416667,0.999995112,0.999016702}, + {7.420833,0.999995291,0.999019504}, + {7.425,0.99999547,0.999022365}, + {7.429167,0.999995649,0.999025166}, + {7.433333,0.999995828,0.999027967}, + {7.4375,0.999995947,0.999030769}, + {7.441667,0.999996126,0.99903357}, + {7.445833,0.999996305,0.999036372}, + {7.45,0.999996424,0.999039173}, + {7.454167,0.999996603,0.999041915}, + {7.458333,0.999996722,0.999044716}, + {7.4625,0.999996841,0.999047458}, + {7.466667,0.99999702,0.9990502}, + {7.470833,0.999997139,0.999052942}, + {7.475,0.999997258,0.999055624}, + {7.479167,0.999997377,0.999058366}, + {7.483333,0.999997437,0.999061048}, + {7.4875,0.999997556,0.99906379}, + {7.491667,0.999997675,0.999066472}, + {7.495833,0.999997735,0.999069154}, + {7.5,0.999997854,0.999071836}, + {7.504167,0.999997914,0.999074459}, + {7.508333,0.999997973,0.999077141}, + {7.5125,0.999998033,0.999079764}, + {7.516667,0.999998093,0.999082446}, + {7.520833,0.999998152,0.999085069}, + {7.525,0.999998212,0.999087691}, + {7.529167,0.999998212,0.999090314}, + {7.533333,0.999998271,0.999092937}, + {7.5375,0.999998271,0.9990955}, + {7.541667,0.999998331,0.999098122}, + {7.545833,0.999998331,0.999100685}, + {7.55,0.999998331,0.999103248}, + {7.554167,0.999998331,0.999105811}, + {7.558333,0.999998271,0.999108374}, + {7.5625,0.999998271,0.999110937}, + {7.566667,0.999998271,0.9991135}, + {7.570833,0.999998212,0.999116004}, + {7.575,0.999998212,0.999118567}, + {7.579167,0.999998152,0.99912107}, + {7.583333,0.999998093,0.999123573}, + {7.5875,0.999998033,0.999126077}, + {7.591667,0.999997973,0.99912858}, + {7.595833,0.999997914,0.999131083}, + {7.6,0.999997854,0.999133587}, + {7.604167,0.999997795,0.99913609}, + {7.608333,0.999997735,0.999138534}, + {7.6125,0.999997675,0.999141037}, + {7.616667,0.999997556,0.999143481}, + {7.620833,0.999997497,0.999145925}, + {7.625,0.999997377,0.999148369}, + {7.629167,0.999997318,0.999150813}, + {7.633333,0.999997199,0.999153256}, + {7.6375,0.999997079,0.9991557}, + {7.641667,0.99999702,0.999158144}, + {7.645833,0.999996901,0.999160528}, + {7.65,0.999996781,0.999162972}, + {7.654167,0.999996722,0.999165356}, + {7.658333,0.999996603,0.9991678}, + {7.6625,0.999996483,0.999170184}, + {7.666667,0.999996364,0.999172568}, + {7.670833,0.999996305,0.999174953}, + {7.675,0.999996185,0.999177337}, + {7.679167,0.999996066,0.999179721}, + {7.683333,0.999995947,0.999182105}, + {7.6875,0.999995887,0.99918443}, + {7.691667,0.999995768,0.999186814}, + {7.695833,0.999995649,0.999189138}, + {7.7,0.999995589,0.999191523}, + {7.704167,0.99999547,0.999193847}, + {7.708333,0.99999541,0.999196231}, + {7.7125,0.999995291,0.999198556}, + {7.716667,0.999995232,0.999200881}, + {7.720833,0.999995112,0.999203205}, + {7.725,0.999995053,0.99920553}, + {7.729167,0.999994993,0.999207854}, + {7.733333,0.999994874,0.999210179}, + {7.7375,0.999994814,0.999212444}, + {7.741667,0.999994755,0.999214768}, + {7.745833,0.999994695,0.999217033}, + {7.75,0.999994636,0.999219358}, + {7.754167,0.999994576,0.999221623}, + {7.758333,0.999994516,0.999223948}, + {7.7625,0.999994516,0.999226213}, + {7.766667,0.999994457,0.999228477}, + {7.770833,0.999994397,0.999230742}, + {7.775,0.999994397,0.999233007}, + {7.779167,0.999994338,0.999235272}, + {7.783333,0.999994338,0.999237537}, + {7.7875,0.999994338,0.999239802}, + {7.791667,0.999994278,0.999242008}, + {7.795833,0.999994278,0.999244273}, + {7.8,0.999994278,0.999246478}, + {7.804167,0.999994278,0.999248743}, + {7.808333,0.999994278,0.999250948}, + {7.8125,0.999994278,0.999253213}, + {7.816667,0.999994338,0.999255419}, + {7.820833,0.999994338,0.999257624}, + {7.825,0.999994338,0.99925983}, + {7.829167,0.999994397,0.999262035}, + {7.833333,0.999994397,0.99926424}, + {7.8375,0.999994457,0.999266446}, + {7.841667,0.999994516,0.999268591}, + {7.845833,0.999994576,0.999270797}, + {7.85,0.999994576,0.999272943}, + {7.854167,0.999994636,0.999275148}, + {7.858333,0.999994695,0.999277294}, + {7.8625,0.999994755,0.999279499}, + {7.866667,0.999994814,0.999281645}, + {7.870833,0.999994874,0.999283791}, + {7.875,0.999994993,0.999285936}, + {7.879167,0.999995053,0.999288082}, + {7.883333,0.999995112,0.999290228}, + {7.8875,0.999995172,0.999292314}, + {7.891667,0.999995291,0.99929446}, + {7.895833,0.999995351,0.999296546}, + {7.9,0.99999541,0.999298692}, + {7.904167,0.99999553,0.999300778}, + {7.908333,0.999995589,0.999302924}, + {7.9125,0.999995708,0.99930501}, + {7.916667,0.999995768,0.999307096}, + {7.920833,0.999995887,0.999309182}, + {7.925,0.999995947,0.999311268}, + {7.929167,0.999996066,0.999313295}, + {7.933333,0.999996126,0.999315381}, + {7.9375,0.999996245,0.999317467}, + {7.941667,0.999996305,0.999319494}, + {7.945833,0.999996424,0.99932158}, + {7.95,0.999996483,0.999323606}, + {7.954167,0.999996603,0.999325633}, + {7.958333,0.999996662,0.99932766}, + {7.9625,0.999996781,0.999329686}, + {7.966667,0.999996841,0.999331713}, + {7.970833,0.999996901,0.999333739}, + {7.975,0.99999702,0.999335766}, + {7.979167,0.999997079,0.999337733}, + {7.983333,0.999997139,0.999339759}, + {7.9875,0.999997258,0.999341726}, + {7.991667,0.999997318,0.999343693}, + {7.995833,0.999997377,0.99934572}, + {8,0.999997437,0.999347687}, + {8.004167,0.999997497,0.999349654}, + {8.008333,0.999997616,0.999351621}, + {8.0125,0.999997675,0.999353528}, + {8.016667,0.999997735,0.999355495}, + {8.020833,0.999997735,0.999357462}, + {8.025,0.999997795,0.999359369}, + {8.029167,0.999997854,0.999361336}, + {8.033333,0.999997914,0.999363244}, + {8.0375,0.999997973,0.999365151}, + {8.041667,0.999997973,0.999367058}, + {8.045833,0.999998033,0.999368966}, + {8.05,0.999998033,0.999370873}, + {8.054167,0.999998093,0.99937278}, + {8.058333,0.999998093,0.999374688}, + {8.0625,0.999998152,0.999376535}, + {8.066667,0.999998152,0.999378443}, + {8.070833,0.999998152,0.999380291}, + {8.075,0.999998212,0.999382198}, + {8.079167,0.999998212,0.999384046}, + {8.083333,0.999998212,0.999385893}, + {8.0875,0.999998212,0.999387741}, + {8.091667,0.999998212,0.999389589}, + {8.095833,0.999998212,0.999391437}, + {8.1,0.999998212,0.999393284}, + {8.104167,0.999998212,0.999395132}, + {8.108333,0.999998152,0.99939698}, + {8.1125,0.999998152,0.999398768}, + {8.116667,0.999998152,0.999400616}, + {8.120833,0.999998093,0.999402404}, + {8.125,0.999998093,0.999404192}, + {8.129167,0.999998093,0.99940604}, + {8.133333,0.999998033,0.999407828}, + {8.1375,0.999998033,0.999409616}, + {8.141667,0.999997973,0.999411404}, + {8.145833,0.999997973,0.999413192}, + {8.15,0.999997914,0.99941498}, + {8.154167,0.999997854,0.999416709}, + {8.158333,0.999997854,0.999418497}, + {8.1625,0.999997795,0.999420285}, + {8.166667,0.999997735,0.999422014}, + {8.170833,0.999997675,0.999423742}, + {8.175,0.999997675,0.99942553}, + {8.179167,0.999997616,0.999427259}, + {8.183333,0.999997556,0.999428988}, + {8.1875,0.999997497,0.999430776}, + {8.191667,0.999997497,0.999432504}, + {8.195833,0.999997437,0.999434233}, + {8.2,0.999997377,0.999435961}, + {8.204167,0.999997318,0.99943769}, + {8.208333,0.999997258,0.999439359}, + {8.2125,0.999997258,0.999441087}, + {8.216667,0.999997199,0.999442816}, + {8.220833,0.999997139,0.999444485}, + {8.225,0.999997079,0.999446213}, + {8.229167,0.99999702,0.999447882}, + {8.233333,0.99999702,0.999449611}, + {8.2375,0.99999696,0.99945128}, + {8.241667,0.999996901,0.999452949}, + {8.245833,0.999996841,0.999454677}, + {8.25,0.999996841,0.999456346}, + {8.254167,0.999996781,0.999458015}, + {8.258333,0.999996722,0.999459684}, + {8.2625,0.999996722,0.999461353}, + {8.266667,0.999996662,0.999463022}, + {8.270833,0.999996662,0.999464691}, + {8.275,0.999996603,0.9994663}, + {8.279167,0.999996603,0.999467969}, + {8.283333,0.999996543,0.999469638}, + {8.2875,0.999996543,0.999471247}, + {8.291667,0.999996483,0.999472916}, + {8.295833,0.999996483,0.999474525}, + {8.3,0.999996483,0.999476194}, + {8.304167,0.999996424,0.999477804}, + {8.308333,0.999996424,0.999479413}, + {8.3125,0.999996424,0.999481082}, + {8.316667,0.999996424,0.999482691}, + {8.320833,0.999996424,0.999484301}, + {8.325,0.999996424,0.99948591}, + {8.329167,0.999996424,0.999487519}, + {8.333333,0.999996424,0.999489129}, + {8.3375,0.999996424,0.999490738}, + {8.341667,0.999996424,0.999492288}, + {8.345833,0.999996424,0.999493897}, + {8.35,0.999996424,0.999495506}, + {8.354167,0.999996424,0.999497056}, + {8.358333,0.999996424,0.999498665}, + {8.3625,0.999996483,0.999500215}, + {8.366667,0.999996483,0.999501824}, + {8.370833,0.999996483,0.999503374}, + {8.375,0.999996483,0.999504924}, + {8.379167,0.999996543,0.999506533}, + {8.383333,0.999996543,0.999508083}, + {8.3875,0.999996603,0.999509633}, + {8.391667,0.999996603,0.999511182}, + {8.395833,0.999996662,0.999512732}, + {8.4,0.999996662,0.999514282}, + {8.404167,0.999996722,0.999515831}, + {8.408333,0.999996722,0.999517322}, + {8.4125,0.999996781,0.999518871}, + {8.416667,0.999996841,0.999520421}, + {8.420833,0.999996841,0.999521911}, + {8.425,0.999996901,0.999523461}, + {8.429167,0.99999696,0.999524951}, + {8.433333,0.99999696,0.999526501}, + {8.4375,0.99999702,0.999527991}, + {8.441667,0.999997079,0.999529481}, + {8.445833,0.999997139,0.999530971}, + {8.45,0.999997139,0.999532461}, + {8.454167,0.999997199,0.999533951}, + {8.458333,0.999997258,0.999535441}, + {8.4625,0.999997318,0.999536932}, + {8.466667,0.999997318,0.999538422}, + {8.470833,0.999997377,0.999539912}, + {8.475,0.999997437,0.999541402}, + {8.479167,0.999997497,0.999542832}, + {8.483333,0.999997497,0.999544322}, + {8.4875,0.999997556,0.999545753}, + {8.491667,0.999997616,0.999547243}, + {8.495833,0.999997675,0.999548674}, + {8.5,0.999997675,0.999550104}, + {8.504167,0.999997735,0.999551535}, + {8.508333,0.999997795,0.999553025}, + {8.5125,0.999997854,0.999554455}, + {8.516667,0.999997854,0.999555886}, + {8.520833,0.999997914,0.999557316}, + {8.525,0.999997973,0.999558687}, + {8.529167,0.999997973,0.999560118}, + {8.533333,0.999998033,0.999561548}, + {8.5375,0.999998033,0.999562979}, + {8.541667,0.999998093,0.99956435}, + {8.545833,0.999998152,0.99956578}, + {8.55,0.999998152,0.999567151}, + {8.554167,0.999998212,0.999568582}, + {8.558333,0.999998212,0.999569952}, + {8.5625,0.999998271,0.999571323}, + {8.566667,0.999998271,0.999572694}, + {8.570833,0.999998271,0.999574065}, + {8.575,0.999998331,0.999575436}, + {8.579167,0.999998331,0.999576807}, + {8.583333,0.999998331,0.999578178}, + {8.5875,0.999998391,0.999579549}, + {8.591667,0.999998391,0.99958092}, + {8.595833,0.999998391,0.999582291}, + {8.6,0.999998391,0.999583602}, + {8.604167,0.99999845,0.999584973}, + {8.608333,0.99999845,0.999586284}, + {8.6125,0.99999845,0.999587655}, + {8.616667,0.99999845,0.999588966}, + {8.620833,0.99999845,0.999590337}, + {8.625,0.99999845,0.999591649}, + {8.629167,0.99999845,0.99959296}, + {8.633333,0.99999845,0.999594271}, + {8.6375,0.99999845,0.999595582}, + {8.641667,0.99999845,0.999596894}, + {8.645833,0.99999845,0.999598205}, + {8.65,0.99999845,0.999599516}, + {8.654167,0.99999845,0.999600828}, + {8.658333,0.99999845,0.999602139}, + {8.6625,0.999998391,0.999603391}, + {8.666667,0.999998391,0.999604702}, + {8.670833,0.999998391,0.999606013}, + {8.675,0.999998391,0.999607265}, + {8.679167,0.999998391,0.999608576}, + {8.683333,0.999998331,0.999609828}, + {8.6875,0.999998331,0.99961108}, + {8.691667,0.999998331,0.999612391}, + {8.695833,0.999998331,0.999613643}, + {8.7,0.999998271,0.999614894}, + {8.704167,0.999998271,0.999616146}, + {8.708333,0.999998271,0.999617398}, + {8.7125,0.999998212,0.999618649}, + {8.716667,0.999998212,0.999619901}, + {8.720833,0.999998212,0.999621153}, + {8.725,0.999998152,0.999622405}, + {8.729167,0.999998152,0.999623656}, + {8.733333,0.999998093,0.999624908}, + {8.7375,0.999998093,0.99962616}, + {8.741667,0.999998093,0.999627352}, + {8.745833,0.999998033,0.999628603}, + {8.75,0.999998033,0.999629796}, + {8.754167,0.999998033,0.999631047}, + {8.758333,0.999997973,0.999632239}, + {8.7625,0.999997973,0.999633491}, + {8.766667,0.999997973,0.999634683}, + {8.770833,0.999997914,0.999635935}, + {8.775,0.999997914,0.999637127}, + {8.779167,0.999997914,0.999638319}, + {8.783333,0.999997854,0.999639511}, + {8.7875,0.999997854,0.999640703}, + {8.791667,0.999997854,0.999641895}, + {8.795833,0.999997795,0.999643087}, + {8.8,0.999997795,0.999644279}, + {8.804167,0.999997795,0.999645472}, + {8.808333,0.999997795,0.999646664}, + {8.8125,0.999997735,0.999647856}, + {8.816667,0.999997735,0.999649048}, + {8.820833,0.999997735,0.99965024}, + {8.825,0.999997735,0.999651372}, + {8.829167,0.999997735,0.999652565}, + {8.833333,0.999997735,0.999653697}, + {8.8375,0.999997675,0.999654889}, + {8.841667,0.999997675,0.999656081}, + {8.845833,0.999997675,0.999657214}, + {8.85,0.999997675,0.999658346}, + {8.854167,0.999997675,0.999659538}, + {8.858333,0.999997675,0.999660671}, + {8.8625,0.999997675,0.999661803}, + {8.866667,0.999997675,0.999662995}, + {8.870833,0.999997675,0.999664128}, + {8.875,0.999997675,0.99966526}, + {8.879167,0.999997675,0.999666393}, + {8.883333,0.999997675,0.999667525}, + {8.8875,0.999997675,0.999668658}, + {8.891667,0.999997735,0.99966979}, + {8.895833,0.999997735,0.999670923}, + {8.9,0.999997735,0.999672055}, + {8.904167,0.999997735,0.999673128}, + {8.908333,0.999997735,0.999674261}, + {8.9125,0.999997735,0.999675393}, + {8.916667,0.999997795,0.999676526}, + {8.920833,0.999997795,0.999677598}, + {8.925,0.999997795,0.999678731}, + {8.929167,0.999997795,0.999679804}, + {8.933333,0.999997854,0.999680936}, + {8.9375,0.999997854,0.999682009}, + {8.941667,0.999997854,0.999683142}, + {8.945833,0.999997914,0.999684215}, + {8.95,0.999997914,0.999685287}, + {8.954167,0.999997914,0.99968636}, + {8.958333,0.999997973,0.999687493}, + {8.9625,0.999997973,0.999688566}, + {8.966667,0.999997973,0.999689639}, + {8.970833,0.999998033,0.999690711}, + {8.975,0.999998033,0.999691784}, + {8.979167,0.999998033,0.999692857}, + {8.983333,0.999998093,0.99969393}, + {8.9875,0.999998093,0.999695003}, + {8.991667,0.999998152,0.999696016}, + {8.995833,0.999998152,0.999697089}, + {9,0.999998152,0.999698162}, + {9.004167,0.999998212,0.999699175}, + {9.008333,0.999998212,0.999700248}, + {9.0125,0.999998271,0.999701321}, + {9.016667,0.999998271,0.999702334}, + {9.020833,0.999998271,0.999703407}, + {9.025,0.999998331,0.999704421}, + {9.029167,0.999998331,0.999705434}, + {9.033333,0.999998391,0.999706507}, + {9.0375,0.999998391,0.99970752}, + {9.041667,0.999998391,0.999708533}, + {9.045833,0.99999845,0.999709547}, + {9.05,0.99999845,0.99971056}, + {9.054167,0.99999851,0.999711633}, + {9.058333,0.99999851,0.999712646}, + {9.0625,0.99999851,0.999713659}, + {9.066667,0.999998569,0.999714613}, + {9.070833,0.999998569,0.999715626}, + {9.075,0.999998569,0.99971664}, + {9.079167,0.999998569,0.999717653}, + {9.083333,0.999998629,0.999718666}, + {9.0875,0.999998629,0.99971962}, + {9.091667,0.999998629,0.999720633}, + {9.095833,0.999998689,0.999721646}, + {9.1,0.999998689,0.9997226}, + {9.104167,0.999998689,0.999723613}, + {9.108333,0.999998689,0.999724567}, + {9.1125,0.999998689,0.999725521}, + {9.116667,0.999998748,0.999726534}, + {9.120833,0.999998748,0.999727488}, + {9.125,0.999998748,0.999728441}, + {9.129167,0.999998748,0.999729455}, + {9.133333,0.999998748,0.999730408}, + {9.1375,0.999998748,0.999731362}, + {9.141667,0.999998808,0.999732316}, + {9.145833,0.999998808,0.999733269}, + {9.15,0.999998808,0.999734223}, + {9.154167,0.999998808,0.999735177}, + {9.158333,0.999998808,0.99973613}, + {9.1625,0.999998808,0.999737084}, + {9.166667,0.999998808,0.999737978}, + {9.170833,0.999998808,0.999738932}, + {9.175,0.999998808,0.999739885}, + {9.179167,0.999998808,0.999740839}, + {9.183333,0.999998808,0.999741733}, + {9.1875,0.999998808,0.999742687}, + {9.191667,0.999998808,0.999743581}, + {9.195833,0.999998808,0.999744534}, + {9.2,0.999998808,0.999745429}, + {9.204167,0.999998808,0.999746382}, + {9.208333,0.999998808,0.999747276}, + {9.2125,0.999998748,0.99974817}, + {9.216667,0.999998748,0.999749124}, + {9.220833,0.999998748,0.999750018}, + {9.225,0.999998748,0.999750912}, + {9.229167,0.999998748,0.999751806}, + {9.233333,0.999998748,0.99975276}, + {9.2375,0.999998748,0.999753654}, + {9.241667,0.999998748,0.999754548}, + {9.245833,0.999998748,0.999755442}, + {9.25,0.999998689,0.999756336}, + {9.254167,0.999998689,0.99975723}, + {9.258333,0.999998689,0.999758124}, + {9.2625,0.999998689,0.999758959}, + {9.266667,0.999998689,0.999759853}, + {9.270833,0.999998689,0.999760747}, + {9.275,0.999998629,0.999761641}, + {9.279167,0.999998629,0.999762475}, + {9.283333,0.999998629,0.99976337}, + {9.2875,0.999998629,0.999764264}, + {9.291667,0.999998629,0.999765098}, + {9.295833,0.999998629,0.999765992}, + {9.3,0.999998629,0.999766827}, + {9.304167,0.999998569,0.999767721}, + {9.308333,0.999998569,0.999768555}, + {9.3125,0.999998569,0.999769449}, + {9.316667,0.999998569,0.999770284}, + {9.320833,0.999998569,0.999771118}, + {9.325,0.999998569,0.999772012}, + {9.329167,0.999998569,0.999772847}, + {9.333333,0.999998569,0.999773681}, + {9.3375,0.99999851,0.999774516}, + {9.341667,0.99999851,0.99977541}, + {9.345833,0.99999851,0.999776244}, + {9.35,0.99999851,0.999777079}, + {9.354167,0.99999851,0.999777913}, + {9.358333,0.99999851,0.999778748}, + {9.3625,0.99999851,0.999779582}, + {9.366667,0.99999851,0.999780416}, + {9.370833,0.99999851,0.999781251}, + {9.375,0.99999851,0.999782085}, + {9.379167,0.99999851,0.99978286}, + {9.383333,0.99999851,0.999783695}, + {9.3875,0.99999851,0.999784529}, + {9.391667,0.99999851,0.999785364}, + {9.395833,0.99999851,0.999786139}, + {9.4,0.99999851,0.999786973}, + {9.404167,0.99999851,0.999787807}, + {9.408333,0.99999851,0.999788582}, + {9.4125,0.99999851,0.999789417}, + {9.416667,0.99999851,0.999790192}, + {9.420833,0.99999851,0.999791026}, + {9.425,0.99999851,0.999791801}, + {9.429167,0.99999851,0.999792635}, + {9.433333,0.99999851,0.99979341}, + {9.4375,0.99999851,0.999794185}, + {9.441667,0.99999851,0.99979502}, + {9.445833,0.999998569,0.999795794}, + {9.45,0.999998569,0.999796569}, + {9.454167,0.999998569,0.999797404}, + {9.458333,0.999998569,0.999798179}, + {9.4625,0.999998569,0.999798954}, + {9.466667,0.999998569,0.999799728}, + {9.470833,0.999998569,0.999800503}, + {9.475,0.999998629,0.999801278}, + {9.479167,0.999998629,0.999802053}, + {9.483333,0.999998629,0.999802828}, + {9.4875,0.999998629,0.999803603}, + {9.491667,0.999998629,0.999804378}, + {9.495833,0.999998689,0.999805152}, + {9.5,0.999998689,0.999805927}, + {9.504167,0.999998689,0.999806643}, + {9.508333,0.999998689,0.999807417}, + {9.5125,0.999998689,0.999808192}, + {9.516667,0.999998748,0.999808967}, + {9.520833,0.999998748,0.999809682}, + {9.525,0.999998748,0.999810457}, + {9.529167,0.999998748,0.999811172}, + {9.533333,0.999998748,0.999811947}, + {9.5375,0.999998808,0.999812722}, + {9.541667,0.999998808,0.999813437}, + {9.545833,0.999998808,0.999814153}, + {9.55,0.999998808,0.999814928}, + {9.554167,0.999998808,0.999815643}, + {9.558333,0.999998868,0.999816418}, + {9.5625,0.999998868,0.999817133}, + {9.566667,0.999998868,0.999817848}, + {9.570833,0.999998868,0.999818563}, + {9.575,0.999998868,0.999819338}, + {9.579167,0.999998927,0.999820054}, + {9.583333,0.999998927,0.999820769}, + {9.5875,0.999998927,0.999821484}, + {9.591667,0.999998927,0.999822199}, + {9.595833,0.999998927,0.999822915}, + {9.6,0.999998987,0.99982363}, + {9.604167,0.999998987,0.999824345}, + {9.608333,0.999998987,0.99982506}, + {9.6125,0.999998987,0.999825776}, + {9.616667,0.999998987,0.999826491}, + {9.620833,0.999998987,0.999827206}, + {9.625,0.999999046,0.999827921}, + {9.629167,0.999999046,0.999828577}, + {9.633333,0.999999046,0.999829292}, + {9.6375,0.999999046,0.999830008}, + {9.641667,0.999999046,0.999830663}, + {9.645833,0.999999046,0.999831378}, + {9.65,0.999999046,0.999832094}, + {9.654167,0.999999106,0.999832749}, + {9.658333,0.999999106,0.999833465}, + {9.6625,0.999999106,0.99983412}, + {9.666667,0.999999106,0.999834836}, + {9.670833,0.999999106,0.999835491}, + {9.675,0.999999106,0.999836206}, + {9.679167,0.999999106,0.999836862}, + {9.683333,0.999999106,0.999837518}, + {9.6875,0.999999106,0.999838233}, + {9.691667,0.999999106,0.999838889}, + {9.695833,0.999999106,0.999839544}, + {9.7,0.999999106,0.9998402}, + {9.704167,0.999999106,0.999840856}, + {9.708333,0.999999106,0.999841571}, + {9.7125,0.999999106,0.999842227}, + {9.716667,0.999999106,0.999842882}, + {9.720833,0.999999106,0.999843538}, + {9.725,0.999999106,0.999844193}, + {9.729167,0.999999106,0.999844849}, + {9.733333,0.999999106,0.999845505}, + {9.7375,0.999999106,0.99984616}, + {9.741667,0.999999106,0.999846816}, + {9.745833,0.999999106,0.999847472}, + {9.75,0.999999106,0.999848068}, + {9.754167,0.999999106,0.999848723}, + {9.758333,0.999999106,0.999849379}, + {9.7625,0.999999106,0.999850035}, + {9.766667,0.999999106,0.99985069}, + {9.770833,0.999999106,0.999851286}, + {9.775,0.999999106,0.999851942}, + {9.779167,0.999999106,0.999852598}, + {9.783333,0.999999106,0.999853194}, + {9.7875,0.999999106,0.999853849}, + {9.791667,0.999999106,0.999854445}, + {9.795833,0.999999106,0.999855101}, + {9.8,0.999999106,0.999855697}, + {9.804167,0.999999106,0.999856353}, + {9.808333,0.999999106,0.999856949}, + {9.8125,0.999999046,0.999857605}, + {9.816667,0.999999046,0.999858201}, + {9.820833,0.999999046,0.999858797}, + {9.825,0.999999046,0.999859452}, + {9.829167,0.999999046,0.999860048}, + {9.833333,0.999999046,0.999860644}, + {9.8375,0.999999046,0.9998613}, + {9.841667,0.999999046,0.999861896}, + {9.845833,0.999999046,0.999862492}, + {9.85,0.999999046,0.999863088}, + {9.854167,0.999999046,0.999863684}, + {9.858333,0.999999046,0.99986428}, + {9.8625,0.999999046,0.999864876}, + {9.866667,0.999999046,0.999865532}, + {9.870833,0.999999046,0.999866128}, + {9.875,0.999999046,0.999866724}, + {9.879167,0.999999046,0.99986732}, + {9.883333,0.999999046,0.999867857}, + {9.8875,0.999999046,0.999868453}, + {9.891667,0.999999046,0.999869049}, + {9.895833,0.999999046,0.999869645}, + {9.9,0.999999046,0.999870241}, + {9.904167,0.999999046,0.999870837}, + {9.908333,0.999999046,0.999871433}, + {9.9125,0.999999046,0.999871969}, + {9.916667,0.999999046,0.999872565}, + {9.920833,0.999999046,0.999873161}, + {9.925,0.999999046,0.999873757}, + {9.929167,0.999999046,0.999874294}, + {9.933333,0.999999046,0.99987489}, + {9.9375,0.999999046,0.999875486}, + {9.941667,0.999999046,0.999876022}, + {9.945833,0.999999046,0.999876618}, + {9.95,0.999999046,0.999877155}, + {9.954167,0.999999046,0.999877751}, + {9.958333,0.999999046,0.999878287}, + {9.9625,0.999999046,0.999878883}, + {9.966667,0.999999046,0.99987942}, + {9.970833,0.999999046,0.999880016}, + {9.975,0.999999046,0.999880552}, + {9.979167,0.999999046,0.999881089}, + {9.983333,0.999999046,0.999881685}, + {9.9875,0.999999046,0.999882221}, + {9.991667,0.999999046,0.999882758}, + {9.995833,0.999999046,0.999883354}, + {10,0.999999106,0.99988389} + }; +} // namespace Example4 diff --git a/examples/PowerElectronics/CMakeLists.txt b/examples/PowerElectronics/CMakeLists.txt new file mode 100644 index 000000000..a362bbe4e --- /dev/null +++ b/examples/PowerElectronics/CMakeLists.txt @@ -0,0 +1,12 @@ +# [[ +# Author(s): +# - Slaven Peles +#]] + +add_subdirectory(DistributedGeneratorTest) + +if(TARGET SUNDIALS::idas) + add_subdirectory(RLCircuit) + add_subdirectory(Microgrid) + add_subdirectory(ScaleMicrogrid) +endif() diff --git a/examples/DistributedGeneratorTest/CMakeLists.txt b/examples/PowerElectronics/DistributedGeneratorTest/CMakeLists.txt similarity index 100% rename from examples/DistributedGeneratorTest/CMakeLists.txt rename to examples/PowerElectronics/DistributedGeneratorTest/CMakeLists.txt diff --git a/examples/DistributedGeneratorTest/DGTest.cpp b/examples/PowerElectronics/DistributedGeneratorTest/DGTest.cpp similarity index 69% rename from examples/DistributedGeneratorTest/DGTest.cpp rename to examples/PowerElectronics/DistributedGeneratorTest/DGTest.cpp index 28d0801b0..2ddc06477 100644 --- a/examples/DistributedGeneratorTest/DGTest.cpp +++ b/examples/PowerElectronics/DistributedGeneratorTest/DGTest.cpp @@ -16,7 +16,7 @@ * @param argv * @return int */ -int main(int argc, char const* argv[]) +int main(int /* argc */, char const** /* argv */) { GridKit::DistributedGeneratorParameters parms; @@ -37,24 +37,24 @@ int main(int argc, char const* argv[]) parms.rLc_ = 0.03; parms.Lc_ = 0.35e-3; - GridKit::DistributedGenerator* dg = new GridKit::DistributedGenerator(0, parms, true); + GridKit::DistributedGenerator dg(0, parms, true); std::vector t1(16, 0.0); std::vector t2{0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5}; - dg->allocate(); + dg.allocate(); - dg->y() = t2; - dg->yp() = t1; + dg.y() = t2; + dg.yp() = t1; - dg->evaluateResidual(); + dg.evaluateResidual(); - std::cout << "Output: {"; - for (double i : dg->getResidual()) - { - printf("%e ,", i); - } - std::cout << "}\n"; + // std::cout << "Output: {"; + // for (double i : dg.getResidual()) + // { + // printf("%e ,", i); + // } + // std::cout << "}\n"; // Generated from matlab code with same parameters and inputs std::vector true_vec{3.141592277589793e+02, @@ -74,11 +74,20 @@ int main(int argc, char const* argv[]) 3.337988298081817e+03, 2.684419146397466e+03}; - std::cout << "Test the Relative Error\n"; + std::cout << "Testing the DistributedGenerator model ...\n"; + double error_allowed = 10 * std::numeric_limits::epsilon(); for (size_t i = 0; i < true_vec.size(); i++) { - printf("%e ,\n", (true_vec[i] - dg->getResidual()[i]) / true_vec[i]); + double error = std::abs(true_vec[i] - dg.getResidual()[i]) / std::abs(1.0 + true_vec[i]); + if (error > error_allowed) + { + std::cout << "Model error for equation " << i << " is: " << error << "\n"; + std::cout << "Maximum allowed error is: " << error_allowed << "\n"; + std::cout << "Test FAILED!\n"; + return 1; + } } + std::cout << "Test successful!\n"; return 0; } diff --git a/examples/Microgrid/CMakeLists.txt b/examples/PowerElectronics/Microgrid/CMakeLists.txt similarity index 100% rename from examples/Microgrid/CMakeLists.txt rename to examples/PowerElectronics/Microgrid/CMakeLists.txt diff --git a/examples/Microgrid/Microgrid.cpp b/examples/PowerElectronics/Microgrid/Microgrid.cpp similarity index 86% rename from examples/Microgrid/Microgrid.cpp rename to examples/PowerElectronics/Microgrid/Microgrid.cpp index 3ea4c8034..3475d7891 100644 --- a/examples/Microgrid/Microgrid.cpp +++ b/examples/PowerElectronics/Microgrid/Microgrid.cpp @@ -15,16 +15,17 @@ #include #include -int main(int argc, char const* argv[]) +int main(int /* argc */, char const** /* argv */) { - ///@todo Needs to be modified. Some components are small relative to others thus there error is high (or could be matlab vector issue) + /// @todo Needs to be modified. Some components are small relative to others thus + /// there error is high (or could be matlab vector issue) double abs_tol = 1.0e-8; double rel_tol = 1.0e-8; - size_t max_step_amount = 3000; + size_t max_step_number = 3000; bool use_jac = true; // Create model - GridKit::PowerElectronicsModel* sysmodel = new GridKit::PowerElectronicsModel(rel_tol, abs_tol, use_jac, max_step_amount); + auto* sysmodel = new GridKit::PowerElectronicsModel(rel_tol, abs_tol, use_jac, max_step_number); // Modeled after the problem in the paper double RN = 1.0e4; @@ -105,7 +106,7 @@ int main(int argc, char const* argv[]) dg1->setExternalConnectionNodes(1, dqbus1); dg1->setExternalConnectionNodes(2, dqbus1 + 1); //"grounding" of the difference - dg1->setExternalConnectionNodes(3, -1); + dg1->setExternalConnectionNodes(3, static_cast(-1)); // internal connections for (size_t i = 0; i < 12; i++) { @@ -315,20 +316,21 @@ int main(int argc, char const* argv[]) sysmodel->initialize(); sysmodel->evaluateResidual(); - std::vector& fres = sysmodel->getResidual(); - std::cout << "Verify Intial Resisdual is Zero: {\n"; - for (size_t i = 0; i < fres.size(); i++) - { - printf("%lu : %e \n", i, fres[i]); - } - std::cout << "}\n"; + // // Optional debugging output + // std::vector& fres = sysmodel->getResidual(); + // std::cout << "Verify Intial Resisdual is Zero: {\n"; + // for (size_t i = 0; i < fres.size(); i++) + // { + // printf("%lu : %e \n", i, fres[i]); + // } + // std::cout << "}\n"; sysmodel->updateTime(0.0, 1.0e-8); sysmodel->evaluateJacobian(); std::cout << "Intial Jacobian with alpha:\n"; // Create numerical integrator and configure it for the generator model - AnalysisManager::Sundials::Ida* idas = new AnalysisManager::Sundials::Ida(sysmodel); + auto* idas = new AnalysisManager::Sundials::Ida(sysmodel); double t_init = 0.0; double t_final = 1.0; @@ -342,13 +344,14 @@ int main(int argc, char const* argv[]) std::vector& yfinial = sysmodel->y(); - std::cout << "Final Vector y\n"; - for (size_t i = 0; i < yfinial.size(); i++) - { - std::cout << yfinial[i] << "\n"; - } + // // Optional debugging output + // std::cout << "Final Vector y\n"; + // for (size_t i = 0; i < yfinial.size(); i++) + // { + // std::cout << yfinial[i] << "\n"; + // } - // Generate from MATLAB code ODE form with tolerances of 1e-12 + // Generated from MATLAB code ODE form with tolerances of 1e-12 std::vector true_vec{ 2.297543153595780e+04, 1.275311524125022e+04, @@ -421,11 +424,31 @@ int main(int argc, char const* argv[]) 3.604108939430972e+02, -3.492842627398574e+01}; - std::cout << "Test the Relative Error\n"; + // std::cout << "Test the Relative Error\n"; + // for (size_t i = 0; i < true_vec.size(); i++) + // { + // printf("%lu : %e ,\n", i, abs(true_vec[i] - yfinial[i]) / abs(true_vec[i])); + // } + + std::cout << "Testing the DistributedGenerator model ...\n"; + double error_allowed = 1e-4; + double max_error = 0.0; for (size_t i = 0; i < true_vec.size(); i++) { - printf("%lu : %e ,\n", i, abs(true_vec[i] - yfinial[i]) / abs(true_vec[i])); + double error = std::abs(true_vec[i] - yfinial[i]) / std::abs(1.0 + true_vec[i]); + if (error > max_error) + max_error = error; + if (error > error_allowed) + { + std::cout << "Model error for equation " << i << " is: " << error << "\n"; + std::cout << "Maximum allowed error is: " << error_allowed << "\n"; + std::cout << "Test FAILED!\n"; + return 1; + } } + std::cout << "Max error = " << max_error << "\n"; + std::cout << "Allowed error = " << error_allowed << "\n"; + std::cout << "Test successful!\n"; delete idas; delete sysmodel; diff --git a/examples/RLCircuit/CMakeLists.txt b/examples/PowerElectronics/RLCircuit/CMakeLists.txt similarity index 100% rename from examples/RLCircuit/CMakeLists.txt rename to examples/PowerElectronics/RLCircuit/CMakeLists.txt diff --git a/examples/RLCircuit/RLCircuit.cpp b/examples/PowerElectronics/RLCircuit/RLCircuit.cpp similarity index 65% rename from examples/RLCircuit/RLCircuit.cpp rename to examples/PowerElectronics/RLCircuit/RLCircuit.cpp index 841395c3a..4c80d0a81 100644 --- a/examples/RLCircuit/RLCircuit.cpp +++ b/examples/PowerElectronics/RLCircuit/RLCircuit.cpp @@ -14,7 +14,7 @@ #include #include -int main(int argc, char const* argv[]) +int main(int /* argc */, char const** /* argv */) { double abs_tol = 1.0e-8; double rel_tol = 1.0e-8; @@ -22,7 +22,7 @@ int main(int argc, char const* argv[]) // TODO:setup as named parameters // Create circuit model - auto* sysmodel = new GridKit::PowerElectronicsModel(rel_tol, abs_tol, use_jac); + GridKit::PowerElectronicsModel sysmodel(rel_tol, abs_tol, use_jac); size_t idoff = 0; @@ -32,87 +32,87 @@ int main(int argc, char const* argv[]) double vinit = 1.0; // inductor - GridKit::Inductor* induct = new GridKit::Inductor(idoff, linit); + GridKit::Inductor* induct = new GridKit::Inductor(idoff, linit); // Form index to node uid realations // input induct->setExternalConnectionNodes(0, 1); // output - induct->setExternalConnectionNodes(1, -1); + induct->setExternalConnectionNodes(1, static_cast(-1)); // internal induct->setExternalConnectionNodes(2, 2); // add component - sysmodel->addComponent(induct); + sysmodel.addComponent(induct); // resistor idoff++; - GridKit::Resistor* resis = new GridKit::Resistor(idoff, rinit); + GridKit::Resistor* resis = new GridKit::Resistor(idoff, rinit); // Form index to node uid realations // input resis->setExternalConnectionNodes(0, 0); // output resis->setExternalConnectionNodes(1, 1); // add - sysmodel->addComponent(resis); + sysmodel.addComponent(resis); // voltage source idoff++; - GridKit::VoltageSource* vsource = new GridKit::VoltageSource(idoff, vinit); + GridKit::VoltageSource* vsource = new GridKit::VoltageSource(idoff, vinit); // Form index to node uid realations // input - vsource->setExternalConnectionNodes(0, -1); + vsource->setExternalConnectionNodes(0, static_cast(-1)); // output vsource->setExternalConnectionNodes(1, 0); // internal vsource->setExternalConnectionNodes(2, 3); - sysmodel->addComponent(vsource); + sysmodel.addComponent(vsource); - sysmodel->allocate(4); + sysmodel.allocate(4); - std::cout << sysmodel->y().size() << std::endl; + std::cout << sysmodel.y().size() << std::endl; // Grounding for IDA. If no grounding then circuit is \mu > 1 // v_0 (grounded) // Create Intial points - sysmodel->y()[0] = vinit; // v_1 - sysmodel->y()[1] = vinit; // v_2 - sysmodel->y()[2] = 0.0; // i_L - sysmodel->y()[3] = 0.0; // i_s + sysmodel.y()[0] = vinit; // v_1 + sysmodel.y()[1] = vinit; // v_2 + sysmodel.y()[2] = 0.0; // i_L + sysmodel.y()[3] = 0.0; // i_s - sysmodel->yp()[0] = 0.0; // v'_1 - sysmodel->yp()[1] = 0.0; // v'_2 - sysmodel->yp()[2] = -vinit / linit; // i'_s - sysmodel->yp()[3] = -vinit / linit; // i'_L + sysmodel.yp()[0] = 0.0; // v'_1 + sysmodel.yp()[1] = 0.0; // v'_2 + sysmodel.yp()[2] = -vinit / linit; // i'_s + sysmodel.yp()[3] = -vinit / linit; // i'_L - sysmodel->initialize(); - sysmodel->evaluateResidual(); + sysmodel.initialize(); + sysmodel.evaluateResidual(); std::cout << "Verify Intial Resisdual is Zero: {"; - for (double i : sysmodel->getResidual()) + for (double i : sysmodel.getResidual()) { std::cout << i << ", "; } std::cout << "}\n"; - sysmodel->updateTime(0.0, 1.0); - sysmodel->evaluateJacobian(); + sysmodel.updateTime(0.0, 1.0); + sysmodel.evaluateJacobian(); std::cout << "Intial Jacobian with alpha = 1:\n"; - sysmodel->getJacobian().printMatrix(); + sysmodel.getJacobian().printMatrix(); // Create numerical integrator and configure it for the generator model - AnalysisManager::Sundials::Ida* idas = new AnalysisManager::Sundials::Ida(sysmodel); + AnalysisManager::Sundials::Ida idas(&sysmodel); double t_init = 0.0; double t_final = 1.0; // setup simulation - idas->configureSimulation(); - idas->getDefaultInitialCondition(); - idas->initializeSimulation(t_init); + idas.configureSimulation(); + idas.getDefaultInitialCondition(); + idas.initializeSimulation(t_init); - idas->runSimulation(t_final); + idas.runSimulation(t_final); - std::vector& yfinial = sysmodel->y(); + std::vector& yfinial = sysmodel.y(); std::cout << "Final Vector y\n"; for (size_t i = 0; i < yfinial.size(); i++) diff --git a/examples/ScaleMicrogrid/CMakeLists.txt b/examples/PowerElectronics/ScaleMicrogrid/CMakeLists.txt similarity index 100% rename from examples/ScaleMicrogrid/CMakeLists.txt rename to examples/PowerElectronics/ScaleMicrogrid/CMakeLists.txt diff --git a/examples/ScaleMicrogrid/ScaleMicrogrid.cpp b/examples/PowerElectronics/ScaleMicrogrid/ScaleMicrogrid.cpp similarity index 99% rename from examples/ScaleMicrogrid/ScaleMicrogrid.cpp rename to examples/PowerElectronics/ScaleMicrogrid/ScaleMicrogrid.cpp index 1568fda8b..ebc573d49 100644 --- a/examples/ScaleMicrogrid/ScaleMicrogrid.cpp +++ b/examples/PowerElectronics/ScaleMicrogrid/ScaleMicrogrid.cpp @@ -31,7 +31,7 @@ static int test(index_type Nsize, real_type test_tolerance, bool error_tol = fal * @param argv unsued * @return int */ -int main(int argc, char const* argv[]) +int main(int /* argc */, char const** /* argv */) { int retval = 0; bool debug_out = false; @@ -192,7 +192,7 @@ int test(index_type Nsize, real_type error_tol, bool debug_output) dg_ref->setExternalConnectionNodes(1, vdqbus_index[0]); dg_ref->setExternalConnectionNodes(2, vdqbus_index[0] + 1); //"grounding" of the difference - dg_ref->setExternalConnectionNodes(3, -1); + dg_ref->setExternalConnectionNodes(3, static_cast(-1)); // internal connections for (index_type i = 0; i < 12; i++) { diff --git a/examples/ScaleMicrogrid/SolutionKeys.hpp b/examples/PowerElectronics/ScaleMicrogrid/SolutionKeys.hpp similarity index 100% rename from examples/ScaleMicrogrid/SolutionKeys.hpp rename to examples/PowerElectronics/ScaleMicrogrid/SolutionKeys.hpp diff --git a/examples/PowerFlow/CMakeLists.txt b/examples/PowerFlow/CMakeLists.txt new file mode 100644 index 000000000..584a6c70e --- /dev/null +++ b/examples/PowerFlow/CMakeLists.txt @@ -0,0 +1,10 @@ +# [[ +# Author(s): +# - Slaven Peles +#]] + +add_subdirectory(MatPowerTesting) + +if(TARGET SUNDIALS::kinsol) + add_subdirectory(Grid3Bus) +endif() diff --git a/examples/Grid3Bus/3bus.mat b/examples/PowerFlow/Grid3Bus/3bus.mat similarity index 100% rename from examples/Grid3Bus/3bus.mat rename to examples/PowerFlow/Grid3Bus/3bus.mat diff --git a/examples/Grid3Bus/CMakeLists.txt b/examples/PowerFlow/Grid3Bus/CMakeLists.txt similarity index 100% rename from examples/Grid3Bus/CMakeLists.txt rename to examples/PowerFlow/Grid3Bus/CMakeLists.txt diff --git a/examples/Grid3Bus/Grid3BusSys.cpp b/examples/PowerFlow/Grid3Bus/Grid3BusSys.cpp similarity index 98% rename from examples/Grid3Bus/Grid3BusSys.cpp rename to examples/PowerFlow/Grid3Bus/Grid3BusSys.cpp index 28ba44306..be8dafb0b 100644 --- a/examples/Grid3Bus/Grid3BusSys.cpp +++ b/examples/PowerFlow/Grid3Bus/Grid3BusSys.cpp @@ -20,11 +20,11 @@ #include #include #include +#include #include +#include #include -#include #include -#include #include static const std::string BUS3_DATA_STRING = R"( @@ -79,7 +79,7 @@ using namespace GridKit; using namespace AnalysisManager::Sundials; using namespace AnalysisManager; using namespace GridKit::Testing; -using namespace GridKit::PowerSystemData; +using namespace GridKit::PowerFlowData; constexpr double theta2_ref = -4.87979; // [deg] constexpr double V2_ref = 1.08281; // [p.u.] @@ -149,7 +149,7 @@ int parserCase() std::cout << "Solving same problem, but assembled from components via a parser ...\n\n"; // Data File Reading - GridKit::PowerSystemData::SystemModelData mp; + GridKit::PowerFlowData::SystemModelData mp; std::istringstream iss(BUS3_DATA_STRING); GridKit::readMatPower(mp, iss); diff --git a/examples/Grid3Bus/README.md b/examples/PowerFlow/Grid3Bus/README.md similarity index 98% rename from examples/Grid3Bus/README.md rename to examples/PowerFlow/Grid3Bus/README.md index 31bd6f9bc..edf4d82ea 100644 --- a/examples/Grid3Bus/README.md +++ b/examples/PowerFlow/Grid3Bus/README.md @@ -10,7 +10,7 @@ The mathematical model of the power flow problem is formulated as a set of nonli The model and its parameters are described in Figure 1:
- + Figure 1: A simple 3-bus grid example. diff --git a/examples/MatPowerTesting/CMakeLists.txt b/examples/PowerFlow/MatPowerTesting/CMakeLists.txt similarity index 100% rename from examples/MatPowerTesting/CMakeLists.txt rename to examples/PowerFlow/MatPowerTesting/CMakeLists.txt diff --git a/examples/PowerFlow/MatPowerTesting/MatPowerTesting.hpp b/examples/PowerFlow/MatPowerTesting/MatPowerTesting.hpp new file mode 100644 index 000000000..36ecfffdc --- /dev/null +++ b/examples/PowerFlow/MatPowerTesting/MatPowerTesting.hpp @@ -0,0 +1,218 @@ +/** + * @file MatPowerTesting.hpp + * @author Slaven Peles + * + * Contains utilities for testing Matpower parser for GridKit. + * + */ +#pragma once + +#include +#include +#include +#include + +#include +#include + +namespace +{ + + static constexpr double tol_ = 1e-8; + + inline std::ostream& errs() + { + std::cerr << "[examples/PowerFlow/MatPowerTesting.hpp]: "; + return std::cerr; + } + +} // namespace + +namespace GridKit +{ + namespace Testing + { + + template + inline bool isEqual(PowerFlowData::GenCostData a, + PowerFlowData::GenCostData b, + RealT tol = tol_) + { + (void) tol; // suppress warning + int fail = 0; + fail += a.kind != b.kind; + fail += a.startup != b.startup; + fail += a.shutdown != b.shutdown; + fail += a.n != b.n; + if (fail) + { + errs() << "Got failure!\na=" << a.str() << "\nb=" << b.str(); + } + return fail == 0; + } + + template + inline bool isEqual(PowerFlowData::GenData a, + PowerFlowData::GenData b, + RealT tol = tol_) + { + int fail = 0; + + fail += a.bus != b.bus; + fail += !isEqual(a.Pg, b.Pg, tol); + fail += !isEqual(a.Qg, b.Qg, tol); + fail += !isEqual(a.Qmax, b.Qmax, tol); + fail += !isEqual(a.Qmin, b.Qmin, tol); + fail += !isEqual(a.Vg, b.Vg, tol); + fail += a.mBase != b.mBase; + fail += a.status != b.status; + fail += a.Pmax != b.Pmax; + fail += a.Pmin != b.Pmin; + fail += a.Pc1 != b.Pc1; + fail += a.Pc2 != b.Pc2; + fail += a.Qc1min != b.Qc1min; + fail += a.Qc1max != b.Qc1max; + fail += a.Qc2min != b.Qc2min; + fail += a.Qc2max != b.Qc2max; + fail += a.ramp_agc != b.ramp_agc; + fail += a.ramp_10 != b.ramp_10; + fail += a.ramp_30 != b.ramp_30; + fail += a.ramp_q != b.ramp_q; + fail += a.apf != b.apf; + + if (fail) + { + errs() << "Got failure!\na=" << a.str() << "\nb=" << b.str(); + } + return fail == 0; + } + + template + inline bool isEqual(PowerFlowData::BusData a, + PowerFlowData::BusData b, + RealT tol = tol_) + { + int fail = 0; + + fail += a.bus_i != b.bus_i; + fail += a.type != b.type; + fail += a.Gs != b.Gs; + fail += a.Bs != b.Bs; + fail += a.area != b.area; + fail += !isEqual(a.Vm, b.Vm, tol); + fail += !isEqual(a.Va, b.Va, tol); + fail += a.baseKV != b.baseKV; + fail += a.zone != b.zone; + fail += !isEqual(a.Vmax, b.Vmax, tol); + fail += !isEqual(a.Vmin, b.Vmin, tol); + + if (fail) + { + errs() << "bus_i: a=" << a.bus_i << ", b=" << b.bus_i << "\n" + << "type: a=" << a.type << ", b=" << b.type << "\n" + << "Gs: a=" << a.Gs << ", b=" << b.Gs << "\n" + << "Bs: a=" << a.Bs << ", b=" << b.Bs << "\n" + << "area: a=" << a.area << ", b=" << b.area << "\n" + << "Vm: a=" << a.Vm << ", b=" << b.Vm << "\n" + << "Va: a=" << a.Va << ", b=" << b.Va << "\n" + << "baseKV: a=" << a.baseKV << ", b=" << b.baseKV << "\n" + << "zone: a=" << a.zone << ", b=" << b.zone << "\n" + << "Vmax: a=" << a.Vmax << ", b=" << b.Vmax << "\n" + << "Vmin: a=" << a.Vmin << ", b=" << b.Vmin << "\n"; + } + return fail == 0; + } + + template + inline bool isEqual(PowerFlowData::LoadData a, + PowerFlowData::LoadData b, + RealT tol = tol_) + { + int fail = 0; + + fail += a.bus_i != b.bus_i; + fail += !isEqual(a.Pd, b.Pd, tol); + fail += !isEqual(a.Qd, b.Qd, tol); + + if (fail) + { + errs() << "bus_i: a=" << a.bus_i << ", b=" << b.bus_i << "\n" + << "Pd: a=" << a.Pd << ", b=" << b.Pd << "\n" + << "Qd: a=" << a.Qd << ", b=" << b.Qd << "\n"; + } + return fail == 0; + } + + template + inline bool isEqual(PowerFlowData::BranchData a, + PowerFlowData::BranchData b, + RealT tol = tol_) + { + int fail = 0; + + fail += a.fbus != b.fbus; + fail += a.tbus != b.tbus; + fail += !isEqual(a.r, b.r, tol); + fail += !isEqual(a.x, b.x, tol); + fail += !isEqual(a.b, b.b, tol); + fail += a.rateA != b.rateA; + fail += a.rateB != b.rateB; + fail += a.rateC != b.rateC; + fail += a.ratio != b.ratio; + fail += a.angle != b.angle; + fail += a.status != b.status; + fail += a.angmin != b.angmin; + fail += a.angmax != b.angmax; + + if (fail) + { + errs() << "Got failure!\na=" << a.str() << "\nb=" << b.str(); + } + return fail == 0; + } + + template + inline bool isEqual(std::vector a, std::vector b, double tol = tol_) + { + if (a.size() != b.size()) + throw std::runtime_error([&] + { + std::stringstream errs; + errs << "Containers do not have the same size!\n" + << "\tGot a.size() == " << a.size() << "\n" + << "\tGot b.size() == " << b.size() << "\n"; + return errs.str(); }()); + + int fail = 0; + for (std::size_t i = 0; i < a.size(); i++) + { + if (!isEqual(a[i], b[i], tol)) + { + fail++; + errs() << "[isEqual>]: Got failure with i=" << i << ".\n"; + } + } + + return fail == 0; + } + + template + inline bool isEqual(PowerFlowData::SystemModelData a, + PowerFlowData::SystemModelData b) + { + int fail = 0; + + fail += a.version != b.version; + fail += a.baseMVA != b.baseMVA; + fail += !isEqual(a.bus, b.bus); + fail += !isEqual(a.gen, b.gen); + fail += !isEqual(a.gencost, b.gencost); + fail += !isEqual(a.branch, b.branch); + fail += !isEqual(a.load, b.load); + + return fail == 0; + } + + } // namespace Testing + +} // namespace GridKit diff --git a/examples/MatPowerTesting/test_parse_branch_row.cpp b/examples/PowerFlow/MatPowerTesting/test_parse_branch_row.cpp similarity index 88% rename from examples/MatPowerTesting/test_parse_branch_row.cpp rename to examples/PowerFlow/MatPowerTesting/test_parse_branch_row.cpp index f6bb3c0d1..af353b8d7 100644 --- a/examples/MatPowerTesting/test_parse_branch_row.cpp +++ b/examples/PowerFlow/MatPowerTesting/test_parse_branch_row.cpp @@ -1,12 +1,12 @@ #include -#include -#include -#include +#include "MatPowerTesting.hpp" +#include +#include using namespace GridKit; using namespace GridKit::Testing; -using namespace GridKit::PowerSystemData; +using namespace GridKit::PowerFlowData; namespace { @@ -33,7 +33,7 @@ mpc.branch = [ } // namespace -int main(int argc, char** argv) +int main(int /* argc */, char** /* argv */) { int fail = 0; std::vector> branch_answer{ diff --git a/examples/MatPowerTesting/test_parse_bus_row.cpp b/examples/PowerFlow/MatPowerTesting/test_parse_bus_row.cpp similarity index 88% rename from examples/MatPowerTesting/test_parse_bus_row.cpp rename to examples/PowerFlow/MatPowerTesting/test_parse_bus_row.cpp index 92c1062cc..e8a535a58 100644 --- a/examples/MatPowerTesting/test_parse_bus_row.cpp +++ b/examples/PowerFlow/MatPowerTesting/test_parse_bus_row.cpp @@ -1,12 +1,12 @@ #include -#include -#include -#include +#include "MatPowerTesting.hpp" +#include +#include using namespace GridKit; using namespace GridKit::Testing; -using namespace GridKit::PowerSystemData; +using namespace GridKit::PowerFlowData; namespace { @@ -28,7 +28,7 @@ mpc.bus = [ } // namespace -int main(int argc, char** argv) +int main(int /* argc */, char** /* argv */) { int fail = 0; std::vector> bus_answer{ diff --git a/examples/MatPowerTesting/test_parse_gen_row.cpp b/examples/PowerFlow/MatPowerTesting/test_parse_gen_row.cpp similarity index 87% rename from examples/MatPowerTesting/test_parse_gen_row.cpp rename to examples/PowerFlow/MatPowerTesting/test_parse_gen_row.cpp index 63a1d5501..2ce6e4aa5 100644 --- a/examples/MatPowerTesting/test_parse_gen_row.cpp +++ b/examples/PowerFlow/MatPowerTesting/test_parse_gen_row.cpp @@ -1,12 +1,12 @@ #include -#include -#include -#include +#include "MatPowerTesting.hpp" +#include +#include using namespace GridKit; using namespace GridKit::Testing; -using namespace GridKit::PowerSystemData; +using namespace GridKit::PowerFlowData; namespace { @@ -30,7 +30,7 @@ mpc.gen = [ } // namespace -int main(int argc, char** argv) +int main(int /* argc */, char** /* argv */) { int fail = 0; std::vector> gen_answer{ diff --git a/examples/MatPowerTesting/test_parse_gencost_row.cpp b/examples/PowerFlow/MatPowerTesting/test_parse_gencost_row.cpp similarity index 84% rename from examples/MatPowerTesting/test_parse_gencost_row.cpp rename to examples/PowerFlow/MatPowerTesting/test_parse_gencost_row.cpp index adddc1edb..19e552023 100644 --- a/examples/MatPowerTesting/test_parse_gencost_row.cpp +++ b/examples/PowerFlow/MatPowerTesting/test_parse_gencost_row.cpp @@ -1,12 +1,12 @@ #include -#include -#include -#include +#include "MatPowerTesting.hpp" +#include +#include using namespace GridKit; using namespace GridKit::Testing; -using namespace GridKit::PowerSystemData; +using namespace GridKit::PowerFlowData; namespace { @@ -33,7 +33,7 @@ mpc.gencost = [ } // namespace -int main(int argc, char** argv) +int main(int /* argc */, char** /* argv */) { int fail = 0; std::vector> gencost_answer{ diff --git a/examples/MatPowerTesting/test_parse_matpower.cpp b/examples/PowerFlow/MatPowerTesting/test_parse_matpower.cpp similarity index 95% rename from examples/MatPowerTesting/test_parse_matpower.cpp rename to examples/PowerFlow/MatPowerTesting/test_parse_matpower.cpp index 2994804b5..856b9cb00 100644 --- a/examples/MatPowerTesting/test_parse_matpower.cpp +++ b/examples/PowerFlow/MatPowerTesting/test_parse_matpower.cpp @@ -1,12 +1,12 @@ #include -#include -#include -#include +#include "MatPowerTesting.hpp" +#include +#include using namespace GridKit; using namespace GridKit::Testing; -using namespace GridKit::PowerSystemData; +using namespace GridKit::PowerFlowData; namespace { @@ -83,7 +83,7 @@ mpc.gencost = [ } // namespace -int main(int argc, char** argv) +int main(int /* argc */, char** /* argv */) { int fail = 0; diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 000000000..cd7ad11eb --- /dev/null +++ b/examples/README.md @@ -0,0 +1,17 @@ +# GridKit™ Usage Examples + +GridKit™ usage examples are organized in following way: +- `Enzyme` directory contains Enzyme automatic differentiation examples. +- `Experimental` directory contains examples of dynamic-constrained +optimization. +- `LinearAlgebra` has examples and tests for dense and sparse matrices in +GridKit™. +- `PhasorDynamics` contains examples describing use of GridKit™ for phasor +domain dynamic simulations. +- `PowerElectronics` has examples describing microgrid simulations with +GridKit™. +- `PowerFlow` contains examples of power flow steady-state simulations with +GridKit™. + +Examples are also used as integration tests for GridKit™ and are run on CI +pipeline. diff --git a/src/LinearAlgebra/SparsityPattern/Variable.hpp b/src/AutomaticDifferentiation/DependencyTracking/Variable.hpp similarity index 95% rename from src/LinearAlgebra/SparsityPattern/Variable.hpp rename to src/AutomaticDifferentiation/DependencyTracking/Variable.hpp index 4015f65af..20f4b2634 100644 --- a/src/LinearAlgebra/SparsityPattern/Variable.hpp +++ b/src/AutomaticDifferentiation/DependencyTracking/Variable.hpp @@ -14,9 +14,11 @@ #include #include +#include + namespace GridKit { - namespace Sparse + namespace DependencyTracking { /** @@ -258,7 +260,7 @@ namespace GridKit bool is_fixed_; ///< Constant parameter flag. mutable DependencyMap* dependencies_; - static const size_t INVALID_VAR_NUMBER = static_cast(-1); + static const size_t INVALID_VAR_NUMBER = static_cast(-1); }; //------------------------------------ @@ -323,7 +325,20 @@ namespace GridKit inline std::istream& operator>>(std::istream& is, Variable& v); - } // namespace Sparse + } // namespace DependencyTracking +} // namespace GridKit + +namespace GridKit +{ + template <> + class ScalarTraits + { + public: + typedef double real_type; + typedef double norm_type; + typedef double scalar_type; + }; + } // namespace GridKit #include "VariableImplementation.hpp" diff --git a/src/LinearAlgebra/SparsityPattern/VariableImplementation.hpp b/src/AutomaticDifferentiation/DependencyTracking/VariableImplementation.hpp similarity index 98% rename from src/LinearAlgebra/SparsityPattern/VariableImplementation.hpp rename to src/AutomaticDifferentiation/DependencyTracking/VariableImplementation.hpp index 30661e4b6..c685848ee 100644 --- a/src/LinearAlgebra/SparsityPattern/VariableImplementation.hpp +++ b/src/AutomaticDifferentiation/DependencyTracking/VariableImplementation.hpp @@ -6,7 +6,7 @@ namespace GridKit { - namespace Sparse + namespace DependencyTracking { /** @brief Returns the list of derivatives. @@ -204,5 +204,5 @@ namespace GridKit return *this; } - } // namespace Sparse + } // namespace DependencyTracking } // namespace GridKit diff --git a/src/LinearAlgebra/SparsityPattern/VariableOperators.hpp b/src/AutomaticDifferentiation/DependencyTracking/VariableOperators.hpp similarity index 81% rename from src/LinearAlgebra/SparsityPattern/VariableOperators.hpp rename to src/AutomaticDifferentiation/DependencyTracking/VariableOperators.hpp index ce5727246..24a600c73 100644 --- a/src/LinearAlgebra/SparsityPattern/VariableOperators.hpp +++ b/src/AutomaticDifferentiation/DependencyTracking/VariableOperators.hpp @@ -6,7 +6,7 @@ namespace GridKit { - namespace Sparse + namespace DependencyTracking { //------------------------------------ // non-member operators and functions @@ -317,7 +317,7 @@ namespace GridKit return x > 0.0 ? 1.0 : -1.0; } - } // namespace Sparse + } // namespace DependencyTracking } // namespace GridKit // Add all mathematical functions to the namespace std so that, @@ -325,31 +325,31 @@ namespace GridKit namespace std { -#define IMPL_FUN_1(FUN, DER) \ - inline GridKit::Sparse::Variable FUN(const GridKit::Sparse::Variable& x) \ - { \ - double val = FUN(x()); \ - double der = DER(x()); \ - GridKit::Sparse::Variable res(x); /* copy derivatives of x*/ \ - res.setValue(val); /* set function value f(x) */ \ - res.scaleDependencies(der); /* compute derivatives of f(x) */ \ - return res; \ +#define IMPL_FUN_1(FUN, DER) \ + inline GridKit::DependencyTracking::Variable FUN(const GridKit::DependencyTracking::Variable& x) \ + { \ + double val = FUN(x()); \ + double der = DER(x()); \ + GridKit::DependencyTracking::Variable res(x); /* copy derivatives of x*/ \ + res.setValue(val); /* set function value f(x) */ \ + res.scaleDependencies(der); /* compute derivatives of f(x) */ \ + return res; \ } - IMPL_FUN_1(sin, GridKit::Sparse::sin_derivative) - IMPL_FUN_1(cos, GridKit::Sparse::cos_derivative) - IMPL_FUN_1(tan, GridKit::Sparse::tan_derivative) - IMPL_FUN_1(asin, GridKit::Sparse::asin_derivative) - IMPL_FUN_1(acos, GridKit::Sparse::acos_derivative) - IMPL_FUN_1(atan, GridKit::Sparse::atan_derivative) - IMPL_FUN_1(sinh, GridKit::Sparse::sinh_derivative) - IMPL_FUN_1(cosh, GridKit::Sparse::cosh_derivative) - IMPL_FUN_1(tanh, GridKit::Sparse::tanh_derivative) - IMPL_FUN_1(exp, GridKit::Sparse::exp_derivative) - IMPL_FUN_1(log, GridKit::Sparse::log_derivative) - IMPL_FUN_1(log10, GridKit::Sparse::log10_derivative) - IMPL_FUN_1(sqrt, GridKit::Sparse::sqrt_derivative) - IMPL_FUN_1(abs, GridKit::Sparse::abs_derivative) + IMPL_FUN_1(sin, GridKit::DependencyTracking::sin_derivative) + IMPL_FUN_1(cos, GridKit::DependencyTracking::cos_derivative) + IMPL_FUN_1(tan, GridKit::DependencyTracking::tan_derivative) + IMPL_FUN_1(asin, GridKit::DependencyTracking::asin_derivative) + IMPL_FUN_1(acos, GridKit::DependencyTracking::acos_derivative) + IMPL_FUN_1(atan, GridKit::DependencyTracking::atan_derivative) + IMPL_FUN_1(sinh, GridKit::DependencyTracking::sinh_derivative) + IMPL_FUN_1(cosh, GridKit::DependencyTracking::cosh_derivative) + IMPL_FUN_1(tanh, GridKit::DependencyTracking::tanh_derivative) + IMPL_FUN_1(exp, GridKit::DependencyTracking::exp_derivative) + IMPL_FUN_1(log, GridKit::DependencyTracking::log_derivative) + IMPL_FUN_1(log10, GridKit::DependencyTracking::log10_derivative) + IMPL_FUN_1(sqrt, GridKit::DependencyTracking::sqrt_derivative) + IMPL_FUN_1(abs, GridKit::DependencyTracking::abs_derivative) #undef IMPL_FUN_1 diff --git a/src/AutomaticDifferentiation/Enzyme/SparseWrapper.hpp b/src/AutomaticDifferentiation/Enzyme/SparseWrapper.hpp new file mode 100644 index 000000000..61ec7ee9e --- /dev/null +++ b/src/AutomaticDifferentiation/Enzyme/SparseWrapper.hpp @@ -0,0 +1,176 @@ +#pragma once + +#include + +/** + * @brief Enzyme constants for activity analysis + * + */ +extern int enzyme_dup; +extern int enzyme_const; +extern int enzyme_dupnoneed; + +namespace GridKit +{ + namespace Enzyme + { + /** + * @brief Residual wrapper around residual methods inside model classes + * + * @tparam ModelT - model type + * @tparam ScalarT - scalar data type + */ + template + void residual_wrapper(ModelT* obj, ScalarT* y, ScalarT* f) + { + obj->evaluateResidualLocally(y, f); + } + + /** + * @brief Enzyme fwddiff template + * + * @tparam T - return type + * @tparam ModelT - model type + */ + template + extern T __enzyme_fwddiff(void*, ModelT...) noexcept; + + /** + * @brief Enzyme todense template + * + * @tparam T - return type + * @tparam ModelT - model type + */ + template + extern T __enzyme_todense(ModelT...) noexcept; + + /** + * @brief Enzyme sparse storage in triplet format + * + * @tparam ScalarT - scalar data type + */ + template + struct Triple + { + size_t row; + size_t col; + ScalarT val; + Triple(Triple&&) = default; + + Triple(size_t row, size_t col, ScalarT val) + : row(row), + col(col), + val(val) + { + } + }; + + /** + * @brief Enzyme sparse accumulation for float + * + */ + [[maybe_unused]] __attribute__((enzyme_sparse_accumulate)) static void inner_storeflt(size_t row, size_t col, float val, std::vector>& triplets) + { + triplets.emplace_back(row, col, val); + } + + /** + * @brief Enzyme sparse accumulation for double + * + */ + [[maybe_unused]] __attribute__((enzyme_sparse_accumulate)) static void inner_storedbl(size_t row, size_t col, double val, std::vector>& triplets) + { + triplets.emplace_back(row, col, val); + } + + /** + * @brief Enzyme sparse store + * + * @tparam ScalarT - scalar data type + */ + template + __attribute__((always_inline)) static void sparse_store(ScalarT val, size_t idx, size_t i, std::vector>& triplets) + { + if (val == 0.0) + return; + idx /= sizeof(ScalarT); + if constexpr (sizeof(ScalarT) == 4) + inner_storeflt(idx, i, val, triplets); + else + inner_storedbl(idx, i, val, triplets); + } + + /** + * @brief Enzyme sparse load + * + * @tparam ScalarT - scalar data type + */ + template + __attribute__((always_inline)) static ScalarT sparse_load(size_t, size_t, std::vector>&) + { + return 0.0; + } + + /** + * @brief Enzyme identity store + * + * @tparam ScalarT - scalar data type + */ + template + __attribute__((always_inline)) static void ident_store(ScalarT, size_t, size_t) + { + assert(0 && "should never load"); + } + + /** + * @brief Enzyme identity load + * + * @tparam ScalarT - scalar data type + */ + template + __attribute__((always_inline)) static ScalarT ident_load(size_t idx, size_t i) + { + idx /= sizeof(ScalarT); + return (ScalarT) (idx == i); + } + + /** + * @brief Function that computes the Jacobian via automatic differentiation + * + * @tparam ModelT - model type + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + */ + template + __attribute__((noinline)) void EnzymeSparseModelJacobian(ModelT* model, size_t n, ScalarT* input, GridKit::LinearAlgebra::COO_Matrix& jac) + { + std::vector> triplets; + for (size_t i = 0; i < n; i++) + { + ScalarT* output = __enzyme_todense((void*) ident_load, (void*) ident_store, i); + ScalarT* d_output = __enzyme_todense((void*) sparse_load, (void*) sparse_store, i, &triplets); + + __enzyme_fwddiff((void*) residual_wrapper, + enzyme_const, + model, + enzyme_dup, + input, + output, + enzyme_dupnoneed, + (ScalarT*) 0x1, + d_output); + } + + std::vector ctemp{}; + std::vector rtemp{}; + std::vector valtemp{}; + for (auto& tup : triplets) + { + rtemp.push_back(static_cast(tup.row)); + ctemp.push_back(static_cast(tup.col)); + valtemp.push_back(tup.val); + } + jac.setValues(rtemp, ctemp, valtemp); + } + } // namespace Enzyme +} // namespace GridKit diff --git a/src/LinearAlgebra/SparseMatrix/COO_Matrix.hpp b/src/LinearAlgebra/SparseMatrix/COO_Matrix.hpp index 33d28324e..13cbcc76f 100644 --- a/src/LinearAlgebra/SparseMatrix/COO_Matrix.hpp +++ b/src/LinearAlgebra/SparseMatrix/COO_Matrix.hpp @@ -20,861 +20,868 @@ * * m x n sparse matrix */ -template -class COO_Matrix +namespace GridKit { -private: - std::vector values_; - std::vector row_indices_; - std::vector column_indices_; - IdxT rows_size_; - IdxT columns_size_; - bool sorted_; - -public: - // Constructors - COO_Matrix(std::vector r, std::vector c, std::vector v, IdxT m, IdxT n); - COO_Matrix(IdxT m, IdxT n); - COO_Matrix(); - ~COO_Matrix(); - - // Operations - - // --- Functions which call sort --- - std::tuple, std::vector> getRowCopy(IdxT r); - std::tuple&, std::vector&, std::vector&> getEntries(); - std::tuple, std::vector, std::vector> getEntryCopies(); - std::tuple, std::vector, std::vector> getEntryCopiesSubMatrix(std::vector submap); - - std::tuple, std::vector, std::vector> setDataToCSR(); - std::vector getCSRRowData(); - - // BLAS. Will sort before running - void setValues(std::vector r, std::vector c, std::vector v); - void axpy(ScalarT alpha, COO_Matrix& a); - void axpy(ScalarT alpha, std::vector r, std::vector c, std::vector v); - void scal(ScalarT alpha); - ScalarT frobNorm(); - - // --- Permutation Operations --- - // Sorting is only done if not already sorted. - void permutation(std::vector row_perm, std::vector col_perm); - void permutationSizeMap(std::vector row_perm, std::vector col_perm, IdxT m, IdxT n); - - void zeroMatrix(); - - void identityMatrix(IdxT n); - - // Resort values_ - void sortSparse(); - bool isSorted(); - IdxT nnz(); - - std::tuple getDimensions(); - - void printMatrix(std::string name = ""); - - static void sortSparseCOO(std::vector& rows, std::vector& columns, std::vector& values); - -private: - IdxT indexStartRow(const std::vector& rows, IdxT r); - IdxT sparseCordBinarySearch(const std::vector& rows, const std::vector& columns, IdxT ri, IdxT ci); - bool checkIncreaseSize(IdxT r, IdxT c); -}; - -/** - * @brief Get copy of row index - * - * @tparam ScalarT - * @tparam IdxT - * @param[in] r row index - * @return std::tuple, std::vector> - */ -template -inline std::tuple, std::vector> COO_Matrix::getRowCopy(IdxT r) -{ - if (!this->sorted_) + namespace LinearAlgebra { - this->sortSparse(); - } - IdxT row_index = this->indexStartRow(r); - - if (row_index == -1) - { - return {std::vector(), std::vector()}; - } - - IdxT rsize = row_index; - do - { - rsize++; - } while (rsize < this->values_.size() && this->row_indices_[rsize] == r); + template + class COO_Matrix + { + private: + std::vector values_; + std::vector row_indices_; + std::vector column_indices_; + IdxT rows_size_; + IdxT columns_size_; + bool sorted_; + + public: + // Constructors + COO_Matrix(std::vector r, std::vector c, std::vector v, IdxT m, IdxT n); + COO_Matrix(IdxT m, IdxT n); + COO_Matrix(); + ~COO_Matrix(); + + // Operations + + // --- Functions which call sort --- + std::tuple, std::vector> getRowCopy(IdxT r); + std::tuple&, std::vector&, std::vector&> getEntries(); + std::tuple, std::vector, std::vector> getEntryCopies(); + std::tuple, std::vector, std::vector> getEntryCopiesSubMatrix(std::vector submap); + + std::tuple, std::vector, std::vector> setDataToCSR(); + std::vector getCSRRowData(); + + // BLAS. Will sort before running + void setValues(std::vector r, std::vector c, std::vector v); + void axpy(ScalarT alpha, COO_Matrix& a); + void axpy(ScalarT alpha, std::vector r, std::vector c, std::vector v); + void scal(ScalarT alpha); + ScalarT frobNorm(); + + // --- Permutation Operations --- + // Sorting is only done if not already sorted. + void permutation(std::vector row_perm, std::vector col_perm); + void permutationSizeMap(std::vector row_perm, std::vector col_perm, IdxT m, IdxT n); + + void zeroMatrix(); + + void identityMatrix(IdxT n); + + // Resort values_ + void sortSparse(); + bool isSorted(); + IdxT nnz(); + + std::tuple getDimensions(); + + void printMatrix(std::string name = ""); + + static void sortSparseCOO(std::vector& rows, std::vector& columns, std::vector& values); + + private: + IdxT indexStartRow(const std::vector& rows, IdxT r); + IdxT sparseCordBinarySearch(const std::vector& rows, const std::vector& columns, IdxT ri, IdxT ci); + bool checkIncreaseSize(IdxT r, IdxT c); + }; + + /** + * @brief Get copy of row index + * + * @tparam ScalarT + * @tparam IdxT + * @param[in] r row index + * @return std::tuple, std::vector> + */ + template + inline std::tuple, std::vector> COO_Matrix::getRowCopy(IdxT r) + { + if (!this->sorted_) + { + this->sortSparse(); + } + IdxT row_index = this->indexStartRow(r); - return {{this->column_indices_.begin() + row_index, this->column_indices_.begin() + rsize}, - {this->values_.begin() + row_index, this->values_.begin() + rsize}}; -} + if (row_index == -1) + { + return {std::vector(), std::vector()}; + } -/** - * @brief Get all entry pointers. Will sort before returning - * - * @tparam ScalarT - * @tparam IdxT - * @return std::tuple, std::vector, std::vector> - */ -template -inline std::tuple&, std::vector&, std::vector&> COO_Matrix::getEntries() -{ - if (!this->sorted_) - { - this->sortSparse(); - } - return {this->row_indices_, this->column_indices_, this->values_}; -} + IdxT rsize = row_index; + do + { + rsize++; + } while (rsize < this->values_.size() && this->row_indices_[rsize] == r); -/** - * @brief Sorts the data if it's not already sorted - * - * @tparam ScalarT - * @tparam IdxT - * @return std::tuple, std::vector, std::vector> - */ -template -inline std::tuple, std::vector, std::vector> COO_Matrix::getEntryCopies() -{ - if (!this->sorted_) - { - this->sortSparse(); - } - return {this->row_indices_, this->column_indices_, this->values_}; -} + return {{this->column_indices_.begin() + row_index, this->column_indices_.begin() + rsize}, + {this->values_.begin() + row_index, this->values_.begin() + rsize}}; + } -/** - * @brief Returns the data in CSR Format - * - * @tparam ScalarT - * @tparam IdxT - * @return std::tuple, std::vector, std::vector> - */ -template -inline std::tuple, std::vector, std::vector> COO_Matrix::setDataToCSR() -{ - if (!this->isSorted()) - this->sortSparse(); - std::vector row_size_vec(this->rows_size_ + 1, 0); - IdxT counter = 0; - for (IdxT i = 0; i < static_cast(row_size_vec.size() - 1); i++) - { - row_size_vec[i + 1] = row_size_vec[i]; - while (counter < static_cast(this->row_indices_.size()) && i == this->row_indices_[counter]) + /** + * @brief Get all entry pointers. Will sort before returning + * + * @tparam ScalarT + * @tparam IdxT + * @return std::tuple, std::vector, std::vector> + */ + template + inline std::tuple&, std::vector&, std::vector&> COO_Matrix::getEntries() { - row_size_vec[i + 1]++; - counter++; + if (!this->sorted_) + { + this->sortSparse(); + } + return {this->row_indices_, this->column_indices_, this->values_}; } - } - return {row_size_vec, this->column_indices_, this->values_}; -} -/** - * @brief Only creates the row data - * - * @todo swap this with having the matrix store the data and updates. This can then be passed by reference - * - * - * @tparam ScalarT - * @tparam IdxT - * @return std::vector - */ -template -inline std::vector COO_Matrix::getCSRRowData() -{ - if (!this->isSorted()) - this->sortSparse(); - std::vector row_size_vec(this->rows_size_ + 1, 0); - IdxT counter = 0; - for (IdxT i = 0; i < static_cast(row_size_vec.size() - 1); i++) - { - row_size_vec[i + 1] = row_size_vec[i]; - while (counter < static_cast(this->row_indices_.size()) && i == this->row_indices_[counter]) + /** + * @brief Sorts the data if it's not already sorted + * + * @tparam ScalarT + * @tparam IdxT + * @return std::tuple, std::vector, std::vector> + */ + template + inline std::tuple, std::vector, std::vector> COO_Matrix::getEntryCopies() { - row_size_vec[i + 1]++; - counter++; + if (!this->sorted_) + { + this->sortSparse(); + } + return {this->row_indices_, this->column_indices_, this->values_}; } - } - return row_size_vec; -} -/** - * @brief Set coordinates and values of the matrix. - * - * Matrix entries will be sorted in row-major order before the method returns. - * - * @tparam ScalarT - * @tparam IdxT - * @param[in] r row indices of the matrix - * @param[in] c column indices of the matrix - * @param[in] v values of the matrix - * - * @pre r.size() == c.size() == v.size() - * @pre r,c,v represent an array in COO format - * - * @post Coordinates and values are set in the matrix. - */ -template -inline void COO_Matrix::setValues(std::vector r, std::vector c, std::vector v) -{ - // sort input - this->sortSparseCOO(r, c, v); - - // Duplicated with axpy. Could replace with function depdent on lambda expression - IdxT a_iter = 0; - // iterate for all current values_ in matrix - for (IdxT i = 0; i < static_cast(this->row_indices_.size()); i++) - { - // pushback values_ when they are not in current matrix - while (a_iter < static_cast(r.size()) && (r[a_iter] < this->row_indices_[i] || (r[a_iter] == this->row_indices_[i] && c[a_iter] < this->column_indices_[i]))) + /** + * @brief Returns the data in CSR Format + * + * @tparam ScalarT + * @tparam IdxT + * @return std::tuple, std::vector, std::vector> + */ + template + inline std::tuple, std::vector, std::vector> COO_Matrix::setDataToCSR() { - this->row_indices_.push_back(r[a_iter]); - this->column_indices_.push_back(c[a_iter]); - this->values_.push_back(v[a_iter]); - this->checkIncreaseSize(r[a_iter], c[a_iter]); - a_iter++; + if (!this->isSorted()) + this->sortSparse(); + std::vector row_size_vec(this->rows_size_ + 1, 0); + IdxT counter = 0; + for (IdxT i = 0; i < static_cast(row_size_vec.size() - 1); i++) + { + row_size_vec[i + 1] = row_size_vec[i]; + while (counter < static_cast(this->row_indices_.size()) && i == this->row_indices_[counter]) + { + row_size_vec[i + 1]++; + counter++; + } + } + return {row_size_vec, this->column_indices_, this->values_}; } - if (a_iter >= static_cast(r.size())) + + /** + * @brief Only creates the row data + * + * @todo swap this with having the matrix store the data and updates. This can then be passed by reference + * + * + * @tparam ScalarT + * @tparam IdxT + * @return std::vector + */ + template + inline std::vector COO_Matrix::getCSRRowData() { - break; + if (!this->isSorted()) + this->sortSparse(); + std::vector row_size_vec(static_cast(this->rows_size_ + 1), 0); + size_t counter = 0; + for (size_t i = 0; i < row_size_vec.size() - 1; i++) + { + row_size_vec[i + 1] = row_size_vec[i]; + while (counter < this->row_indices_.size() && i == static_cast(this->row_indices_[counter])) + { + row_size_vec[i + 1]++; + counter++; + } + } + return row_size_vec; } - if (r[a_iter] == this->row_indices_[i] && c[a_iter] == this->column_indices_[i]) + /** + * @brief Set coordinates and values of the matrix. + * + * Matrix entries will be sorted in row-major order before the method returns. + * + * @tparam ScalarT + * @tparam IdxT + * @param[in] r row indices of the matrix + * @param[in] c column indices of the matrix + * @param[in] v values of the matrix + * + * @pre r.size() == c.size() == v.size() + * @pre r,c,v represent an array in COO format + * + * @post Coordinates and values are set in the matrix. + */ + template + inline void COO_Matrix::setValues(std::vector r, std::vector c, std::vector v) { - this->values_[i] = v[a_iter]; - a_iter++; - } - } - // push back rest that was not found sorted - for (IdxT i = a_iter; i < static_cast(r.size()); i++) - { - this->row_indices_.push_back(r[i]); - this->column_indices_.push_back(c[i]); - this->values_.push_back(v[i]); + // sort input + this->sortSparseCOO(r, c, v); - this->checkIncreaseSize(r[i], c[i]); - } + // Duplicated with axpy. Could replace with function depdent on lambda expression + size_t a_iter = 0; + // iterate for all current values_ in matrix + for (size_t i = 0; i < this->row_indices_.size(); i++) + { + // pushback values_ when they are not in current matrix + while (a_iter < r.size() && (r[a_iter] < this->row_indices_[i] || (r[a_iter] == this->row_indices_[i] && c[a_iter] < this->column_indices_[i]))) + { + this->row_indices_.push_back(r[a_iter]); + this->column_indices_.push_back(c[a_iter]); + this->values_.push_back(v[a_iter]); + this->checkIncreaseSize(r[a_iter], c[a_iter]); + a_iter++; + } + + if (a_iter >= r.size()) + { + break; + } + + if (r[a_iter] == this->row_indices_[i] && c[a_iter] == this->column_indices_[i]) + { + this->values_[i] = v[a_iter]; + a_iter++; + } + } + // push back rest that was not found sorted + for (size_t i = a_iter; i < r.size(); i++) + { + this->row_indices_.push_back(r[i]); + this->column_indices_.push_back(c[i]); + this->values_.push_back(v[i]); - this->sorted_ = false; -} + this->checkIncreaseSize(r[i], c[i]); + } -/** - * @brief Implements axpy this += alpha * a. Will sort before running - * - * @tparam ScalarT - * @tparam IdxT - * @param[in] alpha matrix to be added - * @param[in] a scalar to multiply by - * - * @post this = this + alpha * a - */ -template -inline void COO_Matrix::axpy(ScalarT alpha, COO_Matrix& a) -{ - if (alpha == 0) - { - return; - } + this->sorted_ = false; + } - if (!this->sorted_) - { - this->sortSparse(); - } - if (!a.isSorted()) - { - a.sortSparse(); - } - IdxT m = 0; - IdxT n = 0; - std::tuple&, std::vector&, std::vector&> tpm = a.getEntries(); - const auto& [r, c, val] = tpm; - std::tie(m, n) = a.getDimensions(); - - // Increase size as necessary - this->rows_size_ = this->rows_size_ > m ? this->rows_size_ : m; - this->columns_size_ = this->columns_size_ > n ? this->columns_size_ : n; - - IdxT a_iter = 0; - // iterate for all current values in matrix - for (IdxT i = 0; i < static_cast(this->row_indices_.size()); i++) - { - // pushback values when they are not in current matrix - while (a_iter < static_cast(r.size()) && (r[a_iter] < this->row_indices_[i] || (r[a_iter] == this->row_indices_[i] && c[a_iter] < this->column_indices_[i]))) + /** + * @brief Implements axpy this += alpha * a. Will sort before running + * + * @tparam ScalarT + * @tparam IdxT + * @param[in] alpha matrix to be added + * @param[in] a scalar to multiply by + * + * @post this = this + alpha * a + */ + template + inline void COO_Matrix::axpy(ScalarT alpha, COO_Matrix& a) { - this->row_indices_.push_back(r[a_iter]); - this->column_indices_.push_back(c[a_iter]); - this->values_.push_back(alpha * val[a_iter]); + if (alpha == 0) + { + return; + } - this->checkIncreaseSize(r[a_iter], c[a_iter]); - a_iter++; - } - if (a_iter >= static_cast(r.size())) - { - break; - } + if (!this->sorted_) + { + this->sortSparse(); + } + if (!a.isSorted()) + { + a.sortSparse(); + } + IdxT m = 0; + IdxT n = 0; + std::tuple&, std::vector&, std::vector&> tpm = a.getEntries(); + const auto& [r, c, val] = tpm; + std::tie(m, n) = a.getDimensions(); + + // Increase size as necessary + this->rows_size_ = this->rows_size_ > m ? this->rows_size_ : m; + this->columns_size_ = this->columns_size_ > n ? this->columns_size_ : n; + + size_t a_iter = 0; + // iterate for all current values in matrix + for (size_t i = 0; i < this->row_indices_.size(); i++) + { + // pushback values when they are not in current matrix + while (a_iter < r.size() && (r[a_iter] < this->row_indices_[i] || (r[a_iter] == this->row_indices_[i] && c[a_iter] < this->column_indices_[i]))) + { + this->row_indices_.push_back(r[a_iter]); + this->column_indices_.push_back(c[a_iter]); + this->values_.push_back(alpha * val[a_iter]); + + this->checkIncreaseSize(r[a_iter], c[a_iter]); + a_iter++; + } + if (a_iter >= r.size()) + { + break; + } + + if (r[a_iter] == this->row_indices_[i] && c[a_iter] == this->column_indices_[i]) + { + this->values_[i] += alpha * val[a_iter]; + a_iter++; + } + } + // push back rest that was not found sorted_ + for (size_t i = a_iter; i < r.size(); i++) + { + this->row_indices_.push_back(r[i]); + this->column_indices_.push_back(c[i]); + this->values_.push_back(alpha * val[i]); - if (r[a_iter] == this->row_indices_[i] && c[a_iter] == this->column_indices_[i]) - { - this->values_[i] += alpha * val[a_iter]; - a_iter++; - } - } - // push back rest that was not found sorted_ - for (IdxT i = a_iter; i < static_cast(r.size()); i++) - { - this->row_indices_.push_back(r[i]); - this->column_indices_.push_back(c[i]); - this->values_.push_back(alpha * val[i]); + this->checkIncreaseSize(r[i], c[i]); + } - this->checkIncreaseSize(r[i], c[i]); - } + this->sorted_ = false; + } - this->sorted_ = false; -} + /** + * @brief axpy on a COO representation of a matrix. Will sort before running + * + * @tparam ScalarT + * @tparam IdxT + * @param alpha scalar to multiply by + * @param r row indices + * @param c column indices + * @param v values + * + * @pre r.size() == c.size() == v.size() + * @pre r,c,v represent an array a in COO format + * + * @post this = this + alpha * a + */ + template + inline void COO_Matrix::axpy(ScalarT alpha, std::vector r, std::vector c, std::vector v) + { + if (alpha == 0) + return; -/** - * @brief axpy on a COO representation of a matrix. Will sort before running - * - * @tparam ScalarT - * @tparam IdxT - * @param alpha scalar to multiply by - * @param r row indices - * @param c column indices - * @param v values - * - * @pre r.size() == c.size() == v.size() - * @pre r,c,v represent an array a in COO format - * - * @post this = this + alpha * a - */ -template -inline void COO_Matrix::axpy(ScalarT alpha, std::vector r, std::vector c, std::vector v) -{ - if (alpha == 0) - return; + if (!this->sorted_) + { + this->sortSparse(); + } - if (!this->sorted_) - { - this->sortSparse(); - } + // sort input + this->sortSparseCOO(r, c, v); - // sort input - this->sortSparseCOO(r, c, v); + size_t a_iter = 0; + // iterate for all current values_ in matrix + for (size_t i = 0; i < this->row_indices_.size(); i++) + { + // pushback values_ when they are not in current matrix + while (a_iter < r.size() && (r[a_iter] < this->row_indices_[i] || (r[a_iter] == this->row_indices_[i] && c[a_iter] < this->column_indices_[i]))) + { + this->row_indices_.push_back(r[a_iter]); + this->column_indices_.push_back(c[a_iter]); + this->values_.push_back(alpha * v[a_iter]); + + this->checkIncreaseSize(r[a_iter], c[a_iter]); + a_iter++; + } + if (a_iter >= r.size()) + { + break; + } + + if (r[a_iter] == this->row_indices_[i] && c[a_iter] == this->column_indices_[i]) + { + this->values_[i] += alpha * v[a_iter]; + a_iter++; + } + } + // push back rest that was not found sorted_ + for (IdxT i = a_iter; i < r.size(); i++) + { + this->row_indices_.push_back(r[i]); + this->column_indices_.push_back(c[i]); + this->values_.push_back(alpha * v[i]); - IdxT a_iter = 0; - // iterate for all current values_ in matrix - for (IdxT i = 0; i < static_cast(this->row_indices_.size()); i++) - { - // pushback values_ when they are not in current matrix - while (a_iter < static_cast(r.size()) && (r[a_iter] < this->row_indices_[i] || (r[a_iter] == this->row_indices_[i] && c[a_iter] < this->column_indices_[i]))) - { - this->row_indices_.push_back(r[a_iter]); - this->column_indices_.push_back(c[a_iter]); - this->values_.push_back(alpha * v[a_iter]); + this->checkIncreaseSize(r[i], c[i]); + } - this->checkIncreaseSize(r[a_iter], c[a_iter]); - a_iter++; + this->sorted_ = false; } - if (a_iter >= static_cast(r.size())) + + /** + * @brief Scale all values by alpha + * + * @tparam ScalarT + * @tparam IdxT + * @param[in] alpha scalar to scale by + */ + template + inline void COO_Matrix::scal(ScalarT alpha) { - break; + for (auto i = this->values_.begin(); i < this->values_.end(); i++) + { + *i *= alpha; + } } - if (r[a_iter] == this->row_indices_[i] && c[a_iter] == this->column_indices_[i]) + /** + * @brief Calculates the Frobenius Norm of the matrix + * + * @tparam ScalarT + * @tparam IdxT + * @return ScalarT - Frobenius Norm of the matrix + */ + template + inline ScalarT COO_Matrix::frobNorm() { - this->values_[i] += alpha * v[a_iter]; - a_iter++; + ScalarT totsum = 0.0; + for (auto i = this->values_.begin(); i < this->values_.end(); i++) + { + totsum += abs(*i) ^ 2; + } + return totsum; } - } - // push back rest that was not found sorted_ - for (IdxT i = a_iter; i < static_cast(r.size()); i++) - { - this->row_indices_.push_back(r[i]); - this->column_indices_.push_back(c[i]); - this->values_.push_back(alpha * v[i]); - this->checkIncreaseSize(r[i], c[i]); - } - - this->sorted_ = false; -} - -/** - * @brief Scale all values by alpha - * - * @tparam ScalarT - * @tparam IdxT - * @param[in] alpha scalar to scale by - */ -template -inline void COO_Matrix::scal(ScalarT alpha) -{ - for (auto i = this->values_.begin(); i < this->values_.end(); i++) - { - *i *= alpha; - } -} - -/** - * @brief Calculates the Frobenius Norm of the matrix - * - * @tparam ScalarT - * @tparam IdxT - * @return ScalarT - Frobenius Norm of the matrix - */ -template -inline ScalarT COO_Matrix::frobNorm() -{ - ScalarT totsum = 0.0; - for (auto i = this->values_.begin(); i < this->values_.end(); i++) - { - totsum += abs(*i) ^ 2; - } - return totsum; -} + /** + * @brief Permutate the matrix to a different one. Only changes the coordinates + * + * @tparam ScalarT + * @param[in] row_perm + * @param[out] col_perm + * + * @pre row_perm.size() == this->rows_size_ = col_perm.size() == this->columns_size_ + * + * @post this = this(row_perm, col_perm) + */ + template + inline void COO_Matrix::permutation(std::vector row_perm, std::vector col_perm) + { + assert(row_perm.size() = this->rows_size_); + assert(col_perm.size() = this->columns_size_); -/** - * @brief Permutate the matrix to a different one. Only changes the coordinates - * - * @tparam ScalarT - * @param[in] row_perm - * @param[out] col_perm - * - * @pre row_perm.size() == this->rows_size_ = col_perm.size() == this->columns_size_ - * - * @post this = this(row_perm, col_perm) - */ -template -inline void COO_Matrix::permutation(std::vector row_perm, std::vector col_perm) -{ - assert(row_perm.size() = this->rows_size_); - assert(col_perm.size() = this->columns_size_); + for (int i = 0; i < this->values_.size(); i++) + { + this->row_indices_[i] = row_perm[this->row_indices_[i]]; + this->column_indices_[i] = col_perm[this->column_indices_[i]]; + } + this->sorted_ = false; + // cycle sorting maybe useful since permutations are already known + } - for (int i = 0; i < this->values_.size(); i++) - { - this->row_indices_[i] = row_perm[this->row_indices_[i]]; - this->column_indices_[i] = col_perm[this->column_indices_[i]]; - } - this->sorted_ = false; - // cycle sorting maybe useful since permutations are already known -} + /** + * @brief Permutes the matrix and can change its size efficently + * + * @tparam ScalarT + * @tparam IdxT + * @param[in] row_perm row permutation + * @param[in] col_perm column permutation + * @param[in] m number of rows + * @param[in] n number of columns + * + * @pre row_perm.size() == this->rows_size_ + * @pre col_perm.size() == this->columns_size_ + * @pre indices are set to -1 if they are to be removed + * + * @post this = this(row_perm, col_perm) and removed indices have corresponding values set to 0 + */ + template + inline void COO_Matrix::permutationSizeMap(std::vector row_perm, std::vector col_perm, IdxT m, IdxT n) + { + assert(row_perm.size() == this->rows_size_); + assert(col_perm.size() == this->columns_size_); -/** - * @brief Permutes the matrix and can change its size efficently - * - * @tparam ScalarT - * @tparam IdxT - * @param[in] row_perm row permutation - * @param[in] col_perm column permutation - * @param[in] m number of rows - * @param[in] n number of columns - * - * @pre row_perm.size() == this->rows_size_ - * @pre col_perm.size() == this->columns_size_ - * @pre indices are set to -1 if they are to be removed - * - * @post this = this(row_perm, col_perm) and removed indices have corresponding values set to 0 - */ -template -inline void COO_Matrix::permutationSizeMap(std::vector row_perm, std::vector col_perm, IdxT m, IdxT n) -{ - assert(row_perm.size() == this->rows_size_); - assert(col_perm.size() == this->columns_size_); + this->rows_size_ = m; + this->columns_size_ = n; - this->rows_size_ = m; - this->columns_size_ = n; + for (size_t i = 0; i < this->values_.size(); i++) + { + if (row_perm[this->row_indices_[i]] == -1 || col_perm[this->column_indices_[i]] == -1) + { + this->values_[i] = 0; + } + else + { + this->row_indices_[i] = row_perm[this->row_indices_[i]]; + this->column_indices_[i] = col_perm[this->column_indices_[i]]; + } + } + this->sorted_ = false; + } - for (int i = 0; i < this->values_.size(); i++) - { - if (row_perm[this->row_indices_[i]] == -1 || col_perm[this->column_indices_[i]] == -1) + /** + * @brief Turn matrix into the zero matrix. Does not actually delete memory + * + * @tparam ScalarT + * @tparam IdxT + * + */ + template + inline void COO_Matrix::zeroMatrix() { - this->values_[i] = 0; + // resize doesn't affect capacity if smaller + this->column_indices_.resize(0); + this->row_indices_.resize(0); + this->values_.resize(0); + this->sorted_ = true; } - else + + /** + * @brief Turn matrix into the identity matrix + * + * @tparam ScalarT + * @tparam IdxT + * + * @param[in] n size of the identity matrix + * + * @post this = I_n + * + * @todo - it might be better to explicitly zero out the matrix and require to be so in preconditions + */ + + template + inline void COO_Matrix::identityMatrix(IdxT n) { - this->row_indices_[i] = row_perm[this->row_indices_[i]]; - this->column_indices_[i] = col_perm[this->column_indices_[i]]; + // Reset Matrix + this->zeroMatrix(); + for (IdxT i = 0; i < n; i++) + { + this->column_indices_[i] = i; + this->row_indices_[i] = i; + this->values_[i] = 1.0; + } + this->sorted_ = true; } - } - this->sorted_ = false; -} - -/** - * @brief Turn matrix into the zero matrix. Does not actually delete memory - * - * @tparam ScalarT - * @tparam IdxT - * - */ -template -inline void COO_Matrix::zeroMatrix() -{ - // resize doesn't effect capacity if smaller - this->column_indices_.resize(0); - this->row_indices_.resize(0); - this->values_.resize(0); - this->sorted_ = true; -} -/** - * @brief Turn matrix into the identity matrix - * - * @tparam ScalarT - * @tparam IdxT - * - * @param[in] n size of the identity matrix - * - * @post this = I_n - * - * @todo - it might be better to explicitly zero out the matrix and require to be so in preconditions - */ - -template -inline void COO_Matrix::identityMatrix(IdxT n) -{ - // Reset Matrix - this->zeroMatrix(); - for (IdxT i = 0; i < n; i++) - { - this->column_indices_[i] = i; - this->row_indices_[i] = i; - this->values_[i] = 1.0; - } - this->sorted_ = true; -} - -/** - * @brief Restructure the sparse matrix for faster accesses and modifications - * - * @tparam ScalarT - * @tparam IdxT - */ -template -inline void COO_Matrix::sortSparse() -{ - this->sortSparseCOO(this->row_indices_, this->column_indices_, this->values_); - this->sorted_ = true; -} - -/** - * @brief Check if the matrix is sorted - * - * @tparam ScalarT - * @tparam IdxT - * - * @param[out] bool - true if sorted, false otherwise - */ - -template -inline bool COO_Matrix::isSorted() -{ - return this->sorted_; -} - -/** - * @brief Get the number of non-zero elements in the matrix - * - * @tparam ScalarT - * @tparam IdxT - * - * @param[out] IdxT - number of non-zero elements in the matrix - */ -template -inline IdxT COO_Matrix::nnz() -{ - return static_cast(this->values_.size()); -} - -template -inline std::tuple COO_Matrix::getDimensions() -{ - return std::tuple(this->rows_size_, this->columns_size_); -} - -/** - * @brief Print matrix in sorted order - * - * @tparam ScalarT - * @tparam IdxT - * - * @param[in] name to identify the specific matrix printed - */ -template -inline void COO_Matrix::printMatrix(std::string name) -{ - if (this->sorted_ == false) - { - this->sortSparse(); - } + /** + * @brief Restructure the sparse matrix for faster accesses and modifications + * + * @tparam ScalarT + * @tparam IdxT + */ + template + inline void COO_Matrix::sortSparse() + { + this->sortSparseCOO(this->row_indices_, this->column_indices_, this->values_); + this->sorted_ = true; + } - std::cout << "Sparse COO Matrix: " << name << "\n"; - std::cout << "(x , y, value)\n"; - for (size_t i = 0; i < this->values_.size(); i++) - { - std::cout << "(" << this->row_indices_[i] - << ", " << this->column_indices_[i] - << ", " << this->values_[i] << ")\n"; - } - std::cout << std::flush; -} + /** + * @brief Check if the matrix is sorted + * + * @tparam ScalarT + * @tparam IdxT + * + * @param[out] bool - true if sorted, false otherwise + */ + + template + inline bool COO_Matrix::isSorted() + { + return this->sorted_; + } -/** - * @brief Find the lowest row cordinate from set of provided coordinates - * - * Assumes rows and columns are sorted - * @tparam ScalarT - * @tparam IdxT - * - * @param[in] rows - row indices - * @param[in] r - row index - * - * @return IdxT - index of lowest row - */ -template -inline IdxT COO_Matrix::indexStartRow(const std::vector& rows, IdxT r) -{ - // Specialized Binary Search for Lowest Row - IdxT i1 = 0; - IdxT i2 = rows->size() - 1; - IdxT m_smallest = -1; - IdxT m = -1; - while (i1 <= i2) - { - m = (i2 + i1) / 2; - // rows - if (rows[m] < r) + /** + * @brief Get the number of non-zero elements in the matrix + * + * @tparam ScalarT + * @tparam IdxT + * + * @param[out] IdxT - number of non-zero elements in the matrix + */ + template + inline IdxT COO_Matrix::nnz() { - i1 = m + 1; + return static_cast(this->values_.size()); } - else if (r < rows[m]) + + template + inline std::tuple COO_Matrix::getDimensions() { - i2 = m - 1; + return std::tuple(this->rows_size_, this->columns_size_); } - else + + /** + * @brief Print matrix in sorted order + * + * @tparam ScalarT + * @tparam IdxT + * + * @param[in] name to identify the specific matrix printed + */ + template + inline void COO_Matrix::printMatrix(std::string name) { - if (i1 == i2) + if (this->sorted_ == false) { - return m_smallest; + this->sortSparse(); } - // Keep track of smallest cordinate - m_smallest = m; - i2 = m - 1; + std::cout << "Sparse COO Matrix: " << name << "\n"; + std::cout << "(x , y, value)\n"; + for (size_t i = 0; i < this->values_.size(); i++) + { + std::cout << "(" << this->row_indices_[i] + << ", " << this->column_indices_[i] + << ", " << this->values_[i] << ")\n"; + } + std::cout << std::flush; } - } - return m_smallest; -} -/** - * @brief Basic binary search - * - * @tparam ScalarT - * @tparam IdxT - * @param[in] rows - row indices - * @param[in] columns - column indices - * @param[in] ri - row index - * @param[in] ci - column index - * @return IdxT - returns the index of the coordinate - */ -template -inline IdxT COO_Matrix::sparseCordBinarySearch(const std::vector& rows, const std::vector& columns, IdxT ri, IdxT ci) -{ - assert(rows.size() == columns.size()); - // basic binary search - IdxT i1 = 0; - IdxT i2 = rows.size() - 1; - IdxT m = 0; - while (i1 <= i2) - { - m = (i2 + i1) / 2; - // rows - if (rows[m] < ri) + /** + * @brief Find the lowest row cordinate from set of provided coordinates + * + * Assumes rows and columns are sorted + * @tparam ScalarT + * @tparam IdxT + * + * @param[in] rows - row indices + * @param[in] r - row index + * + * @return IdxT - index of lowest row + */ + template + inline IdxT COO_Matrix::indexStartRow(const std::vector& rows, IdxT r) { - i1 = m + 1; + // Specialized Binary Search for Lowest Row + IdxT i1 = 0; + IdxT i2 = rows->size() - 1; + IdxT m_smallest = -1; + IdxT m = -1; + while (i1 <= i2) + { + m = (i2 + i1) / 2; + // rows + if (rows[m] < r) + { + i1 = m + 1; + } + else if (r < rows[m]) + { + i2 = m - 1; + } + else + { + if (i1 == i2) + { + return m_smallest; + } + + // Keep track of smallest cordinate + m_smallest = m; + i2 = m - 1; + } + } + return m_smallest; } - else if (ri < rows[m]) + + /** + * @brief Basic binary search + * + * @tparam ScalarT + * @tparam IdxT + * @param[in] rows - row indices + * @param[in] columns - column indices + * @param[in] ri - row index + * @param[in] ci - column index + * @return IdxT - returns the index of the coordinate + */ + template + inline IdxT COO_Matrix::sparseCordBinarySearch(const std::vector& rows, const std::vector& columns, IdxT ri, IdxT ci) { - i2 = m - 1; + assert(rows.size() == columns.size()); + // basic binary search + IdxT i1 = 0; + IdxT i2 = rows.size() - 1; + IdxT m = 0; + while (i1 <= i2) + { + m = (i2 + i1) / 2; + // rows + if (rows[m] < ri) + { + i1 = m + 1; + } + else if (ri < rows[m]) + { + i2 = m - 1; + } + else + { + if (columns[m] < ci) + { + i1 = m + 1; + } + else if (ci < columns[m]) + { + i2 = m - 1; + } + break; + } + } + + return m; } - else + + /** + * @brief Check if the size of the matrix needs to be increased + * + * @tparam ScalarT + * @tparam IdxT + * @param[in] r row index + * @param[in] c column index + * @return true if size was increased + */ + + template + inline bool COO_Matrix::checkIncreaseSize(IdxT r, IdxT c) { - if (columns[m] < ci) + bool changed = false; + if (r + 1 > this->rows_size_) { - i1 = m + 1; + this->rows_size_ = r + 1; + changed = true; } - else if (ci < columns[m]) + if (c + 1 > this->columns_size_) { - i2 = m - 1; + this->columns_size_ = c + 1; + changed = true; } - break; - } - } - - return m; -} - -/** - * @brief Check if the size of the matrix needs to be increased - * - * @tparam ScalarT - * @tparam IdxT - * @param[in] r row index - * @param[in] c column index - * @return true if size was increased - */ - -template -inline bool COO_Matrix::checkIncreaseSize(IdxT r, IdxT c) -{ - bool changed = false; - if (r + 1 > this->rows_size_) - { - this->rows_size_ = r + 1; - changed = true; - } - if (c + 1 > this->columns_size_) - { - this->columns_size_ = c + 1; - changed = true; - } - return changed; -} - -/** - * @brief Sorts unordered COO matrix - * - * Matrix entries can appear in arbitrary order and will be sorted in - * row-major order before the method returns. - * Duplicate entries are not allowed and should be pre-summed. - * - * @pre rows, columns, and values are of the same size and represent a COO matrix with no duplicates - * @post Matrix entries are sorted in row-major order - * - * @todo simple setup. Should add stable sorting since lists are pre-sorted_ - * - * @tparam ScalarT - * @tparam IdxT - * @param rows - * @param columns - * @param values - */ -template -inline void COO_Matrix::sortSparseCOO(std::vector& rows, std::vector& columns, std::vector& values) -{ + return changed; + } - // index based sort code - // https://stackoverflow.com/questions/25921706/creating-a-vector-of-indices-of-a-sorted_-vector - // cannot call sort since two arrays are used instead - std::vector ordervec(rows.size()); - std::size_t n(0); - std::generate(std::begin(ordervec), std::end(ordervec), [&] - { return n++; }); - - // Sort by row first then column. - std::sort(std::begin(ordervec), - std::end(ordervec), - [&](int i1, int i2) - { return (rows[i1] < rows[i2]) || (rows[i1] == rows[i2] && columns[i1] < columns[i2]); }); - - // reorder based of index-sorting. Only swap cost no extra memory. - // @todo see if extra memory creation is fine - // https://stackoverflow.com/a/22183350 - for (size_t i = 0; i < ordervec.size(); i++) - { - // permutation swap - while (ordervec[i] != ordervec[ordervec[i]]) + /** + * @brief Sorts unordered COO matrix + * + * Matrix entries can appear in arbitrary order and will be sorted in + * row-major order before the method returns. + * Duplicate entries are not allowed and should be pre-summed. + * + * @pre rows, columns, and values are of the same size and represent a COO matrix with no duplicates + * @post Matrix entries are sorted in row-major order + * + * @todo simple setup. Should add stable sorting since lists are pre-sorted_ + * + * @tparam ScalarT + * @tparam IdxT + * @param rows + * @param columns + * @param values + */ + template + inline void COO_Matrix::sortSparseCOO(std::vector& rows, std::vector& columns, std::vector& values) { - std::swap(rows[ordervec[i]], rows[ordervec[ordervec[i]]]); - std::swap(columns[ordervec[i]], columns[ordervec[ordervec[i]]]); - std::swap(values[ordervec[i]], values[ordervec[ordervec[i]]]); - // swap orderings - std::swap(ordervec[i], ordervec[ordervec[i]]); + // index based sort code + // https://stackoverflow.com/questions/25921706/creating-a-vector-of-indices-of-a-sorted_-vector + // cannot call sort since two arrays are used instead + std::vector ordervec(rows.size()); + std::size_t n(0); + std::generate(std::begin(ordervec), std::end(ordervec), [&] + { return n++; }); + + // Sort by row first then column. + std::sort(std::begin(ordervec), + std::end(ordervec), + [&](auto i1, auto i2) + { return (rows[i1] < rows[i2]) || (rows[i1] == rows[i2] && columns[i1] < columns[i2]); }); + + // reorder based of index-sorting. Only swap cost no extra memory. + // @todo see if extra memory creation is fine + // https://stackoverflow.com/a/22183350 + for (size_t i = 0; i < ordervec.size(); i++) + { + // permutation swap + while (ordervec[i] != ordervec[ordervec[i]]) + { + std::swap(rows[ordervec[i]], rows[ordervec[ordervec[i]]]); + std::swap(columns[ordervec[i]], columns[ordervec[ordervec[i]]]); + std::swap(values[ordervec[i]], values[ordervec[ordervec[i]]]); + + // swap orderings + std::swap(ordervec[i], ordervec[ordervec[i]]); + } + } } - } -} - -/** - * @brief Constructor for COO Matrix with given cooridnates and values - * - * @tparam ScalarT - * @tparam IdxT - * - * @param[in] r row indices - * @param[in] c column indices - * @param[in] v values - * @param[in] m number of rows - * @param[in] n number of columns - * - * @pre r.size() == c.size() == v.size() - * @pre r,c,v represent an array in COO format - * - * @post COO_Matrix is created with given coordinates and values - */ -template -inline COO_Matrix::COO_Matrix(std::vector r, std::vector c, std::vector v, IdxT m, IdxT n) -{ - this->values_ = v; - this->row_indices_ = r; - this->column_indices_ = c; - this->rows_size_ = m; - this->columns_size_ = n; - this->sorted_ = false; // Set to false until explicitly sorted, though logically it is sorted. -} - -/** - * @brief Constructor for empty COO Matrix of a given size - * - * @tparam ScalarT - * @tparam IdxT - * - * @param[in] m number of rows - * @param[in] n number of columns - * - * @post empty COO Matrix is created with given size - */ + /** + * @brief Constructor for COO Matrix with given cooridnates and values + * + * @tparam ScalarT + * @tparam IdxT + * + * @param[in] r row indices + * @param[in] c column indices + * @param[in] v values + * @param[in] m number of rows + * @param[in] n number of columns + * + * @pre r.size() == c.size() == v.size() + * @pre r,c,v represent an array in COO format + * + * @post COO_Matrix is created with given coordinates and values + */ + + template + inline COO_Matrix::COO_Matrix(std::vector r, std::vector c, std::vector v, IdxT m, IdxT n) + { + this->values_ = v; + this->row_indices_ = r; + this->column_indices_ = c; + this->rows_size_ = m; + this->columns_size_ = n; + this->sorted_ = false; // Set to false until explicitly sorted, though logically it is sorted. + } -template -inline COO_Matrix::COO_Matrix(IdxT m, IdxT n) -{ - this->rows_size_ = m; - this->columns_size_ = n; - this->values_ = std::vector(); - this->row_indices_ = std::vector(); - this->column_indices_ = std::vector(); - this->sorted_ = false; // Set to false until explicitly sorted, though logically it is sorted. -} + /** + * @brief Constructor for empty COO Matrix of a given size + * + * @tparam ScalarT + * @tparam IdxT + * + * @param[in] m number of rows + * @param[in] n number of columns + * + * @post empty COO Matrix is created with given size + */ + + template + inline COO_Matrix::COO_Matrix(IdxT m, IdxT n) + { + this->rows_size_ = m; + this->columns_size_ = n; + this->values_ = std::vector(); + this->row_indices_ = std::vector(); + this->column_indices_ = std::vector(); + this->sorted_ = false; // Set to false until explicitly sorted, though logically it is sorted. + } -/** - * @brief Constructor for empty COO Matrix of size 0 - * - * @tparam ScalarT - * @tparam IdxT - * - * @post empty COO Matrix of size 0 is created - */ + /** + * @brief Constructor for empty COO Matrix of size 0 + * + * @tparam ScalarT + * @tparam IdxT + * + * @post empty COO Matrix of size 0 is created + */ + + template + inline COO_Matrix::COO_Matrix() + { + this->rows_size_ = 0; + this->columns_size_ = 0; + this->values_ = std::vector(); + this->row_indices_ = std::vector(); + this->column_indices_ = std::vector(); + this->sorted_ = false; // Set to false until explicitly sorted, though logically it is sorted. + } -template -inline COO_Matrix::COO_Matrix() -{ - this->rows_size_ = 0; - this->columns_size_ = 0; - this->values_ = std::vector(); - this->row_indices_ = std::vector(); - this->column_indices_ = std::vector(); - this->sorted_ = false; // Set to false until explicitly sorted, though logically it is sorted. -} - -template -COO_Matrix::~COO_Matrix() -{ -} + template + COO_Matrix::~COO_Matrix() + { + } + } // namespace LinearAlgebra +} // namespace GridKit #endif diff --git a/src/Model/Evaluator.hpp b/src/Model/Evaluator.hpp index b4a447dd6..ff3bf7195 100644 --- a/src/Model/Evaluator.hpp +++ b/src/Model/Evaluator.hpp @@ -83,8 +83,9 @@ namespace GridKit virtual std::vector& getResidual() = 0; virtual const std::vector& getResidual() const = 0; - virtual COO_Matrix& getJacobian() = 0; - virtual const COO_Matrix& getJacobian() const = 0; + /// \todo Use a different approach to store and set Jacobians + virtual GridKit::LinearAlgebra::COO_Matrix& getJacobian() = 0; + virtual const GridKit::LinearAlgebra::COO_Matrix& getJacobian() const = 0; virtual std::vector& getIntegrand() = 0; virtual const std::vector& getIntegrand() const = 0; diff --git a/src/Model/PhasorDynamics/Branch/Branch.cpp b/src/Model/PhasorDynamics/Branch/Branch.cpp index 75ccb8d74..effc8bd5c 100644 --- a/src/Model/PhasorDynamics/Branch/Branch.cpp +++ b/src/Model/PhasorDynamics/Branch/Branch.cpp @@ -12,8 +12,8 @@ #include #include +#include #include -#include namespace GridKit { @@ -36,8 +36,8 @@ namespace GridKit X_(0.01), G_(0.0), B_(0.0), - bus1ID_(0), - bus2ID_(0) + bus1_id_(0), + bus2_id_(0) { size_ = 0; } @@ -67,21 +67,21 @@ namespace GridKit X_(X), G_(G), B_(B), - bus1ID_(0), - bus2ID_(0) + bus1_id_(0), + bus2_id_(0) { } template - Branch::Branch(bus_type* bus1, bus_type* bus2, BranchData& data) + Branch::Branch(bus_type* bus1, bus_type* bus2, const model_data_type& data) : bus1_(bus1), bus2_(bus2), - R_(data.r), - X_(data.x), - G_(0.0), - B_(data.b), - bus1ID_(data.fbus), - bus2ID_(data.tbus) + R_(data.R), + X_(data.X), + G_(data.G), + B_(data.B), + bus1_id_(data.bus1_id), + bus2_id_(data.bus2_id) { size_ = 0; } @@ -221,6 +221,8 @@ namespace GridKit // Available template instantiations template class Branch; template class Branch; + template class Branch; + template class Branch; } // namespace PhasorDynamics } // namespace GridKit diff --git a/src/Model/PhasorDynamics/Branch/Branch.hpp b/src/Model/PhasorDynamics/Branch/Branch.hpp index 9d6ac38d9..caefa491f 100644 --- a/src/Model/PhasorDynamics/Branch/Branch.hpp +++ b/src/Model/PhasorDynamics/Branch/Branch.hpp @@ -11,22 +11,16 @@ #include // Forward declarations. -namespace GridKit -{ - namespace PowerSystemData - { - template - struct BranchData; - } -} // namespace GridKit - namespace GridKit { namespace PhasorDynamics { template class BusBase; - } + + template + struct BranchData; + } // namespace PhasorDynamics } // namespace GridKit namespace GridKit @@ -51,21 +45,15 @@ namespace GridKit using Component::yp_; using Component::tag_; using Component::f_; - using Component::g_; - using Component::yB_; - using Component::ypB_; - using Component::fB_; - using Component::gB_; - using Component::param_; - using bus_type = BusBase; - using real_type = typename Component::real_type; - using BranchData = GridKit::PowerSystemData::BranchData; + using real_type = typename Component::real_type; + using bus_type = BusBase; + using model_data_type = BranchData; public: Branch(bus_type* bus1, bus_type* bus2); Branch(bus_type* bus1, bus_type* bus2, real_type R, real_type X, real_type G, real_type B); - Branch(bus_type* bus1, bus_type* bus2, BranchData& data); + Branch(bus_type* bus1, bus_type* bus2, const model_data_type& data); virtual ~Branch(); virtual int allocate() override; @@ -154,8 +142,8 @@ namespace GridKit real_type X_; real_type G_; real_type B_; - const IdxT bus1ID_; - const IdxT bus2ID_; + const IdxT bus1_id_; + const IdxT bus2_id_; }; } // namespace PhasorDynamics diff --git a/src/Model/PhasorDynamics/Branch/BranchData.hpp b/src/Model/PhasorDynamics/Branch/BranchData.hpp new file mode 100644 index 000000000..9f66fd28c --- /dev/null +++ b/src/Model/PhasorDynamics/Branch/BranchData.hpp @@ -0,0 +1,35 @@ +/** + * @file BranchData.hpp + * @author Slaven Peles (peless@ornl.gov) + * @brief Modeling data for branches (transmission lines) + * + */ +#pragma once + +namespace GridKit +{ + namespace PhasorDynamics + { + /** + * @brief Contains modeling data for a Branch + * + * @tparam RealT Real parameter data type + * @tparam IdxT Integer parameter data type + * + * Integer parameters are of the same type as matrix and vector indices. + * + * @todo Decide on naming scheme for model parameters. + */ + template + struct BranchData + { + RealT R{0.0}; ///< line series resistance + RealT X{0.0}; ///< line series reactance + RealT G{0.0}; ///< line shunt conductance + RealT B{0.0}; ///< line shunt charging + + IdxT bus1_id{0}; ///< Unique ID of bus 1 + IdxT bus2_id{0}; ///< Unique ID of bus 2 + }; + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/Branch/README.md b/src/Model/PhasorDynamics/Branch/README.md index 1dd2a89f8..cddc5fc8c 100644 --- a/src/Model/PhasorDynamics/Branch/README.md +++ b/src/Model/PhasorDynamics/Branch/README.md @@ -1,11 +1,9 @@ -# Branch Model +# Transmission Line Branch Model Transmission lines and different types of transformers (traditional, Load Tap-Changing transformers (LTC) and Phase Angle Regulators (PARs)) can be modeled with a common branch model. -## Transmission Line Model - The most common circuit that is used to represent the transmission line model is $`\pi`$ circuit as shown in Figure 1. The positive flow direction is into buses. Commonly used convention is to define positive direction to be from @@ -18,75 +16,74 @@ provides more flexibility for modeling. Figure 1: Transmission line $`\pi`$ equivalent circuit
-Here -``` math -Z = R + jX -``` -and +## Model Parameters + +Symbol | Units | Description | Note +------------|---------|---------------------------------| ------ +$R$ | [p.u.] | Branch series resistance | +$X$ | [p.u.] | Branch series reactance | +$G$ | [p.u.] | Branch shunt conductance | +$B$ | [p.u.] | Branch shunt susceptance | + +### Model Derived Parameters +Note the difference between little-g and big-G, little-b, big-B in these equations. ``` math -Y = G + jB, -``` -where $`R`$ is line series resistance, $`X`$ is line series reactance, $`B`$ is -line shunt charging, and $`G`$ is line shunt conductance. As can be seen from -Figure 1 total $`B`$ and $`G`$ are separated between two buses. The current -entering bus 1 can be obtained from Kirchhoff's current law as -```math -I_1 = y(V_2 - V_1) - \frac{Y}{2} V_1, -``` -where $`V_1`$ and $`V_2`$ are respective bus voltages and -```math -y = \frac{1}{Z} = \frac{R}{R^2+X^2} + j\frac{-X}{R^2+X^2} = g + jb. -``` -Similarly, current entering bus 2 is given as -```math -I_2 = y(V_1 - V_2) + \frac{Y}{2} V_2. -``` -These equations can be written in a compact form as: -```math -\begin{bmatrix} -I_{1}\\ -I_{2} -\end{bmatrix} -= \mathbf{Y} -\begin{bmatrix} -V_{1}\\ -V_{2} -\end{bmatrix} -``` -where: -```math -\mathbf{Y}_{TL}=\begin{bmatrix} --(g + jb) - \dfrac{G+jB}{2} & g + jb \\ - g + jb & -(g + jb) - \dfrac{G+jB}{2} -\end{bmatrix} +\begin{aligned} + g &=\dfrac{R}{R^2 + X^2} \\ + b &= -\dfrac{X}{R^2 + X^2}\\ +\end{aligned} ``` -### Branch contributions to residuals at adjacent buses -After some algebra, one obtains expressions for real and imaginary components -for the currents entering adjacent buses: -```math -I_{r1} = -\left(g + \frac{G}{2}\right) V_{r1} + \left(b + \frac{B}{2} \right) V_{i1} - + g V_{r2} - b V_{i2} -``` +## Model Variables -```math -I_{i1} = -\left(b + \frac{B}{2} \right) V_{r1} - \left(g + \frac{G}{2}\right) V_{i1} - + b V_{r2} + g V_{i2} -``` +### Internal Variables -```math -I_{r2} = g V_{r1} - b V_{i1} - - \left(g + \frac{G}{2}\right) V_{r2} + \left(b + \frac{B}{2} \right) V_{i2} -``` +#### Differential +None. -```math -I_{i2} = b V_{r1} + g V_{i1} - - \left(b + \frac{B}{2} \right) V_{r2} - \left(g + \frac{G}{2}\right) V_{i2} +#### Algebraic + +Symbol | Units | Description | Note +------------|---------|---------------------------------| ------ +$I_{r1}$ | [p.u.] | Terminal current, real component, bus 1 | Read by bus +$I_{i1}$ | [p.u.] | Terminal current, imaginary component, bus 1 | Read by bus +$I_{r2}$ | [p.u.] | Terminal current, real component, bus 2 | Read by bus +$I_{i2}$ | [p.u.] | Terminal current, imaginary component, bus 2 | Read by bus + + +### External Variables + +#### Differential +None. + +#### Algebraic +Symbol | Units | Description | Note +------------|---------|---------------------------------| ------ +$V_{r1}$ | [p.u.] | Terminal voltage, real component, bus 1 | owned by bus object +$V_{i1}$ | [p.u.] | Terminal voltage, imaginary component, bus 1 | owned by bus object +$V_{r2}$ | [p.u.] | Terminal voltage, real component, bus 2 | owned by bus object +$V_{i2}$ | [p.u.] | Terminal voltage, imaginary component, bus 2 | owned by bus object + + +## Model Equations + +### Differential Equations +None. + +### Algebraic Equations +``` math +\begin{aligned} + 0 &= - I_{r1} -\left(g + \dfrac{G}{2}\right) V_{r1} + \left(b + \dfrac{B}{2}\right) V_{i1} + g V_{r2} - b V_{i2}\\ + 0 &= I_{i1} - \left(b + \dfrac{B}{2}\right) V_{r1} - \left(g + \dfrac{G}{2}\right) V_{i1} + b V_{r2} + g V_{i2}\\ + 0 &= I_{r2} + g V_{r1} - b V_{i1} - \left(g + \dfrac{G}{2}\right) V_{r2} + \left(b + \dfrac{B}{2}\right) V_{i2}\\ + 0 &= I_{i2} + b V_{r1} + g V_{i1} - \left(b + \dfrac{B}{2}\right) V_{r2} - \left(g + \dfrac{G}{2}\right) V_{i2} +\end{aligned} ``` -## Transformer Branch Model + +# Transformer Branch Model **Note: Transformer model not yet implemented** diff --git a/src/Model/PhasorDynamics/Bus/Bus.cpp b/src/Model/PhasorDynamics/Bus/Bus.cpp index f8005b2b9..03473c8dd 100644 --- a/src/Model/PhasorDynamics/Bus/Bus.cpp +++ b/src/Model/PhasorDynamics/Bus/Bus.cpp @@ -4,7 +4,7 @@ #include #include -#include +#include namespace GridKit { @@ -61,10 +61,10 @@ namespace GridKit * @param[in] data - structure with bus data */ template - Bus::Bus(BusData& data) - : BusBase(data.bus_i), - Vr0_(data.Vm * cos(data.Va)), - Vi0_(data.Vm * sin(data.Va)) + Bus::Bus(const DataT& data) + : BusBase(data.bus_id), + Vr0_(data.Vr0), + Vi0_(data.Vi0) { // std::cout << "Create Bus..." << std::endl; // std::cout << "Number of equations is " << size_ << std::endl; @@ -215,6 +215,8 @@ namespace GridKit // Available template instantiations template class Bus; template class Bus; + template class Bus; + template class Bus; } // namespace PhasorDynamics } // namespace GridKit diff --git a/src/Model/PhasorDynamics/Bus/Bus.hpp b/src/Model/PhasorDynamics/Bus/Bus.hpp index aedaa2a82..11dda1be8 100644 --- a/src/Model/PhasorDynamics/Bus/Bus.hpp +++ b/src/Model/PhasorDynamics/Bus/Bus.hpp @@ -6,7 +6,7 @@ // Forward declaration of BusData structure namespace GridKit { - namespace PowerSystemData + namespace PhasorDynamics { template struct BusData; @@ -39,11 +39,11 @@ namespace GridKit public: using real_type = typename BusBase::real_type; - using BusData = GridKit::PowerSystemData::BusData; + using DataT = BusData; Bus(); Bus(ScalarT Vr, ScalarT Vi); - Bus(BusData& data); + Bus(const DataT& data); virtual ~Bus(); virtual int allocate() override; @@ -58,7 +58,7 @@ namespace GridKit virtual int BusType() const override { - return BusBase::BusType::DEFAULT; + return BusData::BusType::DEFAULT; } virtual ScalarT& Vr() override @@ -101,46 +101,6 @@ namespace GridKit return f_[1]; } - // virtual ScalarT& VrB() override - // { - // return yB_[0]; - // } - - // virtual const ScalarT& VrB() const override - // { - // return yB_[0]; - // } - - // virtual ScalarT& ViB() override - // { - // return yB_[1]; - // } - - // virtual const ScalarT& ViB() const override - // { - // return yB_[1]; - // } - - // virtual ScalarT& IrB() override - // { - // return fB_[0]; - // } - - // virtual const ScalarT& IrB() const override - // { - // return fB_[0]; - // } - - // virtual ScalarT& IiB() override - // { - // return fB_[1]; - // } - - // virtual const ScalarT& IiB() const override - // { - // return fB_[1]; - // } - private: ScalarT Vr0_{0.0}; ScalarT Vi0_{0.0}; diff --git a/src/Model/PhasorDynamics/Bus/BusData.hpp b/src/Model/PhasorDynamics/Bus/BusData.hpp new file mode 100644 index 000000000..115deb5dd --- /dev/null +++ b/src/Model/PhasorDynamics/Bus/BusData.hpp @@ -0,0 +1,40 @@ +/** + * @file BusData.hpp + * @author Slaven Peles (peless@ornl.gov) + * @brief Modeling data for buses (nodes) + * + */ +#pragma once + +namespace GridKit +{ + namespace PhasorDynamics + { + /** + * @brief Contains modeling data for a Bus + * + * @tparam RealT Real parameter data type + * @tparam IdxT Integer parameter data type + * + * Integer parameters are of the same type as matrix and vector indices. + * + * @todo Decide on naming scheme for model parameters. + */ + template + struct BusData + { + enum BusType + { + INVALID = 0, + DEFAULT, + SLACK + }; + + RealT Vr0{0.0}; ///< Initial value for real bus voltage + RealT Vi0{0.0}; ///< Initial value for imaginary bus voltage + + IdxT bus_id{0}; ///< Unique ID of bus 1 + BusType bus_type{INVALID}; + }; + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/Bus/BusFactory.hpp b/src/Model/PhasorDynamics/Bus/BusFactory.hpp new file mode 100644 index 000000000..34eae481e --- /dev/null +++ b/src/Model/PhasorDynamics/Bus/BusFactory.hpp @@ -0,0 +1,41 @@ + +#pragma once + +#include +#include +#include + +namespace GridKit +{ + namespace PhasorDynamics + { + template + class BusFactory + { + public: + using real_type = typename Model::Evaluator::real_type; + using BusData = GridKit::PhasorDynamics::BusData; + + BusFactory() = delete; + + static BusBase* create(const BusData& data) + { + BusBase* bus = nullptr; + + switch (data.bus_type) + { + case BusData::DEFAULT: + bus = new Bus(data); + break; + case BusData::SLACK: + bus = new BusInfinite(data); + break; + default: + // Throw exception + std::cout << "Bus type " << data.bus_type << " unrecognized.\n"; + } + return bus; + } + }; + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/Bus/BusInfinite.cpp b/src/Model/PhasorDynamics/Bus/BusInfinite.cpp index 6206813d7..f1e96a339 100644 --- a/src/Model/PhasorDynamics/Bus/BusInfinite.cpp +++ b/src/Model/PhasorDynamics/Bus/BusInfinite.cpp @@ -4,7 +4,7 @@ #include #include -#include +#include namespace GridKit { @@ -66,10 +66,10 @@ namespace GridKit * @param[in] data - structure with bus data */ template - BusInfinite::BusInfinite(BusData& data) - : BusBase(data.bus_i), - Vr_(data.Vm * cos(data.Va)), - Vi_(data.Vm * sin(data.Va)) + BusInfinite::BusInfinite(const DataT& data) + : BusBase(data.bus_id), + Vr_(data.Vr0), + Vi_(data.Vi0) { size_ = 0; } @@ -195,6 +195,8 @@ namespace GridKit // Available template instantiations template class BusInfinite; template class BusInfinite; + template class BusInfinite; + template class BusInfinite; } // namespace PhasorDynamics } // namespace GridKit diff --git a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp index 6acdd7c6a..b7247401f 100644 --- a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp +++ b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp @@ -6,7 +6,7 @@ // Forward declaration of BusData structure namespace GridKit { - namespace PowerSystemData + namespace PhasorDynamics { template struct BusData; @@ -37,11 +37,11 @@ namespace GridKit public: using real_type = typename BusBase::real_type; - using BusData = GridKit::PowerSystemData::BusData; + using DataT = BusData; BusInfinite(); BusInfinite(ScalarT Vr, ScalarT Vi); - BusInfinite(BusData& data); + BusInfinite(const DataT& data); virtual ~BusInfinite(); virtual int allocate() override; @@ -56,7 +56,7 @@ namespace GridKit virtual int BusType() const override { - return BusBase::BusType::SLACK; + return BusData::BusType::SLACK; } virtual ScalarT& Vr() override @@ -99,46 +99,6 @@ namespace GridKit return Ii_; } - // virtual ScalarT& VrB() override - // { - // return VrB_; - // } - - // virtual const ScalarT& VrB() const override - // { - // return VrB_; - // } - - // virtual ScalarT& ViB() override - // { - // return ViB_; - // } - - // virtual const ScalarT& ViB() const override - // { - // return ViB_; - // } - - // virtual ScalarT& IrB() override - // { - // return IrB_; - // } - - // virtual const ScalarT& IrB() const override - // { - // return IrB_; - // } - - // virtual ScalarT& IiB() override - // { - // return IiB_; - // } - - // virtual const ScalarT& IiB() const override - // { - // return IiB_; - // } - private: ScalarT Vr_{0.0}; ScalarT Vi_{0.0}; diff --git a/src/Model/PhasorDynamics/BusBase.hpp b/src/Model/PhasorDynamics/BusBase.hpp index 804cbfca4..322e6f095 100644 --- a/src/Model/PhasorDynamics/BusBase.hpp +++ b/src/Model/PhasorDynamics/BusBase.hpp @@ -2,6 +2,7 @@ #include +#include #include namespace GridKit @@ -18,12 +19,6 @@ namespace GridKit public: using real_type = typename Model::Evaluator::real_type; - enum BusType - { - DEFAULT = 1, - SLACK - }; - BusBase() : size_(0), size_quad_(0), @@ -48,7 +43,7 @@ namespace GridKit ypB_(size_), fB_(size_), gB_(size_param_), - J_(COO_Matrix()), + J_(GridKit::LinearAlgebra::COO_Matrix()), param_(size_param_), param_up_(size_param_), param_lo_(size_param_) @@ -202,12 +197,12 @@ namespace GridKit return f_; } - COO_Matrix& getJacobian() override + GridKit::LinearAlgebra::COO_Matrix& getJacobian() override { return J_; } - const COO_Matrix& getJacobian() const override + const GridKit::LinearAlgebra::COO_Matrix& getJacobian() const override { return J_; } @@ -266,7 +261,7 @@ namespace GridKit std::vector fB_; std::vector gB_; - COO_Matrix J_; + GridKit::LinearAlgebra::COO_Matrix J_; std::vector param_; std::vector param_up_; diff --git a/src/Model/PhasorDynamics/BusFault/BusFault.cpp b/src/Model/PhasorDynamics/BusFault/BusFault.cpp index d2f519ee0..597f20cbf 100644 --- a/src/Model/PhasorDynamics/BusFault/BusFault.cpp +++ b/src/Model/PhasorDynamics/BusFault/BusFault.cpp @@ -13,7 +13,7 @@ #include #include -#include +#include namespace GridKit { @@ -55,6 +55,25 @@ namespace GridKit size_ = 0; } + /** + * @brief Construct a new BusFault + * + * @tparam ScalarT - scalar type + * @tparam IdxT - matrix/vector index type + * @param bus1 - pointer to bus-1 + * @param bus2 - pointer to bus-2 + */ + template + BusFault::BusFault(bus_type* bus, const DataT& data) + : bus_(bus), + R_(data.R), + X_(data.X), + status_(data.status), + busID_(data.bus_id) + { + size_ = 0; + } + /*! * @brief allocate method computes sparsity pattern of the Jacobian. */ diff --git a/src/Model/PhasorDynamics/BusFault/BusFault.hpp b/src/Model/PhasorDynamics/BusFault/BusFault.hpp index 4df93c123..72be0717f 100644 --- a/src/Model/PhasorDynamics/BusFault/BusFault.hpp +++ b/src/Model/PhasorDynamics/BusFault/BusFault.hpp @@ -4,6 +4,16 @@ #include #include +// Forward declaration of BusData structure +namespace GridKit +{ + namespace PhasorDynamics + { + template + struct BusFaultData; + } +} // namespace GridKit + namespace GridKit { namespace PhasorDynamics @@ -28,10 +38,12 @@ namespace GridKit using bus_type = BusBase; using real_type = typename Component::real_type; + using DataT = BusFaultData; public: BusFault(bus_type* bus); BusFault(bus_type* bus, real_type R, real_type X, int status); + BusFault(bus_type* bus, const DataT& data); ~BusFault() = default; int allocate() override; @@ -59,7 +71,7 @@ namespace GridKit X_ = X; } - void setStatus(int status) + void setStatus(bool status) { status_ = status; } @@ -86,11 +98,11 @@ namespace GridKit } private: - bus_type* bus_; - real_type R_; - real_type X_; - int status_; - const int busID_; + bus_type* bus_; + real_type R_; + real_type X_; + bool status_; + const IdxT busID_; }; } // namespace PhasorDynamics diff --git a/src/Model/PhasorDynamics/BusFault/BusFaultData.hpp b/src/Model/PhasorDynamics/BusFault/BusFaultData.hpp new file mode 100644 index 000000000..dbdc2bd5d --- /dev/null +++ b/src/Model/PhasorDynamics/BusFault/BusFaultData.hpp @@ -0,0 +1,33 @@ +/** + * @file BusFaultData.hpp + * @author Slaven Peles (peless@ornl.gov) + * @brief Modeling data for short-to-ground fault + * + */ +#pragma once + +namespace GridKit +{ + namespace PhasorDynamics + { + /** + * @brief Contains modeling data for a short-to-ground fault + * + * @tparam RealT Real parameter data type + * @tparam IdxT Integer parameter data type + * + * Integer parameters are of the same type as matrix and vector indices. + * + * @todo Decide on naming scheme for model parameters. + */ + template + struct BusFaultData + { + RealT R{0.0}; ///< short to ground resistance + RealT X{0.0}; ///< short to ground reactance + bool status{false}; ///< if the fault happened + + IdxT bus_id{0}; ///< Unique ID of bus where fault occurs. + }; + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/BusFault/README.md b/src/Model/PhasorDynamics/BusFault/README.md new file mode 100644 index 000000000..3576df850 --- /dev/null +++ b/src/Model/PhasorDynamics/BusFault/README.md @@ -0,0 +1,60 @@ +# Bus Fault + +Represents an impedance fault at a bus. This device can exist in two states, on or off, controlled by the user. Following a state change, generally the solver needs to be reset as this is a discrete event. + +## Model Parameters + +Symbol | Units | Description | Note +---------|------------|---------------------------------|------- +$R$ | [p.u.] | Fault resistance | +$X$ | [p.u.] | Fault reactance | +$U$ | [unitless] | Binary status $$\in \{0, 1\}$$ | Set by user to put fault on or off. + +### Model Derived Parameters +``` math +\begin{aligned} + G &=\dfrac{R}{R^2+ X^2} \\ + B &= -\dfrac{X}{R^2 + X^2}\\ +\end{aligned} +``` + + +## Model Variables + +### Internal Variables + +#### Differential +None. + +#### Algebraic + +Symbol | Units | Description | Note +------------|---------|---------------------------------------| ------ +$I_r$ | [p.u.] | Terminal current, real component | Read by bus +$I_i$ | [p.u.] | Terminal current, imaginary component | Read by bus + + +### External Variables + +#### Differential +None. + +#### Algebraic +Symbol | Units | Description | Note +------------|---------|---------------------------------------| ------ +$V_r$ | [p.u.] | Terminal voltage, real component | owned by bus object +$V_i$ | [p.u.] | Terminal voltage, imaginary component | owned by bus object + + +## Model Equations + +### Differential Equations +None. + +### Algebraic Equations +``` math +\begin{aligned} +0 &= -I_{r} + U (-G V_{r} + B V_{i}) \\ +0 &= -I_{i} + U (-B V_{r} - G V_{i}) +\end{aligned} +``` diff --git a/src/Model/PhasorDynamics/CMakeLists.txt b/src/Model/PhasorDynamics/CMakeLists.txt index 01cd77258..c5d8504d4 100644 --- a/src/Model/PhasorDynamics/CMakeLists.txt +++ b/src/Model/PhasorDynamics/CMakeLists.txt @@ -8,3 +8,4 @@ add_subdirectory(Bus) add_subdirectory(BusFault) add_subdirectory(Load) add_subdirectory(SynchronousMachine) +add_subdirectory(Governor) diff --git a/src/Model/PhasorDynamics/Component.hpp b/src/Model/PhasorDynamics/Component.hpp index c061ff622..9a72aad96 100644 --- a/src/Model/PhasorDynamics/Component.hpp +++ b/src/Model/PhasorDynamics/Component.hpp @@ -2,6 +2,7 @@ #include +#include #include namespace GridKit @@ -38,7 +39,7 @@ namespace GridKit ypB_(size_), fB_(size_), gB_(size_param_), - J_(COO_Matrix()), + J_(GridKit::LinearAlgebra::COO_Matrix()), param_(size_param_), param_up_(size_param_), param_lo_(size_param_) @@ -179,12 +180,12 @@ namespace GridKit return f_; } - COO_Matrix& getJacobian() override + GridKit::LinearAlgebra::COO_Matrix& getJacobian() override { return J_; } - const COO_Matrix& getJacobian() const override + const GridKit::LinearAlgebra::COO_Matrix& getJacobian() const override { return J_; } @@ -242,7 +243,7 @@ namespace GridKit std::vector fB_; std::vector gB_; - COO_Matrix J_; + GridKit::LinearAlgebra::COO_Matrix J_; std::vector param_; std::vector param_up_; diff --git a/src/Model/PhasorDynamics/Governor/CMakeLists.txt b/src/Model/PhasorDynamics/Governor/CMakeLists.txt new file mode 100644 index 000000000..fe923ae65 --- /dev/null +++ b/src/Model/PhasorDynamics/Governor/CMakeLists.txt @@ -0,0 +1,8 @@ + +# [[ +# Author(s): +# - Luke Lowery +# - Adam Birchfield +# ]] + +add_subdirectory(GovernorTgov1) diff --git a/src/Model/PhasorDynamics/Governor/GovernorTgov1/CMakeLists.txt b/src/Model/PhasorDynamics/Governor/GovernorTgov1/CMakeLists.txt new file mode 100644 index 000000000..da403e472 --- /dev/null +++ b/src/Model/PhasorDynamics/Governor/GovernorTgov1/CMakeLists.txt @@ -0,0 +1,11 @@ +# [[ +# Author(s): +# - Luke Lowery +# - Adam Birchfield +# ]] + +gridkit_add_library(phasor_dynamics_turbinegov + SOURCES + TurbineGov.cpp + OUTPUT_NAME + gridkit_phasor_dynamics_turbinegov) diff --git a/src/Model/PhasorDynamics/Governor/GovernorTgov1/README.md b/src/Model/PhasorDynamics/Governor/GovernorTgov1/README.md new file mode 100644 index 000000000..761409fee --- /dev/null +++ b/src/Model/PhasorDynamics/Governor/GovernorTgov1/README.md @@ -0,0 +1,110 @@ +# **Steam Turbine-Governor Model (TGOV1)** + +## Control Diagram + +Standard model of the stream turbine + +
+ + + + Figure 1: Governor TGOV1 model. Figure courtesy of [PowerWorld](https://www.powerworld.com/WebHelp/) +
+ +## Model Parameters + +Symbol | Units | Description | Typical Value | Note +------------|--------|-----------------------------------|---------------| ------ +$R$ | [p.u.] | Droop Constant | 0.05 | +$T_1$ | [sec] | Valve Time Delay | 0.5 | +$T_2$ | [sec] | Turbine Numerator Time Constant | 2.5 | +$T_3$ | [sec] | Turbine Delay | 7.5 | +$P_{vmax}$ | [p.u.] | Stator leakage reactance | 1 | +$P_{vmin}$ | [p.u.] | Max Valve Position | 0 | +$D_t$ | [p.u.] | Turbine Damping Coefficient | 0 | + +## Model Variables + +### Internal Variables + +#### Differential + +Symbol | Units | Description | Note +----------|--------|-----------------------------------|------- +$P_{tx}$ | [p.u.] | Turbine Power (State 1 in Fig. 1) | +$P_{v}$ | [p.u.] | Valve Position (State 2 in Fig. 1)| + +#### Algebraic +Symbol | Units | Description | Note +----------------|--------|-----------------------------------|------- +$P_{mech}$ | [p.u.] | Mechnical Power to Generator | Read by a Machine Model + +### External Variables + +#### Differential +Symbol | Units | Description | Note +----------------|--------|-----------------------------------|------- +$\Delta\omega$ | [p.u.] | Speed Deviation | + +#### Algebraic +Symbol | Units | Description | Note +----------------|--------|-----------------------------------|------- +$P_{ref}$ | [p.u.] | Reference Power | + +## Model Equations + +### Differential Equations +The TGOV1 differential equations, as derived from the model diagram. +```math +\begin{aligned} + \dot{P}_{tx} &= P_v - \dfrac{1}{T_3}(P_{tx}+T_2P_v) \\ + \dot{P}_{v} &= + \dfrac{1}{T_1} + \begin{cases} + -P_{v} + \dfrac{1}{R}(P_{ref}-\Delta\omega) + & \text{if } P_v \in (P_{vmin}, P_{vmax})\\ + 0 + & \text{else } \\ + \end{cases} +\end{aligned} +``` + +### Algebraic Equations +The algebraic equation dictating the mechnical power output. +```math +\begin{aligned} + P_{mech} &= \dfrac{1}{T_3}(P_{tx}+T_2P_v) - D_t \Delta\omega \\ +\end{aligned} +``` + +The domain of the state variable $P_{v}\in(P_{vmin}, P_{vmax})$ is enforced +through the piece-wise definition above. This may need to be expressed as a +smooth approximation (smooth indicator $\phi$) expressed generically as follows. +```math +\begin{aligned} + \dot{P}_{v} + &= + \phi(P_v) \cdot \dfrac{1}{T_1} + \left[ + -P_{v} + \dfrac{1}{R}(P_{ref}-\Delta\omega) + \right] \\ +\end{aligned} +``` + +## Initialization +Assuming no limits are reached, the initial conditions are a function of $P_{mech}$ which is equal to the electric torque. +```math +\begin{aligned} + P_{tx} &= (T_3-T_2) P_{mech}\\ + P_{v} &= P_{mech}\\ + \dot{P}_{tx} &=0\\ + \dot{P}_{v} &=0\\ +\end{aligned} +``` + +And if the reference power is a parameter, we can deduce +```math +\begin{aligned} + P_{ref} &= R P_{mech}\\ +\end{aligned} +``` diff --git a/src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGov.cpp new file mode 100644 index 000000000..b8ff34e20 --- /dev/null +++ b/src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGov.cpp @@ -0,0 +1,266 @@ +/** + * @file TurbineGov.cpp + * @author Luke Lowery (lukel@tamu.edu) + * @author Adam Birchfield (abirchfield@tamu.edu) + * @brief Definition of a Turbine Governor Model (IEEET1). + * + */ + +#include "TurbineGov.hpp" + +#include +#include + +#include +#include + +#define _USE_MATH_DEFINES + +namespace GridKit +{ + namespace PhasorDynamics + { + + /*! + * @brief Constructor for Governor + * + * @param machine Generator Object + * @param data TGOV1 Data Object + */ + template + TurbineGov::TurbineGov(machine_type* machine, const model_data_type& data) + : machine_(machine), + R_(data.R), + Pvmin_(data.Pvmin), + Pvmax_(data.Pvmax), + T1_(data.T1), + T2_(data.T2), + T3_(data.T3), + Dt_(data.Dt) + { + + // 3 Internal Variables + size_ = 3; + } + + template + TurbineGov::TurbineGov(machine_type* machine) + : machine_(machine), + R_(0.05), + Pvmin_(0), + Pvmax_(1), + T1_(0.5), + T2_(2.5), + T3_(7.5), + Dt_(0) + { + + // 3 Internal Variables + size_ = 3; + } + + /*! + * @brief Allocate memory for model + * + */ + template + int TurbineGov::allocate() + { + f_.resize(size_); + y_.resize(size_); + yp_.resize(size_); + tag_.resize(size_); + fB_.resize(size_); + yB_.resize(size_); + ypB_.resize(size_); + return 0; + } + + /** + * @brief Initialization of the Governor + * + */ + template + int TurbineGov::initialize() + { + + + // Initial mechanical = initial electric torque + ScalarT p0 = machine_->get_torque(); + + // Input Variables (Parameter for now) + pref_ = R_ * p0; + + // Internal States + y_[0] = (T3_ - T2_) * p0; // y0 - Ptx (Turbine Power ) + y_[1] = p0; // y1 - Pv (Valve Position) + y_[2] = p0; // y2 - Pm (Mech Power) + + // D.V. Derivative + yp_[0] = 0.0; // Ptx + yp_[1] = 0.0; // Pv + yp_[2] = 0.0; // Do I need to set algebraic to zero? + + return 0; + } + + /** + * @brief Identify differential variables. + */ + template + int TurbineGov::tagDifferentiable() + { + + tag_[0] = true; // Pv + tag_[1] = true; // Ptx + tag_[2] = false; // Pmech + + return 0; + } + + template + ScalarT TurbineGov::sigmoid(ScalarT x) + { + ScalarT a = 4000; + return a * x / ( 1 + std::abs(a * x) ) / 2 + 1 / 2; + } + + template + ScalarT TurbineGov::indicator_low(ScalarT x, ScalarT f) + { + return (this->sigmoid(Pvmin_ - x)) * (this->sigmoid(-f)); + } + + template + ScalarT TurbineGov::indicator_high(ScalarT x, ScalarT f) + { + return (this->sigmoid(x - Pvmax_)) * (this->sigmoid(f)); + } + + template + ScalarT TurbineGov::indicator(ScalarT x, ScalarT f) + { + return ( 1 - this->indicator_low(x, f) ) * ( 1 - this->indicator_high(x, f) ); + } + + /** + * @brief Residuals of system equations + * + */ + template + int TurbineGov::evaluateResidual() + { + + // Input Variables + ScalarT omega = machine_->speed(); + + // Read Internal Variables + ScalarT ptx = y_[0]; // y0 - Ptx + ScalarT pv = y_[1]; // y1 - Pv + ScalarT pmech = y_[2]; // y2 - Pmech + + // Read Internal Derivatives + ScalarT ptx_dot = yp_[0]; + ScalarT pv_dot = yp_[1]; + + // The 'pre-limit' derivative of Pv + ScalarT f = ( -pv + (pref_ - omega) / R_) / T1_; + ScalarT valv_ind = this->indicator(pv, f); + + // Internal Differential Equations + f_[0] = - ptx_dot + pv - (ptx + T2_ * pv) / T3_; + f_[1] = - pv_dot + valv_ind * f; + + // Internal Algebraic Equations + f_[2] = - pmech + (ptx + T2_ * pv) / T3_ - (Dt_ * omega); + + return 0; + } + + /** + * @brief Jacobian evaluation not implemented yet + * + * @tparam ScalarT - Scalar data type + * @tparam IdxT - Index data type + * @return int - error code, 0 = success + */ + template + int TurbineGov::evaluateJacobian() + { + std::cout << "Jacobian evaluation not implemented!" << std::endl; + return 0; + } + + /** + * @brief Integrand (objective) evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int TurbineGov::evaluateIntegrand() + { + std::cout << "Evaluate Integrand for TurbineGov..." << std::endl; + return 0; + } + + /** + * @brief Adjoint initialization not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int TurbineGov::initializeAdjoint() + { + std::cout << "Initialize adjoint for TurbineGov..." << std::endl; + return 0; + } + + /** + * @brief Adjoint residual evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int TurbineGov::evaluateAdjointResidual() + { + std::cout << "Evaluate adjoint residual for TurbineGov..." << std::endl; + return 0; + } + + /** + * @brief Adjoint integrand (objective) evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int TurbineGov::evaluateAdjointIntegrand() + { + std::cout << "Evaluate adjoint Integrand for TurbineGov..." << std::endl; + return 0; + } + + /** + * @brief The mechanical power output. + * + * @return ScalarT - Mechanical output power value. + */ + template + ScalarT& TurbineGov::Pmech() + { + return y_[2]; + } + + // Available template instantiations + template class TurbineGov; + template class TurbineGov; + + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGov.hpp b/src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGov.hpp new file mode 100644 index 000000000..f3f59b210 --- /dev/null +++ b/src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGov.hpp @@ -0,0 +1,105 @@ +/** + * @file TurbineGov.hpp + * @author Luke Lowery (lukel@tamu.edu) + * @author Adam Birchfield (abirchfield@tamu.edu) + * @brief Declaration of a Turbine Governor Model (IEEET1). + * + */ + +#pragma once + +#include +#include + +// Forward declarations +namespace GridKit +{ + namespace PhasorDynamics + { + template + struct TurbineGovData; + template + class MachineBase; + } // namespace PhasorDynamics +} // namespace GridKit + +namespace GridKit +{ + namespace PhasorDynamics + { + + template + class TurbineGov : public Component, public GovernorBase + { + using Component::alpha_; + using Component::f_; + using Component::fB_; + using Component::g_; + using Component::gB_; + using Component::nnz_; + using Component::param_; + using Component::size_; + using Component::size_param_; + using Component::tag_; + using Component::time_; + using Component::y_; + using Component::yB_; + using Component::yp_; + using Component::ypB_; + + using machine_type = MachineBase; + using real_type = typename Component::real_type; + using model_data_type = TurbineGovData; + + public: + TurbineGov(machine_type* machine, const model_data_type& data); + TurbineGov(machine_type* machine); + ~TurbineGov() = default; + + int allocate() override; + int initialize() override; + int tagDifferentiable() override; + int evaluateResidual() override; + + // Still to be implemented + int evaluateJacobian() override; + int evaluateIntegrand() override; + int initializeAdjoint() override; + int evaluateAdjointResidual() override; + int evaluateAdjointIntegrand() override; + + void updateTime(real_type /* t */, real_type /* a */) override + { + } + + // Read Access to Pmech + ScalarT& Pmech() override; + + // Activation function (sigmoid approximation) + ScalarT sigmoid(ScalarT x); + + // Indicator of Valve limit states + ScalarT indicator_low(ScalarT x, ScalarT f); + ScalarT indicator_high(ScalarT x, ScalarT f); + ScalarT indicator(ScalarT x, ScalarT f); + + private: + + // Associated Machine Model + machine_type* machine_; + + // Input parameters + real_type R_; + real_type Pvmin_; + real_type Pvmax_; + real_type T1_; + real_type T2_; + real_type T3_; + real_type Dt_; + + // Input States (which can be parameters) + ScalarT pref_; + }; + + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGovData.hpp b/src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGovData.hpp new file mode 100644 index 000000000..6e027e367 --- /dev/null +++ b/src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGovData.hpp @@ -0,0 +1,37 @@ +/** + * @file TurbineGovData.hpp + * @author Luke Lowery (lukel@tamu.edu) + * @brief Modeling data for TGOV1 + * + */ +#pragma once + +namespace GridKit +{ + namespace PhasorDynamics + { + /** + * @brief Contains modeling data for a Genrou generator model. + * + * @tparam RealT Real parameter data type + * @tparam IdxT Integer parameter data type + * + * Integer parameters are of the same type as matrix and vector indices. + * + * @todo Decide on naming scheme for model parameters. + */ + template + struct TurbineGovData + { + IdxT gov_id{0}; ///< Unique unit ID + + RealT R{0.0}; ///< R + RealT Pvmin{0.0}; ///< Min Valve Power + RealT Pvmax{0.0}; ///< Max Valve Power + RealT T1{0.0}; ///< + RealT T2{0.0}; ///< + RealT T3{0.0}; ///< + RealT Dt{0.0}; ///< + }; + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/Governor/README.md b/src/Model/PhasorDynamics/Governor/README.md index 19e9dde2f..531c9270e 100644 --- a/src/Model/PhasorDynamics/Governor/README.md +++ b/src/Model/PhasorDynamics/Governor/README.md @@ -1,57 +1,12 @@ -# **Governor** +# **Governor Model** -## TGOV1 Model +> [!NOTE] +> No implementation yet. +## Introduction -**Note: Governor model not yet implemented** +A governor models the control system that regulates the output power of a machine. -Standard model of the stream turbine - -
- - - - Figure 1: Governor TGOV1 model. Figure courtesy of [PowerWorld](https://www.powerworld.com/WebHelp/) -
- -## Nomenclature - -### Inputs -- $`P_{REF}`$ - reference power (set point) -- $`\Delta\omega`$ -### States -- $`P`$ - turbine power (state 1 in the Figure) -- $`V`$ - valve position (state 2 in the Figure) -### Parameters -- $`R`$ - permanent droop, pu (0.05) -- $`T2`$ - steam bowl time constant, sec (0.5) -- $`V_{max}`$ - maximum valve position limit (1) -- $`V_{min}`$ - minimum valve position limit (0) -- $`T2`$ - numerator time constant of T2, T3 block, sec (2.5) -- $`T3`$ - reheater time constant, sec (7.5) -- $`D_{t}`$ - turbine damping coefficient, pu (0) -- $`T_{rate}`$ - turbine rating, MW (0) - -## Equations -```math -\Delta\omega=\dfrac{\omega-\omega_{s}}{\omega_{s}} -``` -First block -```math -\dfrac{dV}{dt} = \begin{cases} - \dfrac{1}{T1}(\dfrac{P_{REF}-\Delta\omega}{R}-V) &\text{if } V_{min}<=V<= V_{max}\\ - 0 &\text{if } \dfrac{P_{REF}-\Delta\omega}{R}>0 \text{ and } V>=V_{max} &\text{ also then } V=V_{max}\\ - 0 &\text{if } \dfrac{P_{REF}-\Delta\omega}{R}<0 \text{ and } V<=V_{min} &\text{ also then } V=V_{min}\\ -\end{cases} -``` -Second block -```math -\dfrac{dx}{dt}=\dfrac{1}{T3}(V-P) -``` -```math -P=x+\dfrac{T2}{T3}V -``` -Output -```math -P_{mech}=P-\Delta\omega D_{t} -``` +## Types +There are a few standard Governor models +- Turbine Governor (See [TGOV1](TGOV1/README.md)) diff --git a/src/Model/PhasorDynamics/GovernorBase.hpp b/src/Model/PhasorDynamics/GovernorBase.hpp new file mode 100644 index 000000000..04d85a5f7 --- /dev/null +++ b/src/Model/PhasorDynamics/GovernorBase.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include + +namespace GridKit +{ + namespace PhasorDynamics + { + /*! + * @brief GovernorBase model implementation base class. + * + */ + template + class GovernorBase + { + public: + virtual ScalarT& Pmech() = 0; + }; + + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/INPUT_FORMAT.md b/src/Model/PhasorDynamics/INPUT_FORMAT.md index 68b13b4a7..0fdfdcfb4 100644 --- a/src/Model/PhasorDynamics/INPUT_FORMAT.md +++ b/src/Model/PhasorDynamics/INPUT_FORMAT.md @@ -1,15 +1,16 @@ -## Grid Dynamics Case Format +# Grid Dynamics case format specification Adam Birchfield, Texas A&M University, 2/28/2025 Version 0.1 -### Overview +## Overview -This document describes the data format for grid dynamics cases which -will be used in the SCIDAC-OE project "Next-Generation Grid Simulations" -and can also be used to inform future formats and software efforts. +This document describes a data format for grid dynamics cases intended to +be used in the SciDAC-OE project "Next-Generation Grid Simulations". The +format is designed first for implementation as UTF-8 encoded JSON but may +also be encoded as [MessagePack](https://msgpack.org). -#### Overall goals of the format +### Goals - Simplicity both of user understanding and of software implementation. @@ -24,156 +25,127 @@ and can also be used to inform future formats and software efforts. - Extensible to be able to add many different kinds of nodes and device classes. -- Non-repetitive to keep file size concise and enhance human - readibility. For example, if we have 300 GENROU devices, we do not - need to say "Tdopp" for every one of them. Just putting "GENROU" for - each lets us know what the parameters mean and their order. +- Self-describing, by explicitly labeling parameters. - Backward compatibility. Newer software should always be able to read older files. When possible, also have forward compatibility where older software can read newer files as long as they do not contain newly added or modified devices. -#### Overview of the input format - -- Using JSON in UTF-8 as the base format style - -- Root is an object with three main sections as key-value pair items: - - - "header" section is itself an object with various system-wide - information about the case as key-value pairs: name, date, base - frequency, etc. - - - "nodes" section is an array of nodes: primarily electrical buses - and control signals - - - "devices" section is an array of system devices, including - generators, loads, branches, controllers, and events +## Format + +The root element in the format is an object with three keys: `header`, +`buses`, and `devices`. `header` contains information about the case, +`buses` is an array of buses (which can include electrical buses of +different types as well as signal buses), and `devices` is an array +of system devices. + +### Header + +Contained in the `header` key is an object with the following items: + + Name | Value + --------------------|------------------------------------------------------- + `format_version` | Non-negative integer indicating the format version + `format_revision` | Non-negative integer indicating the format revision + `case_name` | A string containing the name of the case + `case_date_time` | Optional string in the ISO 8601 format indicating a datetime associated with the case. Including a time is optional, but if one is specified, it is recommended that a UTC offset be included. + `case_description` | A string with more specific description of what is modeled in the case + `case_comments` | A string with additional notes as needed + `freq_base` | A floating point value indicating the system frequency base in hertz (Hz). This is commonly 60 Hz + `va_base` | A floating point value indicating the system power base in volt-amperes (VA). This is commonly 100e6 VA + +### Buses + +Contained in the `buses` key is an array of objects, each of which represent +a bus and has the following fields: + + Name | Description + -------------------|------------------------------------------------------ + `number` | Unique positive (> 0) integer identifying the node + `class` | A string indicating the class of node. See the table below for more information + `name` | Optional string containing the name of the node. This may be empty or non-unique + `init` | Optional object mapping string variable names to floating point values, specifying default voltages or signal values. The available initialization variables are dependent upon the node class. Any variables missing will be given default values, which are specified beneath the table below. If this object is missing, all variables will be given default values. See the table below for more information + `v_base` | Optional floating point value giving the voltage base in volts (V). If omitted, default value of 1 V is assumed (common for signal buses) + `mon` | Optional field, which is an array specifying variables to monitor the value of in an output channel. Available variables include all the initialization variables, along with others as determined by the node class. See the table below for more information + `freq_base` | Optional field to override the system frequency base at this bus + `va_base` | Optional field to override the system power base at this bus + `extension` | Optional field containing an object with implementation-defined keys + +#### Bus classes + +As of the current version and revision, the following bus classes are +specified: + + Bus class | Description | Initialization variables | Other variables available to monitor + -------------------|------------------------------------------------------------|------------------------- | ------------------------- + `bus` | Positive-sequence, AC phasor domain bus | `Vr`, `Vi` | `Vm`, `Va` + `infinite_bus` | Positive-sequence, AC phasor domain bus with fixed voltage | `Vr`, `Vi` | `Vm`, `Va` + `emt_bus` | 3-phase bus with instantaneous voltages | `Va`, `Vb`, `Vc` | + `infinite_emt_bus` | 3-phase bus with instantaneous voltages | `Va`, `Vb`, `Vc` | + `control` | A single control signal | `x` | + +For fields named `Vr` or `Va`, the default value is `1.0`, otherwise it is +`0.0`. This list is subject to change. + +### Devices + +Contained in the `devices` section is an array of objects, each of which +represent a device and has the following fields: + + Name | Description + ------------------|------------------------------------------------------ + `class` | A string indicating the class of device. See the table below for more information + `ports` | An object mapping the object's port names (depending on the device class as specified in the table below) to the associated bus number to which it is connected. Any field listed under variables available to monitor can also be added here as a read-only port + `id` | A string disambiguating the device from others. Each device in a class must have a unique combination of required port bus numbers and this string. This string should be 1 or 2 characters long. + `params` | An object mapping initialization parameters to numerical values, depending on the class. See the table below for more information + `mon` | Optional field, which is an array specifying variables to record the value of in an output channel. Available variables are determined by the device class, as specified in the table below + `va_base` | Optional field to override the system power base for this device + `freq_base` | Optional field to override the system frequency base for this device + `extension` | Optional field containing an object with implementation-defined keys + +#### Device classes + +As of the current version and revision, the following device classes +are specified: + + Device class | Description | Ports | Initialization parameters | Variables available to monitor + --------------|------------------------------------------------------|-----------------------------------------------|---------------------------- | ------------------------- + `branch` | a basic algebraic pi model for a line or transformer | `bus1`, `bus2` | `R`, `X`, `G`, `B` | `ir1`, `ii1`, `im1`, `p1`, `q1`, `ir2`, `ii2`, `im2`, `p2`, `q2` + `static_load` | a basic static ZIP load | `bus` | `Pz`, `Qz`, `Pi`, `Qi`, `Pp`, `Qp` | `ir`, `ii`, `p`, `q` + `GENROU` | 6th order machine model | `bus`, `exciter_signal`\*, `governor_signal`\* | `p0`, `q0`, `H`, `D`, `Ra`, `Tdop`, `Tdopp`, `Tqopp`, `Tqop`, `Xd`, `Xdp`, `Xdpp`, `Xq`, `Xqp`, `Xqpp`, `Xl`, `S10`, `S12` | `ir`, `ii`, `p`, `q`, `delta`, `omega` + `bus_fault` | simple impedance-based fault at a bus | `bus`, `control_signal`\* | `state0`, `R`, `X` | `state`, `ir`, `ii` + +Ports marked with \* are optional and, if missing, will be assumed to be +connected to a constant value. This list is subject to change. + +## Example File for a 2-Bus System ```json { - "header":{... }, - "nodes":[... ], - "devices":[... ] + "header": { + "format_version": 0, + "format_revision": 1, + "case_name": "Two-bus test case 1", + "case_description": "A two-bus test case for demonstrating the dynamics format", + "comments": "This case is set up to monitor the voltage at both buses and the machine angle and speed", + "freq_base": 60, + "va_base": 100e6 + }, + "buses": [ + { "number": 1, "class": "bus", "name": "Bus 1", "init": {"Vr":0.994988, "Vi":0.099997}, "vbase": 115e3, "mon": ["Vr", "Vi"] }, + { "number": 2, "class": "infinite_bus", "name": "Bus 2", "init": {"Vr":1.0, "Vi":0}, "vbase": 115e3 } + ], + "devices": [ + { "class": "branch", "ports": {"bus1":1, "bus2":2}, "id": "1", "params": {"R":0, "X":0.1, "G":0, "B":0} }, + { "class": "GENROU", "ports": {"bus":1}, "id": "1", "params": {"p0":1, "q0":0.05013, "H":3, "D":0, "Ra":0, "Tdop":7, "Tdopp":0.04, "Tqopp":0.05, + "Tqop":0.75, "Xd":2.1, "Xdp":0.2, "Xdpp":0.18, "Xq":0.5, "Xqpp":0.18, "Xl":0.15, "S10":0, "S12":0}, "mon": ["delta", "omega"] } + { "class": "bus_fault", "ports": {"bus":1}, "id": "1", "params": {"state0":0, "R":0, "X":1e-3} } + ] } ``` - -### Header Section - -```json -"header": { "key": value, ...} -``` - -The header section is an object, with the following standardized items, -allowing for extensibility as well. - - Name | Value - -------------------|--------------------------------------------------------- - format_version | Integer of main format version (0 for this version 0.1) - format_revision | Integer of format revision (1 for this version 0.1) - case_name | Short string for the case name - case_date | String in a standard date/time format - case_description | Longer string giving a more specific description of what is modeled in the case - comments | Even longer string with notes as needed - freq_base | System frequency base, floating point in Hz (commonly 60) - va_base | System power base, floating point in VA (commonly 100e6) - -### Nodes Section - -```json -"nodes": [[..., ], [..., ], [..., ]] -``` - -The nodes section is an array of arrays. Each array represents one node, -and has exactly 6 items as follows. - - Index | Node item - ------|--------------------------------------------------------- - 0 | Number, a unique integer \> 0 to identify the node - 1 | Node class, string, for what type of node it is. See table below for supported classes - 2 | String name of the node, not necessarily unique. If desired, for simplicity it can be an empty string. Nodes are identified by number, not name, but this can be a helpful label for debugging. - 3 | Array of default voltages or signal values. Length of array and meaning depends on node class (see table below). - 4 | Voltage base for per-unit, floating point value in V. Set to 1 to indicated that voltages or signals given are already in actual units. - 5 | Extra, object with key-value pairs for any extra information to provide with the node. This can be an empty object. If you want to specify a non-default frequency or power base, do it here with `"freq_base"` or `"va_base"`. If you add the item `"monitor":[]`, the voltage or signal values specified in the array for this node will be added to an output channel. Other uses of this section would be coordinates for one-line diagram drawing, membership in components or areas, etc. - - -### Table of Supported Node Classes - -For now the following node classes are specified (though not all -implemented yet) - - Node Class | Description | Variables - -------------|---------------------------------------------|-------------- - bus | positive-sequence, AC phasor domain bus | [Vr, Vi] - infinite_bus | positive-sequence, AC phasor domain bus with fixed voltage | [Vr, Vi] - emt_bus | 3-phase bus with instantaneous voltages | [Va, Vb, Vc] - infinite_emt_bus | 3-phase bus with instantaneous voltages | [Va, Vb, Vc] - control | single control signal | [x] - - -### Devices Section - -```json -"devices": [[..., ], [..., ], [..., ]] -``` - -The devices section is also an array of arrays. Each array represents -one device, and has exactly 5 items as follows. - - Index | Node item - ------|---------------------------------------------------------------- - 0 | Device class, a string identifier for what type of device this is. See table below for currently supported devices. A goal is to continually increase the number of supported devices. - 1 | Node numbers, an array of nodes connected with this device. The length of this array is fixed depending on the device class, but some nodes may be 0 if that functionality is not used. For example, GENROU class devices must have 3 nodes: bus, exciter signal, and governor signal. But the bus is the only one which must be connected to an actual node. - 2 | String ID disambiguator. Each device must have a unique combination of node numbers plus this string. It is recommended for most devices for this to only be 1-2 characters to facilitate converting to industry formats. - 3 | Array of initialization parameters. The length and meaning of these values is fixed and specified by the device class (see table below). - 4 | Extra, object with key-value pairs for any extra information to provide with the device. This can be an empty object {}. If you want to specify a non-default frequency or power base for this device, do it here with `"freq_base"` or `"va_base"`. If you add the item `"monitor":[]`, the variable values specified in the array will be recorded to an output channel. - - -### Table of Supported Device Classes - -For now the following device classes are supported, with more to be -added in future versions. Note that the format version number and -revision number are extremely important, as the device list and the -exact lists of nodes and parameters may change with updates in different -versions. - - - Class Name | Description | Nodes | Initialization Parameters - --------------|--------------| -----------------------|----------------------- - branch | a basic algebraic pi model for a line or transformer | 2: Bus1, Bus2 | 4: R, X, G, B - static_load | a basic static ZIP load | 1: Bus | 6: Pz, Qz, Pi, Qi, Pp, Qp - GENROU | 6th order machine model | 3: Bus, exciter_signal, governor_signal | 18: p0, q0, H, D, Ra, Tdop, Tdopp, Tqopp, Tqop, Xd, Xdp, Xdpp, Xq, Xqp, Xqpp, Xl, S10, S12 - bus_fault | simple impedance-based fault at a bus | 2: Bus, control signal | 3: state0, R, X - - -### Example File for 2-Bus System - -```json -{"header": { -"format_version": 0, "format_revision": 1, "case_name": "two-bus test case 1", "case_data": "2/28/2025", -"case_description": "A two-bus test case for demonstrating the dynamics format.", -"comments":"The case is set up to monitor the voltage at both buses and the machine angle and speed", -"freq_base":60, "va_base": 100e6 -}, - -"nodes": [ - -[1, "bus", "Bus 1", [0.994988, 0.099997], 115e3, {"monitor": [ "Vr", "Vi"]}], -[2, "infinite_bus", "Bus 2", [1.0, 0], 115e3, {}] - -], - -"devices": [ - -["branch", [1, 2], "1", [0, 0.1, 0, 0], {}], -["GENROU", [1, 0, 0], "1", [1, 0.05013, 3, 0, 0, 7, 0.04, 0.05, 0.75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0, 0], {"monitor": ["delta", "omega"]}], -["bus_fault": [1], "1", [0, 0, 1e-3], {}] - -] } -``` - -### Appendix: Output File Format +## Appendix: Output file format There could be multiple output file formats, but the simplest output file format is a comma-separated text file table. The first row is a diff --git a/src/Model/PhasorDynamics/Load/CMakeLists.txt b/src/Model/PhasorDynamics/Load/CMakeLists.txt index 0f1659a71..909d04dcc 100644 --- a/src/Model/PhasorDynamics/Load/CMakeLists.txt +++ b/src/Model/PhasorDynamics/Load/CMakeLists.txt @@ -1,12 +1,29 @@ - + # [[ # Author(s): # - Cameron Rutherford # ]] -gridkit_add_library(phasor_dynamics_load + +if(GRIDKIT_ENABLE_ENZYME) + gridkit_add_library(phasor_dynamics_load + SOURCES + LoadEnzyme.cpp + LINK_LIBRARIES + ClangEnzymeFlags + OUTPUT_NAME + gridkit_phasor_dynamics_load) +else() + gridkit_add_library(phasor_dynamics_load + SOURCES + Load.cpp + OUTPUT_NAME + gridkit_phasor_dynamics_load) +endif() + +gridkit_add_library(phasor_dynamics_load_dependency_tracking SOURCES - Load.cpp + LoadDependencyTracking.cpp OUTPUT_NAME - gridkit_phasor_dynamics_load) + gridkit_phasor_dynamics_load_dependency_tracking) diff --git a/src/Model/PhasorDynamics/Load/Load.cpp b/src/Model/PhasorDynamics/Load/Load.cpp index b97b75716..8f130cbae 100644 --- a/src/Model/PhasorDynamics/Load/Load.cpp +++ b/src/Model/PhasorDynamics/Load/Load.cpp @@ -1,106 +1,12 @@ -#include "Load.hpp" - -#include -#include - -#include -#include +#include "LoadImpl.hpp" namespace GridKit { namespace PhasorDynamics { - /*! - * @brief Constructor for a pi-model load - * - * Arguments passed to ModelEvaluatorImpl: - * - Number of equations = 0 - * - Number of independent variables = 0 - * - Number of quadratures = 0 - * - Number of optimization parameters = 0 - */ - - template - Load::Load(bus_type* bus) - : bus_(bus) - { - size_ = 0; - } - - template - Load::Load(bus_type* bus, - real_type R, - real_type X) - : bus_(bus), - R_(R), - X_(X) - - { - } - - template - Load::Load(bus_type* bus, IdxT component_id) - : bus_(bus) - - { - size_ = 0; - component_id_ = component_id; - } - - template - Load::~Load() - { - // std::cout << "Destroy Load..." << std::endl; - } - - /*! - * @brief allocate method computes sparsity pattern of the Jacobian. - */ - template - int Load::allocate() - { - // std::cout << "Allocate Load..." << std::endl; - return 0; - } - - /** - * Initialization of the load model - * - */ - template - int Load::initialize() - { - return 0; - } - /** - * \brief Identify differential variables. - */ - template - int Load::tagDifferentiable() - { - return 0; - } - - /** - * \brief Residual contribution of the load is pushed to the bus. - * - */ - template - int Load::evaluateResidual() - { - real_type b = -X_ / (R_ * R_ + X_ * X_); - real_type g = R_ / (R_ * R_ + X_ * X_); - - Ir() += -g * Vr() + b * Vi(); - Ii() += -b * Vr() - g * Vi(); - - return 0; - } - - /** - * @brief Jacobian evaluation not implemented yet + * @brief Jacobian evaluation not implemented * * @tparam ScalarT - scalar data type * @tparam IdxT - matrix index data type @@ -110,63 +16,8 @@ namespace GridKit int Load::evaluateJacobian() { std::cout << "Evaluate Jacobian for Load..." << std::endl; - std::cout << "Jacobian evaluation not implemented!" << std::endl; - return 0; - } - - /** - * @brief Integrand (objective) evaluation not implemented yet - * - * @tparam ScalarT - scalar data type - * @tparam IdxT - matrix index data type - * @return int - error code, 0 = success - */ - template - int Load::evaluateIntegrand() - { - // std::cout << "Evaluate Integrand for Load..." << std::endl; - return 0; - } - - /** - * @brief Adjoint initialization not implemented yet - * - * @tparam ScalarT - scalar data type - * @tparam IdxT - matrix index data type - * @return int - error code, 0 = success - */ - template - int Load::initializeAdjoint() - { - // std::cout << "Initialize adjoint for Load..." << std::endl; - return 0; - } - - /** - * @brief Adjoint residual evaluation not implemented yet - * - * @tparam ScalarT - scalar data type - * @tparam IdxT - matrix index data type - * @return int - error code, 0 = success - */ - template - int Load::evaluateAdjointResidual() - { - // std::cout << "Evaluate adjoint residual for Load..." << std::endl; - return 0; - } + std::cout << "Jacobian evaluation is not implemented!" << std::endl; - /** - * @brief Adjoint integrand (objective) evaluation not implemented yet - * - * @tparam ScalarT - scalar data type - * @tparam IdxT - matrix index data type - * @return int - error code, 0 = success - */ - template - int Load::evaluateAdjointIntegrand() - { - // std::cout << "Evaluate adjoint Integrand for Load..." << std::endl; return 0; } diff --git a/src/Model/PhasorDynamics/Load/Load.hpp b/src/Model/PhasorDynamics/Load/Load.hpp index d85355093..928898c9a 100644 --- a/src/Model/PhasorDynamics/Load/Load.hpp +++ b/src/Model/PhasorDynamics/Load/Load.hpp @@ -11,7 +11,10 @@ namespace GridKit { template class BusBase; - } + + template + struct LoadData; + } // namespace PhasorDynamics } // namespace GridKit namespace GridKit @@ -33,21 +36,18 @@ namespace GridKit using Component::yp_; using Component::tag_; using Component::f_; - using Component::g_; - using Component::yB_; - using Component::ypB_; - using Component::fB_; - using Component::gB_; - using Component::param_; + using Component::J_; using Component::component_id_; - using bus_type = BusBase; - using real_type = typename Component::real_type; + using real_type = typename Component::real_type; + using bus_type = BusBase; + using model_data_type = LoadData; public: Load(bus_type* bus); Load(bus_type* bus, real_type R, real_type X); Load(bus_type* bus, IdxT component_id); + Load(bus_type* bus, const model_data_type& data); virtual ~Load(); virtual int allocate() override; @@ -99,6 +99,9 @@ namespace GridKit return bus_->Ii(); } + public: + int evaluateResidualLocally(ScalarT*, ScalarT*); + private: bus_type* bus_{nullptr}; real_type R_{0.1}; diff --git a/src/Model/PhasorDynamics/Load/LoadData.hpp b/src/Model/PhasorDynamics/Load/LoadData.hpp new file mode 100644 index 000000000..35de190d2 --- /dev/null +++ b/src/Model/PhasorDynamics/Load/LoadData.hpp @@ -0,0 +1,32 @@ +/** + * @file LoadData.hpp + * @author Slaven Peles (peless@ornl.gov) + * @brief Modeling data for loads + * + */ +#pragma once + +namespace GridKit +{ + namespace PhasorDynamics + { + /** + * @brief Contains modeling data for a Load + * + * @tparam RealT Real parameter data type + * @tparam IdxT Integer parameter data type + * + * Integer parameters are of the same type as matrix and vector indices. + * + * @todo Decide on naming scheme for model parameters. + */ + template + struct LoadData + { + RealT R{0.0}; ///< load resistance + RealT X{0.0}; ///< load reactance + + IdxT bus_id{0}; ///< Unique ID of bus to which the load is connnected. + }; + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/Load/LoadDependencyTracking.cpp b/src/Model/PhasorDynamics/Load/LoadDependencyTracking.cpp new file mode 100644 index 000000000..8219abcad --- /dev/null +++ b/src/Model/PhasorDynamics/Load/LoadDependencyTracking.cpp @@ -0,0 +1,29 @@ + +#include "LoadImpl.hpp" + +namespace GridKit +{ + namespace PhasorDynamics + { + /** + * @brief Jacobian evaluation not implemented + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int Load::evaluateJacobian() + { + std::cout << "Evaluate Jacobian for Load..." << std::endl; + std::cout << "Jacobian evaluation is not implemented!" << std::endl; + + return 0; + } + + // Available template instantiations + template class Load; + template class Load; + + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/Load/LoadEnzyme.cpp b/src/Model/PhasorDynamics/Load/LoadEnzyme.cpp new file mode 100644 index 000000000..1410290f0 --- /dev/null +++ b/src/Model/PhasorDynamics/Load/LoadEnzyme.cpp @@ -0,0 +1,39 @@ + +#include "LoadImpl.hpp" +#include + +namespace GridKit +{ + namespace PhasorDynamics + { + /** + * @brief Jacobian evaluation experimental + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int Load::evaluateJacobian() + { + std::cout << "Evaluate Jacobian for Load..." << std::endl; + std::cout << "Jacobian evaluation is experimental!" << std::endl; + + std::vector y(2); + std::vector f(2); + y[0] = Vr(); + y[1] = Vi(); + /// Setting J_ via Enzyme works, though J_ had not been initialized within the model. + /// This is because the COO_Matrix class is very permissive. + /// Having the currents as model variables and allocating J_ accordingly will be helpful. + GridKit::Enzyme::EnzymeSparseModelJacobian, ScalarT, IdxT>(this, f.size(), y.data(), J_); + + return 0; + } + + // Available template instantiations + template class Load; + template class Load; + + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/Load/LoadImpl.hpp b/src/Model/PhasorDynamics/Load/LoadImpl.hpp new file mode 100644 index 000000000..59e46668e --- /dev/null +++ b/src/Model/PhasorDynamics/Load/LoadImpl.hpp @@ -0,0 +1,183 @@ + +#include +#include + +#include "Load.hpp" +#include +#include + +namespace GridKit +{ + namespace PhasorDynamics + { + /*! + * @brief Constructor for a pi-model load + * + * Arguments passed to ModelEvaluatorImpl: + * - Number of equations = 0 + * - Number of independent variables = 0 + * - Number of quadratures = 0 + * - Number of optimization parameters = 0 + */ + + template + Load::Load(bus_type* bus) + : bus_(bus) + { + size_ = 0; + } + + template + Load::Load(bus_type* bus, + real_type R, + real_type X) + : bus_(bus), + R_(R), + X_(X) + { + } + + template + Load::Load(bus_type* bus, + const model_data_type& data) + : bus_(bus), + R_(data.R), + X_(data.X) + { + } + + template + Load::Load(bus_type* bus, IdxT component_id) + : bus_(bus) + { + size_ = 0; + component_id_ = component_id; + } + + template + Load::~Load() + { + // std::cout << "Destroy Load..." << std::endl; + } + + /*! + * @brief allocate method computes sparsity pattern of the Jacobian. + */ + template + int Load::allocate() + { + // std::cout << "Allocate Load..." << std::endl; + return 0; + } + + /** + * Initialization of the load model + * + */ + template + int Load::initialize() + { + return 0; + } + + /** + * \brief Identify differential variables. + */ + template + int Load::tagDifferentiable() + { + return 0; + } + + /** + * @brief Residual contribution computed locally + * + */ + template + int Load::evaluateResidualLocally(ScalarT* y, ScalarT* f) + { + real_type b = -X_ / (R_ * R_ + X_ * X_); + real_type g = R_ / (R_ * R_ + X_ * X_); + + f[0] = -g * y[0] + b * y[1]; + f[1] = -b * y[0] - g * y[1]; + + return 0; + } + + /** + * @brief Residual contribution of the load is pushed to the bus. + * + */ + template + int Load::evaluateResidual() + { + std::vector y(2); + std::vector f(2); + y[0] = Vr(); + y[1] = Vi(); + evaluateResidualLocally(y.data(), f.data()); + Ir() += f[0]; + Ii() += f[1]; + + return 0; + } + + /** + * @brief Integrand (objective) evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int Load::evaluateIntegrand() + { + // std::cout << "Evaluate Integrand for Load..." << std::endl; + return 0; + } + + /** + * @brief Adjoint initialization not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int Load::initializeAdjoint() + { + // std::cout << "Initialize adjoint for Load..." << std::endl; + return 0; + } + + /** + * @brief Adjoint residual evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int Load::evaluateAdjointResidual() + { + // std::cout << "Evaluate adjoint residual for Load..." << std::endl; + return 0; + } + + /** + * @brief Adjoint integrand (objective) evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int Load::evaluateAdjointIntegrand() + { + // std::cout << "Evaluate adjoint Integrand for Load..." << std::endl; + return 0; + } + + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/Load/README.md b/src/Model/PhasorDynamics/Load/README.md index 065dd024d..5d90cb310 100644 --- a/src/Model/PhasorDynamics/Load/README.md +++ b/src/Model/PhasorDynamics/Load/README.md @@ -2,27 +2,62 @@ Load modeling is one of the more complex aspects of power system dynamics. The simplest model, which is used for this challenge problem, is to model -the load as a complex shunt impedance with the impedance given by: +the load as a complex shunt impedance $$ R + jX $$. + + +## Model Parameters + +Symbol | Units | Description | Note +------------|---------|---------------------------------| ------ +$R$ | [p.u.] | Load resistance | +$X$ | [p.u.] | Load reactance | + + +### Model Derived Parameters ``` math -Z = R + jX -``` -where $`R`$ is the load resistance, $`X`$ is the load reactance. The current -drawn by the load is then obtained as -```math -I_{\mathrm{load}} = \frac{V_{\mathrm{bus}}}{Z}, +\begin{aligned} + G &=\dfrac{R}{R^2 + X^2} \\ + B &= -\dfrac{X}{R^2 + X^2}\\ +\end{aligned} ``` -where $`V_{bus}`$ is the voltage on the bus to which the load is connected. -After some algebra, one obtains expressions for real and imaginary components -for the currents entering the bus: -```math -I_{r} = -g V_{r} + b V_{i} -``` -```math -I_{i} = - b V_{r} - g V_{i} -``` -where -```math -g = \frac{R}{R^2+X^2} ~~~\mathrm{and}~~~ b = \frac{-X}{R^2+X^2}. +## Model Variables + +### Internal Variables + +#### Differential +None. + +#### Algebraic + +Symbol | Units | Description | Note +------------|---------|---------------------------------| ------ +$I_r$ | [p.u.] | Terminal current, real component | Read by bus +$I_i$ | [p.u.] | Terminal current, imaginary component | Read by bus + + +### External Variables + +#### Differential +None. + +#### Algebraic +Symbol | Units | Description | Note +------------|---------|---------------------------------| ------ +$V_r$ | [p.u.] | Terminal voltage, real component | owned by bus object +$V_i$ | [p.u.] | Terminal voltage, imaginary component | owned by bus object + + +## Model Equations + +### Differential Equations +None. + +### Algebraic Equations +``` math +\begin{aligned} +0 &= I_{r} +G V_{r} - B V_{i} \\ +0 &= I_{i} +B V_{r} + G V_{i} +\end{aligned} ``` diff --git a/src/Model/PhasorDynamics/MachineBase.hpp b/src/Model/PhasorDynamics/MachineBase.hpp new file mode 100644 index 000000000..d1a9c36fc --- /dev/null +++ b/src/Model/PhasorDynamics/MachineBase.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include + +namespace GridKit +{ + namespace PhasorDynamics + { + /*! + * @brief MachineBase model implementation base class. + * + */ + template + class MachineBase + { + public: + virtual ScalarT speed() = 0; + virtual ScalarT get_torque() = 0; + }; + + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/SynchronousMachine/CMakeLists.txt b/src/Model/PhasorDynamics/SynchronousMachine/CMakeLists.txt index 212813aae..96c3b2f94 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/CMakeLists.txt +++ b/src/Model/PhasorDynamics/SynchronousMachine/CMakeLists.txt @@ -6,3 +6,4 @@ # ]] add_subdirectory(GENROUwS) +add_subdirectory(GenClassical) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 1edd2dee9..044558f3d 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -1,413 +1,453 @@ -/** - * @file Genrou.cpp - * @author Adam Birchfield (abirchfield@tamu.edu) - * @author Slaven Peles (peless@ornl.gov) - * @brief Definition of a GENROU generator model. - * - * - */ - -#define _USE_MATH_DEFINES -#include "Genrou.hpp" - -#include -#include - -#include - -#define _USE_MATH_DEFINES - -namespace GridKit -{ - namespace PhasorDynamics - { - /*! - * @brief Constructor for a pi-model branch - * - * Arguments passed to ModelEvaluatorImpl: - * - Number of equations = 0 - * - Number of independent variables = 0 - * - Number of quadratures = 0 - * - Number of optimization parameters = 0 - */ - template - Genrou::Genrou(bus_type* bus, int unit_id) - : bus_(bus), - busID_(0), - unit_id_(unit_id), - p0_(0.), - q0_(0.), - H_(3.), - D_(0.), - Ra_(0.), - Tdop_(7.), - Tdopp_(.04), - Tqopp_(.05), - Tqop_(.75), - Xd_(2.1), - Xdp_(0.2), - Xdpp_(0.18), - Xq_(.5), - Xqp_(.5), - Xqpp_(.18), - Xl_(.15), - S10_(0.), - S12_(0.) - { - size_ = 21; - setDerivedParams(); - - // Temporary, to eliminate compiler warnings - (void) busID_; - (void) unit_id_; - } - - /*! - * @brief Constructor for a pi-model branch - * - * Arguments passed to ModelEvaluatorImpl: - * - Number of equations = 0 - * - Number of independent variables = 0 - * - Number of quadratures = 0 - * - Number of optimization parameters = 0 - */ - template - Genrou::Genrou(bus_type* bus, - int unit_id, - ScalarT p0, - ScalarT q0, - real_type H, - real_type D, - real_type Ra, - real_type Tdop, - real_type Tdopp, - real_type Tqopp, - real_type Tqop, - real_type Xd, - real_type Xdp, - real_type Xdpp, - real_type Xq, - real_type Xqp, - real_type Xqpp, - real_type Xl, - real_type S10, - real_type S12) - : bus_(bus), - busID_(0), - unit_id_(unit_id), - p0_(p0), - q0_(q0), - H_(H), - D_(D), - Ra_(Ra), - Tdop_(Tdop), - Tdopp_(Tdopp), - Tqopp_(Tqopp), - Tqop_(Tqop), - Xd_(Xd), - Xdp_(Xdp), - Xdpp_(Xdpp), - Xq_(Xq), - Xqp_(Xqp), - Xqpp_(Xqpp), - Xl_(Xl), - S10_(S10), - S12_(S12) - { - size_ = 21; - setDerivedParams(); - } - - // /** - // * @brief Destroy the Genrou - // * - // * @tparam ScalarT - // * @tparam IdxT - // */ - // template - // Genrou::~Genrou() - // { - // // std::cout << "Destroy Genrou..." << std::endl; - // } - - /*! - * @brief allocate method computes sparsity pattern of the Jacobian. - */ - template - int Genrou::allocate() - { - f_.resize(size_); - y_.resize(size_); - yp_.resize(size_); - tag_.resize(size_); - fB_.resize(size_); - yB_.resize(size_); - ypB_.resize(size_); - return 0; - } - - /** - * Initialization of the branch model - * - */ - template - int Genrou::initialize() - { - /* Initialization tricks -- assuming NO saturation */ - ScalarT vr = Vr(); - ScalarT vi = Vi(); - ScalarT p = p0_; - ScalarT q = q0_; - ScalarT vm2 = vr * vr + vi * vi; - ScalarT Er = vr + (Ra_ * p * vr + Ra_ * q * vi - Xq_ * p * vi + Xq_ * q * vr) / vm2; - ScalarT Ei = vi + (Ra_ * p * vi - Ra_ * q * vr + Xq_ * p * vr + Xq_ * q * vi) / vm2; - ScalarT delta = atan2(Ei, Er); - ScalarT omega = 0; - ScalarT ir = (p * vr + q * vi) / vm2; - ScalarT ii = (p * vi - q * vr) / vm2; - ScalarT id = ir * sin(delta) - ii * cos(delta); - ScalarT iq = ir * cos(delta) + ii * sin(delta); - ScalarT vd = vr * sin(delta) - vi * cos(delta) + id * Ra_ - iq * Xqpp_; - ScalarT vq = vr * cos(delta) + vi * sin(delta) + id * Xqpp_ - iq * Ra_; - ScalarT psiqpp = -vd / (1 + omega); - ScalarT psidpp = vq / (1 + omega); - ScalarT Te = (psidpp - id * Xdpp_) * iq - (psiqpp - iq * Xdpp_) * id; - ScalarT psiqp = -(-(Xqp_ - Xl_) * iq + psiqpp * (Xqp_ - Xl_) / (Xqpp_ - Xl_)) - / (1 + (Xqp_ - Xqpp_) / (Xqpp_ - Xl_)); - ScalarT Edp = psiqp - (Xqp_ - Xl_) * iq; - ScalarT psidp = -((Xdp_ - Xl_) * id - psidpp * (Xdp_ - Xl_) / (Xdpp_ - Xl_)) - / (1 + (Xdp_ - Xdpp_) / (Xdpp_ - Xl_)); - ScalarT Eqp = psidp + (Xdp_ - Xl_) * id; - - /* Now we have the state variables, solve for alg. variables */ - ScalarT ksat; - ScalarT psipp; - - y_[0] = delta; //= 0.55399038; - y_[1] = omega; // = 0; - y_[2] = Eqp; // = 0.995472581; - y_[3] = psidp; // = 0.971299567; - y_[4] = psiqp; // = 0.306880069; - y_[5] = Edp; // = 0; - - y_[6] = psiqpp = -psiqp * Xq4_ - Edp * Xq5_; - y_[7] = psidpp = psidp * Xd4_ + Eqp * Xd5_; - y_[8] = psipp = sqrt(psiqpp * psiqpp + psidpp * psidpp); - y_[9] = ksat = SB_ * pow(psipp - SA_, 2); - y_[10] = vd = -psiqpp * (1 + omega); - y_[11] = vq = psidpp * (1 + omega); - y_[12] = Te = (psidpp - id * Xdpp_) * iq - (psiqpp - iq * Xdpp_) * id; - y_[13] = id; - y_[14] = iq; - y_[15] = ir; - y_[16] = ii; - y_[17] = pmech_set_ = Te; - y_[18] = efd_set_ = Eqp + Xd1_ * (id + Xd3_ * (Eqp - psidp - Xd2_ * id)) + psidpp * ksat; - y_[19] = G_ * (vd * sin(delta) + vq * cos(delta)) - - B_ * (vd * -cos(delta) + vq * sin(delta)); /* inort, real */ - y_[20] = B_ * (vd * sin(delta) + vq * cos(delta)) - + G_ * (vd * -cos(delta) + vq * sin(delta)); /* inort, imag */ - - for (IdxT i = 0; i < size_; ++i) - yp_[i] = 0.0; - - return 0; - } - - /** - * \brief Identify differential variables. - */ - template - int Genrou::tagDifferentiable() - { - for (IdxT i = 0; i < size_; ++i) - { - tag_[i] = i < 6; - } - return 0; - } - - /** - * \brief Residual contribution of the branch is pushed to the - * two terminal buses. - * - */ - template - int Genrou::evaluateResidual() - { - /* Read variables */ - ScalarT delta = y_[0]; - ScalarT omega = y_[1]; - ScalarT Eqp = y_[2]; - ScalarT psidp = y_[3]; - ScalarT psiqp = y_[4]; - ScalarT Edp = y_[5]; - ScalarT psiqpp = y_[6]; - ScalarT psidpp = y_[7]; - ScalarT psipp = y_[8]; - ScalarT ksat = y_[9]; - ScalarT vd = y_[10]; - ScalarT vq = y_[11]; - ScalarT telec = y_[12]; - ScalarT id = y_[13]; - ScalarT iq = y_[14]; - ScalarT ir = y_[15]; - ScalarT ii = y_[16]; - ScalarT pmech = y_[17]; - ScalarT efd = y_[18]; - ScalarT inr = y_[19]; - ScalarT ini = y_[20]; - ScalarT vr = Vr(); - ScalarT vi = Vi(); - - /* Read derivatives */ - ScalarT delta_dot = yp_[0]; - ScalarT omega_dot = yp_[1]; - ScalarT Eqp_dot = yp_[2]; - ScalarT psidp_dot = yp_[3]; - ScalarT psiqp_dot = yp_[4]; - ScalarT Edp_dot = yp_[5]; - - /* 6 Genrou differential equations */ - f_[0] = delta_dot - omega * (2 * M_PI * 60); - f_[1] = omega_dot - (1 / (2 * H_)) * ((pmech - D_ * omega) / (1 + omega) - telec); - f_[2] = Eqp_dot - (1 / Tdop_) * (efd - (Eqp + Xd1_ * (id + Xd3_ * (Eqp - psidp - Xd2_ * id)) + psidpp * ksat)); - f_[3] = psidp_dot - (1 / Tdopp_) * (Eqp - psidp - Xd2_ * id); - f_[4] = psiqp_dot - (1 / Tqopp_) * (Edp - psiqp + Xq2_ * iq); - f_[5] = Edp_dot - (1 / Tqop_) * (-Edp + Xqd_ * psiqpp * ksat + Xq1_ * (iq - Xq3_ * (Edp + iq * Xq2_ - psiqp))); - - /* 11 Genrou algebraic equations */ - f_[6] = psiqpp - (-psiqp * Xq4_ - Edp * Xq5_); - f_[7] = psidpp - (psidp * Xd4_ + Eqp * Xd5_); - f_[8] = psipp - sqrt(pow(psidpp, 2.0) + pow(psiqpp, 2.0)); - f_[9] = ksat - SB_ * pow(psipp - SA_, 2.0); - f_[10] = vd + psiqpp * (1 + omega); - f_[11] = vq - psidpp * (1 + omega); - f_[12] = telec - ((psidpp - id * Xdpp_) * iq - (psiqpp - iq * Xdpp_) * id); - f_[13] = id - (ir * sin(delta) - ii * cos(delta)); - f_[14] = iq - (ir * cos(delta) + ii * sin(delta)); - f_[15] = ir + G_ * vr - B_ * vi - inr; - f_[16] = ii + B_ * vr + G_ * vi - ini; - - /* 2 Genrou control inputs are set to constant for this example */ - f_[17] = pmech - pmech_set_; - f_[18] = efd - efd_set_; - - /* 2 Genrou current source definitions */ - f_[19] = inr - (G_ * (sin(delta) * vd + cos(delta) * vq) - B_ * (-cos(delta) * vd + sin(delta) * vq)); - f_[20] = ini - (B_ * (sin(delta) * vd + cos(delta) * vq) + G_ * (-cos(delta) * vd + sin(delta) * vq)); - - /* Current balance */ - Ir() += inr - Vr() * G_ + Vi() * B_; - Ii() += ini - Vr() * B_ - Vi() * G_; - - return 0; - } - - /** - * @brief Jacobian evaluation not implemented yet - * - * @tparam ScalarT - scalar data type - * @tparam IdxT - matrix index data type - * @return int - error code, 0 = success - */ - template - int Genrou::evaluateJacobian() - { - std::cout << "Evaluate Jacobian for Genrou..." << std::endl; - std::cout << "Jacobian evaluation not implemented!" << std::endl; - return 0; - } - - /** - * @brief Integrand (objective) evaluation not implemented yet - * - * @tparam ScalarT - scalar data type - * @tparam IdxT - matrix index data type - * @return int - error code, 0 = success - */ - template - int Genrou::evaluateIntegrand() - { - // std::cout << "Evaluate Integrand for Genrou..." << std::endl; - return 0; - } - - /** - * @brief Adjoint initialization not implemented yet - * - * @tparam ScalarT - scalar data type - * @tparam IdxT - matrix index data type - * @return int - error code, 0 = success - */ - template - int Genrou::initializeAdjoint() - { - // std::cout << "Initialize adjoint for Genrou..." << std::endl; - return 0; - } - - /** - * @brief Adjoint residual evaluation not implemented yet - * - * @tparam ScalarT - scalar data type - * @tparam IdxT - matrix index data type - * @return int - error code, 0 = success - */ - template - int Genrou::evaluateAdjointResidual() - { - // std::cout << "Evaluate adjoint residual for Genrou..." << std::endl; - return 0; - } - - /** - * @brief Adjoint integrand (objective) evaluation not implemented yet - * - * @tparam ScalarT - scalar data type - * @tparam IdxT - matrix index data type - * @return int - error code, 0 = success - */ - template - int Genrou::evaluateAdjointIntegrand() - { - // std::cout << "Evaluate adjoint Integrand for Genrou..." << std::endl; - return 0; - } - - template - void Genrou::setDerivedParams() - { - SA_ = 0; - SB_ = 0; - if (S12_ != 0) - { - real_type s112 = sqrt(S10_ / S12_); - - SA_ = (1.2 * s112 + 1) / (s112 + 1); - SB_ = (1.2 * s112 - 1) / (s112 - 1); - if (SB_ < SA_) - SA_ = SB_; - SB_ = S12_ / pow(SA_ - 1.2, 2); - } - Xd1_ = Xd_ - Xdp_; - Xd2_ = Xdp_ - Xl_; - Xd3_ = (Xdp_ - Xdpp_) / (Xd2_ * Xd2_); - Xd4_ = (Xdp_ - Xdpp_) / Xd2_; - Xd5_ = (Xdpp_ - Xl_) / Xd2_; - Xq1_ = Xq_ - Xqp_; - Xq2_ = Xqp_ - Xl_; - Xq3_ = (Xqp_ - Xqpp_) / (Xq2_ * Xq2_); - Xq4_ = (Xqp_ - Xqpp_) / Xq2_; - Xq5_ = (Xqpp_ - Xl_) / Xq2_; - Xqd_ = (Xq_ - Xl_) / (Xd_ - Xl_); - G_ = Ra_ / (Ra_ * Ra_ + Xqpp_ * Xqpp_); - B_ = -Xqpp_ / (Ra_ * Ra_ + Xqpp_ * Xqpp_); - } - - // Available template instantiations - template class Genrou; - template class Genrou; - - } // namespace PhasorDynamics -} // namespace GridKit +/** + * @file Genrou.cpp + * @author Adam Birchfield (abirchfield@tamu.edu) + * @author Slaven Peles (peless@ornl.gov) + * @brief Definition of a GENROU generator model. + * + * + */ + +#define _USE_MATH_DEFINES +#include "Genrou.hpp" + +#include +#include + +#include +#include +#include + +#define _USE_MATH_DEFINES + +namespace GridKit +{ + namespace PhasorDynamics + { + + template + Genrou::Genrou(bus_type* bus, IdxT unit_id) + : bus_(bus), + busID_(0), + gov_(nullptr), + unit_id_(unit_id), + p0_(0.), + q0_(0.), + H_(3.), + D_(0.), + Ra_(0.), + Tdop_(7.), + Tdopp_(.04), + Tqopp_(.05), + Tqop_(.75), + Xd_(2.1), + Xdp_(0.2), + Xdpp_(0.18), + Xq_(.5), + Xqp_(.5), + Xqpp_(.18), + Xl_(.15), + S10_(0.), + S12_(0.) + { + size_ = 20; // 21; 20 without Pmech + setDerivedParams(); + + // Temporary, to eliminate compiler warnings + (void) busID_; + (void) unit_id_; + } + + /*! + * @brief Constructor for a pi-model branch + * + */ + template + Genrou::Genrou(bus_type* bus, + IdxT unit_id, + ScalarT p0, + ScalarT q0, + real_type H, + real_type D, + real_type Ra, + real_type Tdop, + real_type Tdopp, + real_type Tqopp, + real_type Tqop, + real_type Xd, + real_type Xdp, + real_type Xdpp, + real_type Xq, + real_type Xqp, + real_type Xqpp, + real_type Xl, + real_type S10, + real_type S12) + : bus_(bus), + busID_(0), + gov_(nullptr), + unit_id_(unit_id), + p0_(p0), + q0_(q0), + H_(H), + D_(D), + Ra_(Ra), + Tdop_(Tdop), + Tdopp_(Tdopp), + Tqopp_(Tqopp), + Tqop_(Tqop), + Xd_(Xd), + Xdp_(Xdp), + Xdpp_(Xdpp), + Xq_(Xq), + Xqp_(Xqp), + Xqpp_(Xqpp), + Xl_(Xl), + S10_(S10), + S12_(S12) + { + size_ = 20; + setDerivedParams(); + } + + /*! + * @brief Constructor for the GENROU generator with saturation. + * + */ + template + Genrou::Genrou(bus_type* bus, const model_data_type& data) + : bus_(bus), + busID_(0), + gov_(nullptr), + unit_id_(data.unit_id), + p0_(data.p0), + q0_(data.q0), + H_(data.H), + D_(data.D), + Ra_(data.Ra), + Tdop_(data.Tdop), + Tdopp_(data.Tdopp), + Tqopp_(data.Tqopp), + Tqop_(data.Tqop), + Xd_(data.Xd), + Xdp_(data.Xdp), + Xdpp_(data.Xdpp), + Xq_(data.Xq), + Xqp_(data.Xqp), + Xqpp_(data.Xqpp), + Xl_(data.Xl), + S10_(data.S10), + S12_(data.S12) + { + size_ = 20; + setDerivedParams(); + } + + /*! + * @brief allocate method computes sparsity pattern of the Jacobian. + */ + template + int Genrou::allocate() + { + f_.resize(static_cast(size_)); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + tag_.resize(static_cast(size_)); + fB_.resize(static_cast(size_)); + yB_.resize(static_cast(size_)); + ypB_.resize(static_cast(size_)); + return 0; + } + + /** + * Initialization of the branch model + * + */ + template + int Genrou::initialize() + { + /* Initialization tricks -- assuming NO saturation */ + ScalarT vr = Vr(); + ScalarT vi = Vi(); + ScalarT p = p0_; + ScalarT q = q0_; + ScalarT vm2 = vr * vr + vi * vi; + ScalarT Er = vr + (Ra_ * p * vr + Ra_ * q * vi - Xq_ * p * vi + Xq_ * q * vr) / vm2; + ScalarT Ei = vi + (Ra_ * p * vi - Ra_ * q * vr + Xq_ * p * vr + Xq_ * q * vi) / vm2; + ScalarT delta = atan2(Ei, Er); + ScalarT omega = 0; + ScalarT ir = (p * vr + q * vi) / vm2; + ScalarT ii = (p * vi - q * vr) / vm2; + ScalarT id = ir * sin(delta) - ii * cos(delta); + ScalarT iq = ir * cos(delta) + ii * sin(delta); + ScalarT vd = vr * sin(delta) - vi * cos(delta) + id * Ra_ - iq * Xqpp_; + ScalarT vq = vr * cos(delta) + vi * sin(delta) + id * Xqpp_ - iq * Ra_; + ScalarT psiqpp = -vd / (1 + omega); + ScalarT psidpp = vq / (1 + omega); + ScalarT Te = (psidpp - id * Xdpp_) * iq - (psiqpp - iq * Xdpp_) * id; + ScalarT psiqp = -(-(Xqp_ - Xl_) * iq + psiqpp * (Xqp_ - Xl_) / (Xqpp_ - Xl_)) + / (1 + (Xqp_ - Xqpp_) / (Xqpp_ - Xl_)); + ScalarT Edp = psiqp - (Xqp_ - Xl_) * iq; + ScalarT psidp = -((Xdp_ - Xl_) * id - psidpp * (Xdp_ - Xl_) / (Xdpp_ - Xl_)) + / (1 + (Xdp_ - Xdpp_) / (Xdpp_ - Xl_)); + ScalarT Eqp = psidp + (Xdp_ - Xl_) * id; + + /* Now we have the state variables, solve for alg. variables */ + ScalarT ksat; + ScalarT psipp; + + y_[0] = delta; // = 0.55399038; + y_[1] = omega; // = 0; + y_[2] = Eqp; // = 0.995472581; + y_[3] = psidp; // = 0.971299567; + y_[4] = psiqp; // = 0.306880069; + y_[5] = Edp; // = 0; + + y_[6] = psiqpp = -psiqp * Xq4_ - Edp * Xq5_; + y_[7] = psidpp = psidp * Xd4_ + Eqp * Xd5_; + y_[8] = psipp = sqrt(psiqpp * psiqpp + psidpp * psidpp); + y_[9] = ksat = SB_ * pow(psipp - SA_, 2); + y_[10] = vd = -psiqpp * (1 + omega); + y_[11] = vq = psidpp * (1 + omega); + y_[12] = Te = (psidpp - id * Xdpp_) * iq - (psiqpp - iq * Xdpp_) * id; + y_[13] = id; + y_[14] = iq; + y_[15] = ir; + y_[16] = ii; + // y_[17] = pmech_set_ = Te; + y_[17] = efd_set_ = Eqp + Xd1_ * (id + Xd3_ * (Eqp - psidp - Xd2_ * id)) + psidpp * ksat; + y_[18] = G_ * (vd * sin(delta) + vq * cos(delta)) + - B_ * (vd * -cos(delta) + vq * sin(delta)); /* inort, real */ + y_[19] = B_ * (vd * sin(delta) + vq * cos(delta)) + + G_ * (vd * -cos(delta) + vq * sin(delta)); /* inort, imag */ + + // Set Setpoint mechanical power, which may or may not be used + pmech_set_ = Te; + + for (IdxT i = 0; i < size_; ++i) + yp_[static_cast(i)] = 0.0; + + return 0; + } + + /*! + * @brief Identify differential variables. + */ + template + int Genrou::tagDifferentiable() + { + for (IdxT i = 0; i < size_; ++i) + { + tag_[static_cast(i)] = i < 6; + } + return 0; + } + + /*! + * @brief Residual contribution of the branch is pushed to the + * two terminal buses. + * + */ + template + int Genrou::evaluateResidual() + { + /* Read variables */ + ScalarT delta = y_[0]; + ScalarT omega = y_[1]; + ScalarT Eqp = y_[2]; + ScalarT psidp = y_[3]; + ScalarT psiqp = y_[4]; + ScalarT Edp = y_[5]; + ScalarT psiqpp = y_[6]; + ScalarT psidpp = y_[7]; + ScalarT psipp = y_[8]; + ScalarT ksat = y_[9]; + ScalarT vd = y_[10]; + ScalarT vq = y_[11]; + ScalarT telec = y_[12]; + ScalarT id = y_[13]; + ScalarT iq = y_[14]; + ScalarT ir = y_[15]; + ScalarT ii = y_[16]; + ScalarT efd = y_[17]; + ScalarT inr = y_[18]; + ScalarT ini = y_[19]; + ScalarT vr = Vr(); + ScalarT vi = Vi(); + ScalarT pmech; + if (gov_) + { + pmech = gov_->Pmech(); // ISSUE IS HERE? + } + else + { + pmech = pmech_set_; + } + + /* Read derivatives */ + ScalarT delta_dot = yp_[0]; + ScalarT omega_dot = yp_[1]; + ScalarT Eqp_dot = yp_[2]; + ScalarT psidp_dot = yp_[3]; + ScalarT psiqp_dot = yp_[4]; + ScalarT Edp_dot = yp_[5]; + + /* 6 Genrou differential equations */ + f_[0] = delta_dot - omega * (2 * M_PI * 60); + f_[1] = omega_dot - (1 / (2 * H_)) * ((pmech - D_ * omega) / (1 + omega) - telec); + f_[2] = Eqp_dot - (1 / Tdop_) * (efd - (Eqp + Xd1_ * (id + Xd3_ * (Eqp - psidp - Xd2_ * id)) + psidpp * ksat)); + f_[3] = psidp_dot - (1 / Tdopp_) * (Eqp - psidp - Xd2_ * id); + f_[4] = psiqp_dot - (1 / Tqopp_) * (Edp - psiqp + Xq2_ * iq); + f_[5] = Edp_dot - (1 / Tqop_) * (-Edp + Xqd_ * psiqpp * ksat + Xq1_ * (iq - Xq3_ * (Edp + iq * Xq2_ - psiqp))); + + /* 11 Genrou algebraic equations */ + f_[6] = psiqpp - (-psiqp * Xq4_ - Edp * Xq5_); + f_[7] = psidpp - (psidp * Xd4_ + Eqp * Xd5_); + f_[8] = psipp - sqrt(pow(psidpp, 2.0) + pow(psiqpp, 2.0)); + f_[9] = ksat - SB_ * pow(psipp - SA_, 2.0); + f_[10] = vd + psiqpp * (1 + omega); + f_[11] = vq - psidpp * (1 + omega); + f_[12] = telec - ((psidpp - id * Xdpp_) * iq - (psiqpp - iq * Xdpp_) * id); + f_[13] = id - (ir * sin(delta) - ii * cos(delta)); + f_[14] = iq - (ir * cos(delta) + ii * sin(delta)); + f_[15] = ir + G_ * vr - B_ * vi - inr; + f_[16] = ii + B_ * vr + G_ * vi - ini; + + /* 2 Genrou control inputs are set to constant for this example */ + f_[17] = efd - efd_set_; + + /* 2 Genrou current source definitions */ + f_[18] = inr - (G_ * (sin(delta) * vd + cos(delta) * vq) - B_ * (-cos(delta) * vd + sin(delta) * vq)); + f_[19] = ini - (B_ * (sin(delta) * vd + cos(delta) * vq) + G_ * (-cos(delta) * vd + sin(delta) * vq)); + + /* Current balance */ + Ir() += inr - Vr() * G_ + Vi() * B_; + Ii() += ini - Vr() * B_ - Vi() * G_; + + return 0; + } + + /** + * @brief Jacobian evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int Genrou::evaluateJacobian() + { + std::cout << "Evaluate Jacobian for Genrou..." << std::endl; + std::cout << "Jacobian evaluation not implemented!" << std::endl; + return 0; + } + + /** + * @brief Integrand (objective) evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int Genrou::evaluateIntegrand() + { + // std::cout << "Evaluate Integrand for Genrou..." << std::endl; + return 0; + } + + /** + * @brief Adjoint initialization not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int Genrou::initializeAdjoint() + { + // std::cout << "Initialize adjoint for Genrou..." << std::endl; + return 0; + } + + /** + * @brief Adjoint residual evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int Genrou::evaluateAdjointResidual() + { + // std::cout << "Evaluate adjoint residual for Genrou..." << std::endl; + return 0; + } + + /** + * @brief Adjoint integrand (objective) evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int Genrou::evaluateAdjointIntegrand() + { + // std::cout << "Evaluate adjoint Integrand for Genrou..." << std::endl; + return 0; + } + + template + void Genrou::setDerivedParams() + { + SA_ = 0; + SB_ = 0; + if (S12_ != 0) + { + real_type s112 = sqrt(S10_ / S12_); + + SA_ = (1.2 * s112 + 1) / (s112 + 1); + SB_ = (1.2 * s112 - 1) / (s112 - 1); + if (SB_ < SA_) + SA_ = SB_; + SB_ = S12_ / pow(SA_ - 1.2, 2); + } + Xd1_ = Xd_ - Xdp_; + Xd2_ = Xdp_ - Xl_; + Xd3_ = (Xdp_ - Xdpp_) / (Xd2_ * Xd2_); + Xd4_ = (Xdp_ - Xdpp_) / Xd2_; + Xd5_ = (Xdpp_ - Xl_) / Xd2_; + Xq1_ = Xq_ - Xqp_; + Xq2_ = Xqp_ - Xl_; + Xq3_ = (Xqp_ - Xqpp_) / (Xq2_ * Xq2_); + Xq4_ = (Xqp_ - Xqpp_) / Xq2_; + Xq5_ = (Xqpp_ - Xl_) / Xq2_; + Xqd_ = (Xq_ - Xl_) / (Xd_ - Xl_); + G_ = Ra_ / (Ra_ * Ra_ + Xqpp_ * Xqpp_); + B_ = -Xqpp_ / (Ra_ * Ra_ + Xqpp_ * Xqpp_); + } + + template + ScalarT Genrou::speed() + { + return y_[1]; + } + + template + ScalarT Genrou::get_torque() + { + return y_[12]; + } + + template + void Genrou::setgovenor(gov_type* gov) + { + gov_ = gov; + } + + // Available template instantiations + template class Genrou; + template class Genrou; + + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 1f05fc876..74f70862a 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -1,5 +1,5 @@ /** - * @file Genrou.cpp + * @file Genrou.hpp * @author Adam Birchfield (abirchfield@tamu.edu) * @author Slaven Peles (peless@ornl.gov) * @brief Declaration of a GENROU generator model. @@ -9,6 +9,7 @@ #pragma once #include +#include // Forward declarations. namespace GridKit @@ -17,7 +18,12 @@ namespace GridKit { template class BusBase; - } + + template + struct GenrouData; + template + class GovernorBase; + } // namespace PhasorDynamics } // namespace GridKit namespace GridKit @@ -26,7 +32,7 @@ namespace GridKit { template - class Genrou : public Component + class Genrou : public Component, public MachineBase { using Component::alpha_; using Component::f_; @@ -43,13 +49,16 @@ namespace GridKit using Component::yp_; using Component::ypB_; - using bus_type = BusBase; - using real_type = typename Component::real_type; + using gov_type = GovernorBase; + using real_type = typename Component::real_type; + using bus_type = BusBase; + using model_data_type = GenrouData; public: - Genrou(bus_type* bus, int unit_id); + Genrou(bus_type* bus, IdxT unit_id); + Genrou(bus_type* bus, const model_data_type& data); Genrou(bus_type* bus, - int unit_id, + IdxT unit_id, ScalarT p0, ScalarT q0, real_type H, @@ -68,6 +77,7 @@ namespace GridKit real_type Xl, real_type S10, real_type S12); + ~Genrou() = default; int allocate() override; @@ -86,6 +96,13 @@ namespace GridKit { } + // Read Access to Machine Relative Speed + ScalarT speed() override; + ScalarT get_torque() override; + + // TODO set governor method + void setgovenor(gov_type* gov); + private: void setDerivedParams(); @@ -113,7 +130,10 @@ namespace GridKit /* Identification */ bus_type* bus_; const int busID_; - int unit_id_; + IdxT unit_id_; + + // Governor Pointer + gov_type* gov_; /* Initial terminal conditions */ ScalarT p0_; diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouData.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouData.hpp new file mode 100644 index 000000000..124ed570c --- /dev/null +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouData.hpp @@ -0,0 +1,50 @@ +/** + * @file GenrouData.hpp + * @author Slaven Peles (peless@ornl.gov) + * @brief Modeling data for branches (transmission lines) + * + */ +#pragma once + +namespace GridKit +{ + namespace PhasorDynamics + { + /** + * @brief Contains modeling data for a Genrou generator model. + * + * @tparam RealT Real parameter data type + * @tparam IdxT Integer parameter data type + * + * Integer parameters are of the same type as matrix and vector indices. + * + * @todo Decide on naming scheme for model parameters. + */ + template + struct GenrouData + { + IdxT unit_id{0}; ///< Unique unit ID + + RealT p0{0.0}; ///< Initial active power + RealT q0{0.0}; ///< Initial reactive power + RealT H{0.0}; ///< Rotor inertia + RealT D{0.0}; ///< Damping coefficient + RealT Ra{0.0}; ///< Winding resistance + RealT Tdop{0.0}; ///< Open circuit direct axis transient time + RealT Tdopp{0.0}; ///< Open circuit direct axis sub-transient time + RealT Tqop{0.0}; ///< Open circuit quadrature axis transient + RealT Tqopp{0.0}; ///< Open circuit quadrature axis sub-transient time + RealT Xd{0.0}; ///< Direct axis synchronous reactance + RealT Xdp{0.0}; ///< Direct axis transient reactance + RealT Xdpp{0.0}; ///< Direct axis sub-transient reactance + RealT Xq{0.0}; ///< Quadrature axis synchronous reactance + RealT Xqp{0.0}; ///< Quadrature axis transient reactance + RealT Xqpp{0.0}; ///< Quadrature axis sub-transient reactance + RealT Xl{0.0}; ///< Stator leakage reactance + RealT S10{0.0}; ///< Saturation factor at 1.0 pu flux + RealT S12{0.0}; ///< Saturation factor at 1.2 pu flux + + IdxT bus_id{0}; ///< Unique ID of the connecting bus + }; + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/README.md b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/README.md index 38be4af65..c9394bb6f 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/README.md +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/README.md @@ -1,5 +1,13 @@ # GENROU +This synchronous machine model is 6th order and is specifically designed for round rotor machines. It is a standard model used in phasor-domain industry stability studies. +See the [General Synchronous Machine Model](../README.md) for general synchronous machine information. + +Notes: +- $X''_{q}=X''_{d}$ (round rotor assumptions) +- $X''_{d}$ does not saturate +- Same relative amount of saturation occurs on both $d$ and $q$ axis + ## Block Diagram
@@ -8,49 +16,29 @@ [PowerWorld](https://www.powerworld.com/WebHelp/)
-## Simplifications -The GENROU model is a variation of the -[General Synchronous Machine Model](../README.md) -- $`X''_{q}=X''_{d}`$ -- $`X''_{d}`$ does not saturate -- Same relative amount of saturation occurs on both $`d`$ and $`q`$ axis - -## Nomenclature -### Algebraic Variables -- $V_d$, $V_q$ Machine Internal Voltage on the machine d-q reference frame -- $I_d$, $I_q$ Terminal currents on the machine d-q reference frame -- $V_r$, $V_i$ Terminal voltages on the network reference frame -- $I_r$, $I_i$ Terminal currents on the network reference frame -- $\psi''_q$, $\psi''_d$, $\psi''$   Machine Total Subtransient Flux -- $T_{elec}$ Electrical Torque -- $P_{mech}$ Mechanical power from the prime mover -- $E_{fd}$ Field winding voltage from the excitation system -- $k_{sat}$ Saturation Coefficient -### Differential Variables -- $\delta$   Machine Internal Angle -- $\omega$ Machine Relative Speed -- $\psi'_d$, $\psi'_q$, $E'_d$, $E'_q$  Machine Internal Flux Values -### Parameters -- $\omega_{0}$ - Nominal Frequnecy ($2\pi 60$) -- $H$ - Intertia constant, sec (3) -- $D$ - Damping factor, pu (0) -- $R_{a}$ - Stator winding resistance, pu (0) -- $X_{\ell}$ - Stator leakage reactance, pu (0.15) -- $X_{d}$ - Direct axis synchronous reactance, (2.1) -- $X'_{d}$ - Direct axis transient reactance, (0.2) -- $X''_{d}$ - Direct axis sub-transient reactance, (0.18) -- $X_{q}$ - Quadrature axis synchronous reactance, (0.5) -- $X'_{q}$ - Quadrature axis transient reactance, (0.47619) -- $X''_{q}$ - Quadrature axis sub-transient reactance, (0.18) -- $T'_{d0}$ - Open circuit direct axis transient time const., (7) -- $T''_{d0}$ - Open circuit direct axis sub-transient time const., (0.04) -- $T'_{q0}$ - Open circuit quadrature axis transient time const., (0.75) -- $T''_{q0}$ - Open circuit quadrature axis sub-transient time const., (0.05) -- $S_{10}$ - Saturation factor at 1.0 pu flux, (0) -- $S_{12}$ - Saturation factor at 1.2 pu flux, (0) - -### Auxillary Parameters -Transformed parameters used during implementation and for readability. +## Model Parameters + +Symbol | Units | Description | Typical Value | Note +-----------|---------|---------------------------------|---------------| ------ +$\omega_0$ | [rad/s] | synchronous frequency | $2\pi \cdot 60$ +$H$ | [s] | rotor inertia | 3 +$D$ | [p.u.] | damping coefficient | 0 +$R_a$ | [p.u.] | winding resistance | 0 +$X_{\ell}$ | [p.u.] | Stator leakage reactance | 0.15 | +$X_{d}$ | [p.u.] | Direct axis synchronous reactance | 2.1 | +$X'_{d}$ | [p.u.] | Direct axis transient reactance | 0.2 | +$X''_{d}$ | [p.u.] | Direct axis sub-transient reactance | 0.18 | +$X_{q}$ | [p.u.] | Quadrature axis synchronous reactance | 0.5 | +$X'_{q}$ | [p.u.] | Quadrature axis transient reactance | 0.5 | +$X''_{q}$ | [p.u.] | Quadrature axis sub-transient reactance | 0.18 | +$T'_{d0}$ | [s] | Open circuit direct axis transient time const. | 7 | +$T''_{d0}$ | [s] | Open circuit direct axis sub-transient time const. | 0.04 | +$T'_{q0}$ | [s] | Open circuit quadrature axis transient time const. | 0.75 | +$T''_{q0}$ | [s] | Open circuit quadrature axis sub-transient time const. | 0.05 | +$S_{10}$ | [p.u.] | Saturation factor at 1.0 pu flux | 0 | +$S_{12}$ | [p.u.] | Saturation factor at 1.2 pu flux | 0 | + +### Model Derived Parameters ``` math \begin{aligned} G &=\dfrac{R_a}{R_a^2+(X''_q)^2}& @@ -65,13 +53,56 @@ Transformed parameters used during implementation and for readability. \end{aligned} ``` -## Equations +## Model Variables + +### Internal Variables + +#### Differential + +Symbol | Units | Description | Note +----------|--------|-----------------------------------|------- +$\delta$ | [rad] | Machine internal rotor angle | +$\omega$ | [p.u.] | Machine speed | Optionally read by governor or stabilizer component +$\psi'_d$ | [p.u.] | Direct axis subtransient flux | +$\psi'_q$ | [p.u.] | Quadrature axis subtransient flux | +$E'_d$ | [p.u.] | Direct axis transient flux | +$E'_q$  | [p.u.] | Quadrature axis subtransient flux | + +#### Algebraic +Symbol | Units | Description | Note +------------|--------|--------------------------------- | ------ +$V_d$ | [p.u.] | Machine internal voltage, d-axis | +$V_q$ | [p.u.] | Machine internal voltage, q-axis | +$I_d$ | [p.u.] | Terminal current, d-axis | +$I_q$ | [p.u.] | Terminal current, q-axis | +$I_r$ | [p.u.] | Terminal current, real component on network reference frame | Read by bus and optionally by controllers +$I_i$ | [p.u.] | Terminal current, imaginary component on network reference frame | Read by bus and optionally by controllers +$\psi''_q$ | [p.u.] | Total q-axis subtransient flux | +$\psi''_d$ | [p.u.] | Total d-axis subtransient flux | +$\psi''$   | [p.u.] | Machine total subtransient flux | +$T_{e}$ | [p.u.] | Electrical torque | +$k_{sat}$ | [p.u.] | Saturation coefficient | + +### External Variables + +#### Differential +None. + +#### Algebraic +Symbol | Units | Description | Note +---------|--------|---------------------------------| ------ +$V_r$ | [p.u.] | Terminal voltage, real component on network reference frame | owned by bus object +$V_i$ | [p.u.] | Terminal voltage, imaginary component on network reference frame | owned by bus object +$P_{m}$ | [p.u.] | Mechanical power from the prime mover | Owned by governor, constant if no governor is connected to the machine +$E_{fd}$ | [p.u.] | Field winding voltage from the excitation system | Owned by exciter, constant if no exciter is connected to the machine + +## Model Equations ### Differential Equations ``` math \begin{aligned} - \dot\delta &= \omega\cdot\omega_0 \\ - \dot\omega &= \dfrac{1}{2H}\left(\dfrac{P_{mech}-D\omega}{1+\omega} + \dot\delta &= (\omega-1)\cdot\omega_0 \\ + \dot\omega &= \dfrac{1}{2H}\left(\dfrac{P_{mech}-D(\omega-1)}{\omega} - T_{elec}\right)\\ \dot{\psi}'_{d} &= \dfrac{1}{T''_{d0}}(E'_{q}-\psi'_{d}-X_{d2}I_{d})\\ \dot{\psi}'_{q} &= \dfrac{1}{T''_{q0}}(E'_{d}-\psi'_{q}+X_{q2}I_{q})\\ @@ -90,64 +121,27 @@ Transformed parameters used during implementation and for readability. ``` ### Algebraic Equations -These algebraic equations define internal variables (7) and the algebraic -Network Interface Equations (4) -``` math -\begin{aligned} - \psi''_{q} &= -E'_{d}X_{q5} - \psi'_{q}X_{q4} \\ - \psi''_{d} &= +E'_{q}X_{d5} + \psi'_{d}X_{d4}\\ - \psi'' &= \sqrt{(\psi''_{d})^2+(\psi''_{q})^2} \\ - V_{d} &= -\psi''_{q}(1+\omega)\\ - V_{q} &= +\psi''_{d}(1+\omega)\\ - T_{elec} &= (\psi''_{d} - I_dX_d'')I_q-(\psi''_{q} - I_qX_d'')I_d \\ -\end{aligned} -``` - -#### Network Interface equations -The network interface equations provide the algebraic relationship the network - and internal reference frame. +Note that for implementation purposes, some of these equations may be simplified into functions and the internal variables eliminated. Nevertheless, for modeling clarity and conformance to typical practice, the full equations are given here. ``` math \begin{aligned} - \begin{bmatrix} - I_d \\ I_q - \end{bmatrix} - &= - \begin{bmatrix} - \sin \delta & -\cos\delta \\ - \cos\delta & \sin\delta - \end{bmatrix} - \begin{bmatrix} - I_r \\ I_i - \end{bmatrix} - \\ - \begin{bmatrix} - I_r \\ I_i - \end{bmatrix} - &= - \begin{bmatrix} - G & -B \\ - B & G - \end{bmatrix} - \left( - \begin{bmatrix} - \sin \delta & \cos\delta \\ - -\cos\delta & \sin\delta - \end{bmatrix} - \begin{bmatrix} - V_d \\ V_q - \end{bmatrix} - - - \begin{bmatrix} - V_r \\V_i - \end{bmatrix} - \right) + 0 &= -\psi''_{q} -E'_{d}X_{q5} - \psi'_{q}X_{q4} \\ + 0 &= -\psi''_{d} +E'_{q}X_{d5} + \psi'_{d}X_{d4}\\ + 0 &= -\psi'' +\sqrt{(\psi''_{d})^2+(\psi''_{q})^2} \\ + 0 &= -V_{d} -\psi''_{q}\omega\\ + 0 &= -V_{q} +\psi''_{d}\omega\\ + 0 &= -T_{elec} +(\psi''_{d} - I_dX_d'')I_q-(\psi''_{q} - I_qX_d'')I_d \\ + 0 &= -k_{sat} + S_B (\psi''-S_A)^2 \\ + 0 &= -I_d + I_r \sin(\delta) - I_i \cos(\delta) \\ + 0 &= -I_q + I_r \cos(\delta) + I_i \sin(\delta) \\ + 0 &= -I_r + G (V_d \sin(\delta) + V_q \cos(\delta) - V_r) - B (V_d \cos(\delta) + V_q \sin(\delta) - V_i) \\ + 0 &= -I_i + B (V_d \sin(\delta) + V_q \cos(\delta) - V_r) + G (V_d \cos(\delta) + V_q \sin(\delta) - V_i) \end{aligned} ``` ## Initialization ### Without Saturation -Pressume there is no saturation to simplify solution procedure for initial +Presume there is no saturation to simplify solution procedure for initial conditions. Using the power-flow solution, we have explicit solutions for the following @@ -156,27 +150,27 @@ from the network interface equations. The remaining are algebraically solved from the steady-state initial conditions. ``` math \begin{aligned} -\omega &= 0 \\ +\omega &= 1 \\ \delta &= \text{arg} \left[V_r + jV_i + (R_a + jX_q) (I_r + jI_i)\right] \\ - \psi^{''}_{d} &= V_q \\ - \psi^{''}_{q} &= -V_d \\ - \psi^{''} &= \sqrt{(\psi''_{d})^2+(\psi''_{q})^2} \\ - k_{sat} &= S_B(\psi^{''}-S_A)^2 \\ - T_{elec} &= (\psi''_{d} - I_dX_d^{''})I_q-(\psi''_{q} - I_qX_d^{''})I_d \\ + \psi''_{d} &= V_q \\ + \psi''_{q} &= -V_d \\ + \psi'' &= \sqrt{(\psi''_{d})^2+(\psi''_{q})^2} \\ + k_{sat} &= S_B(\psi''-S_A)^2 \\ + T_{elec} &= (\psi''_{d} - I_dX_d'')I_q-(\psi''_{q} - I_qX_d'')I_d \\ P_{mech} &= T_{elec} \\ \psi^{'}_d &= - \dfrac{\psi^{''}_d-X_{d5}X_{d2}I_d}{X_{d5}+1}\\ - \psi^{'}_q &=\dfrac{X_{q5}X_{q2}I_q-\psi^{''}_q}{X_{q5}+1}\\ + \dfrac{\psi''_d-X_{d5}X_{d2}I_d}{X_{d5}+1}\\ + \psi^{'}_q &=\dfrac{X_{q5}X_{q2}I_q-\psi''_q}{X_{q5}+1}\\ E^{'}_d &=\psi^{'}_q - X_{q2}I_q \\ E^{'}_q &=\psi^{'}_d + X_{d2}I_d \\ - E_{fd} &= E'_{q}+X_{d1}I_{d}+\psi^{''}_{d}k_{sat} \\ + E_{fd} &= E'_{q}+X_{d1}I_{d}+\psi''_{d}k_{sat} \\ \end{aligned} ``` ### With Saturation It is important to point out that finding the initial value of $\delta$ for the model without saturation direct method can be used. In case when saturation -is considered some "claver" math is needed. Key insight for determining initial +is considered some "clever" math is needed. Key insight for determining initial $\delta$ is that the magnitude of the saturation depends upon the magnitude of $\psi''$, which is independent of $\delta$. diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENSALwS/README.md b/src/Model/PhasorDynamics/SynchronousMachine/GENSALwS/README.md index c5c620710..92b6d5a24 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENSALwS/README.md +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENSALwS/README.md @@ -1,7 +1,14 @@ # GENSAL -> [!NOTE] -> This has not yet been implemented +This synchronous machine model is 5th order and is specifically designed for salient pole machines. It is a standard model used in phasor-domain industry stability studies. +See the [General Synchronous Machine Model](../README.md) for general synchronous machine information. + +Notes: +- $X''_{q}=X''_{d}$ (no subtransient saliency) +- $X''_{d}$ does not saturate +- Only d-axis affected by saturation +- $X_{q}=X'_{q}$ +- $T'_{q0}$ is neglected ## Block Diagram
@@ -12,143 +19,109 @@ [PowerWorld](https://www.powerworld.com/WebHelp/)
-## Simplifications -The GENSAL model is a variation of the -[General Synchronous Machine Model](../README.md) -- $`X''_{q}=X''_{d}`$ -- $`X''_{d}`$ does not saturate -- Only d-axis affected by saturation -- $`X_{q}=X'_{q}`$ -- $T'_{q0}$ is neglected +## Model Parameters -## Nomenclature -### Algebraic Variables -- $V_d$, $V_q$ Machine Internal Voltage on the machine d-q reference frame -- $I_d$, $I_q$ Terminal currents on the machine d-q reference frame -- $V_r$, $V_i$ Terminal voltages on the network reference frame -- $I_r$, $I_i$ Terminal currents on the network reference frame -- $\psi''_q$, $\psi''_d$, $\psi''$   Machine Total Subtransient Flux -- $T_{elec}$ Electrical Torque -- $P_{mech}$ Mechanical power from the prime mover -- $E_{fd}$ Field winding voltage from the excitation system -- $k_{sat}$ Saturation Coefficient -### Differential Variables -- $\delta$   Machine Internal Angle -- $\omega$ Machine Relative Speed -- $\psi'_d$, $\psi'_q$, $E'_d$, $E'_q$  Machine Internal Flux Values -### Parameters -- $\omega_{0}$ - Nominal Frequnecy ($2\pi 60$) -- $H$ - Intertia constant, sec (3) -- $D$ - Damping factor, pu (0) -- $R_{a}$ - Stator winding resistance, pu (0) -- $X_{\ell}$ - Stator leakage reactance, pu (0.15) -- $X_{d}$ - Direct axis synchronous reactance, (2.1) -- $X'_{d}$ - Direct axis transient reactance, (0.2) -- $X''_{d}$ - Direct axis sub-transient reactance, (0.18) -- $X_{q}$ - Quadrature axis synchronous reactance, (0.5) -- $X'_{q}$ - Quadrature axis transient reactance, (0.47619) -- $X''_{q}$ - Quadrature axis sub-transient reactance, (0.18) -- $T'_{d0}$ - Open circuit direct axis transient time const., (7) -- $T''_{d0}$ - Open circuit direct axis sub-transient time const., (0.04) -- $T'_{q0}$ - Open circuit quadrature axis transient time const., (0.75) -- $T''_{q0}$ - Open circuit quadrature axis sub-transient time const., (0.05) -- $S_{10}$ - Saturation factor at 1.0 pu flux, (0) -- $S_{12}$ - Saturation factor at 1.2 pu flux, (0) - -### Auxillary Parameters -Transformed parameters used during implementation and for readability. +Symbol | Units | Description | Typical Value | Note +------------|---------|---------------------------------|---------------| ------ +$\omega_0$ | [rad/s] | synchronous frequency | $2\pi60$ +$H$ | [s] | rotor inertia | 3 +$D$ | [p.u.] | damping coefficient | 0 +$R_a$ | [p.u.] | winding resistance | 0 +$X_{\ell}$ | [p.u.] | Stator leakage reactance | 0.15 | +$X_{d}$ | [p.u.] | Direct axis synchronous reactance | 2.1 | +$X'_{d}$ | [p.u.] | Direct axis transient reactance | 0.2 | +$X''_{d}$ | [p.u.] | Direct axis sub-transient reactance | 0.18 | +$X_{q}$ | [p.u.] | Quadrature axis synchronous reactance | 0.5 | +$T'_{d0}$ | [s] | Open circuit direct axis transient time const. | 7 | +$T''_{d0}$ | [s] | Open circuit direct axis sub-transient time const. | 0.04 | +$T''_{q0}$ | [s] | Open circuit quadrature axis sub-transient time const. | 0.05 | +$S_{10}$ | [p.u.] | Saturation factor at 1.0 pu flux | 0 | +$S_{12}$ | [p.u.] | Saturation factor at 1.2 pu flux | 0 | + +### Model Derived Parameters ``` math \begin{aligned} G &=\dfrac{R_a}{R_a^2+(X''_q)^2}& B &= -\dfrac{X''_q}{R_a^2+(X''_q)^2}\\ S_A &= \dfrac{1.2\sqrt{S_{10}/S_{12}} +1}{\sqrt{S_{10}/S_{12}} +1} & S_B &= \dfrac{1.2\sqrt{S_{10}/S_{12}} -1}{\sqrt{S_{10}/S_{12}} -1} \\ - X_{d1} &= X_d-X_d' & X_{q1} &= X_q-X_q' \\ - X_{d2} &= X_d'-X_\ell & X_{q2} &= X_q'-X_\ell\\ - X_{d3} &= (X_d'-X_d'')/X_{d2}^2 & X_{q3} &= (X_q'-X_q'')/X_{q2}^2 \\ - X_{d5} &= (X_d''-X_\ell)/X_{d2} & X_{q5} &= (X_q''-X_\ell)/X_{q2}\\ + X_{d1} &= X_d-X_d' \\ + X_{d2} &= X_d'-X_\ell & X_{q2} = X_q-X''_q \\ + X_{d3} &= (X_d'-X_d'')/X_{d2}^2 \\ + X_{d5} &= (X_d''-X_\ell)/X_{d2} \\ X_{qd} &= (X_q-X_\ell)/(X_d-X_\ell) \end{aligned} ``` -## Equations +## Model Variables + +### Internal Variables + +#### Differential + +Symbol | Units | Description | Note +------------|---------|---------------------------------| ------ +$\delta$ | [rad] | Machine internal rotor angle | +$\omega$ | [p.u.] | Machine speed | Optionally read by governor or stabilizer component +$\psi'_d$ | [p.u.] | Direct axis subtransient flux | +$\psi''_q$ | [p.u.] | Quadrature axis subtransient flux | +$E'_q$ | [p.u.] | Quadrature axis subtransient flux | + +#### Algebraic +Symbol | Units | Description | Note +------------|---------|---------------------------------| ------ +$V_d$ | [p.u.] | Machine internal voltage, d-axis | +$V_q$ | [p.u.] | Machine internal voltage, q-axis | +$I_d$ | [p.u.] | Terminal current, d-axis | +$I_q$ | [p.u.] | Terminal current, q-axis | +$I_r$ | [p.u.] | Terminal current, real component on network reference frame | Read by bus and optionally by controllers +$I_i$ | [p.u.] | Terminal current, imaginary component on network reference frame | Read by bus and optionally by controllers +$\psi''_d$ | [p.u.] | Total d-axis subtransient flux +$T_{e}$ | [p.u.] | Electrical torque + +### External Variables + +#### Differential +None. + +#### Algebraic +Symbol | Units | Description | Note +------------|---------|---------------------------------| ------ +$V_r$ | [p.u.] | Terminal voltage, real component on network reference frame | owned by bus object +$V_i$ | [p.u.] | Terminal voltage, imaginary component on network reference frame | owned by bus object +$P_{m}$ | [p.u.] | Mechanical power from the prime mover | Owned by governor, constant if no governor is connected to the machine +$E_{fd}$ | [p.u.] | Field winding voltage from the excitation system | Owned by exciter, constant if no exciter is connected to the machine + +## Model Equations ### Differential Equations ``` math \begin{aligned} - \dot\delta &= \omega\cdot\omega_0 \\ - \dot\omega &= \dfrac{1}{2H}\left(\dfrac{P_{mech}-D\omega}{1+\omega} + \dot\delta &= (\omega-1)\cdot\omega_0 \\ + \dot\omega &= \dfrac{1}{2H}\left(\dfrac{P_{mech}-D (\omega-1)}{\omega} - T_{elec}\right)\\ \dot{\psi}'_{d} &= \dfrac{1}{T''_{d0}}(E'_{q}-\psi'_{d}-X_{d2}I_{d})\\ - \dot{\psi}'_{q} &= \dfrac{1}{T''_{q0}}(E'_{d}-\psi'_{q}+X_{q2}I_{q})\\ - \dot{E}'_{d} &= \dfrac{1}{T'_{q0}} - \left( -E'_{d}+X_{q1} - (I_{q}-X_{q3}(E'_{d}-\psi'_{q}+X_{q2}I_{q})) - + X_{qd}\psi''_{q}k_{sat} - \right) \\ + \dot{\psi}''_{q} &= \dfrac{1}{T''_{q0}}(-\psi''_{q}-X_{q2}I_{q})\\ \dot{E}'_{q} &= \dfrac{1}{T'_{d0}} \left( E_{fd}-E'_{q}-X_{d1} (I_{d}+X_{d3}(E'_{q}-\psi'_{d}-X_{d2}I_{d})) - -\psi''_{d}k_{sat} + - S_B (E'_q-S_A)^2 \right)\\ \end{aligned} ``` ### Algebraic Equations -These algebraic equations define internal variables (7) and the algebraic -Network Interface Equations (4) -``` math -\begin{aligned} - \psi''_{q} &= -E'_{d}X_{q5} - \psi'_{q}X_{q4} \\ - \psi''_{d} &= +E'_{q}X_{d5} + \psi'_{d}X_{d4}\\ - \psi'' &= \sqrt{(\psi''_{d})^2+(\psi''_{q})^2} \\ - V_{d} &= -\psi''_{q}(1+\omega)\\ - V_{q} &= +\psi''_{d}(1+\omega)\\ - T_{elec} &= (\psi''_{d} - I_dX_d'')I_q-(\psi''_{q} - I_qX_d'')I_d \\ -\end{aligned} -``` - -#### Network Interface equations -The network interface equations provide the algebraic relationship the -network and internal reference frame. +Note that for implementation purposes, some of these equations may be simplified into functions and the internal variables eliminated. Nevertheless, for modeling clarity and conformance to typical practice, the full equations are given here. ``` math \begin{aligned} - \begin{bmatrix} - I_d \\ I_q - \end{bmatrix} - &= - \begin{bmatrix} - \sin \delta & -\cos\delta \\ - \cos\delta & \sin\delta - \end{bmatrix} - - \begin{bmatrix} - I_r \\ I_i - \end{bmatrix}\\ - - \begin{bmatrix} - I_r \\ I_i - \end{bmatrix} - &= - - \begin{bmatrix} - G & -B \\ - B & G - \end{bmatrix} - - \left( - \begin{bmatrix} - \sin \delta & \cos\delta \\ - -\cos\delta & \sin\delta - \end{bmatrix} - \begin{bmatrix} - V_d \\ V_q - \end{bmatrix} - - - \begin{bmatrix} - V_r \\V_i - \end{bmatrix} - \right) + 0 &= -V_{d} -\psi''_{q}\omega\\ + 0 &= -V_{q} +\psi''_{d}\omega\\ + 0 &= -I_d + I_r \sin(\delta) - I_i \cos(\delta) \\ + 0 &= -I_q + I_r \cos(\delta) + I_i \sin(\delta) \\ + 0 &= -I_r + G (V_d \sin(\delta) + V_q \cos(\delta) - V_r) - B (V_d \cos(\delta) + V_q \sin(\delta) - V_i) \\ + 0 &= -I_i + B (V_d \sin(\delta) + V_q \cos(\delta) - V_r) + G (V_d \cos(\delta) + V_q \sin(\delta) - V_i) \\ + 0 &= -\psi''_{d} +E'_{q}X_{d5} + \psi'_{d}X_{d4}\\ + 0 &= -T_{e} +(\psi''_{d} - I_dX_d'')I_q-(\psi''_{q} - I_qX_d'')I_d \end{aligned} ``` diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/CMakeLists.txt b/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/CMakeLists.txt new file mode 100644 index 000000000..67e36e73f --- /dev/null +++ b/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/CMakeLists.txt @@ -0,0 +1,11 @@ +# [[ +# Author(s): +# - Cameron Rutherford +# - Slaven Peles +# ]] + +gridkit_add_library(phasor_dynamics_gen_classical + SOURCES + GenClassical.cpp + OUTPUT_NAME + gridkit_phasor_dynamics_gen_classical) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassical.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassical.cpp new file mode 100644 index 000000000..5f271f8d4 --- /dev/null +++ b/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassical.cpp @@ -0,0 +1,255 @@ +/** + * @file GenClassical.cpp + * @author Abdourahman Barry (abdourahman@vt.edu) + * @author Slaven Peles (peless@ornl.gov) + * @brief Definition of a Classical generator model. + * + * + */ +#define _USE_MATH_DEFINES +#include "GenClassical.hpp" + +#include +#include + +#include + +namespace GridKit +{ + namespace PhasorDynamics + { + /** + * @brief Constructor for a classical generator model. + * + */ + template + GenClassical::GenClassical(bus_type* bus, int unit_id) + : bus_(bus), + busID_(0), + unit_id_(unit_id), + p0_(0.0), + q0_(0.0), + H_(3.0), + D_(0.0), + Ra_(0.0), + Xdp_(0.5) + { + size_ = 7; + setDerivedParams(); + + // Temporary, to eliminate compiler warnings + (void) busID_; + (void) unit_id_; + } + + /*! + * @brief Constructor for a pi-model branch + * + */ + template + GenClassical::GenClassical(bus_type* bus, + int unit_id, + ScalarT p0, + ScalarT q0, + real_type H, + real_type D, + real_type Ra, + real_type Xdp) + : bus_(bus), + busID_(0), + unit_id_(unit_id), + p0_(p0), + q0_(q0), + H_(H), + D_(D), + Ra_(Ra), + Xdp_(Xdp) + { + size_ = 7; + setDerivedParams(); + } + + /*! + * @brief allocate method computes sparsity pattern of the Jacobian. + */ + template + int GenClassical::allocate() + { + auto size = static_cast(size_); + f_.resize(size); + y_.resize(size); + yp_.resize(size); + tag_.resize(size); + fB_.resize(size); + yB_.resize(size); + ypB_.resize(size); + return 0; + } + + /** + * Initialization of the generator model + * + */ + template + int GenClassical::initialize() + { + ScalarT vr = Vr(); + ScalarT vi = Vi(); + ScalarT p = p0_; + ScalarT q = q0_; + ScalarT vm2 = vr * vr + vi * vi; + ScalarT ir = (p * vr + q * vi) / vm2; + ScalarT ii = (p * vi - q * vr) / vm2; + ScalarT Er = (G_ * ir - B_ * ii) / (G_ * G_ + B_ * B_) + vr; + ScalarT Ei = (B_ * ir + G_ * ii) / (G_ * G_ + B_ * B_) + vi; + ScalarT delta = atan2(Ei, Er); + ScalarT omega = 1.0; + ScalarT Ep = sqrt(Er * Er + Ei * Ei); + ScalarT Te = G_ * Ep * Ep - Ep * ((G_ * vr + B_ * vi) * cos(delta) + (-B_ * vr + G_ * vi) * sin(delta)); + + y_[0] = delta; + y_[1] = omega; + y_[2] = Te; + y_[3] = ir; + y_[4] = ii; + y_[5] = pmech_set_ = Te; + y_[6] = ep_set_ = Ep; + + for (size_t i = 0; i < static_cast(size_); ++i) + yp_[i] = 0.0; + + return 0; + } + + /** + * \brief Identify differential variables. + */ + template + int GenClassical::tagDifferentiable() + { + + return 0; + } + + /** + * \brief Residual for the generator model. + * + */ + template + int GenClassical::evaluateResidual() + { + // Set variable aliases for better reliability + const ScalarT delta = y_[0]; + const ScalarT omega = y_[1]; + const ScalarT telec = y_[2]; + const ScalarT ir = y_[3]; + const ScalarT ii = y_[4]; + const ScalarT pmech = y_[5]; + const ScalarT ep = y_[6]; + + // Set derivative aliases for better reliability + const ScalarT delta_dot = yp_[0]; + const ScalarT omega_dot = yp_[1]; + + // GenClassical differential equations + f_[0] = delta_dot - (omega - 1.0) * (2.0 * M_PI * 60.0); + f_[1] = omega_dot - (1.0 / (2.0 * H_)) * ((pmech - D_ * (omega - 1.0)) / omega - telec); + + // GenClassical algebraic equations + f_[2] = telec - (1.0 / omega) * (G_ * ep * ep - ep * ((G_ * Vr() + B_ * Vi()) * cos(delta) + (-B_ * Vr() + G_ * Vi()) * sin(delta))); + + f_[3] = ir + G_ * Vr() + B_ * Vi() - ep * (G_ * cos(delta) + B_ * sin(delta)); + f_[4] = ii - B_ * Vr() + G_ * Vi() - ep * (-B_ * cos(delta) + G_ * sin(delta)); + + f_[5] = pmech - pmech_set_; + f_[6] = ep - ep_set_; + + // GenClassical contribution to bus algebraic equations + Ir() += ir; + Ii() += ii; + + return 0; + } + + /** + * @brief Jacobian evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int GenClassical::evaluateJacobian() + { + return 0; + } + + /** + * @brief Integrand (objective) evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int GenClassical::evaluateIntegrand() + { + // std::cout << "Evaluate Integrand for GenClassical..." << std::endl; + return 0; + } + + /** + * @brief Adjoint initialization not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int GenClassical::initializeAdjoint() + { + // std::cout << "Initialize adjoint for GenClassical..." << std::endl; + return 0; + } + + /** + * @brief Adjoint residual evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int GenClassical::evaluateAdjointResidual() + { + // std::cout << "Evaluate adjoint residual for GenClassical..." << std::endl; + return 0; + } + + /** + * @brief Adjoint integrand (objective) evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int GenClassical::evaluateAdjointIntegrand() + { + // std::cout << "Evaluate adjoint Integrand for GenClassical..." << std::endl; + return 0; + } + + template + void GenClassical::setDerivedParams() + { + G_ = Ra_ / (Ra_ * Ra_ + Xdp_ * Xdp_); + B_ = -Xdp_ / (Ra_ * Ra_ + Xdp_ * Xdp_); + } + + // Available template instantiations + template class GenClassical; + template class GenClassical; + + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassical.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassical.hpp new file mode 100644 index 000000000..1e8a46550 --- /dev/null +++ b/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassical.hpp @@ -0,0 +1,124 @@ +/** + * @file GenClassical.cpp + * @author Abdourahman Barry (abdourahman@vt.edu) + * + */ + +#pragma once + +#include + +// Forward declarations. +namespace GridKit +{ + namespace PhasorDynamics + { + template + class BusBase; + } +} // namespace GridKit + +namespace GridKit +{ + namespace PhasorDynamics + { + + template + class GenClassical : public Component + { + using Component::alpha_; + using Component::f_; + using Component::fB_; + using Component::g_; + using Component::gB_; + using Component::nnz_; + using Component::param_; + using Component::size_; + using Component::tag_; + using Component::time_; + using Component::y_; + using Component::yB_; + using Component::yp_; + using Component::ypB_; + + using bus_type = BusBase; + using real_type = typename Component::real_type; + + public: + GenClassical(bus_type* bus, int unit_id); + GenClassical(bus_type* bus, + int unit_id, + ScalarT p0, + ScalarT q0, + real_type H, + real_type D, + real_type Ra, + real_type Xdp); + ~GenClassical() = default; + + int allocate() override; + int initialize() override; + int tagDifferentiable() override; + int evaluateResidual() override; + + // Still to be implemented + int evaluateJacobian() override; + int evaluateIntegrand() override; + int initializeAdjoint() override; + int evaluateAdjointResidual() override; + int evaluateAdjointIntegrand() override; + + void updateTime(real_type /* t */, real_type /* a */) override + { + } + + private: + void setDerivedParams(); + + ScalarT& Vr() + { + return bus_->Vr(); + } + + ScalarT& Vi() + { + return bus_->Vi(); + } + + ScalarT& Ir() + { + return bus_->Ir(); + } + + ScalarT& Ii() + { + return bus_->Ii(); + } + + private: + /* Identification */ + bus_type* bus_; + const int busID_; + int unit_id_; + + /* Initial terminal conditions */ + ScalarT p0_; + ScalarT q0_; + + /* Input parameters */ + real_type H_; + real_type D_; + real_type Ra_; + real_type Xdp_; + + /* Derivied parameters */ + real_type G_; + real_type B_; + + /* Setpoints for control variables (determined at initialization) */ + real_type pmech_set_; + real_type ep_set_; + }; + + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/README.md b/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/README.md new file mode 100644 index 000000000..44ac0be75 --- /dev/null +++ b/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/README.md @@ -0,0 +1,160 @@ +# Classical Generator + +An electrical machine model with two differential variables (i.e. second order +model) is often called classical generator model. While its predicitve ability +is limited, it is useful for studies of grid network properties. Mathematically, +it is equivalent to a driven damped pendulum model. + +## Model Parameters + +Symbol | Units | Description | Note +------------|---------|---------------------------------|---------------------- +$\omega_0$ | [rad/s] | synchronous frequency | +$H$ | [s] | rotor inertia | +$D$ | [p.u.] | damping coefficient | +$R_a$ | [p.u.] | winding resistance | +$X_{dp}$ | [p.u.] | machine reactance parameter | + +### Model Derived Parameters + +- $G = \dfrac{R_a}{R_a^2 + X_{dp}^2} ~~~$ equivalent stator winding conductance +- $B = \dfrac{-X_{dp}}{R_a^2 + X_{dp}^2} ~~~$ equivalent stator winding susceptance + +
+ +## Model Variables + +### Internal Variables + +#### Differential + +Symbol | Units | Description | Note +------------|---------|---------------------|---------------------- +$\delta$ | [rad] | machine power angle | +$\omega$ | [p.u] | machine speed | Optionally read by a governor or a stabilizer component + +#### Algebraic + +Symbol | Units | Description | Note +--------|--------|-------------------------------------|------------- +$T_{e}$ | [p.u.] | electrical torque | +$I_r$ | [p.u.] | machine real injection current | read by bus +$I_i$ | [p.u.] | machine imaginary injection current | read by bus + +Note: All three can be expressed as function called by model equations. We add +these as variables as they are needed for outputs. + +
+ +### External Variables + +External variables enter component model equations but are owned by other +components. The other components also provide equations needed to have a +balanced system of equations. + +#### Differential + +None. + +#### Algebraic + +Symbol | Units | Description | Note +-------|---------|-------------------------------|---------------------- +$V_r$ | [p.u.] | machine bus real voltage | owned by a bus object +$V_i$ | [p.u.] | machine bus imaginary voltage | owned by a bus object +$P_m$ | [p.u.] | mechanical power input | owned by governor, constant if no governor is connected to the machine +$E_p$ | [p.u.] | field winding voltage | owned by exciter, constant if no exciter is connected to the machine + +
+ + +## Model Equations + +### Differential Equations + +```math +\begin{aligned} +\dot{\delta} &= (\omega - 1) \cdot \omega_0 \\ +\dot{\omega} &= \frac{1}{2H}\left( \frac{P_{m} - D(\omega - 1)}{\omega} - T_{e}\right) +\end{aligned} +``` + +### Algebraic Equations + +```math +\begin{aligned} + 0 &= T_{e} - \frac{1}{\omega}\left( G E_p^2 - E_p \left[(G V_r + B V_i)\cos\delta + (-B V_r + G V_i)\sin\delta \right]\right) \\ + 0 &= I_r + G V_r + B V_i - E_p(G \cos\delta + B \sin\delta) \\ + 0 &= I_i - B V_r + G V_i - E_p(-B \cos\delta + G \sin\delta) +\end{aligned} +``` +As noted earlier, all three algebraic equations can be expressed as functions +and substituted directly in the component and bus equations, respectively. We +use redundant variables for modeling convenience. + +
+ +## Initialization + +To initialize the model, given bus voltages $V_r$, $V_i$, and initial generator +injection active and reactive power, $P$ and $Q$, we take following steps to +initialize the system: + +Complex power is defined as +```math +S=VI^{*} +``` +or +```math +P + jQ = (V_r + j V_i)(I_r - j I_i). +``` +From here, we compute injection currents from the initial power injection and bus +voltages as +```math +\begin{aligned} +I_r &= \frac{PV_r + QV_i}{V_r^2 + V_i^2} \\ +I_i &= \frac{PV_i - QV_r}{V_r^2 + V_i^2} +\end{aligned} +``` + +We substitute expressions above into equations for current injections and +obtain +```math +\begin{aligned} +E_p \sin\delta &= \dfrac{B I_r + G I_i}{G^2 + B^2} + V_i \\ +E_p \cos\delta &= \dfrac{G I_r - B I_i}{G^2 + B^2} + V_r +\end{aligned} +``` +By dividing these two equations we get expression for machine angle at the +steady state +```math +\delta = \arctan \dfrac{E_i}{E_r} \, , +``` +and by squaring and adding them, we get expression for field +winding voltage at the steady state +```math +E_p = \sqrt{E_r^2 + E_i^2} \, , +``` +where +```math +\begin{aligned} +E_r &= \dfrac{G I_r - B I_i}{G^2 + B^2} + V_r \, ,\\ +E_i &= \dfrac{B I_r + G I_i}{G^2 + B^2} + V_i \, . +\end{aligned} +``` + +Next, we set machine speed to the synchronous speed: +```math +\omega = 1 +``` + +Now, we can compute electrical torque and set mechanical torque to be equal +to the electrical: +```math +\begin{aligned} +T_{e} &= G E_p^2 - E_p \left[ (G V_r + B V_i ) \cos\delta + (-B V_r + G V_i )\sin\delta \right] \\ +P_{m} &= T_{e} +\end{aligned} +``` + +With this, we initialize the machine at a steady state. diff --git a/src/Model/PhasorDynamics/SystemModel.hpp b/src/Model/PhasorDynamics/SystemModel.hpp index 03347b224..b8bfbf415 100644 --- a/src/Model/PhasorDynamics/SystemModel.hpp +++ b/src/Model/PhasorDynamics/SystemModel.hpp @@ -6,8 +6,16 @@ #include #include +#include #include +// Temporary +#include +#include +#include +#include +#include + namespace GridKit { namespace PhasorDynamics @@ -63,11 +71,82 @@ namespace GridKit this->max_steps_ = 2000; } + /** + * @brief Construct a new System Model object + * + * @param[in] data - Data structure with complete system data + * + * @pre SystemModelData contains consistent connectivity information + * and physically meaningful model parameters. + * + * @post All component models in SystemModelData are created, and + * correctly connected into the system model. + */ + SystemModel(SystemModelData& data) + { + // Set system model tolerances + rel_tol_ = 1e-7; + abs_tol_ = 1e-9; + this->max_steps_ = 2000; + + owns_components_ = true; + + // Add electrical buses + for (const auto& busdata : data.bus) + { + BusBase* bus = BusFactory::create(busdata); + addBus(bus); + } + + // Add branches + for (const auto& branchdata : data.branch) + { + auto* branch = new Branch(getBus(branchdata.bus1_id), getBus(branchdata.bus2_id), branchdata); + addComponent(branch); + } + + // Add loads + for (const auto& loaddata : data.load) + { + auto* load = new Load(getBus(loaddata.bus_id), loaddata); + addComponent(load); + } + + // Add generators + for (const auto& gendata : data.genrou) + { + auto* gen = new Genrou(getBus(gendata.bus_id), gendata); + addComponent(gen); + } + + // Add faults + for (const auto& faultdata : data.bus_fault) + { + auto* fault = new BusFault(getBus(faultdata.bus_id), faultdata); + addFault(fault); + } + } + /** * @brief Destructor for the system model + * + * If the SystemModel owns the components, it needs to delete them upon + * destructor call. */ virtual ~SystemModel() { + if (owns_components_) + { + for (auto component : components_) + { + delete component; + } + + for (auto bus : buses_) + { + delete bus; + } + } } /** @@ -648,9 +727,39 @@ namespace GridKit components_.push_back(component); } + void addFault(component_type* component) + { + components_.push_back(component); + faults_.push_back(component); + } + + bus_type* getBus(IdxT busid) + { + // Need to implement mapping of bus IDs to buses in the system model + assert((buses_[busid])->busID() == busid); + return buses_[busid]; + } + + /** + * @brief Return pointer to a bus fault model + * + * This function is used to provide easier access to setting and + * clearing faults from the SystemModel interface. + * + * @warning This is a hack to get access to bus faults in examples. + * A more comprehensive solution is needed. + */ + BusFault* getBusFault(IdxT fault_id) + { + return dynamic_cast*>(faults_[fault_id]); + } + private: std::vector buses_; std::vector components_; + std::vector faults_; + + bool owns_components_{false}; }; // class SystemModel diff --git a/src/Model/PhasorDynamics/SystemModelData.hpp b/src/Model/PhasorDynamics/SystemModelData.hpp new file mode 100644 index 000000000..593459432 --- /dev/null +++ b/src/Model/PhasorDynamics/SystemModelData.hpp @@ -0,0 +1,45 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +namespace GridKit +{ + namespace PhasorDynamics + { + template + struct SystemModelData + { + using BranchDataT = BranchData; + using BusDataT = BusData; + using BusFaultDataT = BusFaultData; + using GenrouDataT = GenrouData; + using TurbineGovDataT = TurbineGovData; + using LoadDataT = LoadData; + + // Header info + unsigned short format_version; + unsigned short format_revision; + std::string case_name; + std::string case_date_time; + std::string case_description; + std::string case_comments; + RealT freq_base; + RealT va_base; + + // Bus data + std::vector bus; + + // Component data + std::vector branch; + std::vector bus_fault; + std::vector genrou; + std::vector gov; + std::vector load; + }; + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PowerElectronics/Capacitor/Capacitor.cpp b/src/Model/PowerElectronics/Capacitor/Capacitor.cpp index 497c3b19b..c3ab987f2 100644 --- a/src/Model/PowerElectronics/Capacitor/Capacitor.cpp +++ b/src/Model/PowerElectronics/Capacitor/Capacitor.cpp @@ -39,9 +39,9 @@ namespace GridKit template int Capacitor::allocate() { - y_.resize(size_); - yp_.resize(size_); - f_.resize(size_); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + f_.resize(static_cast(size_)); return 0; } @@ -99,10 +99,10 @@ namespace GridKit jac_.setValues(rcord, ccord, vals); // Create dF/dy' - std::vector rcordder{0, 1, 2}; - std::vector ccordder{2, 2, 2}; - std::vector valsder{C_, -C_, -C_}; - COO_Matrix Jacder = COO_Matrix(rcordder, ccordder, valsder, 3, 3); + std::vector rcordder{0, 1, 2}; + std::vector ccordder{2, 2, 2}; + std::vector valsder{C_, -C_, -C_}; + GridKit::LinearAlgebra::COO_Matrix Jacder = GridKit::LinearAlgebra::COO_Matrix(rcordder, ccordder, valsder, 3, 3); // Perform dF/dy + \alpha dF/dy' jac_.axpy(alpha_, Jacder); diff --git a/src/Model/PowerElectronics/Capacitor/Capacitor.hpp b/src/Model/PowerElectronics/Capacitor/Capacitor.hpp index b86ed9139..1357150e5 100644 --- a/src/Model/PowerElectronics/Capacitor/Capacitor.hpp +++ b/src/Model/PowerElectronics/Capacitor/Capacitor.hpp @@ -4,7 +4,6 @@ #define _CAP_HPP_ #include -#include namespace GridKit { diff --git a/src/Model/PowerElectronics/CircuitComponent.hpp b/src/Model/PowerElectronics/CircuitComponent.hpp index 56e0d4c5a..afe3c264d 100644 --- a/src/Model/PowerElectronics/CircuitComponent.hpp +++ b/src/Model/PowerElectronics/CircuitComponent.hpp @@ -6,7 +6,6 @@ #include #include -#include namespace GridKit { @@ -197,12 +196,12 @@ namespace GridKit return f_; } - COO_Matrix& getJacobian() + GridKit::LinearAlgebra::COO_Matrix& getJacobian() { return jac_; } - const COO_Matrix& getJacobian() const + const GridKit::LinearAlgebra::COO_Matrix& getJacobian() const { return jac_; } @@ -267,7 +266,7 @@ namespace GridKit std::vector fB_; std::vector gB_; - COO_Matrix jac_; + GridKit::LinearAlgebra::COO_Matrix jac_; std::vector param_; std::vector param_up_; diff --git a/src/CircuitGraph.hpp b/src/Model/PowerElectronics/CircuitGraph.hpp similarity index 97% rename from src/CircuitGraph.hpp rename to src/Model/PowerElectronics/CircuitGraph.hpp index 26d5d6a2f..5a57104fb 100644 --- a/src/CircuitGraph.hpp +++ b/src/Model/PowerElectronics/CircuitGraph.hpp @@ -105,7 +105,7 @@ size_t CircuitGraph::amountHyperEdges() */ template -void CircuitGraph::printBiPartiteGraph(bool verbose) +void CircuitGraph::printBiPartiteGraph([[maybe_unused]] bool verbose) { std::cout << "Amount of HyperNodes: " << this->amountHyperNodes() << std::endl; diff --git a/src/Model/PowerElectronics/DistributedGenerator/DistributedGenerator.cpp b/src/Model/PowerElectronics/DistributedGenerator/DistributedGenerator.cpp index 5be1802d6..17b6955e7 100644 --- a/src/Model/PowerElectronics/DistributedGenerator/DistributedGenerator.cpp +++ b/src/Model/PowerElectronics/DistributedGenerator/DistributedGenerator.cpp @@ -57,9 +57,9 @@ namespace GridKit template int DistributedGenerator::allocate() { - y_.resize(size_); - yp_.resize(size_); - f_.resize(size_); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + f_.resize(static_cast(size_)); return 0; } @@ -186,9 +186,9 @@ namespace GridKit std::vector valsder(13, -1.0); for (int i = 0; i < 13; i++) { - rcordder[i] = i + 3; + rcordder[static_cast(i)] = static_cast(i + 3); } - COO_Matrix Jacder = COO_Matrix(rcordder, rcordder, valsder, 16, 16); + GridKit::LinearAlgebra::COO_Matrix Jacder = GridKit::LinearAlgebra::COO_Matrix(rcordder, rcordder, valsder, 16, 16); std::vector ctemp{}; std::vector rtemp{}; diff --git a/src/Model/PowerElectronics/DistributedGenerator/DistributedGenerator.hpp b/src/Model/PowerElectronics/DistributedGenerator/DistributedGenerator.hpp index 96654cf62..a75406463 100644 --- a/src/Model/PowerElectronics/DistributedGenerator/DistributedGenerator.hpp +++ b/src/Model/PowerElectronics/DistributedGenerator/DistributedGenerator.hpp @@ -4,7 +4,6 @@ #define _CAP_HPP_ #include -#include namespace GridKit { diff --git a/src/Model/PowerElectronics/InductionMotor/InductionMotor.cpp b/src/Model/PowerElectronics/InductionMotor/InductionMotor.cpp index 34e1f7438..98cecf2b6 100644 --- a/src/Model/PowerElectronics/InductionMotor/InductionMotor.cpp +++ b/src/Model/PowerElectronics/InductionMotor/InductionMotor.cpp @@ -51,9 +51,9 @@ namespace GridKit template int InductionMotor::allocate() { - y_.resize(size_); - yp_.resize(size_); - f_.resize(size_); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + f_.resize(static_cast(size_)); return 0; } diff --git a/src/Model/PowerElectronics/InductionMotor/InductionMotor.hpp b/src/Model/PowerElectronics/InductionMotor/InductionMotor.hpp index 007e7fd5d..1e02ef0c2 100644 --- a/src/Model/PowerElectronics/InductionMotor/InductionMotor.hpp +++ b/src/Model/PowerElectronics/InductionMotor/InductionMotor.hpp @@ -4,7 +4,6 @@ #define _IMOTOR_HPP_ #include -#include namespace GridKit { diff --git a/src/Model/PowerElectronics/Inductor/Inductor.cpp b/src/Model/PowerElectronics/Inductor/Inductor.cpp index fa9d07322..9e6f223d1 100644 --- a/src/Model/PowerElectronics/Inductor/Inductor.cpp +++ b/src/Model/PowerElectronics/Inductor/Inductor.cpp @@ -38,9 +38,9 @@ namespace GridKit int Inductor::allocate() { - y_.resize(size_); - yp_.resize(size_); - f_.resize(size_); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + f_.resize(static_cast(size_)); return 0; } @@ -98,10 +98,10 @@ namespace GridKit jac_.setValues(rcord, ccord, vals); // Create dF/dy' - std::vector rcordder{2}; - std::vector ccordder{2}; - std::vector valsder{-L_}; - COO_Matrix Jacder = COO_Matrix(rcordder, ccordder, valsder, 3, 3); + std::vector rcordder{2}; + std::vector ccordder{2}; + std::vector valsder{-L_}; + GridKit::LinearAlgebra::COO_Matrix Jacder = GridKit::LinearAlgebra::COO_Matrix(rcordder, ccordder, valsder, 3, 3); // Perform dF/dy + \alpha dF/dy' jac_.axpy(alpha_, Jacder); diff --git a/src/Model/PowerElectronics/Inductor/Inductor.hpp b/src/Model/PowerElectronics/Inductor/Inductor.hpp index c40920b0f..685e69bb3 100644 --- a/src/Model/PowerElectronics/Inductor/Inductor.hpp +++ b/src/Model/PowerElectronics/Inductor/Inductor.hpp @@ -4,7 +4,6 @@ #define _IND_HPP_ #include -#include namespace GridKit { diff --git a/src/Model/PowerElectronics/LinearTransformer/LinearTransformer.cpp b/src/Model/PowerElectronics/LinearTransformer/LinearTransformer.cpp index 189dc1d63..600df6292 100644 --- a/src/Model/PowerElectronics/LinearTransformer/LinearTransformer.cpp +++ b/src/Model/PowerElectronics/LinearTransformer/LinearTransformer.cpp @@ -53,9 +53,9 @@ namespace GridKit template int LinearTransformer::allocate() { - y_.resize(size_); - yp_.resize(size_); - f_.resize(size_); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + f_.resize(static_cast(size_)); return 0; } diff --git a/src/Model/PowerElectronics/LinearTransformer/LinearTransformer.hpp b/src/Model/PowerElectronics/LinearTransformer/LinearTransformer.hpp index b1e9c57c2..7be8bd59c 100644 --- a/src/Model/PowerElectronics/LinearTransformer/LinearTransformer.hpp +++ b/src/Model/PowerElectronics/LinearTransformer/LinearTransformer.hpp @@ -4,7 +4,6 @@ #define _LTRANS_HPP_ #include -#include namespace GridKit { diff --git a/src/Model/PowerElectronics/MicrogridBusDQ/MicrogridBusDQ.cpp b/src/Model/PowerElectronics/MicrogridBusDQ/MicrogridBusDQ.cpp index 3de0b9e1a..9706fd76d 100644 --- a/src/Model/PowerElectronics/MicrogridBusDQ/MicrogridBusDQ.cpp +++ b/src/Model/PowerElectronics/MicrogridBusDQ/MicrogridBusDQ.cpp @@ -42,9 +42,9 @@ namespace GridKit template int MicrogridBusDQ::allocate() { - y_.resize(size_); - yp_.resize(size_); - f_.resize(size_); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + f_.resize(static_cast(size_)); return 0; } diff --git a/src/Model/PowerElectronics/MicrogridBusDQ/MicrogridBusDQ.hpp b/src/Model/PowerElectronics/MicrogridBusDQ/MicrogridBusDQ.hpp index 46173c5ab..150618c29 100644 --- a/src/Model/PowerElectronics/MicrogridBusDQ/MicrogridBusDQ.hpp +++ b/src/Model/PowerElectronics/MicrogridBusDQ/MicrogridBusDQ.hpp @@ -4,7 +4,6 @@ #define _VIRBUSDQ_HPP_ #include -#include namespace GridKit { diff --git a/src/Model/PowerElectronics/MicrogridLine/MicrogridLine.cpp b/src/Model/PowerElectronics/MicrogridLine/MicrogridLine.cpp index 030668ea0..946dd6ec5 100644 --- a/src/Model/PowerElectronics/MicrogridLine/MicrogridLine.cpp +++ b/src/Model/PowerElectronics/MicrogridLine/MicrogridLine.cpp @@ -46,9 +46,9 @@ namespace GridKit template int MicrogridLine::allocate() { - y_.resize(size_); - yp_.resize(size_); - f_.resize(size_); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + f_.resize(static_cast(size_)); return 0; } @@ -126,10 +126,10 @@ namespace GridKit jac_.setValues(rcord, ccor2, vals); // Create -dF/dy' - std::vector rcordder{5, 6}; - std::vector ccordder{5, 6}; - std::vector valsder{-1.0, -1.0}; - COO_Matrix Jacder = COO_Matrix(rcordder, ccordder, valsder, 7, 7); + std::vector rcordder{5, 6}; + std::vector ccordder{5, 6}; + std::vector valsder{-1.0, -1.0}; + GridKit::LinearAlgebra::COO_Matrix Jacder = GridKit::LinearAlgebra::COO_Matrix(rcordder, ccordder, valsder, 7, 7); // Perform dF/dy + \alpha dF/dy' jac_.axpy(alpha_, Jacder); diff --git a/src/Model/PowerElectronics/MicrogridLine/MicrogridLine.hpp b/src/Model/PowerElectronics/MicrogridLine/MicrogridLine.hpp index 14d29b85d..66304c59e 100644 --- a/src/Model/PowerElectronics/MicrogridLine/MicrogridLine.hpp +++ b/src/Model/PowerElectronics/MicrogridLine/MicrogridLine.hpp @@ -4,7 +4,6 @@ #define _TRANLINE_HPP_ #include -#include namespace GridKit { diff --git a/src/Model/PowerElectronics/MicrogridLoad/MicrogridLoad.cpp b/src/Model/PowerElectronics/MicrogridLoad/MicrogridLoad.cpp index f36dd8895..9de3cd8a5 100644 --- a/src/Model/PowerElectronics/MicrogridLoad/MicrogridLoad.cpp +++ b/src/Model/PowerElectronics/MicrogridLoad/MicrogridLoad.cpp @@ -44,9 +44,9 @@ namespace GridKit template int MicrogridLoad::allocate() { - y_.resize(size_); - yp_.resize(size_); - f_.resize(size_); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + f_.resize(static_cast(size_)); return 0; } @@ -121,10 +121,10 @@ namespace GridKit jac_.setValues(rcord, ccor2, vals); // Create -dF/dy' - std::vector rcordder{3, 4}; - std::vector ccordder{3, 4}; - std::vector valsder{-1.0, -1.0}; - COO_Matrix Jacder = COO_Matrix(rcordder, ccordder, valsder, 5, 5); + std::vector rcordder{3, 4}; + std::vector ccordder{3, 4}; + std::vector valsder{-1.0, -1.0}; + GridKit::LinearAlgebra::COO_Matrix Jacder = GridKit::LinearAlgebra::COO_Matrix(rcordder, ccordder, valsder, 5, 5); // Perform dF/dy + \alpha dF/dy' jac_.axpy(alpha_, Jacder); diff --git a/src/Model/PowerElectronics/MicrogridLoad/MicrogridLoad.hpp b/src/Model/PowerElectronics/MicrogridLoad/MicrogridLoad.hpp index 685a05044..e05764d52 100644 --- a/src/Model/PowerElectronics/MicrogridLoad/MicrogridLoad.hpp +++ b/src/Model/PowerElectronics/MicrogridLoad/MicrogridLoad.hpp @@ -4,7 +4,6 @@ #define _TRANLOAD_HPP_ #include -#include namespace GridKit { diff --git a/src/Model/PowerElectronics/Resistor/Resistor.cpp b/src/Model/PowerElectronics/Resistor/Resistor.cpp index 6549ec123..832297d01 100644 --- a/src/Model/PowerElectronics/Resistor/Resistor.cpp +++ b/src/Model/PowerElectronics/Resistor/Resistor.cpp @@ -37,9 +37,9 @@ namespace GridKit template int Resistor::allocate() { - y_.resize(size_); - yp_.resize(size_); - f_.resize(size_); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + f_.resize(static_cast(size_)); return 0; } diff --git a/src/Model/PowerElectronics/Resistor/Resistor.hpp b/src/Model/PowerElectronics/Resistor/Resistor.hpp index 0821b992e..061863516 100644 --- a/src/Model/PowerElectronics/Resistor/Resistor.hpp +++ b/src/Model/PowerElectronics/Resistor/Resistor.hpp @@ -4,7 +4,6 @@ #define _RES_HPP_ #include -#include namespace GridKit { diff --git a/src/Model/PowerElectronics/SynchronousMachine/SynchronousMachine.cpp b/src/Model/PowerElectronics/SynchronousMachine/SynchronousMachine.cpp index c22ecc0bf..16b217ec9 100644 --- a/src/Model/PowerElectronics/SynchronousMachine/SynchronousMachine.cpp +++ b/src/Model/PowerElectronics/SynchronousMachine/SynchronousMachine.cpp @@ -69,9 +69,9 @@ namespace GridKit template int SynchronousMachine::allocate() { - y_.resize(size_); - yp_.resize(size_); - f_.resize(size_); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + f_.resize(static_cast(size_)); return 0; } @@ -101,9 +101,11 @@ namespace GridKit template int SynchronousMachine::evaluateResidual() { - ScalarT rkq1 = std::get<0>(Rkq_); + ScalarT rkq1 = std::get<0>(Rkq_); + [[maybe_unused]] ScalarT rkq2 = std::get<1>(Rkq_); ScalarT llkq1 = std::get<0>(Llkq_); + [[maybe_unused]] ScalarT llkq2 = std::get<1>(Llkq_); ScalarT cos1 = cos((P_ / 2.0) * y_[5]); diff --git a/src/Model/PowerElectronics/SynchronousMachine/SynchronousMachine.hpp b/src/Model/PowerElectronics/SynchronousMachine/SynchronousMachine.hpp index 74766d155..2c98384bc 100644 --- a/src/Model/PowerElectronics/SynchronousMachine/SynchronousMachine.hpp +++ b/src/Model/PowerElectronics/SynchronousMachine/SynchronousMachine.hpp @@ -6,7 +6,6 @@ #include #include -#include namespace GridKit { diff --git a/src/Model/PowerElectronics/SystemModelPowerElectronics.hpp b/src/Model/PowerElectronics/SystemModelPowerElectronics.hpp index 105483094..7c82ec70d 100644 --- a/src/Model/PowerElectronics/SystemModelPowerElectronics.hpp +++ b/src/Model/PowerElectronics/SystemModelPowerElectronics.hpp @@ -6,8 +6,8 @@ #include #include -#include #include +#include #include namespace GridKit diff --git a/src/Model/PowerElectronics/TransmissionLine/TransmissionLine.cpp b/src/Model/PowerElectronics/TransmissionLine/TransmissionLine.cpp index 85ec9151a..399c1a8a7 100644 --- a/src/Model/PowerElectronics/TransmissionLine/TransmissionLine.cpp +++ b/src/Model/PowerElectronics/TransmissionLine/TransmissionLine.cpp @@ -50,9 +50,9 @@ namespace GridKit template int TransmissionLine::allocate() { - y_.resize(size_); - yp_.resize(size_); - f_.resize(size_); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + f_.resize(static_cast(size_)); return 0; } diff --git a/src/Model/PowerElectronics/TransmissionLine/TransmissionLine.hpp b/src/Model/PowerElectronics/TransmissionLine/TransmissionLine.hpp index badd0cf9d..186106926 100644 --- a/src/Model/PowerElectronics/TransmissionLine/TransmissionLine.hpp +++ b/src/Model/PowerElectronics/TransmissionLine/TransmissionLine.hpp @@ -4,7 +4,6 @@ #define _TRANLINE_HPP_ #include -#include namespace GridKit { diff --git a/src/Model/PowerElectronics/VoltageSource/VoltageSource.cpp b/src/Model/PowerElectronics/VoltageSource/VoltageSource.cpp index 8a2adaeb1..8f45852c7 100644 --- a/src/Model/PowerElectronics/VoltageSource/VoltageSource.cpp +++ b/src/Model/PowerElectronics/VoltageSource/VoltageSource.cpp @@ -37,9 +37,9 @@ namespace GridKit template int VoltageSource::allocate() { - y_.resize(size_); - yp_.resize(size_); - f_.resize(size_); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + f_.resize(static_cast(size_)); return 0; } diff --git a/src/Model/PowerElectronics/VoltageSource/VoltageSource.hpp b/src/Model/PowerElectronics/VoltageSource/VoltageSource.hpp index d3b630a07..03d7a1e08 100644 --- a/src/Model/PowerElectronics/VoltageSource/VoltageSource.hpp +++ b/src/Model/PowerElectronics/VoltageSource/VoltageSource.hpp @@ -4,7 +4,6 @@ #define _VOSO_HPP_ #include -#include namespace GridKit { diff --git a/src/Model/PowerFlow/Branch/Branch.cpp b/src/Model/PowerFlow/Branch/Branch.cpp index 08b943264..407db8152 100644 --- a/src/Model/PowerFlow/Branch/Branch.cpp +++ b/src/Model/PowerFlow/Branch/Branch.cpp @@ -5,7 +5,7 @@ #include #include -#include +#include namespace GridKit { diff --git a/src/Model/PowerFlow/Branch/Branch.hpp b/src/Model/PowerFlow/Branch/Branch.hpp index d6500bddf..1a586a830 100644 --- a/src/Model/PowerFlow/Branch/Branch.hpp +++ b/src/Model/PowerFlow/Branch/Branch.hpp @@ -10,7 +10,7 @@ namespace GridKit template class BaseBus; - namespace PowerSystemData + namespace PowerFlowData { template struct BranchData; @@ -43,7 +43,7 @@ namespace GridKit using bus_type = BaseBus; using real_type = typename ModelEvaluatorImpl::real_type; - using BranchData = GridKit::PowerSystemData::BranchData; + using BranchData = GridKit::PowerFlowData::BranchData; public: Branch(bus_type* bus1, bus_type* bus2); @@ -63,7 +63,7 @@ namespace GridKit // int evaluateAdjointJacobian(); int evaluateAdjointIntegrand(); - void updateTime(real_type t, real_type a) + void updateTime(real_type /* t */, real_type /* a */) { } diff --git a/src/Model/PowerFlow/Bus/BusFactory.hpp b/src/Model/PowerFlow/Bus/BusFactory.hpp index 5a1c6e95b..afd16c685 100644 --- a/src/Model/PowerFlow/Bus/BusFactory.hpp +++ b/src/Model/PowerFlow/Bus/BusFactory.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include namespace GridKit { @@ -14,7 +14,7 @@ namespace GridKit { public: using real_type = typename ModelEvaluatorImpl::real_type; - using BusData = GridKit::PowerSystemData::BusData; + using BusData = GridKit::PowerFlowData::BusData; BusFactory() = delete; diff --git a/src/Model/PowerFlow/Bus/BusPQ.cpp b/src/Model/PowerFlow/Bus/BusPQ.cpp index 207c304df..7b53a9c89 100644 --- a/src/Model/PowerFlow/Bus/BusPQ.cpp +++ b/src/Model/PowerFlow/Bus/BusPQ.cpp @@ -70,14 +70,14 @@ namespace GridKit int BusPQ::allocate() { // std::cout << "Allocate PQ bus ..." << std::endl; - f_.resize(size_); - y_.resize(size_); - yp_.resize(size_); - tag_.resize(size_); - - fB_.resize(size_); - yB_.resize(size_); - ypB_.resize(size_); + f_.resize(static_cast(size_)); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + tag_.resize(static_cast(size_)); + + fB_.resize(static_cast(size_)); + yB_.resize(static_cast(size_)); + ypB_.resize(static_cast(size_)); return 0; } diff --git a/src/Model/PowerFlow/Bus/BusPQ.hpp b/src/Model/PowerFlow/Bus/BusPQ.hpp index fd96ca396..903fe9d5b 100644 --- a/src/Model/PowerFlow/Bus/BusPQ.hpp +++ b/src/Model/PowerFlow/Bus/BusPQ.hpp @@ -3,7 +3,7 @@ #define _BUS_PQ_HPP_ #include "BaseBus.hpp" -#include +#include namespace GridKit { @@ -29,7 +29,7 @@ namespace GridKit public: using real_type = typename ModelEvaluatorImpl::real_type; - using BusData = GridKit::PowerSystemData::BusData; + using BusData = GridKit::PowerFlowData::BusData; BusPQ(); BusPQ(ScalarT V, ScalarT theta); diff --git a/src/Model/PowerFlow/Bus/BusPV.cpp b/src/Model/PowerFlow/Bus/BusPV.cpp index 1552fb06d..c3312c70c 100644 --- a/src/Model/PowerFlow/Bus/BusPV.cpp +++ b/src/Model/PowerFlow/Bus/BusPV.cpp @@ -68,14 +68,14 @@ namespace GridKit int BusPV::allocate() { // std::cout << "Allocate PV bus ..." << std::endl; - f_.resize(size_); - y_.resize(size_); - yp_.resize(size_); - tag_.resize(size_); - - fB_.resize(size_); - yB_.resize(size_); - ypB_.resize(size_); + f_.resize(static_cast(size_)); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + tag_.resize(static_cast(size_)); + + fB_.resize(static_cast(size_)); + yB_.resize(static_cast(size_)); + ypB_.resize(static_cast(size_)); return 0; } diff --git a/src/Model/PowerFlow/Bus/BusPV.hpp b/src/Model/PowerFlow/Bus/BusPV.hpp index ac180e926..bbfe87aad 100644 --- a/src/Model/PowerFlow/Bus/BusPV.hpp +++ b/src/Model/PowerFlow/Bus/BusPV.hpp @@ -5,7 +5,7 @@ #include #include "BaseBus.hpp" -#include +#include namespace GridKit { @@ -31,7 +31,7 @@ namespace GridKit public: using real_type = typename ModelEvaluatorImpl::real_type; - using BusData = GridKit::PowerSystemData::BusData; + using BusData = GridKit::PowerFlowData::BusData; BusPV(); BusPV(ScalarT V, ScalarT theta0); diff --git a/src/Model/PowerFlow/Bus/BusSlack.hpp b/src/Model/PowerFlow/Bus/BusSlack.hpp index 96d2ba66c..aeaf0a62b 100644 --- a/src/Model/PowerFlow/Bus/BusSlack.hpp +++ b/src/Model/PowerFlow/Bus/BusSlack.hpp @@ -3,7 +3,7 @@ #define _BUS_SLACK_HPP_ #include "BaseBus.hpp" -#include +#include namespace GridKit { @@ -29,7 +29,7 @@ namespace GridKit public: using real_type = typename ModelEvaluatorImpl::real_type; - using BusData = GridKit::PowerSystemData::BusData; + using BusData = GridKit::PowerFlowData::BusData; BusSlack(); BusSlack(ScalarT V, ScalarT theta); diff --git a/src/Model/PowerFlow/Generator/GeneratorFactory.hpp b/src/Model/PowerFlow/Generator/GeneratorFactory.hpp index 07d1ac4c8..fcf5ba41f 100644 --- a/src/Model/PowerFlow/Generator/GeneratorFactory.hpp +++ b/src/Model/PowerFlow/Generator/GeneratorFactory.hpp @@ -5,7 +5,7 @@ #include #include #include -#include +#include namespace GridKit { @@ -15,7 +15,7 @@ namespace GridKit { public: using real_type = typename ModelEvaluatorImpl::real_type; - using GenData = GridKit::PowerSystemData::GenData; + using GenData = GridKit::PowerFlowData::GenData; GeneratorFactory() = delete; diff --git a/src/Model/PowerFlow/Generator/GeneratorPQ.hpp b/src/Model/PowerFlow/Generator/GeneratorPQ.hpp index 1561c61be..db763069f 100644 --- a/src/Model/PowerFlow/Generator/GeneratorPQ.hpp +++ b/src/Model/PowerFlow/Generator/GeneratorPQ.hpp @@ -5,7 +5,7 @@ #include "GeneratorBase.hpp" #include -#include +#include namespace GridKit { @@ -39,7 +39,7 @@ namespace GridKit using bus_type = BaseBus; using real_type = typename ModelEvaluatorImpl::real_type; - using GenData = GridKit::PowerSystemData::GenData; + using GenData = GridKit::PowerFlowData::GenData; public: GeneratorPQ(bus_type* bus, GenData& data); diff --git a/src/Model/PowerFlow/Generator/GeneratorPV.hpp b/src/Model/PowerFlow/Generator/GeneratorPV.hpp index 7882114e1..677c6034a 100644 --- a/src/Model/PowerFlow/Generator/GeneratorPV.hpp +++ b/src/Model/PowerFlow/Generator/GeneratorPV.hpp @@ -5,7 +5,7 @@ #include "GeneratorBase.hpp" #include -#include +#include namespace GridKit { @@ -39,7 +39,7 @@ namespace GridKit using bus_type = BaseBus; using real_type = typename ModelEvaluatorImpl::real_type; - using GenData = GridKit::PowerSystemData::GenData; + using GenData = GridKit::PowerFlowData::GenData; public: GeneratorPV(bus_type* bus, GenData& data); diff --git a/src/Model/PowerFlow/Generator/GeneratorSlack.cpp b/src/Model/PowerFlow/Generator/GeneratorSlack.cpp index ec1d588ac..8e995da52 100644 --- a/src/Model/PowerFlow/Generator/GeneratorSlack.cpp +++ b/src/Model/PowerFlow/Generator/GeneratorSlack.cpp @@ -17,7 +17,7 @@ namespace GridKit */ template - GeneratorSlack::GeneratorSlack(bus_type* bus, GenData& data) + GeneratorSlack::GeneratorSlack(bus_type* bus, GenData& /* data */) : bus_(bus) { // std::cout << "Create a load model with " << size_ << " variables ...\n"; diff --git a/src/Model/PowerFlow/Generator/GeneratorSlack.hpp b/src/Model/PowerFlow/Generator/GeneratorSlack.hpp index fa5b1beff..d2665d24b 100644 --- a/src/Model/PowerFlow/Generator/GeneratorSlack.hpp +++ b/src/Model/PowerFlow/Generator/GeneratorSlack.hpp @@ -1,11 +1,10 @@ #pragma once -// #include #include #include "GeneratorBase.hpp" -#include +#include namespace GridKit { @@ -39,7 +38,7 @@ namespace GridKit using bus_type = BaseBus; using real_type = typename ModelEvaluatorImpl::real_type; - using GenData = GridKit::PowerSystemData::GenData; + using GenData = GridKit::PowerFlowData::GenData; // typedef typename ModelEvaluatorImpl::real_type real_type; // typedef BaseBus bus_type; diff --git a/src/Model/PowerFlow/Generator2/Generator2.cpp b/src/Model/PowerFlow/Generator2/Generator2.cpp index 2d6b6538a..454df1dcb 100644 --- a/src/Model/PowerFlow/Generator2/Generator2.cpp +++ b/src/Model/PowerFlow/Generator2/Generator2.cpp @@ -48,7 +48,7 @@ namespace GridKit template int Generator2::allocate() { - tag_.resize(size_); + tag_.resize(static_cast(size_)); return 0; } diff --git a/src/Model/PowerFlow/Generator4/Generator4.cpp b/src/Model/PowerFlow/Generator4/Generator4.cpp index f5d5c2b17..635fc9587 100644 --- a/src/Model/PowerFlow/Generator4/Generator4.cpp +++ b/src/Model/PowerFlow/Generator4/Generator4.cpp @@ -57,7 +57,7 @@ namespace GridKit int Generator4::allocate() { // std::cout << "Allocate Generator4..." << std::endl; - tag_.resize(size_); + tag_.resize(static_cast(size_)); return 0; } @@ -143,7 +143,7 @@ namespace GridKit for (IdxT i = 4; i < size_; ++i) { - tag_[i] = false; + tag_[static_cast(i)] = false; } return 0; @@ -217,8 +217,8 @@ namespace GridKit // std::cout << "Initialize adjoint for Generator4..." << std::endl; for (IdxT i = 0; i < size_; ++i) { - yB_[i] = 0.0; - ypB_[i] = 0.0; + yB_[static_cast(i)] = 0.0; + ypB_[static_cast(i)] = 0.0; } ypB_[1] = frequencyPenaltyDer(y_[1]); diff --git a/src/Model/PowerFlow/Generator4Governor/Generator4Governor.cpp b/src/Model/PowerFlow/Generator4Governor/Generator4Governor.cpp index 3736eb77e..090e6079f 100644 --- a/src/Model/PowerFlow/Generator4Governor/Generator4Governor.cpp +++ b/src/Model/PowerFlow/Generator4Governor/Generator4Governor.cpp @@ -66,7 +66,7 @@ namespace GridKit int Generator4Governor::allocate() { // std::cout << "Allocate Gen2..." << std::endl; - tag_.resize(size_); + tag_.resize(static_cast(size_)); return 0; } @@ -111,29 +111,29 @@ namespace GridKit const ScalarT Eqp = V() * cos(delta - theta()) + Rs_ * Iq + Xdp_ * Id; // Initialize generator - y_[offsetGen_ + 0] = delta; - y_[offsetGen_ + 1] = omega_s_ + 0.2; // <~ this is hack to perturb omega - y_[offsetGen_ + 2] = Edp; - y_[offsetGen_ + 3] = Eqp; - y_[offsetGen_ + 4] = Id; - y_[offsetGen_ + 5] = Iq; - yp_[offsetGen_ + 0] = 0.0; - yp_[offsetGen_ + 1] = 0.0; - yp_[offsetGen_ + 2] = 0.0; - yp_[offsetGen_ + 3] = 0.0; - yp_[offsetGen_ + 4] = 0.0; - yp_[offsetGen_ + 5] = 0.0; + y_[static_cast(offsetGen_ + 0)] = delta; + y_[static_cast(offsetGen_ + 1)] = omega_s_ + 0.2; // <~ this is hack to perturb omega + y_[static_cast(offsetGen_ + 2)] = Edp; + y_[static_cast(offsetGen_ + 3)] = Eqp; + y_[static_cast(offsetGen_ + 4)] = Id; + y_[static_cast(offsetGen_ + 5)] = Iq; + yp_[static_cast(offsetGen_ + 0)] = 0.0; + yp_[static_cast(offsetGen_ + 1)] = 0.0; + yp_[static_cast(offsetGen_ + 2)] = 0.0; + yp_[static_cast(offsetGen_ + 3)] = 0.0; + yp_[static_cast(offsetGen_ + 4)] = 0.0; + yp_[static_cast(offsetGen_ + 5)] = 0.0; Pm0_ = Edp * Id + Eqp * Iq + (Xqp_ - Xdp_) * Id * Iq; // <~ set to steady state value Ef0_ = Eqp + (Xd_ - Xdp_) * Id; // <~ set to steady state value // Initialize governor - y_[offsetGov_ + 0] = Pm0_; - y_[offsetGov_ + 1] = 0.0; - y_[offsetGov_ + 2] = 0.0; - yp_[offsetGov_ + 0] = 0.0; - yp_[offsetGov_ + 1] = 0.0; - yp_[offsetGov_ + 2] = 0.0; + y_[static_cast(offsetGov_ + 0)] = Pm0_; + y_[static_cast(offsetGov_ + 1)] = 0.0; + y_[static_cast(offsetGov_ + 2)] = 0.0; + yp_[static_cast(offsetGov_ + 0)] = 0.0; + yp_[static_cast(offsetGov_ + 1)] = 0.0; + yp_[static_cast(offsetGov_ + 2)] = 0.0; param_[1] = K_; param_up_[1] = 20.0; @@ -153,16 +153,16 @@ namespace GridKit int Generator4Governor::tagDifferentiable() { // std::cout << "size of tag vector is " << tag_.size() << "\n"; - tag_[offsetGen_ + 0] = true; - tag_[offsetGen_ + 1] = true; - tag_[offsetGen_ + 2] = true; - tag_[offsetGen_ + 3] = true; - tag_[offsetGen_ + 4] = false; - tag_[offsetGen_ + 5] = false; + tag_[static_cast(offsetGen_ + 0)] = true; + tag_[static_cast(offsetGen_ + 1)] = true; + tag_[static_cast(offsetGen_ + 2)] = true; + tag_[static_cast(offsetGen_ + 3)] = true; + tag_[static_cast(offsetGen_ + 4)] = false; + tag_[static_cast(offsetGen_ + 5)] = false; - tag_[offsetGov_ + 0] = true; - tag_[offsetGov_ + 1] = true; - tag_[offsetGov_ + 2] = false; + tag_[static_cast(offsetGov_ + 0)] = true; + tag_[static_cast(offsetGov_ + 1)] = true; + tag_[static_cast(offsetGov_ + 2)] = false; return 0; } @@ -207,21 +207,21 @@ namespace GridKit int Generator4Governor::evaluateResidual() { // Generator equations - f_[offsetGen_ + 0] = dotDelta() - omega_b_ * (omega() - omega_s_); - f_[offsetGen_ + 1] = (2.0 * H_) / omega_s_ * dotOmega() - Lm(y_[offsetGov_ + 0]) + Eqp() * Iq() + Edp() * Id() + (-Xdp_ + Xqp_) * Id() * Iq() + D_ * (omega() - omega_s_); - f_[offsetGen_ + 2] = Tq0p_ * dotEdp() + Edp() - (Xq_ - Xqp_) * Iq(); - f_[offsetGen_ + 3] = Td0p_ * dotEqp() + Eqp() + (Xd_ - Xdp_) * Id() - Ef0_; - f_[offsetGen_ + 4] = Rs_ * Id() - Xqp_ * Iq() + V() * sin(delta() - theta()) - Edp(); - f_[offsetGen_ + 5] = Xdp_ * Id() + Rs_ * Iq() + V() * cos(delta() - theta()) - Eqp(); + f_[static_cast(offsetGen_ + 0)] = dotDelta() - omega_b_ * (omega() - omega_s_); + f_[static_cast(offsetGen_ + 1)] = (2.0 * H_) / omega_s_ * dotOmega() - Lm(y_[static_cast(offsetGov_ + 0)]) + Eqp() * Iq() + Edp() * Id() + (-Xdp_ + Xqp_) * Id() * Iq() + D_ * (omega() - omega_s_); + f_[static_cast(offsetGen_ + 2)] = Tq0p_ * dotEdp() + Edp() - (Xq_ - Xqp_) * Iq(); + f_[static_cast(offsetGen_ + 3)] = Td0p_ * dotEqp() + Eqp() + (Xd_ - Xdp_) * Id() - Ef0_; + f_[static_cast(offsetGen_ + 4)] = Rs_ * Id() - Xqp_ * Iq() + V() * sin(delta() - theta()) - Edp(); + f_[static_cast(offsetGen_ + 5)] = Xdp_ * Id() + Rs_ * Iq() + V() * cos(delta() - theta()) - Eqp(); // Bus equations P() += Pg(); Q() += Qg(); // Governor equations - f_[offsetGov_ + 0] = yp_[offsetGov_ + 0] - Ln(y_[offsetGov_ + 2]); - f_[offsetGov_ + 1] = T1() * yp_[offsetGov_ + 1] + y_[offsetGov_ + 1] - (1.0 - T2() / T1()) * (omega() - omega_s_); - f_[offsetGov_ + 2] = T3() * y_[offsetGov_ + 2] - Pm0_ + Lm(y_[offsetGov_ + 0]) + K() * y_[offsetGov_ + 1] + K() * T2() / T1() * (omega() - omega_s_); + f_[static_cast(offsetGov_ + 0)] = yp_[static_cast(offsetGov_ + 0)] - Ln(y_[static_cast(offsetGov_ + 2)]); + f_[static_cast(offsetGov_ + 1)] = T1() * yp_[static_cast(offsetGov_ + 1)] + y_[static_cast(offsetGov_ + 1)] - (1.0 - T2() / T1()) * (omega() - omega_s_); + f_[static_cast(offsetGov_ + 2)] = T3() * y_[static_cast(offsetGov_ + 2)] - Pm0_ + Lm(y_[static_cast(offsetGov_ + 0)]) + K() * y_[static_cast(offsetGov_ + 1)] + K() * T2() / T1() * (omega() - omega_s_); return 0; } @@ -253,10 +253,10 @@ namespace GridKit // std::cout << "Initialize adjoint for Generator4Governor..." << std::endl; for (IdxT i = 0; i < size_; ++i) { - yB_[i] = 0.0; - ypB_[i] = 0.0; + yB_[static_cast(i)] = 0.0; + ypB_[static_cast(i)] = 0.0; } - ypB_[offsetGen_ + 1] = frequencyPenaltyDer(omega()); + ypB_[static_cast(offsetGen_ + 1)] = frequencyPenaltyDer(omega()); return 0; } @@ -296,26 +296,26 @@ namespace GridKit ScalarT cosPhi = cos(delta() - theta()); // Generator adjoint - fB_[offsetGen_ + 0] = ypB_[offsetGen_ + 0] - yB_[offsetGen_ + 4] * V() * cosPhi + yB_[offsetGen_ + 5] * V() * sinPhi; - fB_[offsetGen_ + 1] = 2.0 * H_ / omega_s_ * ypB_[offsetGen_ + 1] + yB_[offsetGen_ + 0] * omega_b_ - yB_[offsetGen_ + 1] * D_ + frequencyPenaltyDer(omega()) - + yB_[offsetGov_ + 1] * (1.0 - T2() / T1()) - yB_[offsetGov_ + 2] * K() * T2() / T1(); - fB_[offsetGen_ + 2] = Tq0p_ * ypB_[offsetGen_ + 2] - yB_[offsetGen_ + 1] * Id() - yB_[offsetGen_ + 2] + yB_[offsetGen_ + 4] - + lambdaP() * Id() - lambdaQ() * Iq(); - fB_[offsetGen_ + 3] = Td0p_ * ypB_[offsetGen_ + 3] - yB_[offsetGen_ + 1] * Iq() - yB_[offsetGen_ + 3] + yB_[offsetGen_ + 5] - + lambdaP() * Iq() + lambdaQ() * Id(); - fB_[offsetGen_ + 4] = -yB_[offsetGen_ + 1] * (Edp() + (Xqp_ - Xdp_) * Iq()) - yB_[offsetGen_ + 3] * (Xd_ - Xdp_) - yB_[offsetGen_ + 4] * Rs_ - yB_[offsetGen_ + 5] * Xdp_ - + lambdaP() * (Edp() + (Xqp_ - Xdp_) * Iq() - 2.0 * Rs_ * Id()) + lambdaQ() * (Eqp() - 2.0 * Xdp_ * Id()); - fB_[offsetGen_ + 5] = -yB_[offsetGen_ + 1] * (Eqp() + (Xqp_ - Xdp_) * Id()) + yB_[offsetGen_ + 2] * (Xq_ - Xqp_) + yB_[offsetGen_ + 4] * Xqp_ - yB_[offsetGen_ + 5] * Rs_ - + lambdaP() * (Eqp() + (Xqp_ - Xdp_) * Id() - 2.0 * Rs_ * Iq()) - lambdaQ() * (Edp() + 2.0 * Xqp_ * Iq()); + fB_[static_cast(offsetGen_ + 0)] = ypB_[static_cast(offsetGen_ + 0)] - yB_[static_cast(offsetGen_ + 4)] * V() * cosPhi + yB_[static_cast(offsetGen_ + 5)] * V() * sinPhi; + fB_[static_cast(offsetGen_ + 1)] = 2.0 * H_ / omega_s_ * ypB_[static_cast(offsetGen_ + 1)] + yB_[static_cast(offsetGen_ + 0)] * omega_b_ - yB_[static_cast(offsetGen_ + 1)] * D_ + frequencyPenaltyDer(omega()) + + yB_[static_cast(offsetGov_ + 1)] * (1.0 - T2() / T1()) - yB_[static_cast(offsetGov_ + 2)] * K() * T2() / T1(); + fB_[static_cast(offsetGen_ + 2)] = Tq0p_ * ypB_[static_cast(offsetGen_ + 2)] - yB_[static_cast(offsetGen_ + 1)] * Id() - yB_[static_cast(offsetGen_ + 2)] + yB_[static_cast(offsetGen_ + 4)] + + lambdaP() * Id() - lambdaQ() * Iq(); + fB_[static_cast(offsetGen_ + 3)] = Td0p_ * ypB_[static_cast(offsetGen_ + 3)] - yB_[static_cast(offsetGen_ + 1)] * Iq() - yB_[static_cast(offsetGen_ + 3)] + yB_[static_cast(offsetGen_ + 5)] + + lambdaP() * Iq() + lambdaQ() * Id(); + fB_[static_cast(offsetGen_ + 4)] = -yB_[static_cast(offsetGen_ + 1)] * (Edp() + (Xqp_ - Xdp_) * Iq()) - yB_[static_cast(offsetGen_ + 3)] * (Xd_ - Xdp_) - yB_[static_cast(offsetGen_ + 4)] * Rs_ - yB_[static_cast(offsetGen_ + 5)] * Xdp_ + + lambdaP() * (Edp() + (Xqp_ - Xdp_) * Iq() - 2.0 * Rs_ * Id()) + lambdaQ() * (Eqp() - 2.0 * Xdp_ * Id()); + fB_[static_cast(offsetGen_ + 5)] = -yB_[static_cast(offsetGen_ + 1)] * (Eqp() + (Xqp_ - Xdp_) * Id()) + yB_[static_cast(offsetGen_ + 2)] * (Xq_ - Xqp_) + yB_[static_cast(offsetGen_ + 4)] * Xqp_ - yB_[static_cast(offsetGen_ + 5)] * Rs_ + + lambdaP() * (Eqp() + (Xqp_ - Xdp_) * Id() - 2.0 * Rs_ * Iq()) - lambdaQ() * (Edp() + 2.0 * Xqp_ * Iq()); // Bus adjoint - PB() += (-yB_[offsetGen_ + 4] * sinPhi - yB_[offsetGen_ + 5] * cosPhi); - QB() += (yB_[offsetGen_ + 4] * V() * cosPhi - yB_[offsetGen_ + 5] * V() * sinPhi); + PB() += (-yB_[static_cast(offsetGen_ + 4)] * sinPhi - yB_[static_cast(offsetGen_ + 5)] * cosPhi); + QB() += (yB_[static_cast(offsetGen_ + 4)] * V() * cosPhi - yB_[static_cast(offsetGen_ + 5)] * V() * sinPhi); // Governor adjoint - fB_[offsetGov_ + 0] = ypB_[offsetGov_ + 0] - yB_[offsetGov_ + 2] * dLm(y_[offsetGov_ + 0]) + yB_[offsetGen_ + 1] * dLm(y_[offsetGov_ + 0]); - fB_[offsetGov_ + 1] = ypB_[offsetGov_ + 1] * T1() - yB_[offsetGov_ + 1] - yB_[offsetGov_ + 2] * K(); - fB_[offsetGov_ + 2] = yB_[offsetGov_ + 0] * dLn(y_[offsetGov_ + 2]) - yB_[offsetGov_ + 2] * T3(); + fB_[static_cast(offsetGov_ + 0)] = ypB_[static_cast(offsetGov_ + 0)] - yB_[static_cast(offsetGov_ + 2)] * dLm(y_[static_cast(offsetGov_ + 0)]) + yB_[static_cast(offsetGen_ + 1)] * dLm(y_[static_cast(offsetGov_ + 0)]); + fB_[static_cast(offsetGov_ + 1)] = ypB_[static_cast(offsetGov_ + 1)] * T1() - yB_[static_cast(offsetGov_ + 1)] - yB_[static_cast(offsetGov_ + 2)] * K(); + fB_[static_cast(offsetGov_ + 2)] = yB_[static_cast(offsetGov_ + 0)] * dLn(y_[static_cast(offsetGov_ + 2)]) - yB_[static_cast(offsetGov_ + 2)] * T3(); return 0; } @@ -334,10 +334,10 @@ namespace GridKit // std::cout << "Evaluate adjoint Integrand for Gen2..." << std::endl; // K adjoint - gB_[1] = -yB_[offsetGov_ + 2] * (y_[offsetGov_ + 1] + T2() / T1() * (omega() - omega_s_)); + gB_[1] = -yB_[static_cast(offsetGov_ + 2)] * (y_[static_cast(offsetGov_ + 1)] + T2() / T1() * (omega() - omega_s_)); // T2 adjoint - gB_[0] = -yB_[offsetGov_ + 1] * (omega() - omega_s_) / T1() - yB_[offsetGov_ + 2] * K() / T1() * (omega() - omega_s_); + gB_[0] = -yB_[static_cast(offsetGov_ + 1)] * (omega() - omega_s_) / T1() - yB_[static_cast(offsetGov_ + 2)] * K() / T1() * (omega() - omega_s_); return 0; } diff --git a/src/Model/PowerFlow/Generator4Governor/Generator4Governor.hpp b/src/Model/PowerFlow/Generator4Governor/Generator4Governor.hpp index 948f6f67b..5464526a1 100644 --- a/src/Model/PowerFlow/Generator4Governor/Generator4Governor.hpp +++ b/src/Model/PowerFlow/Generator4Governor/Generator4Governor.hpp @@ -151,52 +151,52 @@ namespace GridKit const ScalarT dotDelta() const { - return yp_[offsetGen_ + 0]; + return yp_[static_cast(offsetGen_ + 0)]; } const ScalarT dotOmega() const { - return yp_[offsetGen_ + 1]; + return yp_[static_cast(offsetGen_ + 1)]; } const ScalarT dotEdp() const { - return yp_[offsetGen_ + 2]; + return yp_[static_cast(offsetGen_ + 2)]; } const ScalarT dotEqp() const { - return yp_[offsetGen_ + 3]; + return yp_[static_cast(offsetGen_ + 3)]; } const ScalarT delta() const { - return y_[offsetGen_ + 0]; + return y_[static_cast(offsetGen_ + 0)]; } const ScalarT omega() const { - return y_[offsetGen_ + 1]; + return y_[static_cast(offsetGen_ + 1)]; } const ScalarT Edp() const { - return y_[offsetGen_ + 2]; + return y_[static_cast(offsetGen_ + 2)]; } const ScalarT Eqp() const { - return y_[offsetGen_ + 3]; + return y_[static_cast(offsetGen_ + 3)]; } const ScalarT Id() const { - return y_[offsetGen_ + 4]; + return y_[static_cast(offsetGen_ + 4)]; } const ScalarT Iq() const { - return y_[offsetGen_ + 5]; + return y_[static_cast(offsetGen_ + 5)]; } const ScalarT K() const diff --git a/src/Model/PowerFlow/Generator4Param/Generator4Param.cpp b/src/Model/PowerFlow/Generator4Param/Generator4Param.cpp index dbd49afa9..bbb7faa99 100644 --- a/src/Model/PowerFlow/Generator4Param/Generator4Param.cpp +++ b/src/Model/PowerFlow/Generator4Param/Generator4Param.cpp @@ -53,7 +53,7 @@ namespace GridKit int Generator4Param::allocate() { // std::cout << "Allocate Generator4Param..." << std::endl; - tag_.resize(size_); + tag_.resize(static_cast(size_)); return 0; } @@ -143,7 +143,7 @@ namespace GridKit for (IdxT i = 4; i < size_; ++i) { - tag_[i] = false; + tag_[static_cast(i)] = false; } return 0; @@ -219,8 +219,8 @@ namespace GridKit // std::cout << "Initialize adjoint for Generator4Param..." << std::endl; for (IdxT i = 0; i < size_; ++i) { - yB_[i] = 0.0; - ypB_[i] = 0.0; + yB_[static_cast(i)] = 0.0; + ypB_[static_cast(i)] = 0.0; } // ypB_[1] = frequencyPenaltyDer(y_[1]); ypB_[2] = -trajectoryPenaltyDerEdp(time_) / Tq0p_; @@ -316,8 +316,8 @@ namespace GridKit size_t N = table_.size(); double ti = table_[0][0]; double tf = table_[N - 1][0]; - double dt = (tf - ti) / (N - 1); - int n = std::trunc(t / tf * (N - 1.0)); + double dt = (tf - ti) / static_cast(N - 1); + int n = static_cast(std::trunc(t / tf * static_cast(N - 1))); double Edp_est = 0.0; double Eqp_est = 0.0; @@ -325,16 +325,16 @@ namespace GridKit if (t >= ti && t < tf) { // Interpolate from look-up table - Edp_est = (table_[n + 1][3] - table_[n][3]) / (table_[n + 1][0] - table_[n][0]) * (t - table_[n][0]) + table_[n][3]; - Eqp_est = (table_[n + 1][4] - table_[n][4]) / (table_[n + 1][0] - table_[n][0]) * (t - table_[n][0]) + table_[n][4]; + Edp_est = (table_[static_cast(n + 1)][3] - table_[static_cast(n)][3]) / (table_[static_cast(n + 1)][0] - table_[static_cast(n)][0]) * (t - table_[static_cast(n)][0]) + table_[static_cast(n)][3]; + Eqp_est = (table_[static_cast(n + 1)][4] - table_[static_cast(n)][4]) / (table_[static_cast(n + 1)][0] - table_[static_cast(n)][0]) * (t - table_[static_cast(n)][0]) + table_[static_cast(n)][4]; } else { if (tf <= t && t < tf + dt) { // Extrapolate from look-up table - Edp_est = (table_[n][3] - table_[n - 1][3]) / (table_[n][0] - table_[n - 1][0]) * (t - table_[n - 1][0]) + table_[n - 1][3]; - Eqp_est = (table_[n][4] - table_[n - 1][4]) / (table_[n][0] - table_[n - 1][0]) * (t - table_[n - 1][0]) + table_[n - 1][4]; + Edp_est = (table_[static_cast(n)][3] - table_[static_cast(n - 1)][3]) / (table_[static_cast(n)][0] - table_[static_cast(n - 1)][0]) * (t - table_[static_cast(n - 1)][0]) + table_[static_cast(n - 1)][3]; + Eqp_est = (table_[static_cast(n)][4] - table_[static_cast(n - 1)][4]) / (table_[static_cast(n)][0] - table_[static_cast(n - 1)][0]) * (t - table_[static_cast(n - 1)][0]) + table_[static_cast(n - 1)][4]; } else { @@ -354,19 +354,19 @@ namespace GridKit size_t N = table_.size(); double ti = table_[0][0]; double tf = table_[N - 1][0]; - double dt = (tf - ti) / (N - 1); - int n = std::trunc(t / tf * (N - 1.0)); + double dt = (tf - ti) / static_cast(N - 1); + int n = static_cast(std::trunc(t / tf * static_cast(N - 1))); double Edp_est = 0.0; if (t >= ti && t < tf) { - Edp_est = (table_[n + 1][3] - table_[n][3]) / (table_[n + 1][0] - table_[n][0]) * (t - table_[n][0]) + table_[n][3]; + Edp_est = (table_[static_cast(n + 1)][3] - table_[static_cast(n)][3]) / (table_[static_cast(n + 1)][0] - table_[static_cast(n)][0]) * (t - table_[static_cast(n)][0]) + table_[static_cast(n)][3]; } else { if (tf <= t && t < tf + dt) { - Edp_est = (table_[n][3] - table_[n - 1][3]) / (table_[n][0] - table_[n - 1][0]) * (t - table_[n - 1][0]) + table_[n - 1][3]; + Edp_est = (table_[static_cast(n)][3] - table_[static_cast(n - 1)][3]) / (table_[static_cast(n)][0] - table_[static_cast(n - 1)][0]) * (t - table_[static_cast(n - 1)][0]) + table_[static_cast(n - 1)][3]; } else { @@ -385,19 +385,19 @@ namespace GridKit size_t N = table_.size(); double ti = table_[0][0]; double tf = table_[N - 1][0]; - double dt = (tf - ti) / (N - 1); - int n = std::trunc(t / tf * (N - 1.0)); + double dt = (tf - ti) / static_cast(N - 1); + int n = static_cast(std::trunc(t / tf * static_cast(N - 1))); double Eqp_est = 0.0; if (t >= ti && t < tf) { - Eqp_est = (table_[n + 1][4] - table_[n][4]) / (table_[n + 1][0] - table_[n][0]) * (t - table_[n][0]) + table_[n][4]; + Eqp_est = (table_[static_cast(n + 1)][4] - table_[static_cast(n)][4]) / (table_[static_cast(n + 1)][0] - table_[static_cast(n)][0]) * (t - table_[static_cast(n)][0]) + table_[static_cast(n)][4]; } else { if (tf <= t && t < tf + dt) { - Eqp_est = (table_[n][4] - table_[n - 1][4]) / (table_[n][0] - table_[n - 1][0]) * (t - table_[n - 1][0]) + table_[n - 1][4]; + Eqp_est = (table_[static_cast(n)][4] - table_[static_cast(n - 1)][4]) / (table_[static_cast(n)][0] - table_[static_cast(n - 1)][0]) * (t - table_[static_cast(n - 1)][0]) + table_[static_cast(n - 1)][4]; } else { diff --git a/src/Model/PowerFlow/Load/Load.hpp b/src/Model/PowerFlow/Load/Load.hpp index a9c17eb0e..b13cb1340 100644 --- a/src/Model/PowerFlow/Load/Load.hpp +++ b/src/Model/PowerFlow/Load/Load.hpp @@ -3,7 +3,7 @@ #define _LOAD_HPP_ #include -#include +#include namespace GridKit { @@ -39,7 +39,7 @@ namespace GridKit // typedef BaseBus bus_type; using bus_type = BaseBus; using real_type = typename ModelEvaluatorImpl::real_type; - using LoadData = GridKit::PowerSystemData::LoadData; + using LoadData = GridKit::PowerFlowData::LoadData; public: Load(bus_type* bus, ScalarT P, ScalarT Q); diff --git a/src/Model/PowerFlow/MatpowerParser.hpp b/src/Model/PowerFlow/MatpowerParser.hpp new file mode 100644 index 000000000..ae374b8aa --- /dev/null +++ b/src/Model/PowerFlow/MatpowerParser.hpp @@ -0,0 +1,299 @@ + +/** + * @file FileIO.hpp + * @author Slaven Peles + * + * Contains definition of a utility for reading lookup tables. + * + */ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace GridKit +{ + using namespace GridKit::PowerFlowData; + + static const std::string matlab_syntax_error{ + "Only a subset of Matlab syntax is supported." + "\n\t'=' for assignment must be on the same line as the field, eg " + "`mpc.version = '2'`." + "\n\tOpen brace ('[') must be on the same line as the field for matrix " + "initialization." + "\n\tEach row of a matrix must be terminated by a semicolon."}; + + std::ostream& logs() + { +#ifndef NDEBUG + std::cerr << "[FileIO.hpp]: "; + return std::cerr; +#else + static std::ofstream ofs; + ofs.setstate(std::ios_base::badbit); + return ofs; +#endif + } + + void ltrim(std::string& s) + { + const std::string nothing = ""; + s = std::regex_replace(s, std::regex("^\\s+"), nothing); + } + + void rtrim(std::string& s) + { + const std::string nothing = ""; + s = std::regex_replace(s, std::regex("\\s+$"), nothing); + } + + void trim_matlab_comments(std::string& s) + { + const std::string nothing = ""; + s = std::regex_replace(s, std::regex("%.+"), nothing); + } + + // Retrive MATPOWER component from assignment line. + // + // For example, the string " mpc.bus = [ ... ] % Some comment" will + // return the value "bus". + std::string getMatPowerComponent(const std::string& line) + { + logs() << "Getting matpower component from line\n"; + std::regex pat("mpc.([a-zA-Z]+)\\s*=.+"); + std::smatch matches; + std::string component; + if (std::regex_match(line, matches, pat)) + { + component = matches[1].str(); + } + else + { + throw std::runtime_error(matlab_syntax_error + "\nGot line " + line); + } + ltrim(component); + rtrim(component); + return component; + } + + // Ensure that all of the given line has been consumed, and that the only + // remaining non-whitespace character left in the line is a semicolon. + void checkEndOfMatrixRow(std::istream& is) + { + std::string rest; + is >> rest; + ltrim(rest); + rtrim(rest); + if (rest != ";") + throw std::runtime_error(matlab_syntax_error); + } + + template + void readMatPowerBusRow(const std::string& row, BusData& br, LoadData& lr) + { + logs() << "Parsing MATPOWER bus row\n"; + std::stringstream is(row); + is >> br.bus_i // Bus ID + >> br.type // Bus type: 1 = PQ, 2 = PV, 3 = ref, 4 = isolated + >> lr.Pd // Active power demand [MW] + >> lr.Qd // Reactive power demand [MVAr] + >> br.Gs // Shunt conductance (MW demanded at V = 1.0 p.u.) + >> br.Bs // Shunt susceptance (MVAr injected at V = 1.0 p.u.) + >> br.area // Area number (>0) + >> br.Vm // Voltage magnitude (p.u.) + >> br.Va // Voltage phase (deg) + >> br.baseKV // Base voltage [kV] + >> br.zone // Loss zone number (>0) + >> br.Vmax // Maximum voltage magnitude (p.u.) + >> br.Vmin; // Minimum voltage magnitude (p.u.) + + lr.bus_i = br.bus_i; + + // std::cout << br.str(); + // logs() << "Read BusData with the following values:\n" << br.str(); + // return br; + } + + template + void readMatPowerGenRow(GenData& gr, std::string& row) + { + logs() << "Parsing MATPOWER gen row\n"; + std::stringstream is(row); + is >> gr.bus >> gr.Pg >> gr.Qg >> gr.Qmax >> gr.Qmin >> gr.Vg >> gr.mBase + >> gr.status >> gr.Pmax >> gr.Pmin >> gr.Pc1 >> gr.Pc2 >> gr.Qc1min + >> gr.Qc1max >> gr.Qc2min >> gr.Qc2max >> gr.ramp_agc >> gr.ramp_10 + >> gr.ramp_30 >> gr.ramp_q >> gr.apf; + checkEndOfMatrixRow(is); + } + + template + void readMatPowerBranchRow(BranchData& br, std::string& row) + { + logs() << "Parsing MATPOWER branch row\n"; + std::stringstream is(row); + is >> br.fbus >> br.tbus >> br.r >> br.x >> br.b >> br.rateA >> br.rateB + >> br.rateC >> br.ratio >> br.angle >> br.status >> br.angmin + >> br.angmax; + checkEndOfMatrixRow(is); + } + + template + void readMatPowerGenCostRow(GenCostData& gcr, std::string& row) + { + logs() << "Parsing MATPOWER gen cost row\n"; + // Ensure last character is semicolon. + rtrim(row); + if (row[row.size() - 1] != ';') + throw std::runtime_error(matlab_syntax_error + "\nGot line " + row); + + std::stringstream is(row); + is >> gcr.kind >> gcr.startup >> gcr.shutdown >> gcr.n; + + for (RealT r; is >> r;) + { + gcr.rest.push_back(r); + } + } + + template + void readMatPowerVersion(SystemModelData& mp, std::string& line) + { + logs() << "Parsing matpower version\n"; + std::regex pat("mpc\\.version\\s*=\\s*'([0-9])';"); + std::smatch matches; + if (std::regex_match(line, matches, pat)) + { + mp.version = matches[1].str(); + } + else + { + throw std::runtime_error(matlab_syntax_error + "\nGot line '" + line + "'"); + } + } + + template + void readMatPowerBaseMVA(SystemModelData& mp, std::string& line) + { + std::regex pat("mpc\\.baseMVA\\s*=\\s*([0-9]+);"); + std::smatch matches; + if (std::regex_match(line, matches, pat)) + { + std::string s = matches[1]; + mp.baseMVA = std::atof(s.c_str()); + } + else + { + throw std::runtime_error(matlab_syntax_error + "\nGot line '" + line + "'"); + } + } + + template + void readMatPowerFile(SystemModelData& mp, std::string& filename) + { + std::ifstream ifs{filename}; + readMatPower(mp, ifs); + } + + template + void readMatPower(SystemModelData& mp, std::istream& is) + { + using BusDataT = BusData; + using GenDataT = GenData; + using BranchDataT = BranchData; + using GenCostDataT = GenCostData; + using LoadDataT = LoadData; + + for (std::string line; std::getline(is, line);) + { + // Trim whitespace and remove comments + ltrim(line); + rtrim(line); + logs() << line << "\n"; + trim_matlab_comments(line); + + // Skip empty lines and comment-only lines + if (line.size() == 0) + continue; + + // Skip the matlab function declaration + if (line.find("function") != std::string::npos) + continue; + + // Check for MATPOWER component definitions + if (line.find("mpc") != std::string::npos) + { + const std::string component = getMatPowerComponent(line); + logs() << "Got component: '" << component << "'\n"; + // First, parse matrix components + if (component == "bus") + { + while (std::getline(is, line)) + { + if (line.find("];") != std::string::npos) + break; + BusDataT br; + LoadDataT lr; + readMatPowerBusRow(line, br, lr); + mp.bus.push_back(std::move(br)); + mp.load.push_back(std::move(lr)); + } + } + else if (component == "gen") + { + while (std::getline(is, line)) + { + if (line.find("];") != std::string::npos) + break; + GenDataT gr; + readMatPowerGenRow(gr, line); + mp.gen.push_back(gr); + } + } + else if (component == "branch") + { + while (std::getline(is, line)) + { + if (line.find("];") != std::string::npos) + break; + BranchDataT br; + readMatPowerBranchRow(br, line); + mp.branch.push_back(br); + } + } + else if (component == "gencost") + { + while (std::getline(is, line)) + { + if (line.find("];") != std::string::npos) + break; + GenCostDataT gcr; + readMatPowerGenCostRow(gcr, line); + mp.gencost.push_back(gcr); + } + } + + // Next, parse scalar components + else if (component == "version") + { + readMatPowerVersion(mp, line); + } + else if (component == "baseMVA") + { + readMatPowerBaseMVA(mp, line); + } + } + } + } + + // } // namespace PowerSystemsData +} // namespace GridKit diff --git a/src/Model/PowerFlow/MiniGrid/MiniGrid.hpp b/src/Model/PowerFlow/MiniGrid/MiniGrid.hpp index eebb9f821..3b6d39300 100644 --- a/src/Model/PowerFlow/MiniGrid/MiniGrid.hpp +++ b/src/Model/PowerFlow/MiniGrid/MiniGrid.hpp @@ -59,7 +59,7 @@ namespace GridKit return -1; } - void updateTime(real_type t, real_type a) + void updateTime(real_type /* t */, real_type /* a */) { } diff --git a/src/Model/PowerFlow/ModelEvaluatorImpl.hpp b/src/Model/PowerFlow/ModelEvaluatorImpl.hpp index 3b7bb4825..b06a5b865 100644 --- a/src/Model/PowerFlow/ModelEvaluatorImpl.hpp +++ b/src/Model/PowerFlow/ModelEvaluatorImpl.hpp @@ -30,18 +30,18 @@ namespace GridKit : size_(size), size_quad_(size_quad), size_opt_(size_opt), - y_(size_), - yp_(size_), - f_(size_), - g_(size_quad_), - yB_(size_), - ypB_(size_), - fB_(size_), - gB_(size_opt_), - jac_(COO_Matrix()), - param_(size_opt_), - param_up_(size_opt_), - param_lo_(size_opt_) + y_(static_cast(size_)), + yp_(static_cast(size_)), + f_(static_cast(size_)), + g_(static_cast(size_quad_)), + yB_(static_cast(size_)), + ypB_(static_cast(size_)), + fB_(static_cast(size_)), + gB_(static_cast(size_opt_)), + jac_(GridKit::LinearAlgebra::COO_Matrix()), + param_(static_cast(size_opt_)), + param_up_(static_cast(size_opt_)), + param_lo_(static_cast(size_opt_)) { } @@ -178,12 +178,12 @@ namespace GridKit return f_; } - COO_Matrix& getJacobian() + GridKit::LinearAlgebra::COO_Matrix& getJacobian() { return jac_; } - const COO_Matrix& getJacobian() const + const GridKit::LinearAlgebra::COO_Matrix& getJacobian() const { return jac_; } @@ -241,7 +241,7 @@ namespace GridKit std::vector fB_; std::vector gB_; - COO_Matrix jac_; + GridKit::LinearAlgebra::COO_Matrix jac_; std::vector param_; std::vector param_up_; @@ -260,4 +260,4 @@ namespace GridKit } // namespace GridKit -#endif // _MODEL_EVALUATOR_IMPL_HPP_ +#endif // _MODEL_EVALUATOR_IMPL_H diff --git a/src/PowerSystemData.hpp b/src/Model/PowerFlow/PowerFlowData.hpp similarity index 98% rename from src/PowerSystemData.hpp rename to src/Model/PowerFlow/PowerFlowData.hpp index a7b7dfb18..2c674a7a6 100644 --- a/src/PowerSystemData.hpp +++ b/src/Model/PowerFlow/PowerFlowData.hpp @@ -6,7 +6,7 @@ /** * - * @file PowerSystemData.hpp + * @file PowerFlowData.hpp * @author Asher Mancinelli * * @remark `std::stringstream` is preferred over `operator+(std::string, ...)` @@ -17,7 +17,7 @@ namespace GridKit { - namespace PowerSystemData + namespace PowerFlowData { template @@ -197,7 +197,7 @@ namespace GridKit using LoadDataT = LoadData; std::string version; - IdxT baseMVA; + RealT baseMVA; std::vector bus; std::vector gen; std::vector branch; @@ -238,5 +238,5 @@ namespace GridKit } }; // struct SystemModelData - } // namespace PowerSystemData + } // namespace PowerFlowData } // namespace GridKit diff --git a/src/Model/PowerFlow/SystemModelPowerFlow.hpp b/src/Model/PowerFlow/SystemModelPowerFlow.hpp index d47f08992..ce4148eb7 100644 --- a/src/Model/PowerFlow/SystemModelPowerFlow.hpp +++ b/src/Model/PowerFlow/SystemModelPowerFlow.hpp @@ -75,7 +75,7 @@ namespace GridKit * * @param mp model data */ - SystemSteadyStateModel(GridKit::PowerSystemData::SystemModelData mp) + SystemSteadyStateModel(GridKit::PowerFlowData::SystemModelData mp) : ModelEvaluatorImpl(0, 0, 0) { rel_tol_ = 1e-5; @@ -348,7 +348,7 @@ namespace GridKit return 0; } - void updateTime(real_type t, real_type a) + void updateTime(real_type /* t */, real_type /* a */) { } diff --git a/src/Solver/Dynamic/Ida.cpp b/src/Solver/Dynamic/Ida.cpp index 7cce626df..bc71866fe 100644 --- a/src/Solver/Dynamic/Ida.cpp +++ b/src/Solver/Dynamic/Ida.cpp @@ -25,7 +25,6 @@ namespace AnalysisManager retval = SUNContext_Create(SUN_COMM_NULL, &context_); checkOutput(retval, "SUNContext"); solver_ = IDACreate(context_); - tag_ = NULL; } /** @@ -39,22 +38,10 @@ namespace AnalysisManager template Ida::~Ida() { - N_VDestroy(yy_); - N_VDestroy(yp_); - N_VDestroy(yy0_); - N_VDestroy(yp0_); - if (model_->hasJacobian()) - { - SUNLinSolFree_KLU(linearSolver_); - SUNMatDestroy_Sparse(JacobianMat_); - } - else - { - SUNLinSolFree_Dense(linearSolver_); - SUNMatDestroy_Dense(JacobianMat_); - } - ///@todo this free is needed but on geninfbus this seg faults - // IDAFree(&solver_); + deleteQuadrature(); + deleteAdjoint(); + deleteSimulation(); + deleteBackwardSimulation(); SUNContext_Free(&context_); } @@ -64,7 +51,7 @@ namespace AnalysisManager int retval = 0; // Allocate solution vectors - yy_ = N_VNew_Serial(model_->size(), context_); + yy_ = N_VNew_Serial(static_cast(model_->size()), context_); checkAllocation((void*) yy_, "N_VNew_Serial"); yp_ = N_VClone(yy_); checkAllocation((void*) yp_, "N_VClone"); @@ -79,7 +66,7 @@ namespace AnalysisManager checkAllocation((void*) yp0_, "N_VClone"); // Dummy initial time; will be overridden. - const sunrealtype t0 = SUN_RCONST(0.0); + const real_type t0 = 0.0; // Allocate and initialize IDA workspace retval = IDAInit(solver_, this->Residual, t0, yy_, yp_); @@ -90,8 +77,8 @@ namespace AnalysisManager checkOutput(retval, "IDASetUserData"); // Set tolerances - sunrealtype rel_tol; - sunrealtype abs_tol; + real_type rel_tol; + real_type abs_tol; model_->setTolerances(rel_tol, abs_tol); ///< \todo Function name should be "getTolerances"! retval = IDASStolerances(solver_, rel_tol, abs_tol); @@ -101,7 +88,7 @@ namespace AnalysisManager model_->setMaxSteps(msa); /// \todo Need to set max number of steps based on user input! - retval = IDASetMaxNumSteps(solver_, msa); + retval = IDASetMaxNumSteps(solver_, static_cast(msa)); checkOutput(retval, "IDASetMaxNumSteps"); // Tag differential variables @@ -120,9 +107,7 @@ namespace AnalysisManager } // Set up linear solver - this->configureLinearSolver(); - - return retval; + return this->configureLinearSolver(); } template @@ -131,7 +116,11 @@ namespace AnalysisManager int retval = 0; if (model_->hasJacobian()) { - JacobianMat_ = SUNSparseMatrix(model_->size(), model_->size(), model_->size() * model_->size(), CSR_MAT, context_); + JacobianMat_ = SUNSparseMatrix(static_cast(model_->size()), + static_cast(model_->size()), + static_cast(model_->size() * model_->size()), + CSR_MAT, + context_); checkAllocation((void*) JacobianMat_, "SUNSparseMatrix"); linearSolver_ = SUNLinSol_KLU(yy_, JacobianMat_, context_); @@ -145,7 +134,9 @@ namespace AnalysisManager } else { - JacobianMat_ = SUNDenseMatrix(model_->size(), model_->size(), context_); + JacobianMat_ = SUNDenseMatrix(static_cast(model_->size()), + static_cast(model_->size()), + context_); checkAllocation((void*) JacobianMat_, "SUNDenseMatrix"); linearSolver_ = SUNLinSol_Dense(yy_, JacobianMat_, context_); @@ -207,6 +198,27 @@ namespace AnalysisManager return retval; } + /** + * @brief Run the IDA solver on the given model and produce a solution at + * the given final time. + * + * @tparam ScalarT Scalar data type + * @tparam IdxT Matrix and vector index data type + * @param tf The final simulation time. + * @param nout The number of integration segmentstimes. + * @param step_callback An optional callback which, if provided, will be + * called after each time the IDA solver has been invoked with the value + * of `t` that IDA has calculated the last step at. The provided model will + * be updated with the latest values of `y` and `yp` before the callback is + * invoked. + * @return int zero if successful, error code otherwise. + * + * @note The actual time of the final IDA solution should be somewhat + * close to `tf`, however due to rounding error the precise final time may + * be before or after `tf`. + * + * @todo Consider adding initial time as the function argument, as well. + */ template int Ida::runSimulation(real_type tf, int nout, const std::optional> step_callback) { @@ -216,8 +228,8 @@ namespace AnalysisManager real_type dt = (tf - t_init_) / static_cast(nout); real_type tout = t_init_ + dt; - /* In loop, call IDASolve, print results, and test for error. - * Break out of loop when NOUT preset output times have been reached. */ + // In loop, call IDASolve, print results, and test for error. + // Break out of loop when NOUT preset output times have been reached. // printOutput(0.0); while (nout > iout) { @@ -226,8 +238,9 @@ namespace AnalysisManager if (step_callback.has_value()) { - // The callback may try to observe upated values in the model, so we should update them here - // (At this point, the model's values are one internal integrator step out of date) + // The callback may try to observe upated values in the model, so we + // should update them here (At this point, the model's values are one + // internal integrator step out of date) model_->updateTime(tret, 0.0); copyVec(yy_, model_->y()); copyVec(yp_, model_->yp()); @@ -242,7 +255,7 @@ namespace AnalysisManager } } - // Final copy out. No gaurentee last residual evaluation is final step. + // Final copy out. No guarantee last residual evaluation is final step. model_->updateTime(tf, 0.0); copyVec(yy_, model_->y()); copyVec(yp_, model_->yp()); @@ -254,10 +267,14 @@ namespace AnalysisManager template int Ida::deleteSimulation() { - IDAFree(&solver_); - SUNLinSolFree(linearSolver_); N_VDestroy(yy_); N_VDestroy(yp_); + N_VDestroy(tag_); + N_VDestroy(yy0_); + N_VDestroy(yp0_); + SUNLinSolFree(linearSolver_); + SUNMatDestroy(JacobianMat_); + IDAFree(&solver_); return 0; } @@ -267,7 +284,7 @@ namespace AnalysisManager int retval = 0; // Create and initialize quadratures - q_ = N_VNew_Serial(model_->sizeQuadrature(), context_); + q_ = N_VNew_Serial(static_cast(model_->sizeQuadrature()), context_); checkAllocation((void*) q_, "N_VNew_Serial"); // Set integrand function and allocate quadrature workspace @@ -295,7 +312,7 @@ namespace AnalysisManager int retval = 0; // Set all quadratures to zero - N_VConst(SUN_RCONST(0.0), q_); + N_VConst(0.0, q_); // Initialize quadratures retval = IDAQuadReInit(solver_, q_); @@ -353,13 +370,13 @@ namespace AnalysisManager int Ida::configureAdjoint() { // Allocate adjoint vector, derivatives and quadrature - yyB_ = N_VNew_Serial(model_->size(), context_); + yyB_ = N_VNew_Serial(static_cast(model_->size()), context_); checkAllocation((void*) yyB_, "N_VNew_Serial"); ypB_ = N_VClone(yyB_); checkAllocation((void*) ypB_, "N_VClone"); - qB_ = N_VNew_Serial(model_->sizeParams(), context_); + qB_ = N_VNew_Serial(static_cast(model_->sizeParams()), context_); checkAllocation((void*) qB_, "N_VNew_Serial"); return 0; @@ -371,7 +388,7 @@ namespace AnalysisManager int retval = 0; // Create adjoint workspace - retval = IDAAdjInit(solver_, steps, IDA_HERMITE); + retval = IDAAdjInit(solver_, static_cast(steps), IDA_HERMITE); checkOutput(retval, "IDAAdjInit"); return retval; @@ -380,9 +397,9 @@ namespace AnalysisManager template int Ida::initializeBackwardSimulation(real_type tf) { - int retval = 0; - sunrealtype rel_tol; - sunrealtype abs_tol; + int retval = 0; + real_type rel_tol; + real_type abs_tol; model_->initializeAdjoint(); @@ -408,13 +425,23 @@ namespace AnalysisManager retval = IDASetMaxNumStepsB(solver_, backwardID_, 2000); checkOutput(retval, "IDASetMaxNumSteps"); - // Set up linear solver - JacobianMatB_ = SUNDenseMatrix(model_->size(), model_->size(), context_); - checkAllocation((void*) JacobianMatB_, "SUNDenseMatrix"); + // Allocate Jacobian matrix, if not already + if (JacobianMatB_ == nullptr) + { + JacobianMatB_ = SUNDenseMatrix(static_cast(model_->size()), + static_cast(model_->size()), + context_); + checkAllocation((void*) JacobianMatB_, "SUNDenseMatrix"); + } - linearSolverB_ = SUNLinSol_Dense(yyB_, JacobianMatB_, context_); - checkAllocation((void*) linearSolverB_, "SUNLinSol_Dense"); + // Allocate linear solver, if not already + if (linearSolverB_ == nullptr) + { + linearSolverB_ = SUNLinSol_Dense(yyB_, JacobianMatB_, context_); + checkAllocation((void*) linearSolverB_, "SUNLinSol_Dense"); + } + // Setup linear solver (only dense supported at this time) retval = IDASetLinearSolverB(solver_, backwardID_, linearSolverB_, JacobianMatB_); checkOutput(retval, "IDASetLinearSolverB"); @@ -439,7 +466,9 @@ namespace AnalysisManager int retval = 0; // Create Jacobian matrix - JacobianMatB_ = SUNDenseMatrix(model_->size(), model_->size(), context_); + JacobianMatB_ = SUNDenseMatrix(static_cast(model_->size()), + static_cast(model_->size()), + context_); checkAllocation((void*) JacobianMatB_, "SUNDenseMatrix"); // Create linear solver @@ -522,7 +551,19 @@ namespace AnalysisManager } template - int Ida::Residual(sunrealtype tres, N_Vector yy, N_Vector yp, N_Vector rr, void* user_data) + int Ida::deleteBackwardSimulation() + { + N_VDestroy(yyB_); + N_VDestroy(ypB_); + N_VDestroy(qB_); + SUNLinSolFree(linearSolverB_); + SUNMatDestroy(JacobianMatB_); + + return 0; + } + + template + int Ida::Residual(real_type tres, N_Vector yy, N_Vector yp, N_Vector rr, void* user_data) { GridKit::Model::Evaluator* model = static_cast*>(user_data); @@ -538,7 +579,7 @@ namespace AnalysisManager } template - int Ida::Jac(sunrealtype t, sunrealtype cj, N_Vector yy, N_Vector yp, N_Vector resvec, SUNMatrix J, void* user_data, N_Vector tmp1, N_Vector tmp2, N_Vector tmp3) + int Ida::Jac(real_type t, real_type cj, N_Vector yy, N_Vector yp, N_Vector, SUNMatrix J, void* user_data, N_Vector, N_Vector, N_Vector) { GridKit::Model::Evaluator* model = static_cast*>(user_data); @@ -548,7 +589,7 @@ namespace AnalysisManager copyVec(yp, model->yp()); model->evaluateJacobian(); - COO_Matrix Jac = model->getJacobian(); + GridKit::LinearAlgebra::COO_Matrix Jac = model->getJacobian(); // Get reference to the jacobian entries std::tuple&, std::vector&, std::vector&> tpm = Jac.getEntries(); @@ -561,25 +602,19 @@ namespace AnalysisManager // Set row pointers sunindextype* rowptrs = SUNSparseMatrix_IndexPointers(J); - for (unsigned int i = 0; i < csrrowdata.size(); i++) - { - rowptrs[i] = csrrowdata[i]; - } + std::copy(csrrowdata.cbegin(), csrrowdata.cend(), rowptrs); sunindextype* colvals = SUNSparseMatrix_IndexValues(J); - sunrealtype* data = SUNSparseMatrix_Data(J); + real_type* data = SUNSparseMatrix_Data(J); // Copy data from model jac to sundials - for (unsigned int i = 0; i < c.size(); i++) - { - colvals[i] = c[i]; - data[i] = val[i]; - } + std::copy(c.cbegin(), c.cend(), colvals); + std::copy(val.cbegin(), val.cend(), data); return 0; } template - int Ida::Integrand(sunrealtype tt, N_Vector yy, N_Vector yp, N_Vector rhsQ, void* user_data) + int Ida::Integrand(real_type tt, N_Vector yy, N_Vector yp, N_Vector rhsQ, void* user_data) { GridKit::Model::Evaluator* model = static_cast*>(user_data); @@ -595,7 +630,7 @@ namespace AnalysisManager } template - int Ida::adjointResidual(sunrealtype tt, N_Vector yy, N_Vector yp, N_Vector yyB, N_Vector ypB, N_Vector rrB, void* user_data) + int Ida::adjointResidual(real_type tt, N_Vector yy, N_Vector yp, N_Vector yyB, N_Vector ypB, N_Vector rrB, void* user_data) { GridKit::Model::Evaluator* model = static_cast*>(user_data); @@ -613,7 +648,7 @@ namespace AnalysisManager } template - int Ida::adjointIntegrand(sunrealtype tt, N_Vector yy, N_Vector yp, N_Vector yyB, N_Vector ypB, N_Vector rhsQB, void* user_data) + int Ida::adjointIntegrand(real_type tt, N_Vector yy, N_Vector yp, N_Vector yyB, N_Vector ypB, N_Vector rhsQB, void* user_data) { GridKit::Model::Evaluator* model = static_cast*>(user_data); @@ -633,41 +668,29 @@ namespace AnalysisManager template void Ida::copyVec(const N_Vector x, std::vector& y) { - const ScalarT* xdata = NV_DATA_S(x); - for (unsigned int i = 0; i < y.size(); ++i) - { - y[i] = xdata[i]; - } + const ScalarT* xdata = N_VGetArrayPointer(x); + std::copy_n(xdata, y.size(), y.begin()); } template void Ida::copyVec(const std::vector& x, N_Vector y) { - ScalarT* ydata = NV_DATA_S(y); - for (unsigned int i = 0; i < x.size(); ++i) - { - ydata[i] = x[i]; - } + ScalarT* ydata = N_VGetArrayPointer(y); + std::copy(x.cbegin(), x.cend(), ydata); } template void Ida::copyVec(const std::vector& x, N_Vector y) { - ScalarT* ydata = NV_DATA_S(y); - for (unsigned int i = 0; i < x.size(); ++i) - { - if (x[i]) - ydata[i] = 1.0; - else - ydata[i] = 0.0; - } + ScalarT* ydata = N_VGetArrayPointer(y); + std::copy(x.cbegin(), x.cend(), ydata); } template - void Ida::printOutput(sunrealtype t) + void Ida::printOutput(real_type t) { - sunrealtype* yval = N_VGetArrayPointer_Serial(yy_); - sunrealtype* ypval = N_VGetArrayPointer_Serial(yp_); + real_type* yval = N_VGetArrayPointer(yy_); + real_type* ypval = N_VGetArrayPointer(yp_); std::cout << std::setprecision(5) << std::setw(7) << t << " "; for (IdxT i = 0; i < model_->size(); ++i) @@ -682,10 +705,10 @@ namespace AnalysisManager } template - void Ida::printSpecial(sunrealtype t, N_Vector y) + void Ida::printSpecial(real_type t, N_Vector y) { - sunrealtype* yval = N_VGetArrayPointer_Serial(y); - IdxT N = static_cast(N_VGetLength_Serial(y)); + real_type* yval = N_VGetArrayPointer(y); + IdxT N = static_cast(N_VGetLength(y)); std::cout << "{"; std::cout << std::setprecision(5) << std::setw(7) << t; for (IdxT i = 0; i < N; ++i) @@ -698,35 +721,8 @@ namespace AnalysisManager template void Ida::printFinalStats() { - int retval = 0; - void* mem = solver_; - long int nst; - long int nre; - long int nje; - long int nni; - long int netf; - long int ncfn; - - retval = IDAGetNumSteps(mem, &nst); - checkOutput(retval, "IDAGetNumSteps"); - retval = IDAGetNumResEvals(mem, &nre); - checkOutput(retval, "IDAGetNumResEvals"); - retval = IDAGetNumJacEvals(mem, &nje); - checkOutput(retval, "IDAGetNumJacEvals"); - retval = IDAGetNumNonlinSolvIters(mem, &nni); - checkOutput(retval, "IDAGetNumNonlinSolvIters"); - retval = IDAGetNumErrTestFails(mem, &netf); - checkOutput(retval, "IDAGetNumErrTestFails"); - retval = IDAGetNumNonlinSolvConvFails(mem, &ncfn); - checkOutput(retval, "IDAGetNumNonlinSolvConvFails"); - - // std::cout << "\nFinal Run Statistics: \n\n"; - std::cout << "Number of steps = " << nst << "\n"; - std::cout << "Number of residual evaluations = " << nre << "\n"; - // std::cout << "Number of Jacobian evaluations = " << nje << "\n"; - std::cout << "Number of nonlinear iterations = " << nni << "\n"; - std::cout << "Number of error test failures = " << netf << "\n"; - std::cout << "Number of nonlinear conv. failures = " << ncfn << "\n"; + int retval = IDAPrintAllStats(solver_, stdout, SUN_OUTPUTFORMAT_TABLE); + checkOutput(retval, "IDAPrintAllStats"); } template diff --git a/src/Solver/Dynamic/Ida.hpp b/src/Solver/Dynamic/Ida.hpp index e6d07f579..cd42fe232 100644 --- a/src/Solver/Dynamic/Ida.hpp +++ b/src/Solver/Dynamic/Ida.hpp @@ -36,18 +36,6 @@ namespace AnalysisManager int setIntegrationTime(real_type t_init, real_type t_final, int nout); int initializeSimulation(real_type t0, bool findConsistent = false); - /// @brief Run the IDA solver on the given model and produce a solution at the given final time. - /// @attention `Ida::initializeSimulation` must be called with the initial time (and to find consistent - /// initial conditions if needed) before calling `runSimulation`. - /// @param tf The final time, used to calculate the size of each step IDA should take. The actual time - /// of the final IDA solution should be somewhat close to `tf`, however due to rounding error - /// the precise final time may be before or after `tf`. - /// - /// @param nout The number of times the IDA integrator should be invoked to calculate the solution at `tf`. - /// - /// @param step_callback An optional callback which, if provided, will be called after each time the IDA solver has - /// been invoked with the value of `t` that IDA has calculated the last step at. The provided - /// model will be updated with the latest values of `y` and `yp` before the callback is invoked. int runSimulation(real_type tf, int nout = 1, std::optional> step_callback = {}); int deleteSimulation(); @@ -63,6 +51,7 @@ namespace AnalysisManager int runForwardSimulation(real_type tf, int nout = 1); int runBackwardSimulation(real_type t0); int deleteAdjoint(); + int deleteBackwardSimulation(); int saveInitialCondition() { @@ -95,93 +84,93 @@ namespace AnalysisManager const real_type* getIntegral() const { - return NV_DATA_S(q_); + return N_VGetArrayPointer(q_); } real_type* getIntegral() { - return NV_DATA_S(q_); + return N_VGetArrayPointer(q_); } const real_type* getAdjointIntegral() const { - return NV_DATA_S(qB_); + return N_VGetArrayPointer(qB_); } real_type* getAdjointIntegral() { - return NV_DATA_S(qB_); + return N_VGetArrayPointer(qB_); } - void printOutput(sunrealtype t); - void printSpecial(sunrealtype t, N_Vector x); + void printOutput(real_type t); + void printSpecial(real_type t, N_Vector x); void printFinalStats(); private: - static int Residual(sunrealtype t, - N_Vector yy, - N_Vector yp, - N_Vector rr, - void* user_data); - - static int Jac(sunrealtype t, - sunrealtype cj, - N_Vector yy, - N_Vector yp, - N_Vector resvec, - SUNMatrix J, - void* user_data, - N_Vector tmp1, - N_Vector tmp2, - N_Vector tmp3); - - static int Integrand(sunrealtype t, - N_Vector yy, - N_Vector yp, - N_Vector rhsQ, - void* user_data); - - static int adjointResidual(sunrealtype t, - N_Vector yy, - N_Vector yp, - N_Vector yyB, - N_Vector ypB, - N_Vector rrB, - void* user_data); - - static int adjointIntegrand(sunrealtype t, - N_Vector yy, - N_Vector yp, - N_Vector yyB, - N_Vector ypB, - N_Vector rhsQB, - void* user_data); + static int Residual(real_type t, + N_Vector yy, + N_Vector yp, + N_Vector rr, + void* user_data); + + static int Jac(real_type t, + real_type cj, + N_Vector yy, + N_Vector yp, + N_Vector resvec, + SUNMatrix J, + void* user_data, + N_Vector tmp1, + N_Vector tmp2, + N_Vector tmp3); + + static int Integrand(real_type t, + N_Vector yy, + N_Vector yp, + N_Vector rhsQ, + void* user_data); + + static int adjointResidual(real_type t, + N_Vector yy, + N_Vector yp, + N_Vector yyB, + N_Vector ypB, + N_Vector rrB, + void* user_data); + + static int adjointIntegrand(real_type t, + N_Vector yy, + N_Vector yp, + N_Vector yyB, + N_Vector ypB, + N_Vector rhsQB, + void* user_data); private: - void* solver_; - SUNContext context_; - SUNMatrix JacobianMat_; - SUNMatrix JacobianMatB_; - SUNLinearSolver linearSolver_; - SUNLinearSolver linearSolverB_; - - real_type t_init_; - real_type t_final_; - int nout_; ///< Number of integration outputs - - N_Vector yy_; ///< Solution vector - N_Vector yp_; ///< Solution derivatives vector - N_Vector tag_; ///< Tags differential variables - N_Vector q_; ///< Integrand vector - - N_Vector yy0_; ///< Storage for initial values - N_Vector yp0_; ///< Storage for initial derivatives - - N_Vector yyB_; ///< Adjoint solution vector - N_Vector ypB_; ///< Adjoint solution derivatives vector - N_Vector qB_; ///< Backward integrand vector - - int backwardID_; + void* solver_{}; + SUNContext context_{}; + SUNMatrix JacobianMat_{}; + SUNMatrix JacobianMatB_{}; + SUNLinearSolver linearSolver_{}; + SUNLinearSolver linearSolverB_{}; + + real_type t_init_{}; + real_type t_final_{}; + int nout_{}; ///< Number of integration outputs + + N_Vector yy_{}; ///< Solution vector + N_Vector yp_{}; ///< Solution derivatives vector + N_Vector tag_{}; ///< Tags differential variables + N_Vector q_{}; ///< Integrand vector + + N_Vector yy0_{}; ///< Storage for initial values + N_Vector yp0_{}; ///< Storage for initial derivatives + + N_Vector yyB_{}; ///< Adjoint solution vector + N_Vector ypB_{}; ///< Adjoint solution derivatives vector + N_Vector qB_{}; ///< Backward integrand vector + + int backwardID_{}; private: // static void copyMat(Model::Evaluator::Mat& J, SlsMat Jida); diff --git a/src/Solver/Optimization/DynamicConstraint.cpp b/src/Solver/Optimization/DynamicConstraint.cpp index 5d2e04582..291dbd285 100644 --- a/src/Solver/Optimization/DynamicConstraint.cpp +++ b/src/Solver/Optimization/DynamicConstraint.cpp @@ -28,17 +28,17 @@ namespace AnalysisManager bool DynamicConstraint::get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, IndexStyleEnum& index_style) { // This code handles one objective function - assert(model_->size_quad() == 1); + assert(model_->sizeQuadrature() == 1); // Number of parameters is size of the system plus 1 fictitious parameter // to store the objective value. - n = model_->sizeParams() + 1; + n = static_cast(model_->sizeParams() + 1); // There is one constraint m = 1; // Jacobian is a dense row matrix of length n+1. - nnz_jac_g = model_->sizeParams() + 1; + nnz_jac_g = static_cast(model_->sizeParams() + 1); // Using numerical Hessian. nnz_h_lag = 0; @@ -50,7 +50,12 @@ namespace AnalysisManager } template - bool DynamicConstraint::get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u) + bool DynamicConstraint::get_bounds_info([[maybe_unused]] Index n, + Number* x_l, + Number* x_u, + [[maybe_unused]] Index m, + Number* g_l, + Number* g_u) { // Check if sizes are set correctly assert(n == (Index) (model_->sizeParams() + 1)); @@ -59,8 +64,8 @@ namespace AnalysisManager // Get boundaries for the optimization parameters for (IdxT i = 0; i < model_->sizeParams(); ++i) { - x_l[i] = model_->param_lo()[i]; - x_u[i] = model_->param_up()[i]; + x_l[i] = model_->param_lo()[static_cast(i)]; + x_u[i] = model_->param_up()[static_cast(i)]; } // No boundaries for fictitious parameter x[n] @@ -75,7 +80,15 @@ namespace AnalysisManager } template - bool DynamicConstraint::get_starting_point(Index n, bool init_x, Number* x, bool init_z, Number* z_L, Number* z_U, Index m, bool init_lambda, Number* lambda) + bool DynamicConstraint::get_starting_point([[maybe_unused]] Index n, + [[maybe_unused]] bool init_x, + Number* x, + [[maybe_unused]] bool init_z, + [[maybe_unused]] Number* z_L, + [[maybe_unused]] Number* z_U, + [[maybe_unused]] Index m, + [[maybe_unused]] bool init_lambda, + [[maybe_unused]] Number* lambda) { // Only initial values for x provided. assert(init_x == true); @@ -84,7 +97,7 @@ namespace AnalysisManager // Initialize optimization parameters x for (IdxT i = 0; i < model_->sizeParams(); ++i) - x[i] = model_->param()[i]; + x[i] = model_->param()[static_cast(i)]; // Initialize fictitious parameter x[n-1] to zero x[model_->sizeParams()] = 0.0; @@ -93,7 +106,10 @@ namespace AnalysisManager } template - bool DynamicConstraint::eval_f(Index n, const Number* x, bool new_x, Number& obj_value) + bool DynamicConstraint::eval_f([[maybe_unused]] Index n, + const Number* x, + [[maybe_unused]] bool new_x, + Number& obj_value) { // Set objective to fictitious optimization parameter x[n-1] obj_value = x[model_->sizeParams()]; @@ -102,7 +118,10 @@ namespace AnalysisManager } template - bool DynamicConstraint::eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f) + bool DynamicConstraint::eval_grad_f([[maybe_unused]] Index n, + [[maybe_unused]] const Number* x, + [[maybe_unused]] bool new_x, + Number* grad_f) { // Objective function equals to the fictitious parameter x[n-1]. // Gradient, then assumes the simple form: @@ -114,12 +133,16 @@ namespace AnalysisManager } template - bool DynamicConstraint::eval_g(Index n, const Number* x, bool new_x, Index m, Number* g) + bool DynamicConstraint::eval_g([[maybe_unused]] Index n, + const Number* x, + [[maybe_unused]] bool new_x, + [[maybe_unused]] Index m, + Number* g) { // Update optimization parameters for (IdxT i = 0; i < model_->sizeParams(); ++i) { - model_->param()[i] = x[i]; + model_->param()[static_cast(i)] = x[i]; // std::cout << "x[" << i << "] = " << x[i] << "\n"; } @@ -143,7 +166,14 @@ namespace AnalysisManager } template - bool DynamicConstraint::eval_jac_g(Index n, const Number* x, bool new_x, Index m, Index nele_jac, Index* iRow, Index* jCol, Number* values) + bool DynamicConstraint::eval_jac_g([[maybe_unused]] Index n, + const Number* x, + [[maybe_unused]] bool new_x, + [[maybe_unused]] Index m, + [[maybe_unused]] Index nele_jac, + Index* iRow, + Index* jCol, + Number* values) { // Set Jacobian sparsity pattern ... if (!values) @@ -151,17 +181,17 @@ namespace AnalysisManager for (IdxT i = 0; i < model_->sizeParams(); ++i) { iRow[i] = 0; - jCol[i] = i; + jCol[i] = static_cast(i); } iRow[model_->sizeParams()] = 0; - jCol[model_->sizeParams()] = model_->sizeParams(); + jCol[model_->sizeParams()] = static_cast(model_->sizeParams()); } // ... or compute Jacobian derivatives else { // Update optimization parameters for (IdxT i = 0; i < model_->sizeParams(); ++i) - model_->param()[i] = x[i]; + model_->param()[static_cast(i)] = x[i]; // evaluate the gradient of the objective function grad_{x} f(x) // This is creating and deleting adjoint system for each iteration! @@ -202,23 +232,33 @@ namespace AnalysisManager } template - bool DynamicConstraint::eval_h(Index n, const Number* x, bool new_x, Number obj_factor, Index m, const Number* lambda, bool new_lambda, Index nele_hess, Index* iRow, Index* jCol, Number* values) + bool DynamicConstraint::eval_h([[maybe_unused]] Index n, + [[maybe_unused]] const Number* x, + [[maybe_unused]] bool new_x, + [[maybe_unused]] Number obj_factor, + [[maybe_unused]] Index m, + [[maybe_unused]] const Number* lambda, + [[maybe_unused]] bool new_lambda, + [[maybe_unused]] Index nele_hess, + [[maybe_unused]] Index* iRow, + [[maybe_unused]] Index* jCol, + [[maybe_unused]] Number* values) { return true; } template - void DynamicConstraint::finalize_solution(SolverReturn status, - Index n, - const Number* x, - const Number* z_L, - const Number* z_U, - Index m, - const Number* g, - const Number* lambda, - Number obj_value, - const IpoptData* ip_data, - IpoptCalculatedQuantities* ip_cq) + void DynamicConstraint::finalize_solution([[maybe_unused]] SolverReturn status, + [[maybe_unused]] Index n, + [[maybe_unused]] const Number* x, + [[maybe_unused]] const Number* z_L, + [[maybe_unused]] const Number* z_U, + [[maybe_unused]] Index m, + [[maybe_unused]] const Number* g, + [[maybe_unused]] const Number* lambda, + [[maybe_unused]] Number obj_value, + [[maybe_unused]] const IpoptData* ip_data, + [[maybe_unused]] IpoptCalculatedQuantities* ip_cq) { } diff --git a/src/Solver/Optimization/DynamicObjective.cpp b/src/Solver/Optimization/DynamicObjective.cpp index 0b76d82e0..8a90efbfc 100644 --- a/src/Solver/Optimization/DynamicObjective.cpp +++ b/src/Solver/Optimization/DynamicObjective.cpp @@ -28,10 +28,10 @@ namespace AnalysisManager bool DynamicObjective::get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, IndexStyleEnum& index_style) { // This code handles one objective function - assert(model_->size_quad() == 1); + assert(model_->sizeQuadrature() == 1); // Number of optimization variables. - n = model_->sizeParams(); + n = static_cast(model_->sizeParams()); // There are no constraints m = 0; @@ -49,7 +49,12 @@ namespace AnalysisManager } template - bool DynamicObjective::get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u) + bool DynamicObjective::get_bounds_info([[maybe_unused]] Index n, + Number* x_l, + Number* x_u, + [[maybe_unused]] Index m, + [[maybe_unused]] Number* g_l, + [[maybe_unused]] Number* g_u) { // Check if sizes are set correctly assert(n == (Index) model_->sizeParams()); @@ -58,15 +63,23 @@ namespace AnalysisManager // Get boundaries for the optimization parameters for (IdxT i = 0; i < model_->sizeParams(); ++i) { - x_l[i] = model_->param_lo()[i]; - x_u[i] = model_->param_up()[i]; + x_l[i] = model_->param_lo()[static_cast(i)]; + x_u[i] = model_->param_up()[static_cast(i)]; } return true; } template - bool DynamicObjective::get_starting_point(Index n, bool init_x, Number* x, bool init_z, Number* z_L, Number* z_U, Index m, bool init_lambda, Number* lambda) + bool DynamicObjective::get_starting_point([[maybe_unused]] Index n, + [[maybe_unused]] bool init_x, + Number* x, + [[maybe_unused]] bool init_z, + [[maybe_unused]] Number* z_L, + [[maybe_unused]] Number* z_U, + [[maybe_unused]] Index m, + [[maybe_unused]] bool init_lambda, + [[maybe_unused]] Number* lambda) { // Only initial values for x provided. assert(init_x == true); @@ -75,17 +88,20 @@ namespace AnalysisManager // Initialize optimization parameters x for (IdxT i = 0; i < model_->sizeParams(); ++i) - x[i] = model_->param()[i]; + x[i] = model_->param()[static_cast(i)]; return true; } template - bool DynamicObjective::eval_f(Index n, const Number* x, bool new_x, Number& obj_value) + bool DynamicObjective::eval_f([[maybe_unused]] Index n, + const Number* x, + [[maybe_unused]] bool new_x, + Number& obj_value) { // Update optimization parameters for (IdxT i = 0; i < model_->sizeParams(); ++i) - model_->param()[i] = x[i]; + model_->param()[static_cast(i)] = x[i]; // Evaluate objective function integrator_->getSavedInitialCondition(); @@ -100,12 +116,15 @@ namespace AnalysisManager } template - bool DynamicObjective::eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f) + bool DynamicObjective::eval_grad_f([[maybe_unused]] Index n, + const Number* x, + [[maybe_unused]] bool new_x, + Number* grad_f) { assert(model_->sizeParams() == static_cast(n)); // Update optimization parameters for (IdxT i = 0; i < model_->sizeParams(); ++i) - model_->param()[i] = x[i]; + model_->param()[static_cast(i)] = x[i]; // evaluate the gradient of the objective function grad_{x} f(x) // This is creating and deleting adjoint system for each iteration! @@ -130,35 +149,56 @@ namespace AnalysisManager } template - bool DynamicObjective::eval_g(Index n, const Number* x, bool new_x, Index m, Number* g) + bool DynamicObjective::eval_g([[maybe_unused]] Index n, + [[maybe_unused]] const Number* x, + [[maybe_unused]] bool new_x, + [[maybe_unused]] Index m, + [[maybe_unused]] Number* g) { return true; } template - bool DynamicObjective::eval_jac_g(Index n, const Number* x, bool new_x, Index m, Index nele_jac, Index* iRow, Index* jCol, Number* values) + bool DynamicObjective::eval_jac_g([[maybe_unused]] Index n, + [[maybe_unused]] const Number* x, + [[maybe_unused]] bool new_x, + [[maybe_unused]] Index m, + [[maybe_unused]] Index nele_jac, + [[maybe_unused]] Index* iRow, + [[maybe_unused]] Index* jCol, + [[maybe_unused]] Number* values) { return true; } template - bool DynamicObjective::eval_h(Index n, const Number* x, bool new_x, Number obj_factor, Index m, const Number* lambda, bool new_lambda, Index nele_hess, Index* iRow, Index* jCol, Number* values) + bool DynamicObjective::eval_h([[maybe_unused]] Index n, + [[maybe_unused]] const Number* x, + [[maybe_unused]] bool new_x, + [[maybe_unused]] Number obj_factor, + [[maybe_unused]] Index m, + [[maybe_unused]] const Number* lambda, + [[maybe_unused]] bool new_lambda, + [[maybe_unused]] Index nele_hess, + [[maybe_unused]] Index* iRow, + [[maybe_unused]] Index* jCol, + [[maybe_unused]] Number* values) { return true; } template - void DynamicObjective::finalize_solution(SolverReturn status, - Index n, - const Number* x, - const Number* z_L, - const Number* z_U, - Index m, - const Number* g, - const Number* lambda, - Number obj_value, - const IpoptData* ip_data, - IpoptCalculatedQuantities* ip_cq) + void DynamicObjective::finalize_solution([[maybe_unused]] SolverReturn status, + [[maybe_unused]] Index n, + [[maybe_unused]] const Number* x, + [[maybe_unused]] const Number* z_L, + [[maybe_unused]] const Number* z_U, + [[maybe_unused]] Index m, + [[maybe_unused]] const Number* g, + [[maybe_unused]] const Number* lambda, + [[maybe_unused]] Number obj_value, + [[maybe_unused]] const IpoptData* ip_data, + [[maybe_unused]] IpoptCalculatedQuantities* ip_cq) { } diff --git a/src/Solver/SteadyState/Kinsol.cpp b/src/Solver/SteadyState/Kinsol.cpp index ef39bf04e..c792eae4a 100644 --- a/src/Solver/SteadyState/Kinsol.cpp +++ b/src/Solver/SteadyState/Kinsol.cpp @@ -37,23 +37,14 @@ namespace AnalysisManager checkOutput(retval, "SUNContext"); solver_ = KINCreate(context_); - tag_ = NULL; } template Kinsol::~Kinsol() { + deleteSimulation(); SUNContext_Free(&context_); - KINFree(&solver_); - - N_VDestroy_Serial(this->yy_); - N_VDestroy_Serial(this->yy0_); - N_VDestroy_Serial(this->scale_); - - SUNMatDestroy(this->JacobianMat_); - SUNLinSolFree_Dense(this->linearSolver_); - - solver_ = 0; + solver_ = nullptr; } template @@ -62,7 +53,7 @@ namespace AnalysisManager int retval = 0; // Allocate solution vectors - yy_ = N_VNew_Serial(model_->size(), context_); + yy_ = N_VNew_Serial(static_cast(model_->size()), context_); checkAllocation((void*) yy_, "N_VNew_Serial"); // Allocate scaling vector @@ -93,16 +84,7 @@ namespace AnalysisManager checkOutput(retval, "KINSetScaledStepTol"); // Set up linear solver - JacobianMat_ = SUNDenseMatrix(model_->size(), model_->size(), context_); - checkAllocation((void*) JacobianMat_, "SUNDenseMatrix"); - - linearSolver_ = SUNLinSol_Dense(yy_, JacobianMat_, context_); - checkAllocation((void*) linearSolver_, "SUNLinSol_Dense"); - - retval = KINSetLinearSolver(solver_, linearSolver_, JacobianMat_); - checkOutput(retval, "KINSetLinearSolver"); - - return retval; + return this->configureLinearSolver(); } template @@ -111,7 +93,9 @@ namespace AnalysisManager int retval = 0; // Set up linear solver - JacobianMat_ = SUNDenseMatrix(model_->size(), model_->size(), context_); + JacobianMat_ = SUNDenseMatrix(static_cast(model_->size()), + static_cast(model_->size()), + context_); checkAllocation((void*) JacobianMat_, "SUNDenseMatrix"); linearSolver_ = SUNLinSol_Dense(yy_, JacobianMat_, context_); @@ -148,10 +132,12 @@ namespace AnalysisManager template int Kinsol::deleteSimulation() { - SUNLinSolFree(linearSolver_); KINFree(&solver_); - N_VDestroy(yy_); - N_VDestroy(scale_); + N_VDestroy(this->yy_); + N_VDestroy(this->yy0_); + N_VDestroy(this->scale_); + SUNMatDestroy(this->JacobianMat_); + SUNLinSolFree_Dense(this->linearSolver_); return 0; } @@ -173,40 +159,21 @@ namespace AnalysisManager template void Kinsol::copyVec(const N_Vector x, std::vector& y) { - const ScalarT* xdata = NV_DATA_S(x); - for (unsigned int i = 0; i < y.size(); ++i) - { - y[i] = xdata[i]; - } + const ScalarT* xdata = N_VGetArrayPointer(x); + std::copy_n(xdata, y.size(), y.begin()); } template void Kinsol::copyVec(const std::vector& x, N_Vector y) { - ScalarT* ydata = NV_DATA_S(y); - for (unsigned int i = 0; i < x.size(); ++i) - { - ydata[i] = x[i]; - } - } - - template - void Kinsol::copyVec(const std::vector& x, N_Vector y) - { - ScalarT* ydata = NV_DATA_S(y); - for (unsigned int i = 0; i < x.size(); ++i) - { - if (x[i]) - ydata[i] = 1.0; - else - ydata[i] = 0.0; - } + ScalarT* ydata = N_VGetArrayPointer(y); + std::copy_n(x.cbegin(), x.size(), ydata); } template void Kinsol::printOutput() { - sunrealtype* yval = N_VGetArrayPointer_Serial(yy_); + sunrealtype* yval = N_VGetArrayPointer(yy_); std::cout << std::setprecision(5) << std::setw(7); for (IdxT i = 0; i < model_->size(); ++i) @@ -220,7 +187,7 @@ namespace AnalysisManager void Kinsol::printSpecial(sunrealtype t, N_Vector y) { sunrealtype* yval = N_VGetArrayPointer_Serial(y); - IdxT N = N_VGetLength_Serial(y); + IdxT N = static_cast(N_VGetLength_Serial(y)); std::cout << "{"; std::cout << std::setprecision(5) << std::setw(7) << t; for (IdxT i = 0; i < N; ++i) @@ -233,29 +200,8 @@ namespace AnalysisManager template void Kinsol::printFinalStats() { - int retval = 0; - void* mem = solver_; - long int nni; - long int nfe; - long int nje; - long int nlfe; - - // retval = KINGetNumSteps(mem, &nst); - // checkOutput(retval, "KINGetNumSteps"); - retval = KINGetNumNonlinSolvIters(mem, &nni); - checkOutput(retval, "KINGetNumNonlinSolvIters"); - retval = KINGetNumFuncEvals(mem, &nfe); - checkOutput(retval, "KINGetNumFuncEvals"); - retval = KINGetNumJacEvals(mem, &nje); - checkOutput(retval, "KINGetNumJacEvals"); - retval = KINGetNumLinFuncEvals(mem, &nlfe); - checkOutput(retval, "KINGetNumLinFuncEvals"); - - // std::cout << "\nFinal Run Statistics: \n\n"; - std::cout << "Number of nonlinear iterations = " << nni << "\n"; - std::cout << "Number of function evaluations = " << nfe << "\n"; - std::cout << "Number of Jacobian evaluations = " << nje << "\n"; - std::cout << "Number of linear function evals. = " << nlfe << "\n"; + int retval = KINPrintAllStats(solver_, stdout, SUN_OUTPUTFORMAT_TABLE); + checkOutput(retval, "IDAPrintAllStats"); } template diff --git a/src/Solver/SteadyState/Kinsol.hpp b/src/Solver/SteadyState/Kinsol.hpp index b4cb190a2..c43feaee8 100644 --- a/src/Solver/SteadyState/Kinsol.hpp +++ b/src/Solver/SteadyState/Kinsol.hpp @@ -31,6 +31,8 @@ namespace AnalysisManager typedef typename GridKit::ScalarTraits::real_type real_type; + static_assert(std::is_same_v, "real_type must be the same type as sunrealtype"); + public: Kinsol(GridKit::Model::Evaluator* model); ~Kinsol(); @@ -85,22 +87,22 @@ namespace AnalysisManager // const real_type* getIntegral() const // { - // return NV_DATA_S(q_); + // return N_VGetArrayPointer(q_); // } // real_type* getIntegral() // { - // return NV_DATA_S(q_); + // return N_VGetArrayPointer(q_); // } // const real_type* getAdjointIntegral() const // { - // return NV_DATA_S(qB_); + // return N_VGetArrayPointer(qB_); // } // real_type* getAdjointIntegral() // { - // return NV_DATA_S(qB_); + // return N_VGetArrayPointer(qB_); // } void printOutput(); @@ -125,17 +127,16 @@ namespace AnalysisManager // N_Vector rhsQB, void *user_data); private: - void* solver_; - SUNContext context_; - SUNMatrix JacobianMat_; - SUNLinearSolver linearSolver_; + void* solver_{}; + SUNContext context_{}; + SUNMatrix JacobianMat_{}; + SUNLinearSolver linearSolver_{}; - N_Vector yy_; ///< Solution vector - N_Vector scale_; ///< Scaling vector - N_Vector tag_; ///< Tags differential variables - N_Vector q_; ///< Integrand vector + N_Vector yy_{}; ///< Solution vector + N_Vector scale_{}; ///< Scaling vector + N_Vector q_{}; ///< Integrand vector - N_Vector yy0_; ///< Storage for initial values + N_Vector yy0_{}; ///< Storage for initial values private: // static void copyMat(Model::Evaluator::Mat& J, SlsMat Jida); diff --git a/src/Utilities/FileIO.hpp b/src/Utilities/FileIO.hpp index 217c93fa6..1e4c2b3d9 100644 --- a/src/Utilities/FileIO.hpp +++ b/src/Utilities/FileIO.hpp @@ -8,200 +8,14 @@ */ #pragma once -#include #include #include -#include #include -#include #include #include -#include - -namespace -{ - - using namespace GridKit; - using namespace GridKit::PowerSystemData; - - static const std::string matlab_syntax_error{ - "Only a subset of Matlab syntax is supported." - "\n\t'=' for assignment must be on the same line as the field, eg " - "`mpc.version = '2'`." - "\n\tOpen brace ('[') must be on the same line as the field for matrix " - "initialization." - "\n\tEach row of a matrix must be terminated by a semicolon."}; - - std::ostream& logs() - { -#ifndef NDEBUG - std::cerr << "[FileIO.hpp]: "; - return std::cerr; -#else - static std::ofstream ofs; - ofs.setstate(std::ios_base::badbit); - return ofs; -#endif - } - - void ltrim(std::string& s) - { - const std::string nothing = ""; - s = std::regex_replace(s, std::regex("^\\s+"), nothing); - } - - void rtrim(std::string& s) - { - const std::string nothing = ""; - s = std::regex_replace(s, std::regex("\\s+$"), nothing); - } - - void trim_matlab_comments(std::string& s) - { - const std::string nothing = ""; - s = std::regex_replace(s, std::regex("%.+"), nothing); - } - - // Retrive MATPOWER component from assignment line. - // - // For example, the string " mpc.bus = [ ... ] % Some comment" will - // return the value "bus". - std::string getMatPowerComponent(const std::string& line) - { - logs() << "Getting matpower component from line\n"; - std::regex pat("mpc.([a-zA-Z]+)\\s*=.+"); - std::smatch matches; - std::string component; - if (std::regex_match(line, matches, pat)) - { - component = matches[1].str(); - } - else - { - throw std::runtime_error(matlab_syntax_error + "\nGot line " + line); - } - ltrim(component); - rtrim(component); - return component; - } - - // Ensure that all of the given line has been consumed, and that the only - // remaining non-whitespace character left in the line is a semicolon. - void checkEndOfMatrixRow(std::istream& is) - { - std::string rest; - is >> rest; - ltrim(rest); - rtrim(rest); - if (rest != ";") - throw std::runtime_error(matlab_syntax_error); - } - - template - void readMatPowerBusRow(const std::string& row, BusData& br, LoadData& lr) - { - logs() << "Parsing MATPOWER bus row\n"; - std::stringstream is(row); - is >> br.bus_i // Bus ID - >> br.type // Bus type: 1 = PQ, 2 = PV, 3 = ref, 4 = isolated - >> lr.Pd // Active power demand [MW] - >> lr.Qd // Reactive power demand [MVAr] - >> br.Gs // Shunt conductance (MW demanded at V = 1.0 p.u.) - >> br.Bs // Shunt susceptance (MVAr injected at V = 1.0 p.u.) - >> br.area // Area number (>0) - >> br.Vm // Voltage magnitude (p.u.) - >> br.Va // Voltage phase (deg) - >> br.baseKV // Base voltage [kV] - >> br.zone // Loss zone number (>0) - >> br.Vmax // Maximum voltage magnitude (p.u.) - >> br.Vmin; // Minimum voltage magnitude (p.u.) - - lr.bus_i = br.bus_i; - - // std::cout << br.str(); - // logs() << "Read BusData with the following values:\n" << br.str(); - // return br; - } - - template - void readMatPowerGenRow(GenData& gr, std::string& row) - { - logs() << "Parsing MATPOWER gen row\n"; - std::stringstream is(row); - is >> gr.bus >> gr.Pg >> gr.Qg >> gr.Qmax >> gr.Qmin >> gr.Vg >> gr.mBase - >> gr.status >> gr.Pmax >> gr.Pmin >> gr.Pc1 >> gr.Pc2 >> gr.Qc1min - >> gr.Qc1max >> gr.Qc2min >> gr.Qc2max >> gr.ramp_agc >> gr.ramp_10 - >> gr.ramp_30 >> gr.ramp_q >> gr.apf; - checkEndOfMatrixRow(is); - } - - template - void readMatPowerBranchRow(BranchData& br, std::string& row) - { - logs() << "Parsing MATPOWER branch row\n"; - std::stringstream is(row); - is >> br.fbus >> br.tbus >> br.r >> br.x >> br.b >> br.rateA >> br.rateB - >> br.rateC >> br.ratio >> br.angle >> br.status >> br.angmin - >> br.angmax; - checkEndOfMatrixRow(is); - } - - template - void readMatPowerGenCostRow(GenCostData& gcr, std::string& row) - { - logs() << "Parsing MATPOWER gen cost row\n"; - // Ensure last character is semicolon. - rtrim(row); - if (row[row.size() - 1] != ';') - throw std::runtime_error(matlab_syntax_error + "\nGot line " + row); - - std::stringstream is(row); - is >> gcr.kind >> gcr.startup >> gcr.shutdown >> gcr.n; - - for (RealT r; is >> r;) - { - gcr.rest.push_back(r); - } - } - - template - void readMatPowerVersion(SystemModelData& mp, std::string& line) - { - logs() << "Parsing matpower version\n"; - std::regex pat("mpc\\.version\\s*=\\s*'([0-9])';"); - std::smatch matches; - if (std::regex_match(line, matches, pat)) - { - mp.version = matches[1].str(); - } - else - { - throw std::runtime_error(matlab_syntax_error + "\nGot line '" + line + "'"); - } - } - - template - void readMatPowerBaseMVA(SystemModelData& mp, std::string& line) - { - std::regex pat("mpc\\.baseMVA\\s*=\\s*([0-9]+);"); - std::smatch matches; - if (std::regex_match(line, matches, pat)) - { - std::string s = matches[1]; - mp.baseMVA = std::atoi(s.c_str()); - } - else - { - throw std::runtime_error(matlab_syntax_error + "\nGot line '" + line + "'"); - } - } - -} // namespace - namespace GridKit { - /** * @brief Reads in an input stream of tabulated data * @@ -281,105 +95,4 @@ namespace GridKit std::cout << "\n"; } } - - template - void readMatPowerFile(SystemModelData& mp, std::string& filename) - { - std::ifstream ifs{filename}; - readMatPower(mp, ifs); - } - - template - void readMatPower(SystemModelData& mp, std::istream& is) - { - using BusDataT = BusData; - using GenDataT = GenData; - using BranchDataT = BranchData; - using GenCostDataT = GenCostData; - using LoadDataT = LoadData; - - for (std::string line; std::getline(is, line);) - { - // Trim whitespace and remove comments - ltrim(line); - rtrim(line); - logs() << line << "\n"; - trim_matlab_comments(line); - - // Skip empty lines and comment-only lines - if (line.size() == 0) - continue; - - // Skip the matlab function declaration - if (line.find("function") != std::string::npos) - continue; - - // Check for MATPOWER component definitions - if (line.find("mpc") != std::string::npos) - { - const std::string component = getMatPowerComponent(line); - logs() << "Got component: '" << component << "'\n"; - // First, parse matrix components - if (component == "bus") - { - while (std::getline(is, line)) - { - if (line.find("];") != std::string::npos) - break; - BusDataT br; - LoadDataT lr; - readMatPowerBusRow(line, br, lr); - mp.bus.push_back(std::move(br)); - mp.load.push_back(std::move(lr)); - } - } - else if (component == "gen") - { - while (std::getline(is, line)) - { - if (line.find("];") != std::string::npos) - break; - GenDataT gr; - readMatPowerGenRow(gr, line); - mp.gen.push_back(gr); - } - } - else if (component == "branch") - { - while (std::getline(is, line)) - { - if (line.find("];") != std::string::npos) - break; - BranchDataT br; - readMatPowerBranchRow(br, line); - mp.branch.push_back(br); - } - } - else if (component == "gencost") - { - while (std::getline(is, line)) - { - if (line.find("];") != std::string::npos) - break; - GenCostDataT gcr; - readMatPowerGenCostRow(gcr, line); - mp.gencost.push_back(gcr); - } - } - - // Next, parse scalar components - else if (component == "version") - { - readMatPowerVersion(mp, line); - } - else if (component == "baseMVA") - { - readMatPowerBaseMVA(mp, line); - } - } - } - } - } // namespace GridKit diff --git a/src/Utilities/Testing.hpp b/src/Utilities/Testing.hpp index ce57d2c5f..188ee1c4e 100644 --- a/src/Utilities/Testing.hpp +++ b/src/Utilities/Testing.hpp @@ -10,21 +10,7 @@ #include #include #include - -#include - -namespace -{ - - static constexpr double tol_ = 1e-8; - - inline std::ostream& errs() - { - std::cerr << "[Utils/Testing.hpp]: "; - return std::cerr; - } - -} // namespace +#include namespace GridKit { @@ -40,186 +26,57 @@ namespace GridKit return (error < tol); } - template - inline bool isEqual(PowerSystemData::GenCostData a, - PowerSystemData::GenCostData b, - RealT tol = tol_) - { - (void) tol; // suppress warning - int fail = 0; - fail += a.kind != b.kind; - fail += a.startup != b.startup; - fail += a.shutdown != b.shutdown; - fail += a.n != b.n; - if (fail) - { - errs() << "Got failure!\na=" << a.str() << "\nb=" << b.str(); - } - return fail == 0; - } - - template - inline bool isEqual(PowerSystemData::GenData a, - PowerSystemData::GenData b, - RealT tol = tol_) - { - int fail = 0; - - fail += a.bus != b.bus; - fail += !isEqual(a.Pg, b.Pg, tol); - fail += !isEqual(a.Qg, b.Qg, tol); - fail += !isEqual(a.Qmax, b.Qmax, tol); - fail += !isEqual(a.Qmin, b.Qmin, tol); - fail += !isEqual(a.Vg, b.Vg, tol); - fail += a.mBase != b.mBase; - fail += a.status != b.status; - fail += a.Pmax != b.Pmax; - fail += a.Pmin != b.Pmin; - fail += a.Pc1 != b.Pc1; - fail += a.Pc2 != b.Pc2; - fail += a.Qc1min != b.Qc1min; - fail += a.Qc1max != b.Qc1max; - fail += a.Qc2min != b.Qc2min; - fail += a.Qc2max != b.Qc2max; - fail += a.ramp_agc != b.ramp_agc; - fail += a.ramp_10 != b.ramp_10; - fail += a.ramp_30 != b.ramp_30; - fail += a.ramp_q != b.ramp_q; - fail += a.apf != b.apf; - - if (fail) - { - errs() << "Got failure!\na=" << a.str() << "\nb=" << b.str(); - } - return fail == 0; - } - - template - inline bool isEqual(PowerSystemData::BusData a, - PowerSystemData::BusData b, - RealT tol = tol_) - { - int fail = 0; - - fail += a.bus_i != b.bus_i; - fail += a.type != b.type; - fail += a.Gs != b.Gs; - fail += a.Bs != b.Bs; - fail += a.area != b.area; - fail += !isEqual(a.Vm, b.Vm, tol); - fail += !isEqual(a.Va, b.Va, tol); - fail += a.baseKV != b.baseKV; - fail += a.zone != b.zone; - fail += !isEqual(a.Vmax, b.Vmax, tol); - fail += !isEqual(a.Vmin, b.Vmin, tol); - - if (fail) - { - errs() << "bus_i: a=" << a.bus_i << ", b=" << b.bus_i << "\n" - << "type: a=" << a.type << ", b=" << b.type << "\n" - << "Gs: a=" << a.Gs << ", b=" << b.Gs << "\n" - << "Bs: a=" << a.Bs << ", b=" << b.Bs << "\n" - << "area: a=" << a.area << ", b=" << b.area << "\n" - << "Vm: a=" << a.Vm << ", b=" << b.Vm << "\n" - << "Va: a=" << a.Va << ", b=" << b.Va << "\n" - << "baseKV: a=" << a.baseKV << ", b=" << b.baseKV << "\n" - << "zone: a=" << a.zone << ", b=" << b.zone << "\n" - << "Vmax: a=" << a.Vmax << ", b=" << b.Vmax << "\n" - << "Vmin: a=" << a.Vmin << ", b=" << b.Vmin << "\n"; - } - return fail == 0; - } - - template - inline bool isEqual(PowerSystemData::LoadData a, - PowerSystemData::LoadData b, - RealT tol = tol_) + /** + * @brief Equatlity comparison between maps with a tolerance for the scalar value + * + * @tparam IdxT + * @tparam RealT + * + * @param[in] a - first map to compare + * @param[in] b - second map to compare + * @param[in] tol - tolerance + * @return bool - true if the maps are equal; false otherwise + */ + template + inline bool isEqual(std::map a, + std::map b, + const RealT tol = std::numeric_limits::epsilon()) { int fail = 0; - fail += a.bus_i != b.bus_i; - fail += !isEqual(a.Pd, b.Pd, tol); - fail += !isEqual(a.Qd, b.Qd, tol); - - if (fail) + if (a.size() != b.size()) { - errs() << "bus_i: a=" << a.bus_i << ", b=" << b.bus_i << "\n" - << "Pd: a=" << a.Pd << ", b=" << b.Pd << "\n" - << "Qd: a=" << a.Qd << ", b=" << b.Qd << "\n"; + fail++; + std::cerr << "Containers do not have the same size! " + << "a.size() = " << a.size() << ", and " + << "b.size() = " << b.size() << "\n"; } - return fail == 0; - } - template - inline bool isEqual(PowerSystemData::BranchData a, - PowerSystemData::BranchData b, - RealT tol = tol_) - { - int fail = 0; - - fail += a.fbus != b.fbus; - fail += a.tbus != b.tbus; - fail += !isEqual(a.r, b.r, tol); - fail += !isEqual(a.x, b.x, tol); - fail += !isEqual(a.b, b.b, tol); - fail += a.rateA != b.rateA; - fail += a.rateB != b.rateB; - fail += a.rateC != b.rateC; - fail += a.ratio != b.ratio; - fail += a.angle != b.angle; - fail += a.status != b.status; - fail += a.angmin != b.angmin; - fail += a.angmax != b.angmax; - - if (fail) + for (const auto& pair_a : a) { - errs() << "Got failure!\na=" << a.str() << "\nb=" << b.str(); - } - return fail == 0; - } - - template - inline bool isEqual(std::vector a, std::vector b, double tol = tol_) - { - if (a.size() != b.size()) - throw std::runtime_error([&] - { - std::stringstream errs; - errs << "Containers do not have the same size!\n" - << "\tGot a.size() == " << a.size() << "\n" - << "\tGot b.size() == " << b.size() << "\n"; - return errs.str(); }()); - - int fail = 0; - for (std::size_t i = 0; i < a.size(); i++) - { - if (!isEqual(a[i], b[i], tol)) + auto it = b.find(pair_a.first); + if (it != b.end()) + { + if (!isEqual(pair_a.second, it->second, tol)) + { + fail++; + std::cerr << "Mismatching map values! " + << "a.first = " << pair_a.first << ", " + << "a.second = " << pair_a.second << ", and " + << "b.second = " << it->second << "\n"; + } + } + else { fail++; - errs() << "[isEqual>]: Got failure with i=" << i << ".\n"; + std::cerr << "Entry not found in the second container! " + << "a.first = " << pair_a.first << "\n"; } } return fail == 0; } - template - inline bool isEqual(PowerSystemData::SystemModelData a, - PowerSystemData::SystemModelData b) - { - int fail = 0; - - fail += a.version != b.version; - fail += a.baseMVA != b.baseMVA; - fail += !isEqual(a.bus, b.bus); - fail += !isEqual(a.gen, b.gen); - fail += !isEqual(a.gencost, b.gencost); - fail += !isEqual(a.branch, b.branch); - fail += !isEqual(a.load, b.load); - - return fail == 0; - } - } // namespace Testing } // namespace GridKit diff --git a/tests/UnitTests/AutomaticDifferentiation/CMakeLists.txt b/tests/UnitTests/AutomaticDifferentiation/CMakeLists.txt new file mode 100644 index 000000000..416ffde95 --- /dev/null +++ b/tests/UnitTests/AutomaticDifferentiation/CMakeLists.txt @@ -0,0 +1,2 @@ + +add_subdirectory(DependencyTracking) diff --git a/tests/UnitTests/AutomaticDifferentiation/DependencyTracking/CMakeLists.txt b/tests/UnitTests/AutomaticDifferentiation/DependencyTracking/CMakeLists.txt new file mode 100644 index 000000000..280d6b8fe --- /dev/null +++ b/tests/UnitTests/AutomaticDifferentiation/DependencyTracking/CMakeLists.txt @@ -0,0 +1,14 @@ +# [[ +# Author(s): +# - Slaven Peles +#]] + + +add_executable(test_dependency_tracking runDependencyTrackingTests.cpp) +target_link_libraries(test_dependency_tracking GRIDKIT::phasor_dynamics_bus) + + +add_test(NAME DependencyTrackingTest COMMAND $) + +install(TARGETS test_dependency_tracking + RUNTIME DESTINATION bin) diff --git a/tests/UnitTests/SparsityPattern/SparsityPatternTests.hpp b/tests/UnitTests/AutomaticDifferentiation/DependencyTracking/DependencyTrackingTests.hpp similarity index 87% rename from tests/UnitTests/SparsityPattern/SparsityPatternTests.hpp rename to tests/UnitTests/AutomaticDifferentiation/DependencyTracking/DependencyTrackingTests.hpp index c836f961b..d2d6d995f 100644 --- a/tests/UnitTests/SparsityPattern/SparsityPatternTests.hpp +++ b/tests/UnitTests/AutomaticDifferentiation/DependencyTracking/DependencyTrackingTests.hpp @@ -1,7 +1,7 @@ #include #include -#include +#include #include #include @@ -21,8 +21,8 @@ namespace GridKit { TestStatus success = true; - const size_t n = 3; - std::vector x(n), p(n), f(n); + const size_t n = 3; + std::vector x(n), p(n), f(n); // decide x, y, and z are variables for (size_t i = 0; i < n; ++i) @@ -47,7 +47,7 @@ namespace GridKit // Check dependenices of f[0] (depends on x[0] and x[1]) { - const Sparse::Variable::DependencyMap& dependencies = + const DependencyTracking::Variable::DependencyMap& dependencies = (f[0]).getDependencies(); success *= (dependencies.size() == 2); @@ -58,7 +58,7 @@ namespace GridKit // Check dependencies of f[2] (depends on x[0], x[1], x[2]) { - const Sparse::Variable::DependencyMap& dependencies = + const DependencyTracking::Variable::DependencyMap& dependencies = (f[2]).getDependencies(); success *= (dependencies.size() == 3); diff --git a/tests/UnitTests/SparsityPattern/runSparsityPatternTests.cpp b/tests/UnitTests/AutomaticDifferentiation/DependencyTracking/runDependencyTrackingTests.cpp similarity index 87% rename from tests/UnitTests/SparsityPattern/runSparsityPatternTests.cpp rename to tests/UnitTests/AutomaticDifferentiation/DependencyTracking/runDependencyTrackingTests.cpp index 782148f2c..29e320220 100644 --- a/tests/UnitTests/SparsityPattern/runSparsityPatternTests.cpp +++ b/tests/UnitTests/AutomaticDifferentiation/DependencyTracking/runDependencyTrackingTests.cpp @@ -1,4 +1,4 @@ -#include "SparsityPatternTests.hpp" +#include "DependencyTrackingTests.hpp" int main() { diff --git a/tests/UnitTests/CMakeLists.txt b/tests/UnitTests/CMakeLists.txt index c7bc28723..a168f9f7d 100644 --- a/tests/UnitTests/CMakeLists.txt +++ b/tests/UnitTests/CMakeLists.txt @@ -1,4 +1,4 @@ # +add_subdirectory(AutomaticDifferentiation) add_subdirectory(PhasorDynamics) -add_subdirectory(SparsityPattern) add_subdirectory(Solver) diff --git a/tests/UnitTests/PhasorDynamics/BranchTests.hpp b/tests/UnitTests/PhasorDynamics/BranchTests.hpp index 81e2c48eb..976793d69 100644 --- a/tests/UnitTests/PhasorDynamics/BranchTests.hpp +++ b/tests/UnitTests/PhasorDynamics/BranchTests.hpp @@ -1,6 +1,7 @@ #include #include +#include #include #include #include @@ -77,6 +78,46 @@ namespace GridKit return success.report(__func__); } + TestOutcome jacobian() + { + TestStatus success = true; + + real_type R{2.0}; ///< Branch series resistance + real_type X{4.0}; ///< Branch series reactance + real_type G{0.2}; ///< Branch shunt conductance + real_type B{1.2}; ///< Branch shunt charging + + DependencyTracking::Variable Vr1{10.0}; ///< Bus-1 real voltage + DependencyTracking::Variable Vi1{20.0}; ///< Bus-1 imaginary voltage + DependencyTracking::Variable Vr2{30.0}; ///< Bus-2 real voltage + DependencyTracking::Variable Vi2{40.0}; ///< Bus-2 imaginary voltage + + Vr1.setVariableNumber(0); ///< Independent variables: first + Vi1.setVariableNumber(1); ///< Independent variables: second + Vr2.setVariableNumber(2); ///< Independent variables: third + Vi2.setVariableNumber(3); ///< Independent variables: fourth + + PhasorDynamics::BusInfinite bus1(Vr1, Vi1); + PhasorDynamics::BusInfinite bus2(Vr2, Vi2); + + PhasorDynamics::Branch branch(&bus1, &bus2, R, X, G, B); + branch.evaluateResidual(); ///< Computes the residual and the Jacobian values by tracking + ///< the dependencies + + std::vector residuals{bus1.Ir(), bus1.Ii(), bus2.Ir(), bus2.Ii()}; + std::vector ref = analyticalJacobian(R, X, G, B); + + /// Compare dependencies computed automatically to the ones computed analytically + for (size_t i = 0; i < residuals.size(); ++i) + { + DependencyTracking::Variable res = residuals[i]; + const DependencyTracking::Variable::DependencyMap& dependencies = res.getDependencies(); + success *= (GridKit::Testing::isEqual(dependencies, ref[i])); + } + + return success.report(__func__); + } + TestOutcome accessors() { TestStatus success = true; @@ -139,6 +180,44 @@ namespace GridKit return success.report(__func__); } + + private: + std::vector analyticalJacobian(const real_type R, + const real_type X, + const real_type G, + const real_type B) + { + const real_type b = -X / (R * R + X * X); + const real_type g = R / (R * R + X * X); + + real_type dIr1_dVr1 = -(g + 0.5 * G); + real_type dIr1_dVi1 = (b + 0.5 * B); + real_type dIr1_dVr2 = g; + real_type dIr1_dVi2 = -b; + + real_type dIi1_dVr1 = -(b + 0.5 * B); + real_type dIi1_dVi1 = -(g + 0.5 * G); + real_type dIi1_dVr2 = b; + real_type dIi1_dVi2 = g; + + real_type dIr2_dVr1 = g; + real_type dIr2_dVi1 = -b; + real_type dIr2_dVr2 = -(g + 0.5 * G); + real_type dIr2_dVi2 = (b + 0.5 * B); + + real_type dIi2_dVr1 = b; + real_type dIi2_dVi1 = g; + real_type dIi2_dVr2 = -(b + 0.5 * B); + real_type dIi2_dVi2 = -(g + 0.5 * G); + + std::vector dependencies(4); + dependencies[0] = {{0, dIr1_dVr1}, {1, dIr1_dVi1}, {2, dIr1_dVr2}, {3, dIr1_dVi2}}; + dependencies[1] = {{0, dIi1_dVr1}, {1, dIi1_dVi1}, {2, dIi1_dVr2}, {3, dIi1_dVi2}}; + dependencies[2] = {{0, dIr2_dVr1}, {1, dIr2_dVi1}, {2, dIr2_dVr2}, {3, dIr2_dVi2}}; + dependencies[3] = {{0, dIi2_dVr1}, {1, dIi2_dVi1}, {2, dIi2_dVr2}, {3, dIi2_dVi2}}; + + return dependencies; + } }; // class BranchTest } // namespace Testing diff --git a/tests/UnitTests/PhasorDynamics/CMakeLists.txt b/tests/UnitTests/PhasorDynamics/CMakeLists.txt index 18876a998..c057d1fe7 100644 --- a/tests/UnitTests/PhasorDynamics/CMakeLists.txt +++ b/tests/UnitTests/PhasorDynamics/CMakeLists.txt @@ -13,21 +13,35 @@ target_link_libraries(test_phasor_branch GRIDKIT::phasor_dynamics_branch add_executable(test_phasor_load runLoadTests.cpp) target_link_libraries(test_phasor_load GRIDKIT::phasor_dynamics_load + GRIDKIT::phasor_dynamics_load_dependency_tracking GRIDKIT::phasor_dynamics_bus) add_executable(test_phasor_genrou runGenrouTests.cpp) target_link_libraries(test_phasor_genrou GRIDKIT::phasor_dynamics_genrou - GRIDKIT::phasor_dynamics_bus) + GRIDKIT::phasor_dynamics_bus) + +#add_executable(test_phasor_governortgov1 runGovernorTgov1Tests.cpp) +#target_link_libraries(test_phasor_genrou GRIDKIT::phasor_dynamics_turbinegov +# GRIDKIT::phasor_dynamics_genrou +# GRIDKIT::phasor_dynamics_bus) + +add_executable(test_phasor_gen_classical runGenClassicalTests.cpp) +target_link_libraries(test_phasor_gen_classical GRIDKIT::phasor_dynamics_gen_classical + GRIDKIT::phasor_dynamics_bus) add_executable(test_phasor_system runSystemTests.cpp) target_link_libraries(test_phasor_system GRIDKIT::phasor_dynamics_load GRIDKIT::phasor_dynamics_branch + GRIDKIT::phasor_dynamics_genrou + GRIDKIT::phasor_dynamics_bus_fault GRIDKIT::phasor_dynamics_bus) add_test(NAME PhasorDynamicsBusTest COMMAND $) add_test(NAME PhasorDynamicsBranchTest COMMAND $) add_test(NAME PhasorDynamicsGenrouTest COMMAND $) +#add_test(NAME PhasorDynamicsGovernorTgov1Test COMMAND $) +add_test(NAME PhasorDynamicsGenClassicalTest COMMAND $) add_test(NAME PhasorDynamicsLoadTest COMMAND $) add_test(NAME PhasorDynamicsSystemTest COMMAND $) @@ -35,4 +49,6 @@ install(TARGETS test_phasor_bus test_phasor_branch test_phasor_load test_phasor_genrou + ##test_phasor_governortgov1 + test_phasor_gen_classical test_phasor_system RUNTIME DESTINATION bin) diff --git a/tests/UnitTests/PhasorDynamics/GenClassicalTests.hpp b/tests/UnitTests/PhasorDynamics/GenClassicalTests.hpp new file mode 100644 index 000000000..98eaa86a9 --- /dev/null +++ b/tests/UnitTests/PhasorDynamics/GenClassicalTests.hpp @@ -0,0 +1,228 @@ +/** + * @file GenClassicalTests.hpp + * @author Slaven Peles (peless@ornl.gov) + * @author Abdourahman Barry (abdourahman@vt.edu) + * @brief Tests for classical generator model. + * + */ +#define _USE_MATH_DEFINES /* need this since directly including GenClassical.cpp for MSVC compiler */ +#include +#include +#include + +#include + +#include +#include +#include +#include +#include + +namespace GridKit +{ + namespace Testing + { + + template + class GenClassicalTests + { + private: + using real_type = typename PhasorDynamics::Component::real_type; + static constexpr ScalarT tol_ = 10 * std::numeric_limits::epsilon(); + + public: + GenClassicalTests() = default; + ~GenClassicalTests() = default; + + TestOutcome constructor() + { + TestStatus success = true; + + auto* bus = new PhasorDynamics::Bus(1.0, 0.0); + + PhasorDynamics::Component* machine = + new PhasorDynamics::GenClassical(bus, 1); + + success *= (machine != nullptr); + + if (machine) + { + delete machine; + } + delete bus; + + return success.report(__func__); + } + + /** + * A test case to verify residual values + */ + TestOutcome residual() + { + TestStatus success = true; + + // classical generator parameters + real_type H{0.5}; + real_type D{-1.0}; + real_type Ra{0.5}; + real_type Xdp{0.5}; + real_type pmech{1.0}; + real_type ep{2.0}; + + ScalarT Vr1{1.0}; ///< Bus-1 real voltage + ScalarT Vi1{1.0}; ///< Bus-1 imaginary voltage + + // Test answer keys + const std::vector res_answer = {0.0, + 0.0, + 0.0, + 0.0, + 0.0, + pmech, + ep}; + + PhasorDynamics::Bus bus(Vr1, Vi1); + PhasorDynamics::GenClassical gen(&bus, 1, 1.0, 1.0, H, D, Ra, Xdp); + bus.allocate(); + bus.initialize(); + + // Allocate but not initialize genrator model + gen.allocate(); + + // Set variable values matching the answer key + gen.y()[0] = M_PI; // delta + gen.y()[1] = 2.0; // omega + gen.y()[2] = 2.0; // telec + gen.y()[3] = -2.0; // ir + gen.y()[4] = -4.0; // ii + gen.y()[5] = pmech; // pmech + gen.y()[6] = ep; // Ep + + // Set derivative values matching the answer key + gen.yp()[0] = 2 * M_PI * 60.0; // delta_dot + gen.yp()[1] = -1.0; // omega_dot + gen.yp()[2] = 0.0; + gen.yp()[3] = 0.0; + gen.yp()[4] = 0.0; + gen.yp()[5] = 0.0; + gen.yp()[6] = 0.0; + + gen.evaluateResidual(); + std::vector& residual = gen.getResidual(); + + for (size_t i = 0; i < res_answer.size(); ++i) + { + if (!isEqual(residual[i], res_answer[i], tol_)) + { + std::cout << "Incorrect result: " + << residual[i] << " != " << res_answer[i] << "\n"; + success = false; + break; + } + } + + return success.report(__func__); + } + + /** + * + * Verifies correctness of the system initialization + */ + TestOutcome initial() + { + TestStatus success = true; + + // classical generator parameters + real_type p0{3.0}; + real_type q0{-1.0}; + real_type H{1.0}; + real_type D{1.0}; + real_type Ra{0.6}; + real_type Xdp{0.2}; + + ScalarT Vr1{1.0}; ///< Bus-1 real voltage + ScalarT Vi1{1.0}; ///< Bus-1 imaginary voltage + + // Test answer keys + const std::vector var_answer = {M_PI / 4.0, // delta + 1.0, // omega + 6.0, // Te + 1.0, // Ir + 2.0, // Ii + 6.0, // Pm + 2.0 * sqrt(2.0)}; // Ep + + PhasorDynamics::Bus bus(Vr1, Vi1); + PhasorDynamics::GenClassical gen(&bus, 1, p0, q0, H, D, Ra, Xdp); + bus.allocate(); + bus.initialize(); + gen.allocate(); + gen.initialize(); + + for (size_t i = 0; i < var_answer.size(); ++i) + { + if (!isEqual(gen.y()[i], var_answer[i], tol_)) + { + std::cout << "Incorrect result: " + << gen.y()[i] << " != " << var_answer[i] << "\n"; + success = false; + break; + } + + if (!isEqual(gen.yp()[i], 0.0, tol_)) + { + std::cout << "Incorrect result: " + << gen.yp()[i] << " != 0\n"; + success = false; + break; + } + } + + return success.report(__func__); + } + + /* + *Verifies the residual evaluates to zero for the initial conditions + */ + TestOutcome zeroInitialResidual() + { + TestStatus success = true; + + // classical generator parameters + real_type p0{3.0}; + real_type q0{-1.0}; + real_type H{1.0}; + real_type D{1.0}; + real_type Ra{0.6}; + real_type Xdp{0.2}; + + ScalarT Vr1{1.0}; ///< Bus real voltage + ScalarT Vi1{1.0}; ///< Bus imaginary voltage + + PhasorDynamics::Bus bus(Vr1, Vi1); + PhasorDynamics::GenClassical gen(&bus, 1, p0, q0, H, D, Ra, Xdp); + bus.allocate(); + bus.initialize(); + gen.allocate(); + gen.initialize(); + gen.evaluateResidual(); + std::vector res = gen.getResidual(); + + for (size_t i = 0; i < res.size(); ++i) + { + if (!isEqual(res[i], 0.0, tol_)) + { + std::cout << "Incorrect result: " + << gen.yp()[i] << " != 0\n"; + success = false; + break; + } + } + + return success.report(__func__); + } + + }; // class GenClassicalTests + + } // namespace Testing +} // namespace GridKit diff --git a/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp b/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp new file mode 100644 index 000000000..16b6bf710 --- /dev/null +++ b/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp @@ -0,0 +1,124 @@ +#include +#include + +#include +#include +#include +#include +#include +#include + +namespace GridKit +{ + namespace Testing + { + + template + class GovernorTgov1Tests + { + private: + using real_type = typename PhasorDynamics::Component::real_type; + + public: + GovernorTgov1Tests() = default; + ~GovernorTgov1Tests() = default; + + TestOutcome constructor() + { + TestStatus success = true; + + auto* bus = new PhasorDynamics::Bus(1.0, 0.0); + + PhasorDynamics::Genrou* machine = + new PhasorDynamics::Genrou(bus, 1); + + PhasorDynamics::TurbineGov* gov = + new PhasorDynamics::TurbineGov(machine); + + success *= (gov != nullptr); + + if (gov) + { + delete gov; + } + if (machine) + { + delete machine; + } + delete bus; + + return success.report(__func__); + } + + /** + * @brief Checks residual evaluation. + * + * The test instantiates and initializes Genrou model. Properly + * initialized model should have residual equal to zero within machine + * precision. + * + * @return TestOutcome - wheter test was successful + */ + TestOutcome residual() + { + TestStatus success = true; + + PhasorDynamics::Bus bus(1.0, 0.0); + PhasorDynamics::Genrou gen(&bus, + 1, + 1, + 0.05013, + 3, + 0, + 0, + 7, + 0.04, + 0.05, + 0.75, + 2.1, + 0.2, + 0.18, + 0.5, + 0.5, + 0.18, + 0.15, + 0, + 0); + PhasorDynamics::TurbineGov gov(&gen); + + bus.allocate(); + bus.initialize(); + bus.evaluateResidual(); + + gen.allocate(); + gen.initialize(); + gen.evaluateResidual(); + + gov.allocate(); + gov.initialize(); + gov.evaluateResidual(); + + // Require results to be within machine precision + auto tol = 10 * std::numeric_limits::epsilon(); + + const std::vector& f = gov.getResidual(); + for (const auto& f_val : f) + { + if (!isEqual(f_val, 0.0, tol)) + success = false; + } + + return success.report(__func__); + } + + TestOutcome accessors() + { + TestStatus success = true; + success.skipTest(); + + return success.report(__func__); + } + }; // class GenrouTest + + } // namespace Testing +} // namespace GridKit diff --git a/tests/UnitTests/PhasorDynamics/LoadTests.hpp b/tests/UnitTests/PhasorDynamics/LoadTests.hpp index 3edc90f17..081db1415 100644 --- a/tests/UnitTests/PhasorDynamics/LoadTests.hpp +++ b/tests/UnitTests/PhasorDynamics/LoadTests.hpp @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -65,6 +66,107 @@ namespace GridKit return success.report(__func__); } + + TestOutcome jacobian() + { + TestStatus success = true; + + real_type R{2.0}; ///< Load resistance + real_type X{4.0}; ///< Load reactance + + DependencyTracking::Variable Vr{10.0}; ///< Bus real voltage + DependencyTracking::Variable Vi{20.0}; ///< Bus imaginary voltage + + Vr.setVariableNumber(0); ///< Independent variables: first + Vi.setVariableNumber(1); ///< Independent variables: second + + PhasorDynamics::BusInfinite bus(Vr, Vi); + + PhasorDynamics::Load load(&bus, R, X); + load.evaluateResidual(); ///< Computes the residual and the Jacobian values by tracking + ///< the dependencies + + std::vector residuals{bus.Ir(), bus.Ii()}; + std::vector ref = analyticalJacobian(R, X); + + /// Compare dependencies computed automatically to the ones computed analytically + for (size_t i = 0; i < residuals.size(); ++i) + { + DependencyTracking::Variable res = residuals[i]; + const DependencyTracking::Variable::DependencyMap& dependencies = res.getDependencies(); + success *= (GridKit::Testing::isEqual(dependencies, ref[i])); + } + + return success.report(__func__); + } + +#ifdef GRIDKIT_ENABLE_ENZYME + TestOutcome enzyme_jacobian() + { + TestStatus success = true; + + real_type R{2.0}; ///< Load resistance + real_type X{4.0}; ///< Load reactance + + ScalarT Vr{10.0}; ///< Bus real voltage + ScalarT Vi{20.0}; ///< Bus imaginary voltage + + PhasorDynamics::BusInfinite bus(Vr, Vi); + + PhasorDynamics::Load load(&bus, R, X); + load.evaluateJacobian(); + GridKit::LinearAlgebra::COO_Matrix model_jacobian = load.getJacobian(); + model_jacobian.printMatrix("Model Jacobian"); + + /// Compare model Jacobian wih dependencies computed analytically + std::vector ref = analyticalJacobian(R, X); + std::vector model_dependencies = mapFromCOO(model_jacobian); + for (size_t i = 0; i < ref.size(); ++i) + { + success *= (GridKit::Testing::isEqual(model_dependencies[i], ref[i])); + } + + return success.report(__func__); + } +#endif + + private: + std::vector analyticalJacobian(const real_type R, + const real_type X) + { + const real_type b = -X / (R * R + X * X); + const real_type g = R / (R * R + X * X); + + real_type dIr_dVr = -g; + real_type dIr_dVi = b; + + real_type dIi_dVr = -b; + real_type dIi_dVi = -g; + + std::vector dependencies(2); + dependencies[0] = {{0, dIr_dVr}, {1, dIr_dVi}}; + dependencies[1] = {{0, dIi_dVr}, {1, dIi_dVi}}; + + return dependencies; + } + + std::vector mapFromCOO(GridKit::LinearAlgebra::COO_Matrix matrix) + { + std::tuple&, std::vector&, std::vector&> matrix_entries = matrix.getEntries(); + const auto [rows, columns, values] = matrix_entries; + + std::tuple matrix_dimensions = matrix.getDimensions(); + const auto [n_rows, n_columns] = matrix_dimensions; + + std::vector dependencies(n_rows); + + for (IdxT i = 0; i < rows.size(); ++i) + { + dependencies[rows[i]].insert(std::make_pair(columns[i], values[i])); + } + + return dependencies; + } }; } // namespace Testing diff --git a/tests/UnitTests/PhasorDynamics/SystemTests.hpp b/tests/UnitTests/PhasorDynamics/SystemTests.hpp index ea1cf7f29..dc8ecf81e 100644 --- a/tests/UnitTests/PhasorDynamics/SystemTests.hpp +++ b/tests/UnitTests/PhasorDynamics/SystemTests.hpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -29,21 +30,72 @@ namespace GridKit { TestStatus success = true; - // ScalarT Vr{1.0}; - // ScalarT Vi{2.0}; - PhasorDynamics::SystemModel* system = nullptr; // Create an empty system system = new PhasorDynamics::SystemModel(); - success *= (system != nullptr); - - if (system) + if (system == nullptr) { - delete system; + std::cout << "Default constructor failed!\n"; + success = false; + return success.report(__func__); } + delete system; + system = nullptr; + + PhasorDynamics::SystemModelData data; + + // Set bus data + data.bus.resize(2); + + // Bus 0 + data.bus[0].bus_id = 0; + data.bus[0].bus_type = PhasorDynamics::BusData::SLACK; + data.bus[0].Vr0 = 10.0; + data.bus[0].Vi0 = 20.0; + + // Bus 1 + data.bus[1].bus_id = 1; + data.bus[1].bus_type = PhasorDynamics::BusData::SLACK; + data.bus[1].Vr0 = 30.0; + data.bus[1].Vi0 = 40.0; + + // Set branch data + data.branch.resize(1); + + // Branch 0-1 + data.branch[0].bus1_id = data.bus[0].bus_id; + data.branch[0].bus2_id = data.bus[1].bus_id; + data.branch[0].R = 2.0; + data.branch[0].X = 4.0; + data.branch[0].G = 0.2; + data.branch[0].B = 1.2; + + // Create an empty system model + system = new PhasorDynamics::SystemModel(data); + system->allocate(); + system->initialize(); + system->evaluateResidual(); + + // Answer keys + const ScalarT Ir0{17.0}; ///< Solution: real current entering bus-0 + const ScalarT Ii0{-10.0}; ///< Solution: imaginary current entering bus-0 + const ScalarT Ir1{15.0}; ///< Solution: real current entering bus-1 + const ScalarT Ii1{-20.0}; ///< Solution: imaginary current entering bus-1 + + auto* bus0 = system->getBus(0); + auto* bus1 = system->getBus(1); + + success *= isEqual(bus0->Ir(), Ir0); + success *= isEqual(bus0->Ii(), Ii0); + success *= isEqual(bus1->Ir(), Ir1); + success *= isEqual(bus1->Ii(), Ii1); + + delete system; + system = nullptr; + return success.report(__func__); } diff --git a/tests/UnitTests/PhasorDynamics/runBranchTests.cpp b/tests/UnitTests/PhasorDynamics/runBranchTests.cpp index b70a39ff1..123f5d290 100644 --- a/tests/UnitTests/PhasorDynamics/runBranchTests.cpp +++ b/tests/UnitTests/PhasorDynamics/runBranchTests.cpp @@ -11,6 +11,7 @@ int main() result += test.constructor(); result += test.accessors(); result += test.residual(); + result += test.jacobian(); return result.summary(); } diff --git a/tests/UnitTests/PhasorDynamics/runGenClassicalTests.cpp b/tests/UnitTests/PhasorDynamics/runGenClassicalTests.cpp new file mode 100644 index 000000000..21b7f45ba --- /dev/null +++ b/tests/UnitTests/PhasorDynamics/runGenClassicalTests.cpp @@ -0,0 +1,15 @@ +#include "GenClassicalTests.hpp" + +int main() +{ + GridKit::Testing::TestingResults result; + + GridKit::Testing::GenClassicalTests test; + + result += test.constructor(); + result += test.residual(); + result += test.initial(); + result += test.zeroInitialResidual(); + + return result.summary(); +} diff --git a/tests/UnitTests/PhasorDynamics/runGovernorTgov1Tests.cpp b/tests/UnitTests/PhasorDynamics/runGovernorTgov1Tests.cpp new file mode 100644 index 000000000..ced215e1d --- /dev/null +++ b/tests/UnitTests/PhasorDynamics/runGovernorTgov1Tests.cpp @@ -0,0 +1,14 @@ +#include "GovernorTgov1Tests.hpp" + +int main() +{ + GridKit::Testing::TestingResults result; + + GridKit::Testing::GovernorTgov1Tests test; + + result += test.constructor(); + result += test.accessors(); + result += test.residual(); + + return result.summary(); +} diff --git a/tests/UnitTests/PhasorDynamics/runLoadTests.cpp b/tests/UnitTests/PhasorDynamics/runLoadTests.cpp index 7ad3daf0b..1dac30e27 100644 --- a/tests/UnitTests/PhasorDynamics/runLoadTests.cpp +++ b/tests/UnitTests/PhasorDynamics/runLoadTests.cpp @@ -10,6 +10,10 @@ int main() result += test.constructor(); result += test.residual(); + result += test.jacobian(); +#ifdef GRIDKIT_ENABLE_ENZYME + result += test.enzyme_jacobian(); +#endif return result.summary(); } diff --git a/tests/UnitTests/Solver/Dynamic/IdaTests.hpp b/tests/UnitTests/Solver/Dynamic/IdaTests.hpp index 53c30c68f..64f062907 100644 --- a/tests/UnitTests/Solver/Dynamic/IdaTests.hpp +++ b/tests/UnitTests/Solver/Dynamic/IdaTests.hpp @@ -110,132 +110,132 @@ namespace GridKit { } - std::vector& y() + std::vector& y() override { return y_; } - const std::vector& y() const + const std::vector& y() const override { return y_; } - std::vector& yp() + std::vector& yp() override { return yp_; } - const std::vector& yp() const + const std::vector& yp() const override { return yp_; } - std::vector& tag() + std::vector& tag() override { return tag_; } - const std::vector& tag() const + const std::vector& tag() const override { return tag_; } - std::vector& yB() + std::vector& yB() override { return yB_; } - const std::vector& yB() const + const std::vector& yB() const override { return yB_; } - std::vector& ypB() + std::vector& ypB() override { return ypB_; } - const std::vector& ypB() const + const std::vector& ypB() const override { return ypB_; } - std::vector& param() + std::vector& param() override { return param_; } - const std::vector& param() const + const std::vector& param() const override { return param_; } - std::vector& param_up() + std::vector& param_up() override { return param_up_; } - const std::vector& param_up() const + const std::vector& param_up() const override { return param_up_; } - std::vector& param_lo() + std::vector& param_lo() override { return param_lo_; } - const std::vector& param_lo() const + const std::vector& param_lo() const override { return param_lo_; } - std::vector& getResidual() + std::vector& getResidual() override { return f_; } - const std::vector& getResidual() const + const std::vector& getResidual() const override { return f_; } - COO_Matrix& getJacobian() + GridKit::LinearAlgebra::COO_Matrix& getJacobian() override { return jac_; } - const COO_Matrix& getJacobian() const + const GridKit::LinearAlgebra::COO_Matrix& getJacobian() const override { return jac_; } - std::vector& getIntegrand() + std::vector& getIntegrand() override { return g_; } - const std::vector& getIntegrand() const + const std::vector& getIntegrand() const override { return g_; } - std::vector& getAdjointResidual() + std::vector& getAdjointResidual() override { return fB_; } - const std::vector& getAdjointResidual() const + const std::vector& getAdjointResidual() const override { return fB_; } - std::vector& getAdjointIntegrand() + std::vector& getAdjointIntegrand() override { return gB_; } - const std::vector& getAdjointIntegrand() const + const std::vector& getAdjointIntegrand() const override { return gB_; } @@ -257,7 +257,7 @@ namespace GridKit std::vector fB_; std::vector gB_; - COO_Matrix jac_; + GridKit::LinearAlgebra::COO_Matrix jac_; std::vector param_; std::vector param_up_; diff --git a/tests/UnitTests/SparsityPattern/CMakeLists.txt b/tests/UnitTests/SparsityPattern/CMakeLists.txt deleted file mode 100644 index c4c9cc854..000000000 --- a/tests/UnitTests/SparsityPattern/CMakeLists.txt +++ /dev/null @@ -1,14 +0,0 @@ -# [[ -# Author(s): -# - Slaven Peles -#]] - - -add_executable(test_sparsity_pattern runSparsityPatternTests.cpp) -target_link_libraries(test_sparsity_pattern GRIDKIT::phasor_dynamics_bus) - - -add_test(NAME SparsityPatternTest COMMAND $) - -install(TARGETS test_sparsity_pattern - RUNTIME DESTINATION bin)