diff --git a/.integrated_tests.yaml b/.integrated_tests.yaml index 00502a919e4..0a3900f23a9 100644 --- a/.integrated_tests.yaml +++ b/.integrated_tests.yaml @@ -1,6 +1,6 @@ baselines: bucket: geosx - baseline: integratedTests/baseline_integratedTests-pr3339-8707-7c55c70 + baseline: integratedTests/baseline_integratedTests-pr3439-8919-b09db43 allow_fail: all: '' streak: '' diff --git a/BASELINE_NOTES.md b/BASELINE_NOTES.md index f4dcac6a76e..8e9abcd6c27 100644 --- a/BASELINE_NOTES.md +++ b/BASELINE_NOTES.md @@ -6,6 +6,13 @@ This file is designed to track changes to the integrated test baselines. Any developer who updates the baseline ID in the .integrated_tests.yaml file is expected to create an entry in this file with the pull request number, date, and their justification for rebaselining. These notes should be in reverse-chronological order, and use the following time format: (YYYY-MM-DD). +PR #3439 (2024-11-20) +===================== +EDFM bugfixes: derivatives sign, frac/cell element volume, fix apertures inconsistency in test cases. + +PR ##3440 (2024-11-18) +===================== +Added Lagrange multiplier with bubble functions stabilization (sli only) and possibility to specify a slip. PR #3339 (2024-11-14) ===================== diff --git a/host-configs/apple/darwin-clang.cmake b/host-configs/apple/darwin-clang.cmake deleted file mode 100644 index cdf690c0e5a..00000000000 --- a/host-configs/apple/darwin-clang.cmake +++ /dev/null @@ -1,38 +0,0 @@ -site_name(HOST_NAME) -set(CONFIG_NAME "${HOST_NAME}-darwin-x86_64-clang@apple-mp" CACHE PATH "") -message("CONFIG_NAME = ${CONFIG_NAME}") - -set(CMAKE_C_COMPILER "/usr/bin/clang" CACHE PATH "") -set(CMAKE_CXX_COMPILER "/usr/bin/clang++" CACHE PATH "") -set(ENABLE_FORTRAN OFF CACHE BOOL "" FORCE) - -set(ENABLE_MPI ON CACHE PATH "") -set(MPI_C_COMPILER "/usr/local/bin/mpicc" CACHE PATH "") -set(MPI_CXX_COMPILER "/usr/local/bin/mpicxx" CACHE PATH "") -set(MPIEXEC "/usr/local/bin/mpirun" CACHE PATH "") - -set(ENABLE_GTEST_DEATH_TESTS ON CACHE BOOL "" FORCE) - -set(ENABLE_PVTPackage ON CACHE BOOL "" FORCE) - -set(ENABLE_CUDA "OFF" CACHE PATH "" FORCE) -set(ENABLE_OPENMP "OFF" CACHE PATH "" FORCE) - -set(ENABLE_CALIPER "OFF" CACHE PATH "" FORCE ) - -#set(GEOS_BUILD_OBJ_LIBS ON CACHE BOOL "" FORCE) - -set( BLAS_LIBRARIES /usr/local/opt/openblas/lib/libblas.dylib CACHE PATH "" FORCE ) -set( LAPACK_LIBRARIES /usr/local/opt/openblas/lib/liblapack.dylib CACHE PATH "" FORCE ) - -set(ENABLE_DOXYGEN OFF CACHE BOOL "" FORCE) - -#set( DOXYGEN_EXECUTABLE /usr/local/bin/doxygen CACHE PATH "" FORCE ) -#set( SPHINX_EXECUTABLE /usr/local/bin/sphinx-build CACHE PATH "" FORCE ) - -set(GEOS_TPL_DIR "/usr/local/GEOSX/GEOS_TPL" CACHE PATH "" FORCE ) -if(NOT ( EXISTS "${GEOS_TPL_DIR}" AND IS_DIRECTORY "${GEOS_TPL_DIR}" ) ) - set(GEOS_TPL_DIR "${CMAKE_SOURCE_DIR}/../../thirdPartyLibs/install-darwin-clang-release" CACHE PATH "" FORCE ) -endif() - -include(${CMAKE_CURRENT_LIST_DIR}/tpls.cmake) diff --git a/inputFiles/lagrangianContactMechanics/LagrangeContactBubbleStab_FixedSlip_base.xml b/inputFiles/lagrangianContactMechanics/LagrangeContactBubbleStab_FixedSlip_base.xml new file mode 100644 index 00000000000..91a143df5b2 --- /dev/null +++ b/inputFiles/lagrangianContactMechanics/LagrangeContactBubbleStab_FixedSlip_base.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/inputFiles/lagrangianContactMechanics/LagrangeContactBubbleStab_FixedSlip_smoke.xml b/inputFiles/lagrangianContactMechanics/LagrangeContactBubbleStab_FixedSlip_smoke.xml new file mode 100644 index 00000000000..8258d2cc4a3 --- /dev/null +++ b/inputFiles/lagrangianContactMechanics/LagrangeContactBubbleStab_FixedSlip_smoke.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/inputFiles/lagrangianContactMechanics/LagrangeContactBubbleStab_singleFracCompression_base.xml b/inputFiles/lagrangianContactMechanics/LagrangeContactBubbleStab_singleFracCompression_base.xml new file mode 100644 index 00000000000..09ec110a624 --- /dev/null +++ b/inputFiles/lagrangianContactMechanics/LagrangeContactBubbleStab_singleFracCompression_base.xml @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/lagrangianContactMechanics/LagrangeContactBubbleStab_singleFracCompression_smoke.xml b/inputFiles/lagrangianContactMechanics/LagrangeContactBubbleStab_singleFracCompression_smoke.xml new file mode 100644 index 00000000000..bb51f950d38 --- /dev/null +++ b/inputFiles/lagrangianContactMechanics/LagrangeContactBubbleStab_singleFracCompression_smoke.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/lagrangianContactMechanics/contactMechanics.ats b/inputFiles/lagrangianContactMechanics/contactMechanics.ats index bc4a2e43d0e..6f35259f76c 100644 --- a/inputFiles/lagrangianContactMechanics/contactMechanics.ats +++ b/inputFiles/lagrangianContactMechanics/contactMechanics.ats @@ -1,9 +1,19 @@ -from geos.ats.test_builder import TestDeck, RestartcheckParameters, generate_geos_tests +from geos.ats.test_builder import TestDeck, RestartcheckParameters, CurveCheckParameters, generate_geos_tests restartcheck_params = {} restartcheck_params["atol"] = 2.0E-4 restartcheck_params["rtol"] = 1.0E-7 + +curvecheck_params = {} +curvecheck_params["filename"] = "traction.hdf5" +curvecheck_params["tolerance"] = [1e-1] +curvecheck_params["script_instructions"] = [[ + "./scripts/fixedFaultSlip.py", "curve_check_solution", + "traction" +]] +curvecheck_params["curves"] = "traction" + decks = [ TestDeck( name="ContactMechanics_SimpleCubes_smoke", @@ -90,7 +100,15 @@ decks = [ partitions=((1, 1, 1), ), restart_step=1, check_step=2, - restartcheck_params=RestartcheckParameters(**restartcheck_params)) + restartcheck_params=RestartcheckParameters(**restartcheck_params)), + TestDeck( + name="LagrangeContactBubbleStab_FixedSlip_smoke", + description="Lagrange multiplier with bubble stab and fixed jump on the fault. " + "Fault with imposed slip", + partitions=((1, 1, 1), (2, 2, 1)), + restart_step=1, + check_step=2, + restartcheck_params=RestartcheckParameters(**restartcheck_params)) ] generate_geos_tests(decks) diff --git a/inputFiles/lagrangianContactMechanics/dataTables/gaussianSlip.csv b/inputFiles/lagrangianContactMechanics/dataTables/gaussianSlip.csv new file mode 100644 index 00000000000..9d62405dcb4 --- /dev/null +++ b/inputFiles/lagrangianContactMechanics/dataTables/gaussianSlip.csv @@ -0,0 +1,10000 @@ +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000004 +0.000004 +0.000004 +0.000004 +0.000004 +0.000004 +0.000004 +0.000004 +0.000004 +0.000004 +0.000004 +0.000004 +0.000004 +0.000005 +0.000005 +0.000005 +0.000005 +0.000005 +0.000005 +0.000005 +0.000005 +0.000005 +0.000005 +0.000006 +0.000006 +0.000006 +0.000006 +0.000006 +0.000006 +0.000006 +0.000006 +0.000006 +0.000007 +0.000007 +0.000007 +0.000007 +0.000007 +0.000007 +0.000007 +0.000008 +0.000008 +0.000008 +0.000008 +0.000008 +0.000008 +0.000008 +0.000009 +0.000009 +0.000009 +0.000009 +0.000009 +0.000010 +0.000010 +0.000010 +0.000010 +0.000010 +0.000010 +0.000011 +0.000011 +0.000011 +0.000011 +0.000011 +0.000012 +0.000012 +0.000012 +0.000012 +0.000013 +0.000013 +0.000013 +0.000013 +0.000014 +0.000014 +0.000014 +0.000014 +0.000015 +0.000015 +0.000015 +0.000016 +0.000016 +0.000016 +0.000016 +0.000017 +0.000017 +0.000017 +0.000018 +0.000018 +0.000018 +0.000019 +0.000019 +0.000019 +0.000020 +0.000020 +0.000021 +0.000021 +0.000021 +0.000022 +0.000022 +0.000023 +0.000023 +0.000023 +0.000024 +0.000024 +0.000025 +0.000025 +0.000026 +0.000026 +0.000027 +0.000027 +0.000028 +0.000028 +0.000029 +0.000029 +0.000030 +0.000030 +0.000031 +0.000031 +0.000032 +0.000033 +0.000033 +0.000034 +0.000034 +0.000035 +0.000036 +0.000036 +0.000037 +0.000038 +0.000038 +0.000039 +0.000040 +0.000040 +0.000041 +0.000042 +0.000043 +0.000043 +0.000044 +0.000045 +0.000046 +0.000047 +0.000048 +0.000048 +0.000049 +0.000050 +0.000051 +0.000052 +0.000053 +0.000054 +0.000055 +0.000056 +0.000057 +0.000058 +0.000059 +0.000060 +0.000061 +0.000062 +0.000063 +0.000064 +0.000065 +0.000067 +0.000068 +0.000069 +0.000070 +0.000071 +0.000073 +0.000074 +0.000075 +0.000077 +0.000078 +0.000079 +0.000081 +0.000082 +0.000084 +0.000085 +0.000087 +0.000088 +0.000090 +0.000091 +0.000093 +0.000094 +0.000096 +0.000098 +0.000099 +0.000101 +0.000103 +0.000105 +0.000107 +0.000108 +0.000110 +0.000112 +0.000114 +0.000116 +0.000118 +0.000120 +0.000122 +0.000124 +0.000126 +0.000129 +0.000131 +0.000133 +0.000135 +0.000138 +0.000140 +0.000142 +0.000145 +0.000147 +0.000150 +0.000152 +0.000155 +0.000158 +0.000160 +0.000163 +0.000166 +0.000169 +0.000172 +0.000174 +0.000177 +0.000180 +0.000183 +0.000187 +0.000190 +0.000193 +0.000196 +0.000199 +0.000203 +0.000206 +0.000210 +0.000213 +0.000217 +0.000220 +0.000224 +0.000228 +0.000232 +0.000235 +0.000239 +0.000243 +0.000247 +0.000252 +0.000256 +0.000260 +0.000264 +0.000269 +0.000273 +0.000278 +0.000282 +0.000287 +0.000292 +0.000296 +0.000301 +0.000306 +0.000311 +0.000316 +0.000321 +0.000327 +0.000332 +0.000338 +0.000343 +0.000349 +0.000354 +0.000360 +0.000366 +0.000372 +0.000378 +0.000384 +0.000390 +0.000397 +0.000403 +0.000410 +0.000416 +0.000423 +0.000430 +0.000437 +0.000444 +0.000451 +0.000458 +0.000465 +0.000473 +0.000481 +0.000488 +0.000496 +0.000504 +0.000512 +0.000520 +0.000529 +0.000537 +0.000545 +0.000554 +0.000563 +0.000572 +0.000581 +0.000590 +0.000599 +0.000609 +0.000619 +0.000628 +0.000638 +0.000648 +0.000659 +0.000669 +0.000679 +0.000690 +0.000701 +0.000712 +0.000723 +0.000734 +0.000746 +0.000757 +0.000769 +0.000781 +0.000793 +0.000806 +0.000818 +0.000831 +0.000844 +0.000857 +0.000870 +0.000884 +0.000897 +0.000911 +0.000925 +0.000939 +0.000954 +0.000968 +0.000983 +0.000998 +0.001014 +0.001029 +0.001045 +0.001061 +0.001077 +0.001094 +0.001110 +0.001127 +0.001144 +0.001162 +0.001179 +0.001197 +0.001215 +0.001234 +0.001252 +0.001271 +0.001290 +0.001310 +0.001330 +0.001350 +0.001370 +0.001390 +0.001411 +0.001432 +0.001454 +0.001476 +0.001498 +0.001520 +0.001543 +0.001566 +0.001589 +0.001613 +0.001637 +0.001661 +0.001686 +0.001711 +0.001736 +0.001761 +0.001788 +0.001814 +0.001841 +0.001868 +0.001895 +0.001923 +0.001951 +0.001980 +0.002009 +0.002038 +0.002068 +0.002098 +0.002129 +0.002160 +0.002191 +0.002223 +0.002256 +0.002288 +0.002322 +0.002355 +0.002389 +0.002424 +0.002459 +0.002494 +0.002530 +0.002567 +0.002604 +0.002641 +0.002679 +0.002717 +0.002756 +0.002796 +0.002836 +0.002876 +0.002917 +0.002959 +0.003001 +0.003044 +0.003087 +0.003131 +0.003175 +0.003220 +0.003266 +0.003312 +0.003359 +0.003406 +0.003454 +0.003503 +0.003552 +0.003602 +0.003652 +0.003704 +0.003756 +0.003808 +0.003861 +0.003915 +0.003970 +0.004025 +0.004081 +0.004138 +0.004195 +0.004254 +0.004313 +0.004372 +0.004433 +0.004494 +0.004556 +0.004619 +0.004682 +0.004747 +0.004812 +0.004878 +0.004945 +0.005013 +0.005081 +0.005151 +0.005221 +0.005292 +0.005364 +0.005437 +0.005511 +0.005586 +0.005662 +0.005739 +0.005816 +0.005895 +0.005975 +0.006055 +0.006137 +0.006220 +0.006303 +0.006388 +0.006474 +0.006560 +0.006648 +0.006737 +0.006827 +0.006918 +0.007011 +0.007104 +0.007198 +0.007294 +0.007391 +0.007489 +0.007588 +0.007688 +0.007790 +0.007893 +0.007997 +0.008102 +0.008209 +0.008317 +0.008426 +0.008536 +0.008648 +0.008761 +0.008876 +0.008992 +0.009109 +0.009227 +0.009348 +0.009469 +0.009592 +0.009716 +0.009842 +0.009969 +0.010098 +0.010229 +0.010360 +0.010494 +0.010629 +0.010765 +0.010904 +0.011043 +0.011185 +0.011328 +0.011473 +0.011619 +0.011767 +0.011917 +0.012068 +0.012222 +0.012377 +0.012534 +0.012692 +0.012853 +0.013015 +0.013179 +0.013345 +0.013513 +0.013683 +0.013855 +0.014029 +0.014204 +0.014382 +0.014562 +0.014744 +0.014927 +0.015113 +0.015301 +0.015491 +0.015684 +0.015878 +0.016074 +0.016273 +0.016474 +0.016677 +0.016883 +0.017091 +0.017301 +0.017513 +0.017728 +0.017945 +0.018165 +0.018387 +0.018611 +0.018838 +0.019067 +0.019299 +0.019533 +0.019770 +0.020010 +0.020252 +0.020497 +0.020744 +0.020995 +0.021247 +0.021503 +0.021761 +0.022022 +0.022286 +0.022553 +0.022823 +0.023095 +0.023371 +0.023649 +0.023930 +0.024215 +0.024502 +0.024793 +0.025086 +0.025383 +0.025682 +0.025985 +0.026291 +0.026601 +0.026913 +0.027229 +0.027548 +0.027871 +0.028197 +0.028526 +0.028859 +0.029195 +0.029534 +0.029878 +0.030224 +0.030575 +0.030929 +0.031286 +0.031647 +0.032012 +0.032381 +0.032753 +0.033130 +0.033510 +0.033894 +0.034282 +0.034673 +0.035069 +0.035469 +0.035873 +0.036281 +0.036693 +0.037109 +0.037529 +0.037954 +0.038382 +0.038815 +0.039253 +0.039694 +0.040141 +0.040591 +0.041046 +0.041506 +0.041970 +0.042438 +0.042912 +0.043389 +0.043872 +0.044359 +0.044851 +0.045348 +0.045850 +0.046357 +0.046868 +0.047384 +0.047906 +0.048432 +0.048964 +0.049501 +0.050043 +0.050590 +0.051142 +0.051700 +0.052262 +0.052831 +0.053404 +0.053983 +0.054568 +0.055158 +0.055754 +0.056355 +0.056962 +0.057575 +0.058193 +0.058818 +0.059448 +0.060084 +0.060726 +0.061374 +0.062027 +0.062687 +0.063353 +0.064026 +0.064704 +0.065389 +0.066080 +0.066777 +0.067480 +0.068191 +0.068907 +0.069630 +0.070360 +0.071096 +0.071839 +0.072589 +0.073345 +0.074108 +0.074878 +0.075655 +0.076439 +0.077230 +0.078028 +0.078833 +0.079646 +0.080465 +0.081292 +0.082126 +0.082967 +0.083816 +0.084672 +0.085536 +0.086407 +0.087286 +0.088173 +0.089067 +0.089969 +0.090879 +0.091797 +0.092723 +0.093656 +0.094598 +0.095548 +0.096506 +0.097472 +0.098446 +0.099429 +0.100420 +0.101420 +0.102428 +0.103444 +0.104469 +0.105503 +0.106545 +0.107596 +0.108656 +0.109725 +0.110803 +0.111889 +0.112985 +0.114090 +0.115204 +0.116327 +0.117459 +0.118601 +0.119752 +0.120912 +0.122082 +0.123261 +0.124450 +0.125649 +0.126858 +0.128076 +0.129304 +0.130542 +0.131789 +0.133047 +0.134315 +0.135593 +0.136881 +0.138180 +0.139488 +0.140808 +0.142137 +0.143477 +0.144828 +0.146189 +0.147561 +0.148943 +0.150336 +0.151740 +0.153155 +0.154581 +0.156018 +0.157467 +0.158926 +0.160396 +0.161878 +0.163371 +0.164875 +0.166391 +0.167919 +0.169458 +0.171008 +0.172570 +0.174144 +0.175730 +0.177328 +0.178938 +0.180559 +0.182193 +0.183839 +0.185497 +0.187167 +0.188850 +0.190545 +0.192252 +0.193972 +0.195704 +0.197449 +0.199207 +0.200978 +0.202761 +0.204557 +0.206366 +0.208188 +0.210023 +0.211872 +0.213733 +0.215608 +0.217495 +0.219397 +0.221311 +0.223240 +0.225181 +0.227137 +0.229106 +0.231089 +0.233085 +0.235095 +0.237120 +0.239158 +0.241210 +0.243277 +0.245357 +0.247452 +0.249561 +0.251684 +0.253822 +0.255974 +0.258141 +0.260322 +0.262518 +0.264729 +0.266954 +0.269195 +0.271450 +0.273720 +0.276005 +0.278305 +0.280620 +0.282951 +0.285296 +0.287657 +0.290033 +0.292425 +0.294832 +0.297254 +0.299693 +0.302146 +0.304616 +0.307101 +0.309602 +0.312119 +0.314652 +0.317201 +0.319765 +0.322346 +0.324943 +0.327556 +0.330186 +0.332832 +0.335494 +0.338172 +0.340867 +0.343578 +0.346306 +0.349051 +0.351812 +0.354590 +0.357385 +0.360197 +0.363025 +0.365870 +0.368733 +0.371612 +0.374508 +0.377422 +0.380353 +0.383301 +0.386266 +0.389248 +0.392248 +0.395265 +0.398300 +0.401352 +0.404422 +0.407509 +0.410614 +0.413737 +0.416877 +0.420036 +0.423212 +0.426405 +0.429617 +0.432847 +0.436094 +0.439360 +0.442643 +0.445945 +0.449265 +0.452603 +0.455959 +0.459334 +0.462727 +0.466138 +0.469567 +0.473015 +0.476481 +0.479966 +0.483469 +0.486991 +0.490531 +0.494090 +0.497668 +0.501264 +0.504879 +0.508513 +0.512165 +0.515836 +0.519526 +0.523235 +0.526962 +0.530709 +0.534474 +0.538259 +0.542062 +0.545884 +0.549726 +0.553586 +0.557465 +0.561364 +0.565281 +0.569218 +0.573174 +0.577148 +0.581143 +0.585156 +0.589188 +0.593240 +0.597311 +0.601401 +0.605510 +0.609639 +0.613787 +0.617954 +0.622140 +0.626346 +0.630571 +0.634816 +0.639080 +0.643363 +0.647665 +0.651987 +0.656328 +0.660689 +0.665069 +0.669468 +0.673886 +0.678324 +0.682781 +0.687258 +0.691754 +0.696269 +0.700804 +0.705358 +0.709931 +0.714524 +0.719136 +0.723767 +0.728418 +0.733088 +0.737777 +0.742485 +0.747213 +0.751960 +0.756726 +0.761511 +0.766315 +0.771139 +0.775982 +0.780844 +0.785725 +0.790625 +0.795544 +0.800482 +0.805439 +0.810415 +0.815410 +0.820424 +0.825457 +0.830509 +0.835580 +0.840669 +0.845777 +0.850904 +0.856050 +0.861214 +0.866397 +0.871598 +0.876818 +0.882057 +0.887314 +0.892589 +0.897883 +0.903195 +0.908526 +0.913875 +0.919242 +0.924627 +0.930030 +0.935451 +0.940890 +0.946347 +0.951822 +0.957315 +0.962826 +0.968354 +0.973900 +0.979464 +0.985045 +0.990644 +0.996260 +1.001893 +1.007544 +1.013212 +1.018897 +1.024599 +1.030319 +1.036055 +1.041808 +1.047578 +1.053364 +1.059167 +1.064987 +1.070823 +1.076676 +1.082545 +1.088430 +1.094332 +1.100249 +1.106183 +1.112132 +1.118098 +1.124079 +1.130075 +1.136087 +1.142115 +1.148158 +1.154217 +1.160290 +1.166379 +1.172483 +1.178601 +1.184735 +1.190883 +1.197045 +1.203223 +1.209414 +1.215620 +1.221840 +1.228074 +1.234322 +1.240584 +1.246860 +1.253149 +1.259452 +1.265768 +1.272097 +1.278440 +1.284796 +1.291164 +1.297546 +1.303940 +1.310347 +1.316766 +1.323197 +1.329641 +1.336097 +1.342564 +1.349044 +1.355535 +1.362037 +1.368551 +1.375077 +1.381613 +1.388161 +1.394719 +1.401288 +1.407868 +1.414458 +1.421058 +1.427669 +1.434289 +1.440919 +1.447560 +1.454209 +1.460868 +1.467537 +1.474214 +1.480901 +1.487596 +1.494300 +1.501013 +1.507734 +1.514463 +1.521200 +1.527945 +1.534697 +1.541458 +1.548225 +1.555000 +1.561782 +1.568571 +1.575366 +1.582169 +1.588977 +1.595792 +1.602613 +1.609439 +1.616272 +1.623110 +1.629953 +1.636801 +1.643655 +1.650513 +1.657376 +1.664244 +1.671115 +1.677991 +1.684871 +1.691755 +1.698642 +1.705532 +1.712426 +1.719323 +1.726222 +1.733124 +1.740029 +1.746936 +1.753845 +1.760755 +1.767668 +1.774582 +1.781497 +1.788413 +1.795330 +1.802248 +1.809167 +1.816085 +1.823004 +1.829923 +1.836841 +1.843759 +1.850676 +1.857592 +1.864508 +1.871421 +1.878334 +1.885244 +1.892153 +1.899059 +1.905964 +1.912865 +1.919764 +1.926660 +1.933553 +1.940442 +1.947328 +1.954210 +1.961087 +1.967961 +1.974830 +1.981695 +1.988554 +1.995409 +2.002258 +2.009101 +2.015939 +2.022771 +2.029597 +2.036416 +2.043229 +2.050034 +2.056833 +2.063624 +2.070408 +2.077185 +2.083953 +2.090713 +2.097465 +2.104208 +2.110942 +2.117667 +2.124383 +2.131089 +2.137786 +2.144472 +2.151149 +2.157815 +2.164470 +2.171115 +2.177748 +2.184370 +2.190981 +2.197580 +2.204166 +2.210741 +2.217303 +2.223853 +2.230389 +2.236913 +2.243423 +2.249919 +2.256402 +2.262871 +2.269325 +2.275765 +2.282190 +2.288600 +2.294996 +2.301375 +2.307739 +2.314087 +2.320419 +2.326735 +2.333034 +2.339317 +2.345582 +2.351831 +2.358061 +2.364274 +2.370470 +2.376647 +2.382805 +2.388946 +2.395067 +2.401169 +2.407252 +2.413316 +2.419360 +2.425384 +2.431387 +2.437371 +2.443334 +2.449276 +2.455197 +2.461096 +2.466974 +2.472831 +2.478665 +2.484478 +2.490268 +2.496035 +2.501780 +2.507501 +2.513200 +2.518874 +2.524525 +2.530153 +2.535756 +2.541335 +2.546889 +2.552418 +2.557923 +2.563402 +2.568856 +2.574284 +2.579687 +2.585063 +2.590413 +2.595737 +2.601034 +2.606304 +2.611547 +2.616763 +2.621951 +2.627112 +2.632245 +2.637349 +2.642426 +2.647473 +2.652493 +2.657483 +2.662444 +2.667376 +2.672278 +2.677150 +2.681993 +2.686806 +2.691588 +2.696340 +2.701061 +2.705751 +2.710411 +2.715039 +2.719635 +2.724200 +2.728734 +2.733235 +2.737704 +2.742141 +2.746545 +2.750917 +2.755255 +2.759561 +2.763833 +2.768072 +2.772278 +2.776449 +2.780587 +2.784691 +2.788760 +2.792795 +2.796795 +2.800761 +2.804692 +2.808587 +2.812447 +2.816272 +2.820062 +2.823815 +2.827533 +2.831215 +2.834860 +2.838469 +2.842042 +2.845578 +2.849077 +2.852539 +2.855964 +2.859352 +2.862703 +2.866016 +2.869291 +2.872529 +2.875729 +2.878890 +2.882014 +2.885099 +2.888146 +2.891154 +2.894123 +2.897053 +2.899945 +2.902798 +2.905611 +2.908385 +2.911119 +2.913814 +2.916470 +2.919085 +2.921661 +2.924196 +2.926692 +2.929147 +2.931562 +2.933936 +2.936270 +2.938564 +2.940816 +2.943028 +2.945199 +2.947329 +2.949418 +2.951465 +2.953472 +2.955436 +2.957360 +2.959242 +2.961082 +2.962881 +2.964638 +2.966353 +2.968026 +2.969657 +2.971246 +2.972793 +2.974298 +2.975760 +2.977180 +2.978558 +2.979893 +2.981186 +2.982436 +2.983644 +2.984809 +2.985931 +2.987010 +2.988047 +2.989041 +2.989992 +2.990900 +2.991765 +2.992587 +2.993366 +2.994101 +2.994794 +2.995444 +2.996050 +2.996613 +2.997133 +2.997610 +2.998043 +2.998434 +2.998780 +2.999084 +2.999344 +2.999561 +2.999734 +2.999864 +2.999951 +2.999995 +2.999995 +2.999951 +2.999864 +2.999734 +2.999561 +2.999344 +2.999084 +2.998780 +2.998434 +2.998043 +2.997610 +2.997133 +2.996613 +2.996050 +2.995444 +2.994794 +2.994101 +2.993366 +2.992587 +2.991765 +2.990900 +2.989992 +2.989041 +2.988047 +2.987010 +2.985931 +2.984809 +2.983644 +2.982436 +2.981186 +2.979893 +2.978558 +2.977180 +2.975760 +2.974298 +2.972793 +2.971246 +2.969657 +2.968026 +2.966353 +2.964638 +2.962881 +2.961082 +2.959242 +2.957360 +2.955436 +2.953472 +2.951465 +2.949418 +2.947329 +2.945199 +2.943028 +2.940816 +2.938564 +2.936270 +2.933936 +2.931562 +2.929147 +2.926692 +2.924196 +2.921661 +2.919085 +2.916470 +2.913814 +2.911119 +2.908385 +2.905611 +2.902798 +2.899945 +2.897053 +2.894123 +2.891154 +2.888146 +2.885099 +2.882014 +2.878890 +2.875729 +2.872529 +2.869291 +2.866016 +2.862703 +2.859352 +2.855964 +2.852539 +2.849077 +2.845578 +2.842042 +2.838469 +2.834860 +2.831215 +2.827533 +2.823815 +2.820062 +2.816272 +2.812447 +2.808587 +2.804692 +2.800761 +2.796795 +2.792795 +2.788760 +2.784691 +2.780587 +2.776449 +2.772278 +2.768072 +2.763833 +2.759561 +2.755255 +2.750917 +2.746545 +2.742141 +2.737704 +2.733235 +2.728734 +2.724200 +2.719635 +2.715039 +2.710411 +2.705751 +2.701061 +2.696340 +2.691588 +2.686806 +2.681993 +2.677150 +2.672278 +2.667376 +2.662444 +2.657483 +2.652493 +2.647473 +2.642426 +2.637349 +2.632245 +2.627112 +2.621951 +2.616763 +2.611547 +2.606304 +2.601034 +2.595737 +2.590413 +2.585063 +2.579687 +2.574284 +2.568856 +2.563402 +2.557923 +2.552418 +2.546889 +2.541335 +2.535756 +2.530153 +2.524525 +2.518874 +2.513200 +2.507501 +2.501780 +2.496035 +2.490268 +2.484478 +2.478665 +2.472831 +2.466974 +2.461096 +2.455197 +2.449276 +2.443334 +2.437371 +2.431387 +2.425384 +2.419360 +2.413316 +2.407252 +2.401169 +2.395067 +2.388946 +2.382805 +2.376647 +2.370470 +2.364274 +2.358061 +2.351831 +2.345582 +2.339317 +2.333034 +2.326735 +2.320419 +2.314087 +2.307739 +2.301375 +2.294996 +2.288600 +2.282190 +2.275765 +2.269325 +2.262871 +2.256402 +2.249919 +2.243423 +2.236913 +2.230389 +2.223853 +2.217303 +2.210741 +2.204166 +2.197580 +2.190981 +2.184370 +2.177748 +2.171115 +2.164470 +2.157815 +2.151149 +2.144472 +2.137786 +2.131089 +2.124383 +2.117667 +2.110942 +2.104208 +2.097465 +2.090713 +2.083953 +2.077185 +2.070408 +2.063624 +2.056833 +2.050034 +2.043229 +2.036416 +2.029597 +2.022771 +2.015939 +2.009101 +2.002258 +1.995409 +1.988554 +1.981695 +1.974830 +1.967961 +1.961087 +1.954210 +1.947328 +1.940442 +1.933553 +1.926660 +1.919764 +1.912865 +1.905964 +1.899059 +1.892153 +1.885244 +1.878334 +1.871421 +1.864508 +1.857592 +1.850676 +1.843759 +1.836841 +1.829923 +1.823004 +1.816085 +1.809167 +1.802248 +1.795330 +1.788413 +1.781497 +1.774582 +1.767668 +1.760755 +1.753845 +1.746936 +1.740029 +1.733124 +1.726222 +1.719323 +1.712426 +1.705532 +1.698642 +1.691755 +1.684871 +1.677991 +1.671115 +1.664244 +1.657376 +1.650513 +1.643655 +1.636801 +1.629953 +1.623110 +1.616272 +1.609439 +1.602613 +1.595792 +1.588977 +1.582169 +1.575366 +1.568571 +1.561782 +1.555000 +1.548225 +1.541458 +1.534697 +1.527945 +1.521200 +1.514463 +1.507734 +1.501013 +1.494300 +1.487596 +1.480901 +1.474214 +1.467537 +1.460868 +1.454209 +1.447560 +1.440919 +1.434289 +1.427669 +1.421058 +1.414458 +1.407868 +1.401288 +1.394719 +1.388161 +1.381613 +1.375077 +1.368551 +1.362037 +1.355535 +1.349044 +1.342564 +1.336097 +1.329641 +1.323197 +1.316766 +1.310347 +1.303940 +1.297546 +1.291164 +1.284796 +1.278440 +1.272097 +1.265768 +1.259452 +1.253149 +1.246860 +1.240584 +1.234322 +1.228074 +1.221840 +1.215620 +1.209414 +1.203223 +1.197045 +1.190883 +1.184735 +1.178601 +1.172483 +1.166379 +1.160290 +1.154217 +1.148158 +1.142115 +1.136087 +1.130075 +1.124079 +1.118098 +1.112132 +1.106183 +1.100249 +1.094332 +1.088430 +1.082545 +1.076676 +1.070823 +1.064987 +1.059167 +1.053364 +1.047578 +1.041808 +1.036055 +1.030319 +1.024599 +1.018897 +1.013212 +1.007544 +1.001893 +0.996260 +0.990644 +0.985045 +0.979464 +0.973900 +0.968354 +0.962826 +0.957315 +0.951822 +0.946347 +0.940890 +0.935451 +0.930030 +0.924627 +0.919242 +0.913875 +0.908526 +0.903195 +0.897883 +0.892589 +0.887314 +0.882057 +0.876818 +0.871598 +0.866397 +0.861214 +0.856050 +0.850904 +0.845777 +0.840669 +0.835580 +0.830509 +0.825457 +0.820424 +0.815410 +0.810415 +0.805439 +0.800482 +0.795544 +0.790625 +0.785725 +0.780844 +0.775982 +0.771139 +0.766315 +0.761511 +0.756726 +0.751960 +0.747213 +0.742485 +0.737777 +0.733088 +0.728418 +0.723767 +0.719136 +0.714524 +0.709931 +0.705358 +0.700804 +0.696269 +0.691754 +0.687258 +0.682781 +0.678324 +0.673886 +0.669468 +0.665069 +0.660689 +0.656328 +0.651987 +0.647665 +0.643363 +0.639080 +0.634816 +0.630571 +0.626346 +0.622140 +0.617954 +0.613787 +0.609639 +0.605510 +0.601401 +0.597311 +0.593240 +0.589188 +0.585156 +0.581143 +0.577148 +0.573174 +0.569218 +0.565281 +0.561364 +0.557465 +0.553586 +0.549726 +0.545884 +0.542062 +0.538259 +0.534474 +0.530709 +0.526962 +0.523235 +0.519526 +0.515836 +0.512165 +0.508513 +0.504879 +0.501264 +0.497668 +0.494090 +0.490531 +0.486991 +0.483469 +0.479966 +0.476481 +0.473015 +0.469567 +0.466138 +0.462727 +0.459334 +0.455959 +0.452603 +0.449265 +0.445945 +0.442643 +0.439360 +0.436094 +0.432847 +0.429617 +0.426405 +0.423212 +0.420036 +0.416877 +0.413737 +0.410614 +0.407509 +0.404422 +0.401352 +0.398300 +0.395265 +0.392248 +0.389248 +0.386266 +0.383301 +0.380353 +0.377422 +0.374508 +0.371612 +0.368733 +0.365870 +0.363025 +0.360197 +0.357385 +0.354590 +0.351812 +0.349051 +0.346306 +0.343578 +0.340867 +0.338172 +0.335494 +0.332832 +0.330186 +0.327556 +0.324943 +0.322346 +0.319765 +0.317201 +0.314652 +0.312119 +0.309602 +0.307101 +0.304616 +0.302146 +0.299693 +0.297254 +0.294832 +0.292425 +0.290033 +0.287657 +0.285296 +0.282951 +0.280620 +0.278305 +0.276005 +0.273720 +0.271450 +0.269195 +0.266954 +0.264729 +0.262518 +0.260322 +0.258141 +0.255974 +0.253822 +0.251684 +0.249561 +0.247452 +0.245357 +0.243277 +0.241210 +0.239158 +0.237120 +0.235095 +0.233085 +0.231089 +0.229106 +0.227137 +0.225181 +0.223240 +0.221311 +0.219397 +0.217495 +0.215608 +0.213733 +0.211872 +0.210023 +0.208188 +0.206366 +0.204557 +0.202761 +0.200978 +0.199207 +0.197449 +0.195704 +0.193972 +0.192252 +0.190545 +0.188850 +0.187167 +0.185497 +0.183839 +0.182193 +0.180559 +0.178938 +0.177328 +0.175730 +0.174144 +0.172570 +0.171008 +0.169458 +0.167919 +0.166391 +0.164875 +0.163371 +0.161878 +0.160396 +0.158926 +0.157467 +0.156018 +0.154581 +0.153155 +0.151740 +0.150336 +0.148943 +0.147561 +0.146189 +0.144828 +0.143477 +0.142137 +0.140808 +0.139488 +0.138180 +0.136881 +0.135593 +0.134315 +0.133047 +0.131789 +0.130542 +0.129304 +0.128076 +0.126858 +0.125649 +0.124450 +0.123261 +0.122082 +0.120912 +0.119752 +0.118601 +0.117459 +0.116327 +0.115204 +0.114090 +0.112985 +0.111889 +0.110803 +0.109725 +0.108656 +0.107596 +0.106545 +0.105503 +0.104469 +0.103444 +0.102428 +0.101420 +0.100420 +0.099429 +0.098446 +0.097472 +0.096506 +0.095548 +0.094598 +0.093656 +0.092723 +0.091797 +0.090879 +0.089969 +0.089067 +0.088173 +0.087286 +0.086407 +0.085536 +0.084672 +0.083816 +0.082967 +0.082126 +0.081292 +0.080465 +0.079646 +0.078833 +0.078028 +0.077230 +0.076439 +0.075655 +0.074878 +0.074108 +0.073345 +0.072589 +0.071839 +0.071096 +0.070360 +0.069630 +0.068907 +0.068191 +0.067480 +0.066777 +0.066080 +0.065389 +0.064704 +0.064026 +0.063353 +0.062687 +0.062027 +0.061374 +0.060726 +0.060084 +0.059448 +0.058818 +0.058193 +0.057575 +0.056962 +0.056355 +0.055754 +0.055158 +0.054568 +0.053983 +0.053404 +0.052831 +0.052262 +0.051700 +0.051142 +0.050590 +0.050043 +0.049501 +0.048964 +0.048432 +0.047906 +0.047384 +0.046868 +0.046357 +0.045850 +0.045348 +0.044851 +0.044359 +0.043872 +0.043389 +0.042912 +0.042438 +0.041970 +0.041506 +0.041046 +0.040591 +0.040141 +0.039694 +0.039253 +0.038815 +0.038382 +0.037954 +0.037529 +0.037109 +0.036693 +0.036281 +0.035873 +0.035469 +0.035069 +0.034673 +0.034282 +0.033894 +0.033510 +0.033130 +0.032753 +0.032381 +0.032012 +0.031647 +0.031286 +0.030929 +0.030575 +0.030224 +0.029878 +0.029534 +0.029195 +0.028859 +0.028526 +0.028197 +0.027871 +0.027548 +0.027229 +0.026913 +0.026601 +0.026291 +0.025985 +0.025682 +0.025383 +0.025086 +0.024793 +0.024502 +0.024215 +0.023930 +0.023649 +0.023371 +0.023095 +0.022823 +0.022553 +0.022286 +0.022022 +0.021761 +0.021503 +0.021247 +0.020995 +0.020744 +0.020497 +0.020252 +0.020010 +0.019770 +0.019533 +0.019299 +0.019067 +0.018838 +0.018611 +0.018387 +0.018165 +0.017945 +0.017728 +0.017513 +0.017301 +0.017091 +0.016883 +0.016677 +0.016474 +0.016273 +0.016074 +0.015878 +0.015684 +0.015491 +0.015301 +0.015113 +0.014927 +0.014744 +0.014562 +0.014382 +0.014204 +0.014029 +0.013855 +0.013683 +0.013513 +0.013345 +0.013179 +0.013015 +0.012853 +0.012692 +0.012534 +0.012377 +0.012222 +0.012068 +0.011917 +0.011767 +0.011619 +0.011473 +0.011328 +0.011185 +0.011043 +0.010904 +0.010765 +0.010629 +0.010494 +0.010360 +0.010229 +0.010098 +0.009969 +0.009842 +0.009716 +0.009592 +0.009469 +0.009348 +0.009227 +0.009109 +0.008992 +0.008876 +0.008761 +0.008648 +0.008536 +0.008426 +0.008317 +0.008209 +0.008102 +0.007997 +0.007893 +0.007790 +0.007688 +0.007588 +0.007489 +0.007391 +0.007294 +0.007198 +0.007104 +0.007011 +0.006918 +0.006827 +0.006737 +0.006648 +0.006560 +0.006474 +0.006388 +0.006303 +0.006220 +0.006137 +0.006055 +0.005975 +0.005895 +0.005816 +0.005739 +0.005662 +0.005586 +0.005511 +0.005437 +0.005364 +0.005292 +0.005221 +0.005151 +0.005081 +0.005013 +0.004945 +0.004878 +0.004812 +0.004747 +0.004682 +0.004619 +0.004556 +0.004494 +0.004433 +0.004372 +0.004313 +0.004254 +0.004195 +0.004138 +0.004081 +0.004025 +0.003970 +0.003915 +0.003861 +0.003808 +0.003756 +0.003704 +0.003652 +0.003602 +0.003552 +0.003503 +0.003454 +0.003406 +0.003359 +0.003312 +0.003266 +0.003220 +0.003175 +0.003131 +0.003087 +0.003044 +0.003001 +0.002959 +0.002917 +0.002876 +0.002836 +0.002796 +0.002756 +0.002717 +0.002679 +0.002641 +0.002604 +0.002567 +0.002530 +0.002494 +0.002459 +0.002424 +0.002389 +0.002355 +0.002322 +0.002288 +0.002256 +0.002223 +0.002191 +0.002160 +0.002129 +0.002098 +0.002068 +0.002038 +0.002009 +0.001980 +0.001951 +0.001923 +0.001895 +0.001868 +0.001841 +0.001814 +0.001788 +0.001761 +0.001736 +0.001711 +0.001686 +0.001661 +0.001637 +0.001613 +0.001589 +0.001566 +0.001543 +0.001520 +0.001498 +0.001476 +0.001454 +0.001432 +0.001411 +0.001390 +0.001370 +0.001350 +0.001330 +0.001310 +0.001290 +0.001271 +0.001252 +0.001234 +0.001215 +0.001197 +0.001179 +0.001162 +0.001144 +0.001127 +0.001110 +0.001094 +0.001077 +0.001061 +0.001045 +0.001029 +0.001014 +0.000998 +0.000983 +0.000968 +0.000954 +0.000939 +0.000925 +0.000911 +0.000897 +0.000884 +0.000870 +0.000857 +0.000844 +0.000831 +0.000818 +0.000806 +0.000793 +0.000781 +0.000769 +0.000757 +0.000746 +0.000734 +0.000723 +0.000712 +0.000701 +0.000690 +0.000679 +0.000669 +0.000659 +0.000648 +0.000638 +0.000628 +0.000619 +0.000609 +0.000599 +0.000590 +0.000581 +0.000572 +0.000563 +0.000554 +0.000545 +0.000537 +0.000529 +0.000520 +0.000512 +0.000504 +0.000496 +0.000488 +0.000481 +0.000473 +0.000465 +0.000458 +0.000451 +0.000444 +0.000437 +0.000430 +0.000423 +0.000416 +0.000410 +0.000403 +0.000397 +0.000390 +0.000384 +0.000378 +0.000372 +0.000366 +0.000360 +0.000354 +0.000349 +0.000343 +0.000338 +0.000332 +0.000327 +0.000321 +0.000316 +0.000311 +0.000306 +0.000301 +0.000296 +0.000292 +0.000287 +0.000282 +0.000278 +0.000273 +0.000269 +0.000264 +0.000260 +0.000256 +0.000252 +0.000247 +0.000243 +0.000239 +0.000235 +0.000232 +0.000228 +0.000224 +0.000220 +0.000217 +0.000213 +0.000210 +0.000206 +0.000203 +0.000199 +0.000196 +0.000193 +0.000190 +0.000187 +0.000183 +0.000180 +0.000177 +0.000174 +0.000172 +0.000169 +0.000166 +0.000163 +0.000160 +0.000158 +0.000155 +0.000152 +0.000150 +0.000147 +0.000145 +0.000142 +0.000140 +0.000138 +0.000135 +0.000133 +0.000131 +0.000129 +0.000126 +0.000124 +0.000122 +0.000120 +0.000118 +0.000116 +0.000114 +0.000112 +0.000110 +0.000108 +0.000107 +0.000105 +0.000103 +0.000101 +0.000099 +0.000098 +0.000096 +0.000094 +0.000093 +0.000091 +0.000090 +0.000088 +0.000087 +0.000085 +0.000084 +0.000082 +0.000081 +0.000079 +0.000078 +0.000077 +0.000075 +0.000074 +0.000073 +0.000071 +0.000070 +0.000069 +0.000068 +0.000067 +0.000065 +0.000064 +0.000063 +0.000062 +0.000061 +0.000060 +0.000059 +0.000058 +0.000057 +0.000056 +0.000055 +0.000054 +0.000053 +0.000052 +0.000051 +0.000050 +0.000049 +0.000048 +0.000048 +0.000047 +0.000046 +0.000045 +0.000044 +0.000043 +0.000043 +0.000042 +0.000041 +0.000040 +0.000040 +0.000039 +0.000038 +0.000038 +0.000037 +0.000036 +0.000036 +0.000035 +0.000034 +0.000034 +0.000033 +0.000033 +0.000032 +0.000031 +0.000031 +0.000030 +0.000030 +0.000029 +0.000029 +0.000028 +0.000028 +0.000027 +0.000027 +0.000026 +0.000026 +0.000025 +0.000025 +0.000024 +0.000024 +0.000023 +0.000023 +0.000023 +0.000022 +0.000022 +0.000021 +0.000021 +0.000021 +0.000020 +0.000020 +0.000019 +0.000019 +0.000019 +0.000018 +0.000018 +0.000018 +0.000017 +0.000017 +0.000017 +0.000016 +0.000016 +0.000016 +0.000016 +0.000015 +0.000015 +0.000015 +0.000014 +0.000014 +0.000014 +0.000014 +0.000013 +0.000013 +0.000013 +0.000013 +0.000012 +0.000012 +0.000012 +0.000012 +0.000011 +0.000011 +0.000011 +0.000011 +0.000011 +0.000010 +0.000010 +0.000010 +0.000010 +0.000010 +0.000010 +0.000009 +0.000009 +0.000009 +0.000009 +0.000009 +0.000008 +0.000008 +0.000008 +0.000008 +0.000008 +0.000008 +0.000008 +0.000007 +0.000007 +0.000007 +0.000007 +0.000007 +0.000007 +0.000007 +0.000006 +0.000006 +0.000006 +0.000006 +0.000006 +0.000006 +0.000006 +0.000006 +0.000006 +0.000005 +0.000005 +0.000005 +0.000005 +0.000005 +0.000005 +0.000005 +0.000005 +0.000005 +0.000005 +0.000004 +0.000004 +0.000004 +0.000004 +0.000004 +0.000004 +0.000004 +0.000004 +0.000004 +0.000004 +0.000004 +0.000004 +0.000004 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000003 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000002 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000001 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 diff --git a/inputFiles/lagrangianContactMechanics/dataTables/singularCrackSlip.csv b/inputFiles/lagrangianContactMechanics/dataTables/singularCrackSlip.csv new file mode 100644 index 00000000000..edf811e7742 --- /dev/null +++ b/inputFiles/lagrangianContactMechanics/dataTables/singularCrackSlip.csv @@ -0,0 +1,10000 @@ +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.128977 +0.225371 +0.291349 +0.344835 +0.390990 +0.432169 +0.469683 +0.504350 +0.536722 +0.567193 +0.596053 +0.623527 +0.649790 +0.674984 +0.699225 +0.722608 +0.745213 +0.767111 +0.788359 +0.809010 +0.829106 +0.848689 +0.867793 +0.886448 +0.904683 +0.922522 +0.939988 +0.957101 +0.973881 +0.990343 +1.006504 +1.022377 +1.037977 +1.053314 +1.068401 +1.083248 +1.097864 +1.112259 +1.126442 +1.140419 +1.154199 +1.167789 +1.181194 +1.194422 +1.207478 +1.220368 +1.233097 +1.245670 +1.258091 +1.270365 +1.282496 +1.294488 +1.306346 +1.318072 +1.329670 +1.341143 +1.352496 +1.363729 +1.374848 +1.385854 +1.396749 +1.407538 +1.418221 +1.428802 +1.439282 +1.449664 +1.459950 +1.470142 +1.480242 +1.490251 +1.500172 +1.510006 +1.519756 +1.529422 +1.539006 +1.548509 +1.557934 +1.567281 +1.576553 +1.585749 +1.594872 +1.603923 +1.612903 +1.621814 +1.630655 +1.639429 +1.648137 +1.656779 +1.665357 +1.673872 +1.682324 +1.690714 +1.699044 +1.707315 +1.715526 +1.723680 +1.731776 +1.739816 +1.747800 +1.755730 +1.763605 +1.771427 +1.779196 +1.786914 +1.794580 +1.802195 +1.809760 +1.817276 +1.824744 +1.832163 +1.839534 +1.846858 +1.854136 +1.861368 +1.868555 +1.875696 +1.882794 +1.889847 +1.896857 +1.903824 +1.910749 +1.917632 +1.924473 +1.931273 +1.938033 +1.944752 +1.951432 +1.958072 +1.964673 +1.971235 +1.977760 +1.984246 +1.990695 +1.997107 +2.003482 +2.009821 +2.016123 +2.022390 +2.028622 +2.034818 +2.040980 +2.047107 +2.053200 +2.059259 +2.065285 +2.071277 +2.077237 +2.083164 +2.089058 +2.094921 +2.100751 +2.106550 +2.112318 +2.118055 +2.123760 +2.129436 +2.135080 +2.140695 +2.146280 +2.151836 +2.157361 +2.162858 +2.168326 +2.173765 +2.179176 +2.184558 +2.189913 +2.195239 +2.200538 +2.205809 +2.211053 +2.216270 +2.221460 +2.226623 +2.231760 +2.236870 +2.241954 +2.247013 +2.252045 +2.257052 +2.262033 +2.266989 +2.271920 +2.276826 +2.281707 +2.286564 +2.291396 +2.296204 +2.300987 +2.305747 +2.310482 +2.315194 +2.319882 +2.324547 +2.329189 +2.333807 +2.338402 +2.342975 +2.347525 +2.352052 +2.356556 +2.361038 +2.365498 +2.369936 +2.374352 +2.378746 +2.383118 +2.387468 +2.391797 +2.396105 +2.400391 +2.404656 +2.408901 +2.413124 +2.417326 +2.421508 +2.425669 +2.429809 +2.433929 +2.438029 +2.442108 +2.446168 +2.450207 +2.454227 +2.458227 +2.462207 +2.466167 +2.470108 +2.474029 +2.477932 +2.481814 +2.485678 +2.489523 +2.493349 +2.497155 +2.500943 +2.504713 +2.508463 +2.512195 +2.515909 +2.519604 +2.523281 +2.526940 +2.530581 +2.534203 +2.537808 +2.541394 +2.544963 +2.548514 +2.552047 +2.555563 +2.559061 +2.562542 +2.566005 +2.569451 +2.572880 +2.576292 +2.579686 +2.583063 +2.586424 +2.589767 +2.593094 +2.596404 +2.599697 +2.602973 +2.606233 +2.609476 +2.612703 +2.615913 +2.619107 +2.622285 +2.625447 +2.628592 +2.631721 +2.634834 +2.637931 +2.641013 +2.644078 +2.647127 +2.650161 +2.653179 +2.656181 +2.659168 +2.662139 +2.665094 +2.668034 +2.670959 +2.673868 +2.676762 +2.679641 +2.682505 +2.685353 +2.688186 +2.691004 +2.693807 +2.696595 +2.699369 +2.702127 +2.704870 +2.707599 +2.710313 +2.713012 +2.715697 +2.718367 +2.721022 +2.723663 +2.726289 +2.728901 +2.731499 +2.734082 +2.736651 +2.739205 +2.741746 +2.744272 +2.746783 +2.749281 +2.751765 +2.754235 +2.756690 +2.759132 +2.761560 +2.763973 +2.766373 +2.768759 +2.771132 +2.773490 +2.775835 +2.778166 +2.780484 +2.782788 +2.785078 +2.787355 +2.789618 +2.791868 +2.794104 +2.796327 +2.798536 +2.800732 +2.802915 +2.805085 +2.807241 +2.809384 +2.811514 +2.813630 +2.815734 +2.817824 +2.819901 +2.821966 +2.824017 +2.826055 +2.828080 +2.830092 +2.832092 +2.834078 +2.836052 +2.838013 +2.839960 +2.841896 +2.843818 +2.845728 +2.847625 +2.849509 +2.851381 +2.853240 +2.855086 +2.856920 +2.858741 +2.860550 +2.862346 +2.864130 +2.865901 +2.867660 +2.869407 +2.871141 +2.872862 +2.874572 +2.876269 +2.877953 +2.879626 +2.881286 +2.882934 +2.884570 +2.886193 +2.887804 +2.889404 +2.890991 +2.892565 +2.894128 +2.895679 +2.897218 +2.898744 +2.900259 +2.901762 +2.903252 +2.904731 +2.906198 +2.907652 +2.909095 +2.910526 +2.911945 +2.913353 +2.914748 +2.916132 +2.917503 +2.918863 +2.920212 +2.921548 +2.922873 +2.924186 +2.925487 +2.926777 +2.928055 +2.929321 +2.930576 +2.931819 +2.933050 +2.934270 +2.935478 +2.936675 +2.937860 +2.939033 +2.940195 +2.941345 +2.942484 +2.943612 +2.944728 +2.945832 +2.946925 +2.948007 +2.949077 +2.950136 +2.951183 +2.952219 +2.953244 +2.954257 +2.955259 +2.956250 +2.957229 +2.958197 +2.959153 +2.960098 +2.961032 +2.961955 +2.962867 +2.963767 +2.964656 +2.965533 +2.966400 +2.967255 +2.968099 +2.968932 +2.969754 +2.970564 +2.971363 +2.972152 +2.972929 +2.973694 +2.974449 +2.975193 +2.975925 +2.976647 +2.977357 +2.978056 +2.978744 +2.979421 +2.980087 +2.980742 +2.981386 +2.982019 +2.982640 +2.983251 +2.983851 +2.984439 +2.985017 +2.985584 +2.986139 +2.986684 +2.987218 +2.987740 +2.988252 +2.988753 +2.989243 +2.989721 +2.990189 +2.990646 +2.991092 +2.991527 +2.991951 +2.992364 +2.992766 +2.993158 +2.993538 +2.993908 +2.994266 +2.994614 +2.994950 +2.995276 +2.995591 +2.995895 +2.996188 +2.996471 +2.996742 +2.997003 +2.997252 +2.997491 +2.997719 +2.997936 +2.998142 +2.998337 +2.998522 +2.998695 +2.998858 +2.999010 +2.999151 +2.999281 +2.999401 +2.999509 +2.999607 +2.999693 +2.999769 +2.999834 +2.999889 +2.999932 +2.999964 +2.999986 +2.999997 +2.999997 +2.999986 +2.999964 +2.999932 +2.999889 +2.999834 +2.999769 +2.999693 +2.999607 +2.999509 +2.999401 +2.999281 +2.999151 +2.999010 +2.998858 +2.998695 +2.998522 +2.998337 +2.998142 +2.997936 +2.997719 +2.997491 +2.997252 +2.997003 +2.996742 +2.996471 +2.996188 +2.995895 +2.995591 +2.995276 +2.994950 +2.994614 +2.994266 +2.993908 +2.993538 +2.993158 +2.992766 +2.992364 +2.991951 +2.991527 +2.991092 +2.990646 +2.990189 +2.989721 +2.989243 +2.988753 +2.988252 +2.987740 +2.987218 +2.986684 +2.986139 +2.985584 +2.985017 +2.984439 +2.983851 +2.983251 +2.982640 +2.982019 +2.981386 +2.980742 +2.980087 +2.979421 +2.978744 +2.978056 +2.977357 +2.976647 +2.975925 +2.975193 +2.974449 +2.973694 +2.972929 +2.972152 +2.971363 +2.970564 +2.969754 +2.968932 +2.968099 +2.967255 +2.966400 +2.965533 +2.964656 +2.963767 +2.962867 +2.961955 +2.961032 +2.960098 +2.959153 +2.958197 +2.957229 +2.956250 +2.955259 +2.954257 +2.953244 +2.952219 +2.951183 +2.950136 +2.949077 +2.948007 +2.946925 +2.945832 +2.944728 +2.943612 +2.942484 +2.941345 +2.940195 +2.939033 +2.937860 +2.936675 +2.935478 +2.934270 +2.933050 +2.931819 +2.930576 +2.929321 +2.928055 +2.926777 +2.925487 +2.924186 +2.922873 +2.921548 +2.920212 +2.918863 +2.917503 +2.916132 +2.914748 +2.913353 +2.911945 +2.910526 +2.909095 +2.907652 +2.906198 +2.904731 +2.903252 +2.901762 +2.900259 +2.898744 +2.897218 +2.895679 +2.894128 +2.892565 +2.890991 +2.889404 +2.887804 +2.886193 +2.884570 +2.882934 +2.881286 +2.879626 +2.877953 +2.876269 +2.874572 +2.872862 +2.871141 +2.869407 +2.867660 +2.865901 +2.864130 +2.862346 +2.860550 +2.858741 +2.856920 +2.855086 +2.853240 +2.851381 +2.849509 +2.847625 +2.845728 +2.843818 +2.841896 +2.839960 +2.838013 +2.836052 +2.834078 +2.832092 +2.830092 +2.828080 +2.826055 +2.824017 +2.821966 +2.819901 +2.817824 +2.815734 +2.813630 +2.811514 +2.809384 +2.807241 +2.805085 +2.802915 +2.800732 +2.798536 +2.796327 +2.794104 +2.791868 +2.789618 +2.787355 +2.785078 +2.782788 +2.780484 +2.778166 +2.775835 +2.773490 +2.771132 +2.768759 +2.766373 +2.763973 +2.761560 +2.759132 +2.756690 +2.754235 +2.751765 +2.749281 +2.746783 +2.744272 +2.741746 +2.739205 +2.736651 +2.734082 +2.731499 +2.728901 +2.726289 +2.723663 +2.721022 +2.718367 +2.715697 +2.713012 +2.710313 +2.707599 +2.704870 +2.702127 +2.699369 +2.696595 +2.693807 +2.691004 +2.688186 +2.685353 +2.682505 +2.679641 +2.676762 +2.673868 +2.670959 +2.668034 +2.665094 +2.662139 +2.659168 +2.656181 +2.653179 +2.650161 +2.647127 +2.644078 +2.641013 +2.637931 +2.634834 +2.631721 +2.628592 +2.625447 +2.622285 +2.619107 +2.615913 +2.612703 +2.609476 +2.606233 +2.602973 +2.599697 +2.596404 +2.593094 +2.589767 +2.586424 +2.583063 +2.579686 +2.576292 +2.572880 +2.569451 +2.566005 +2.562542 +2.559061 +2.555563 +2.552047 +2.548514 +2.544963 +2.541394 +2.537808 +2.534203 +2.530581 +2.526940 +2.523281 +2.519604 +2.515909 +2.512195 +2.508463 +2.504713 +2.500943 +2.497155 +2.493349 +2.489523 +2.485678 +2.481814 +2.477932 +2.474029 +2.470108 +2.466167 +2.462207 +2.458227 +2.454227 +2.450207 +2.446168 +2.442108 +2.438029 +2.433929 +2.429809 +2.425669 +2.421508 +2.417326 +2.413124 +2.408901 +2.404656 +2.400391 +2.396105 +2.391797 +2.387468 +2.383118 +2.378746 +2.374352 +2.369936 +2.365498 +2.361038 +2.356556 +2.352052 +2.347525 +2.342975 +2.338402 +2.333807 +2.329189 +2.324547 +2.319882 +2.315194 +2.310482 +2.305747 +2.300987 +2.296204 +2.291396 +2.286564 +2.281707 +2.276826 +2.271920 +2.266989 +2.262033 +2.257052 +2.252045 +2.247013 +2.241954 +2.236870 +2.231760 +2.226623 +2.221460 +2.216270 +2.211053 +2.205809 +2.200538 +2.195239 +2.189913 +2.184558 +2.179176 +2.173765 +2.168326 +2.162858 +2.157361 +2.151836 +2.146280 +2.140695 +2.135080 +2.129436 +2.123760 +2.118055 +2.112318 +2.106550 +2.100751 +2.094921 +2.089058 +2.083164 +2.077237 +2.071277 +2.065285 +2.059259 +2.053200 +2.047107 +2.040980 +2.034818 +2.028622 +2.022390 +2.016123 +2.009821 +2.003482 +1.997107 +1.990695 +1.984246 +1.977760 +1.971235 +1.964673 +1.958072 +1.951432 +1.944752 +1.938033 +1.931273 +1.924473 +1.917632 +1.910749 +1.903824 +1.896857 +1.889847 +1.882794 +1.875696 +1.868555 +1.861368 +1.854136 +1.846858 +1.839534 +1.832163 +1.824744 +1.817276 +1.809760 +1.802195 +1.794580 +1.786914 +1.779196 +1.771427 +1.763605 +1.755730 +1.747800 +1.739816 +1.731776 +1.723680 +1.715526 +1.707315 +1.699044 +1.690714 +1.682324 +1.673872 +1.665357 +1.656779 +1.648137 +1.639429 +1.630655 +1.621814 +1.612903 +1.603923 +1.594872 +1.585749 +1.576553 +1.567281 +1.557934 +1.548509 +1.539006 +1.529422 +1.519756 +1.510006 +1.500172 +1.490251 +1.480242 +1.470142 +1.459950 +1.449664 +1.439282 +1.428802 +1.418221 +1.407538 +1.396749 +1.385854 +1.374848 +1.363729 +1.352496 +1.341143 +1.329670 +1.318072 +1.306346 +1.294488 +1.282496 +1.270365 +1.258091 +1.245670 +1.233097 +1.220368 +1.207478 +1.194422 +1.181194 +1.167789 +1.154199 +1.140419 +1.126442 +1.112259 +1.097864 +1.083248 +1.068401 +1.053314 +1.037977 +1.022377 +1.006504 +0.990343 +0.973881 +0.957101 +0.939988 +0.922522 +0.904683 +0.886448 +0.867793 +0.848689 +0.829106 +0.809010 +0.788359 +0.767111 +0.745213 +0.722608 +0.699225 +0.674984 +0.649790 +0.623527 +0.596053 +0.567193 +0.536722 +0.504350 +0.469683 +0.432169 +0.390990 +0.344835 +0.291349 +0.225371 +0.128977 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 +0.000000 diff --git a/inputFiles/lagrangianContactMechanics/dataTables/x.csv b/inputFiles/lagrangianContactMechanics/dataTables/x.csv new file mode 100644 index 00000000000..aef9f0ca8b1 --- /dev/null +++ b/inputFiles/lagrangianContactMechanics/dataTables/x.csv @@ -0,0 +1,10000 @@ +-19.010000 +-19.006198 +-19.002395 +-18.998593 +-18.994790 +-18.990988 +-18.987186 +-18.983383 +-18.979581 +-18.975779 +-18.971976 +-18.968174 +-18.964371 +-18.960569 +-18.956767 +-18.952964 +-18.949162 +-18.945360 +-18.941557 +-18.937755 +-18.933952 +-18.930150 +-18.926348 +-18.922545 +-18.918743 +-18.914940 +-18.911138 +-18.907336 +-18.903533 +-18.899731 +-18.895929 +-18.892126 +-18.888324 +-18.884521 +-18.880719 +-18.876917 +-18.873114 +-18.869312 +-18.865510 +-18.861707 +-18.857905 +-18.854102 +-18.850300 +-18.846498 +-18.842695 +-18.838893 +-18.835091 +-18.831288 +-18.827486 +-18.823683 +-18.819881 +-18.816079 +-18.812276 +-18.808474 +-18.804671 +-18.800869 +-18.797067 +-18.793264 +-18.789462 +-18.785660 +-18.781857 +-18.778055 +-18.774252 +-18.770450 +-18.766648 +-18.762845 +-18.759043 +-18.755241 +-18.751438 +-18.747636 +-18.743833 +-18.740031 +-18.736229 +-18.732426 +-18.728624 +-18.724821 +-18.721019 +-18.717217 +-18.713414 +-18.709612 +-18.705810 +-18.702007 +-18.698205 +-18.694402 +-18.690600 +-18.686798 +-18.682995 +-18.679193 +-18.675391 +-18.671588 +-18.667786 +-18.663983 +-18.660181 +-18.656379 +-18.652576 +-18.648774 +-18.644971 +-18.641169 +-18.637367 +-18.633564 +-18.629762 +-18.625960 +-18.622157 +-18.618355 +-18.614552 +-18.610750 +-18.606948 +-18.603145 +-18.599343 +-18.595541 +-18.591738 +-18.587936 +-18.584133 +-18.580331 +-18.576529 +-18.572726 +-18.568924 +-18.565122 +-18.561319 +-18.557517 +-18.553714 +-18.549912 +-18.546110 +-18.542307 +-18.538505 +-18.534702 +-18.530900 +-18.527098 +-18.523295 +-18.519493 +-18.515691 +-18.511888 +-18.508086 +-18.504283 +-18.500481 +-18.496679 +-18.492876 +-18.489074 +-18.485272 +-18.481469 +-18.477667 +-18.473864 +-18.470062 +-18.466260 +-18.462457 +-18.458655 +-18.454852 +-18.451050 +-18.447248 +-18.443445 +-18.439643 +-18.435841 +-18.432038 +-18.428236 +-18.424433 +-18.420631 +-18.416829 +-18.413026 +-18.409224 +-18.405422 +-18.401619 +-18.397817 +-18.394014 +-18.390212 +-18.386410 +-18.382607 +-18.378805 +-18.375003 +-18.371200 +-18.367398 +-18.363595 +-18.359793 +-18.355991 +-18.352188 +-18.348386 +-18.344583 +-18.340781 +-18.336979 +-18.333176 +-18.329374 +-18.325572 +-18.321769 +-18.317967 +-18.314164 +-18.310362 +-18.306560 +-18.302757 +-18.298955 +-18.295153 +-18.291350 +-18.287548 +-18.283745 +-18.279943 +-18.276141 +-18.272338 +-18.268536 +-18.264733 +-18.260931 +-18.257129 +-18.253326 +-18.249524 +-18.245722 +-18.241919 +-18.238117 +-18.234314 +-18.230512 +-18.226710 +-18.222907 +-18.219105 +-18.215303 +-18.211500 +-18.207698 +-18.203895 +-18.200093 +-18.196291 +-18.192488 +-18.188686 +-18.184883 +-18.181081 +-18.177279 +-18.173476 +-18.169674 +-18.165872 +-18.162069 +-18.158267 +-18.154464 +-18.150662 +-18.146860 +-18.143057 +-18.139255 +-18.135453 +-18.131650 +-18.127848 +-18.124045 +-18.120243 +-18.116441 +-18.112638 +-18.108836 +-18.105034 +-18.101231 +-18.097429 +-18.093626 +-18.089824 +-18.086022 +-18.082219 +-18.078417 +-18.074614 +-18.070812 +-18.067010 +-18.063207 +-18.059405 +-18.055603 +-18.051800 +-18.047998 +-18.044195 +-18.040393 +-18.036591 +-18.032788 +-18.028986 +-18.025184 +-18.021381 +-18.017579 +-18.013776 +-18.009974 +-18.006172 +-18.002369 +-17.998567 +-17.994764 +-17.990962 +-17.987160 +-17.983357 +-17.979555 +-17.975753 +-17.971950 +-17.968148 +-17.964345 +-17.960543 +-17.956741 +-17.952938 +-17.949136 +-17.945334 +-17.941531 +-17.937729 +-17.933926 +-17.930124 +-17.926322 +-17.922519 +-17.918717 +-17.914914 +-17.911112 +-17.907310 +-17.903507 +-17.899705 +-17.895903 +-17.892100 +-17.888298 +-17.884495 +-17.880693 +-17.876891 +-17.873088 +-17.869286 +-17.865484 +-17.861681 +-17.857879 +-17.854076 +-17.850274 +-17.846472 +-17.842669 +-17.838867 +-17.835065 +-17.831262 +-17.827460 +-17.823657 +-17.819855 +-17.816053 +-17.812250 +-17.808448 +-17.804645 +-17.800843 +-17.797041 +-17.793238 +-17.789436 +-17.785634 +-17.781831 +-17.778029 +-17.774226 +-17.770424 +-17.766622 +-17.762819 +-17.759017 +-17.755215 +-17.751412 +-17.747610 +-17.743807 +-17.740005 +-17.736203 +-17.732400 +-17.728598 +-17.724795 +-17.720993 +-17.717191 +-17.713388 +-17.709586 +-17.705784 +-17.701981 +-17.698179 +-17.694376 +-17.690574 +-17.686772 +-17.682969 +-17.679167 +-17.675365 +-17.671562 +-17.667760 +-17.663957 +-17.660155 +-17.656353 +-17.652550 +-17.648748 +-17.644945 +-17.641143 +-17.637341 +-17.633538 +-17.629736 +-17.625934 +-17.622131 +-17.618329 +-17.614526 +-17.610724 +-17.606922 +-17.603119 +-17.599317 +-17.595515 +-17.591712 +-17.587910 +-17.584107 +-17.580305 +-17.576503 +-17.572700 +-17.568898 +-17.565096 +-17.561293 +-17.557491 +-17.553688 +-17.549886 +-17.546084 +-17.542281 +-17.538479 +-17.534676 +-17.530874 +-17.527072 +-17.523269 +-17.519467 +-17.515665 +-17.511862 +-17.508060 +-17.504257 +-17.500455 +-17.496653 +-17.492850 +-17.489048 +-17.485246 +-17.481443 +-17.477641 +-17.473838 +-17.470036 +-17.466234 +-17.462431 +-17.458629 +-17.454826 +-17.451024 +-17.447222 +-17.443419 +-17.439617 +-17.435815 +-17.432012 +-17.428210 +-17.424407 +-17.420605 +-17.416803 +-17.413000 +-17.409198 +-17.405396 +-17.401593 +-17.397791 +-17.393988 +-17.390186 +-17.386384 +-17.382581 +-17.378779 +-17.374976 +-17.371174 +-17.367372 +-17.363569 +-17.359767 +-17.355965 +-17.352162 +-17.348360 +-17.344557 +-17.340755 +-17.336953 +-17.333150 +-17.329348 +-17.325546 +-17.321743 +-17.317941 +-17.314138 +-17.310336 +-17.306534 +-17.302731 +-17.298929 +-17.295127 +-17.291324 +-17.287522 +-17.283719 +-17.279917 +-17.276115 +-17.272312 +-17.268510 +-17.264707 +-17.260905 +-17.257103 +-17.253300 +-17.249498 +-17.245696 +-17.241893 +-17.238091 +-17.234288 +-17.230486 +-17.226684 +-17.222881 +-17.219079 +-17.215277 +-17.211474 +-17.207672 +-17.203869 +-17.200067 +-17.196265 +-17.192462 +-17.188660 +-17.184857 +-17.181055 +-17.177253 +-17.173450 +-17.169648 +-17.165846 +-17.162043 +-17.158241 +-17.154438 +-17.150636 +-17.146834 +-17.143031 +-17.139229 +-17.135427 +-17.131624 +-17.127822 +-17.124019 +-17.120217 +-17.116415 +-17.112612 +-17.108810 +-17.105008 +-17.101205 +-17.097403 +-17.093600 +-17.089798 +-17.085996 +-17.082193 +-17.078391 +-17.074588 +-17.070786 +-17.066984 +-17.063181 +-17.059379 +-17.055577 +-17.051774 +-17.047972 +-17.044169 +-17.040367 +-17.036565 +-17.032762 +-17.028960 +-17.025158 +-17.021355 +-17.017553 +-17.013750 +-17.009948 +-17.006146 +-17.002343 +-16.998541 +-16.994738 +-16.990936 +-16.987134 +-16.983331 +-16.979529 +-16.975727 +-16.971924 +-16.968122 +-16.964319 +-16.960517 +-16.956715 +-16.952912 +-16.949110 +-16.945308 +-16.941505 +-16.937703 +-16.933900 +-16.930098 +-16.926296 +-16.922493 +-16.918691 +-16.914888 +-16.911086 +-16.907284 +-16.903481 +-16.899679 +-16.895877 +-16.892074 +-16.888272 +-16.884469 +-16.880667 +-16.876865 +-16.873062 +-16.869260 +-16.865458 +-16.861655 +-16.857853 +-16.854050 +-16.850248 +-16.846446 +-16.842643 +-16.838841 +-16.835039 +-16.831236 +-16.827434 +-16.823631 +-16.819829 +-16.816027 +-16.812224 +-16.808422 +-16.804619 +-16.800817 +-16.797015 +-16.793212 +-16.789410 +-16.785608 +-16.781805 +-16.778003 +-16.774200 +-16.770398 +-16.766596 +-16.762793 +-16.758991 +-16.755189 +-16.751386 +-16.747584 +-16.743781 +-16.739979 +-16.736177 +-16.732374 +-16.728572 +-16.724769 +-16.720967 +-16.717165 +-16.713362 +-16.709560 +-16.705758 +-16.701955 +-16.698153 +-16.694350 +-16.690548 +-16.686746 +-16.682943 +-16.679141 +-16.675339 +-16.671536 +-16.667734 +-16.663931 +-16.660129 +-16.656327 +-16.652524 +-16.648722 +-16.644919 +-16.641117 +-16.637315 +-16.633512 +-16.629710 +-16.625908 +-16.622105 +-16.618303 +-16.614500 +-16.610698 +-16.606896 +-16.603093 +-16.599291 +-16.595489 +-16.591686 +-16.587884 +-16.584081 +-16.580279 +-16.576477 +-16.572674 +-16.568872 +-16.565070 +-16.561267 +-16.557465 +-16.553662 +-16.549860 +-16.546058 +-16.542255 +-16.538453 +-16.534650 +-16.530848 +-16.527046 +-16.523243 +-16.519441 +-16.515639 +-16.511836 +-16.508034 +-16.504231 +-16.500429 +-16.496627 +-16.492824 +-16.489022 +-16.485220 +-16.481417 +-16.477615 +-16.473812 +-16.470010 +-16.466208 +-16.462405 +-16.458603 +-16.454800 +-16.450998 +-16.447196 +-16.443393 +-16.439591 +-16.435789 +-16.431986 +-16.428184 +-16.424381 +-16.420579 +-16.416777 +-16.412974 +-16.409172 +-16.405370 +-16.401567 +-16.397765 +-16.393962 +-16.390160 +-16.386358 +-16.382555 +-16.378753 +-16.374950 +-16.371148 +-16.367346 +-16.363543 +-16.359741 +-16.355939 +-16.352136 +-16.348334 +-16.344531 +-16.340729 +-16.336927 +-16.333124 +-16.329322 +-16.325520 +-16.321717 +-16.317915 +-16.314112 +-16.310310 +-16.306508 +-16.302705 +-16.298903 +-16.295101 +-16.291298 +-16.287496 +-16.283693 +-16.279891 +-16.276089 +-16.272286 +-16.268484 +-16.264681 +-16.260879 +-16.257077 +-16.253274 +-16.249472 +-16.245670 +-16.241867 +-16.238065 +-16.234262 +-16.230460 +-16.226658 +-16.222855 +-16.219053 +-16.215251 +-16.211448 +-16.207646 +-16.203843 +-16.200041 +-16.196239 +-16.192436 +-16.188634 +-16.184831 +-16.181029 +-16.177227 +-16.173424 +-16.169622 +-16.165820 +-16.162017 +-16.158215 +-16.154412 +-16.150610 +-16.146808 +-16.143005 +-16.139203 +-16.135401 +-16.131598 +-16.127796 +-16.123993 +-16.120191 +-16.116389 +-16.112586 +-16.108784 +-16.104981 +-16.101179 +-16.097377 +-16.093574 +-16.089772 +-16.085970 +-16.082167 +-16.078365 +-16.074562 +-16.070760 +-16.066958 +-16.063155 +-16.059353 +-16.055551 +-16.051748 +-16.047946 +-16.044143 +-16.040341 +-16.036539 +-16.032736 +-16.028934 +-16.025132 +-16.021329 +-16.017527 +-16.013724 +-16.009922 +-16.006120 +-16.002317 +-15.998515 +-15.994712 +-15.990910 +-15.987108 +-15.983305 +-15.979503 +-15.975701 +-15.971898 +-15.968096 +-15.964293 +-15.960491 +-15.956689 +-15.952886 +-15.949084 +-15.945282 +-15.941479 +-15.937677 +-15.933874 +-15.930072 +-15.926270 +-15.922467 +-15.918665 +-15.914862 +-15.911060 +-15.907258 +-15.903455 +-15.899653 +-15.895851 +-15.892048 +-15.888246 +-15.884443 +-15.880641 +-15.876839 +-15.873036 +-15.869234 +-15.865432 +-15.861629 +-15.857827 +-15.854024 +-15.850222 +-15.846420 +-15.842617 +-15.838815 +-15.835013 +-15.831210 +-15.827408 +-15.823605 +-15.819803 +-15.816001 +-15.812198 +-15.808396 +-15.804593 +-15.800791 +-15.796989 +-15.793186 +-15.789384 +-15.785582 +-15.781779 +-15.777977 +-15.774174 +-15.770372 +-15.766570 +-15.762767 +-15.758965 +-15.755163 +-15.751360 +-15.747558 +-15.743755 +-15.739953 +-15.736151 +-15.732348 +-15.728546 +-15.724743 +-15.720941 +-15.717139 +-15.713336 +-15.709534 +-15.705732 +-15.701929 +-15.698127 +-15.694324 +-15.690522 +-15.686720 +-15.682917 +-15.679115 +-15.675313 +-15.671510 +-15.667708 +-15.663905 +-15.660103 +-15.656301 +-15.652498 +-15.648696 +-15.644893 +-15.641091 +-15.637289 +-15.633486 +-15.629684 +-15.625882 +-15.622079 +-15.618277 +-15.614474 +-15.610672 +-15.606870 +-15.603067 +-15.599265 +-15.595463 +-15.591660 +-15.587858 +-15.584055 +-15.580253 +-15.576451 +-15.572648 +-15.568846 +-15.565044 +-15.561241 +-15.557439 +-15.553636 +-15.549834 +-15.546032 +-15.542229 +-15.538427 +-15.534624 +-15.530822 +-15.527020 +-15.523217 +-15.519415 +-15.515613 +-15.511810 +-15.508008 +-15.504205 +-15.500403 +-15.496601 +-15.492798 +-15.488996 +-15.485194 +-15.481391 +-15.477589 +-15.473786 +-15.469984 +-15.466182 +-15.462379 +-15.458577 +-15.454774 +-15.450972 +-15.447170 +-15.443367 +-15.439565 +-15.435763 +-15.431960 +-15.428158 +-15.424355 +-15.420553 +-15.416751 +-15.412948 +-15.409146 +-15.405344 +-15.401541 +-15.397739 +-15.393936 +-15.390134 +-15.386332 +-15.382529 +-15.378727 +-15.374924 +-15.371122 +-15.367320 +-15.363517 +-15.359715 +-15.355913 +-15.352110 +-15.348308 +-15.344505 +-15.340703 +-15.336901 +-15.333098 +-15.329296 +-15.325494 +-15.321691 +-15.317889 +-15.314086 +-15.310284 +-15.306482 +-15.302679 +-15.298877 +-15.295075 +-15.291272 +-15.287470 +-15.283667 +-15.279865 +-15.276063 +-15.272260 +-15.268458 +-15.264655 +-15.260853 +-15.257051 +-15.253248 +-15.249446 +-15.245644 +-15.241841 +-15.238039 +-15.234236 +-15.230434 +-15.226632 +-15.222829 +-15.219027 +-15.215225 +-15.211422 +-15.207620 +-15.203817 +-15.200015 +-15.196213 +-15.192410 +-15.188608 +-15.184805 +-15.181003 +-15.177201 +-15.173398 +-15.169596 +-15.165794 +-15.161991 +-15.158189 +-15.154386 +-15.150584 +-15.146782 +-15.142979 +-15.139177 +-15.135375 +-15.131572 +-15.127770 +-15.123967 +-15.120165 +-15.116363 +-15.112560 +-15.108758 +-15.104955 +-15.101153 +-15.097351 +-15.093548 +-15.089746 +-15.085944 +-15.082141 +-15.078339 +-15.074536 +-15.070734 +-15.066932 +-15.063129 +-15.059327 +-15.055525 +-15.051722 +-15.047920 +-15.044117 +-15.040315 +-15.036513 +-15.032710 +-15.028908 +-15.025106 +-15.021303 +-15.017501 +-15.013698 +-15.009896 +-15.006094 +-15.002291 +-14.998489 +-14.994686 +-14.990884 +-14.987082 +-14.983279 +-14.979477 +-14.975675 +-14.971872 +-14.968070 +-14.964267 +-14.960465 +-14.956663 +-14.952860 +-14.949058 +-14.945256 +-14.941453 +-14.937651 +-14.933848 +-14.930046 +-14.926244 +-14.922441 +-14.918639 +-14.914836 +-14.911034 +-14.907232 +-14.903429 +-14.899627 +-14.895825 +-14.892022 +-14.888220 +-14.884417 +-14.880615 +-14.876813 +-14.873010 +-14.869208 +-14.865406 +-14.861603 +-14.857801 +-14.853998 +-14.850196 +-14.846394 +-14.842591 +-14.838789 +-14.834986 +-14.831184 +-14.827382 +-14.823579 +-14.819777 +-14.815975 +-14.812172 +-14.808370 +-14.804567 +-14.800765 +-14.796963 +-14.793160 +-14.789358 +-14.785556 +-14.781753 +-14.777951 +-14.774148 +-14.770346 +-14.766544 +-14.762741 +-14.758939 +-14.755137 +-14.751334 +-14.747532 +-14.743729 +-14.739927 +-14.736125 +-14.732322 +-14.728520 +-14.724717 +-14.720915 +-14.717113 +-14.713310 +-14.709508 +-14.705706 +-14.701903 +-14.698101 +-14.694298 +-14.690496 +-14.686694 +-14.682891 +-14.679089 +-14.675287 +-14.671484 +-14.667682 +-14.663879 +-14.660077 +-14.656275 +-14.652472 +-14.648670 +-14.644867 +-14.641065 +-14.637263 +-14.633460 +-14.629658 +-14.625856 +-14.622053 +-14.618251 +-14.614448 +-14.610646 +-14.606844 +-14.603041 +-14.599239 +-14.595437 +-14.591634 +-14.587832 +-14.584029 +-14.580227 +-14.576425 +-14.572622 +-14.568820 +-14.565018 +-14.561215 +-14.557413 +-14.553610 +-14.549808 +-14.546006 +-14.542203 +-14.538401 +-14.534598 +-14.530796 +-14.526994 +-14.523191 +-14.519389 +-14.515587 +-14.511784 +-14.507982 +-14.504179 +-14.500377 +-14.496575 +-14.492772 +-14.488970 +-14.485168 +-14.481365 +-14.477563 +-14.473760 +-14.469958 +-14.466156 +-14.462353 +-14.458551 +-14.454748 +-14.450946 +-14.447144 +-14.443341 +-14.439539 +-14.435737 +-14.431934 +-14.428132 +-14.424329 +-14.420527 +-14.416725 +-14.412922 +-14.409120 +-14.405318 +-14.401515 +-14.397713 +-14.393910 +-14.390108 +-14.386306 +-14.382503 +-14.378701 +-14.374898 +-14.371096 +-14.367294 +-14.363491 +-14.359689 +-14.355887 +-14.352084 +-14.348282 +-14.344479 +-14.340677 +-14.336875 +-14.333072 +-14.329270 +-14.325468 +-14.321665 +-14.317863 +-14.314060 +-14.310258 +-14.306456 +-14.302653 +-14.298851 +-14.295049 +-14.291246 +-14.287444 +-14.283641 +-14.279839 +-14.276037 +-14.272234 +-14.268432 +-14.264629 +-14.260827 +-14.257025 +-14.253222 +-14.249420 +-14.245618 +-14.241815 +-14.238013 +-14.234210 +-14.230408 +-14.226606 +-14.222803 +-14.219001 +-14.215199 +-14.211396 +-14.207594 +-14.203791 +-14.199989 +-14.196187 +-14.192384 +-14.188582 +-14.184779 +-14.180977 +-14.177175 +-14.173372 +-14.169570 +-14.165768 +-14.161965 +-14.158163 +-14.154360 +-14.150558 +-14.146756 +-14.142953 +-14.139151 +-14.135349 +-14.131546 +-14.127744 +-14.123941 +-14.120139 +-14.116337 +-14.112534 +-14.108732 +-14.104929 +-14.101127 +-14.097325 +-14.093522 +-14.089720 +-14.085918 +-14.082115 +-14.078313 +-14.074510 +-14.070708 +-14.066906 +-14.063103 +-14.059301 +-14.055499 +-14.051696 +-14.047894 +-14.044091 +-14.040289 +-14.036487 +-14.032684 +-14.028882 +-14.025080 +-14.021277 +-14.017475 +-14.013672 +-14.009870 +-14.006068 +-14.002265 +-13.998463 +-13.994660 +-13.990858 +-13.987056 +-13.983253 +-13.979451 +-13.975649 +-13.971846 +-13.968044 +-13.964241 +-13.960439 +-13.956637 +-13.952834 +-13.949032 +-13.945230 +-13.941427 +-13.937625 +-13.933822 +-13.930020 +-13.926218 +-13.922415 +-13.918613 +-13.914810 +-13.911008 +-13.907206 +-13.903403 +-13.899601 +-13.895799 +-13.891996 +-13.888194 +-13.884391 +-13.880589 +-13.876787 +-13.872984 +-13.869182 +-13.865380 +-13.861577 +-13.857775 +-13.853972 +-13.850170 +-13.846368 +-13.842565 +-13.838763 +-13.834960 +-13.831158 +-13.827356 +-13.823553 +-13.819751 +-13.815949 +-13.812146 +-13.808344 +-13.804541 +-13.800739 +-13.796937 +-13.793134 +-13.789332 +-13.785530 +-13.781727 +-13.777925 +-13.774122 +-13.770320 +-13.766518 +-13.762715 +-13.758913 +-13.755111 +-13.751308 +-13.747506 +-13.743703 +-13.739901 +-13.736099 +-13.732296 +-13.728494 +-13.724691 +-13.720889 +-13.717087 +-13.713284 +-13.709482 +-13.705680 +-13.701877 +-13.698075 +-13.694272 +-13.690470 +-13.686668 +-13.682865 +-13.679063 +-13.675261 +-13.671458 +-13.667656 +-13.663853 +-13.660051 +-13.656249 +-13.652446 +-13.648644 +-13.644841 +-13.641039 +-13.637237 +-13.633434 +-13.629632 +-13.625830 +-13.622027 +-13.618225 +-13.614422 +-13.610620 +-13.606818 +-13.603015 +-13.599213 +-13.595411 +-13.591608 +-13.587806 +-13.584003 +-13.580201 +-13.576399 +-13.572596 +-13.568794 +-13.564991 +-13.561189 +-13.557387 +-13.553584 +-13.549782 +-13.545980 +-13.542177 +-13.538375 +-13.534572 +-13.530770 +-13.526968 +-13.523165 +-13.519363 +-13.515561 +-13.511758 +-13.507956 +-13.504153 +-13.500351 +-13.496549 +-13.492746 +-13.488944 +-13.485142 +-13.481339 +-13.477537 +-13.473734 +-13.469932 +-13.466130 +-13.462327 +-13.458525 +-13.454722 +-13.450920 +-13.447118 +-13.443315 +-13.439513 +-13.435711 +-13.431908 +-13.428106 +-13.424303 +-13.420501 +-13.416699 +-13.412896 +-13.409094 +-13.405292 +-13.401489 +-13.397687 +-13.393884 +-13.390082 +-13.386280 +-13.382477 +-13.378675 +-13.374872 +-13.371070 +-13.367268 +-13.363465 +-13.359663 +-13.355861 +-13.352058 +-13.348256 +-13.344453 +-13.340651 +-13.336849 +-13.333046 +-13.329244 +-13.325442 +-13.321639 +-13.317837 +-13.314034 +-13.310232 +-13.306430 +-13.302627 +-13.298825 +-13.295023 +-13.291220 +-13.287418 +-13.283615 +-13.279813 +-13.276011 +-13.272208 +-13.268406 +-13.264603 +-13.260801 +-13.256999 +-13.253196 +-13.249394 +-13.245592 +-13.241789 +-13.237987 +-13.234184 +-13.230382 +-13.226580 +-13.222777 +-13.218975 +-13.215173 +-13.211370 +-13.207568 +-13.203765 +-13.199963 +-13.196161 +-13.192358 +-13.188556 +-13.184753 +-13.180951 +-13.177149 +-13.173346 +-13.169544 +-13.165742 +-13.161939 +-13.158137 +-13.154334 +-13.150532 +-13.146730 +-13.142927 +-13.139125 +-13.135323 +-13.131520 +-13.127718 +-13.123915 +-13.120113 +-13.116311 +-13.112508 +-13.108706 +-13.104903 +-13.101101 +-13.097299 +-13.093496 +-13.089694 +-13.085892 +-13.082089 +-13.078287 +-13.074484 +-13.070682 +-13.066880 +-13.063077 +-13.059275 +-13.055473 +-13.051670 +-13.047868 +-13.044065 +-13.040263 +-13.036461 +-13.032658 +-13.028856 +-13.025054 +-13.021251 +-13.017449 +-13.013646 +-13.009844 +-13.006042 +-13.002239 +-12.998437 +-12.994634 +-12.990832 +-12.987030 +-12.983227 +-12.979425 +-12.975623 +-12.971820 +-12.968018 +-12.964215 +-12.960413 +-12.956611 +-12.952808 +-12.949006 +-12.945204 +-12.941401 +-12.937599 +-12.933796 +-12.929994 +-12.926192 +-12.922389 +-12.918587 +-12.914784 +-12.910982 +-12.907180 +-12.903377 +-12.899575 +-12.895773 +-12.891970 +-12.888168 +-12.884365 +-12.880563 +-12.876761 +-12.872958 +-12.869156 +-12.865354 +-12.861551 +-12.857749 +-12.853946 +-12.850144 +-12.846342 +-12.842539 +-12.838737 +-12.834934 +-12.831132 +-12.827330 +-12.823527 +-12.819725 +-12.815923 +-12.812120 +-12.808318 +-12.804515 +-12.800713 +-12.796911 +-12.793108 +-12.789306 +-12.785504 +-12.781701 +-12.777899 +-12.774096 +-12.770294 +-12.766492 +-12.762689 +-12.758887 +-12.755085 +-12.751282 +-12.747480 +-12.743677 +-12.739875 +-12.736073 +-12.732270 +-12.728468 +-12.724665 +-12.720863 +-12.717061 +-12.713258 +-12.709456 +-12.705654 +-12.701851 +-12.698049 +-12.694246 +-12.690444 +-12.686642 +-12.682839 +-12.679037 +-12.675235 +-12.671432 +-12.667630 +-12.663827 +-12.660025 +-12.656223 +-12.652420 +-12.648618 +-12.644815 +-12.641013 +-12.637211 +-12.633408 +-12.629606 +-12.625804 +-12.622001 +-12.618199 +-12.614396 +-12.610594 +-12.606792 +-12.602989 +-12.599187 +-12.595385 +-12.591582 +-12.587780 +-12.583977 +-12.580175 +-12.576373 +-12.572570 +-12.568768 +-12.564965 +-12.561163 +-12.557361 +-12.553558 +-12.549756 +-12.545954 +-12.542151 +-12.538349 +-12.534546 +-12.530744 +-12.526942 +-12.523139 +-12.519337 +-12.515535 +-12.511732 +-12.507930 +-12.504127 +-12.500325 +-12.496523 +-12.492720 +-12.488918 +-12.485116 +-12.481313 +-12.477511 +-12.473708 +-12.469906 +-12.466104 +-12.462301 +-12.458499 +-12.454696 +-12.450894 +-12.447092 +-12.443289 +-12.439487 +-12.435685 +-12.431882 +-12.428080 +-12.424277 +-12.420475 +-12.416673 +-12.412870 +-12.409068 +-12.405266 +-12.401463 +-12.397661 +-12.393858 +-12.390056 +-12.386254 +-12.382451 +-12.378649 +-12.374846 +-12.371044 +-12.367242 +-12.363439 +-12.359637 +-12.355835 +-12.352032 +-12.348230 +-12.344427 +-12.340625 +-12.336823 +-12.333020 +-12.329218 +-12.325416 +-12.321613 +-12.317811 +-12.314008 +-12.310206 +-12.306404 +-12.302601 +-12.298799 +-12.294996 +-12.291194 +-12.287392 +-12.283589 +-12.279787 +-12.275985 +-12.272182 +-12.268380 +-12.264577 +-12.260775 +-12.256973 +-12.253170 +-12.249368 +-12.245566 +-12.241763 +-12.237961 +-12.234158 +-12.230356 +-12.226554 +-12.222751 +-12.218949 +-12.215147 +-12.211344 +-12.207542 +-12.203739 +-12.199937 +-12.196135 +-12.192332 +-12.188530 +-12.184727 +-12.180925 +-12.177123 +-12.173320 +-12.169518 +-12.165716 +-12.161913 +-12.158111 +-12.154308 +-12.150506 +-12.146704 +-12.142901 +-12.139099 +-12.135297 +-12.131494 +-12.127692 +-12.123889 +-12.120087 +-12.116285 +-12.112482 +-12.108680 +-12.104877 +-12.101075 +-12.097273 +-12.093470 +-12.089668 +-12.085866 +-12.082063 +-12.078261 +-12.074458 +-12.070656 +-12.066854 +-12.063051 +-12.059249 +-12.055447 +-12.051644 +-12.047842 +-12.044039 +-12.040237 +-12.036435 +-12.032632 +-12.028830 +-12.025028 +-12.021225 +-12.017423 +-12.013620 +-12.009818 +-12.006016 +-12.002213 +-11.998411 +-11.994608 +-11.990806 +-11.987004 +-11.983201 +-11.979399 +-11.975597 +-11.971794 +-11.967992 +-11.964189 +-11.960387 +-11.956585 +-11.952782 +-11.948980 +-11.945178 +-11.941375 +-11.937573 +-11.933770 +-11.929968 +-11.926166 +-11.922363 +-11.918561 +-11.914758 +-11.910956 +-11.907154 +-11.903351 +-11.899549 +-11.895747 +-11.891944 +-11.888142 +-11.884339 +-11.880537 +-11.876735 +-11.872932 +-11.869130 +-11.865328 +-11.861525 +-11.857723 +-11.853920 +-11.850118 +-11.846316 +-11.842513 +-11.838711 +-11.834908 +-11.831106 +-11.827304 +-11.823501 +-11.819699 +-11.815897 +-11.812094 +-11.808292 +-11.804489 +-11.800687 +-11.796885 +-11.793082 +-11.789280 +-11.785478 +-11.781675 +-11.777873 +-11.774070 +-11.770268 +-11.766466 +-11.762663 +-11.758861 +-11.755059 +-11.751256 +-11.747454 +-11.743651 +-11.739849 +-11.736047 +-11.732244 +-11.728442 +-11.724639 +-11.720837 +-11.717035 +-11.713232 +-11.709430 +-11.705628 +-11.701825 +-11.698023 +-11.694220 +-11.690418 +-11.686616 +-11.682813 +-11.679011 +-11.675209 +-11.671406 +-11.667604 +-11.663801 +-11.659999 +-11.656197 +-11.652394 +-11.648592 +-11.644789 +-11.640987 +-11.637185 +-11.633382 +-11.629580 +-11.625778 +-11.621975 +-11.618173 +-11.614370 +-11.610568 +-11.606766 +-11.602963 +-11.599161 +-11.595359 +-11.591556 +-11.587754 +-11.583951 +-11.580149 +-11.576347 +-11.572544 +-11.568742 +-11.564939 +-11.561137 +-11.557335 +-11.553532 +-11.549730 +-11.545928 +-11.542125 +-11.538323 +-11.534520 +-11.530718 +-11.526916 +-11.523113 +-11.519311 +-11.515509 +-11.511706 +-11.507904 +-11.504101 +-11.500299 +-11.496497 +-11.492694 +-11.488892 +-11.485090 +-11.481287 +-11.477485 +-11.473682 +-11.469880 +-11.466078 +-11.462275 +-11.458473 +-11.454670 +-11.450868 +-11.447066 +-11.443263 +-11.439461 +-11.435659 +-11.431856 +-11.428054 +-11.424251 +-11.420449 +-11.416647 +-11.412844 +-11.409042 +-11.405240 +-11.401437 +-11.397635 +-11.393832 +-11.390030 +-11.386228 +-11.382425 +-11.378623 +-11.374820 +-11.371018 +-11.367216 +-11.363413 +-11.359611 +-11.355809 +-11.352006 +-11.348204 +-11.344401 +-11.340599 +-11.336797 +-11.332994 +-11.329192 +-11.325390 +-11.321587 +-11.317785 +-11.313982 +-11.310180 +-11.306378 +-11.302575 +-11.298773 +-11.294970 +-11.291168 +-11.287366 +-11.283563 +-11.279761 +-11.275959 +-11.272156 +-11.268354 +-11.264551 +-11.260749 +-11.256947 +-11.253144 +-11.249342 +-11.245540 +-11.241737 +-11.237935 +-11.234132 +-11.230330 +-11.226528 +-11.222725 +-11.218923 +-11.215121 +-11.211318 +-11.207516 +-11.203713 +-11.199911 +-11.196109 +-11.192306 +-11.188504 +-11.184701 +-11.180899 +-11.177097 +-11.173294 +-11.169492 +-11.165690 +-11.161887 +-11.158085 +-11.154282 +-11.150480 +-11.146678 +-11.142875 +-11.139073 +-11.135271 +-11.131468 +-11.127666 +-11.123863 +-11.120061 +-11.116259 +-11.112456 +-11.108654 +-11.104851 +-11.101049 +-11.097247 +-11.093444 +-11.089642 +-11.085840 +-11.082037 +-11.078235 +-11.074432 +-11.070630 +-11.066828 +-11.063025 +-11.059223 +-11.055421 +-11.051618 +-11.047816 +-11.044013 +-11.040211 +-11.036409 +-11.032606 +-11.028804 +-11.025002 +-11.021199 +-11.017397 +-11.013594 +-11.009792 +-11.005990 +-11.002187 +-10.998385 +-10.994582 +-10.990780 +-10.986978 +-10.983175 +-10.979373 +-10.975571 +-10.971768 +-10.967966 +-10.964163 +-10.960361 +-10.956559 +-10.952756 +-10.948954 +-10.945152 +-10.941349 +-10.937547 +-10.933744 +-10.929942 +-10.926140 +-10.922337 +-10.918535 +-10.914732 +-10.910930 +-10.907128 +-10.903325 +-10.899523 +-10.895721 +-10.891918 +-10.888116 +-10.884313 +-10.880511 +-10.876709 +-10.872906 +-10.869104 +-10.865302 +-10.861499 +-10.857697 +-10.853894 +-10.850092 +-10.846290 +-10.842487 +-10.838685 +-10.834882 +-10.831080 +-10.827278 +-10.823475 +-10.819673 +-10.815871 +-10.812068 +-10.808266 +-10.804463 +-10.800661 +-10.796859 +-10.793056 +-10.789254 +-10.785452 +-10.781649 +-10.777847 +-10.774044 +-10.770242 +-10.766440 +-10.762637 +-10.758835 +-10.755033 +-10.751230 +-10.747428 +-10.743625 +-10.739823 +-10.736021 +-10.732218 +-10.728416 +-10.724613 +-10.720811 +-10.717009 +-10.713206 +-10.709404 +-10.705602 +-10.701799 +-10.697997 +-10.694194 +-10.690392 +-10.686590 +-10.682787 +-10.678985 +-10.675183 +-10.671380 +-10.667578 +-10.663775 +-10.659973 +-10.656171 +-10.652368 +-10.648566 +-10.644763 +-10.640961 +-10.637159 +-10.633356 +-10.629554 +-10.625752 +-10.621949 +-10.618147 +-10.614344 +-10.610542 +-10.606740 +-10.602937 +-10.599135 +-10.595333 +-10.591530 +-10.587728 +-10.583925 +-10.580123 +-10.576321 +-10.572518 +-10.568716 +-10.564913 +-10.561111 +-10.557309 +-10.553506 +-10.549704 +-10.545902 +-10.542099 +-10.538297 +-10.534494 +-10.530692 +-10.526890 +-10.523087 +-10.519285 +-10.515483 +-10.511680 +-10.507878 +-10.504075 +-10.500273 +-10.496471 +-10.492668 +-10.488866 +-10.485064 +-10.481261 +-10.477459 +-10.473656 +-10.469854 +-10.466052 +-10.462249 +-10.458447 +-10.454644 +-10.450842 +-10.447040 +-10.443237 +-10.439435 +-10.435633 +-10.431830 +-10.428028 +-10.424225 +-10.420423 +-10.416621 +-10.412818 +-10.409016 +-10.405214 +-10.401411 +-10.397609 +-10.393806 +-10.390004 +-10.386202 +-10.382399 +-10.378597 +-10.374794 +-10.370992 +-10.367190 +-10.363387 +-10.359585 +-10.355783 +-10.351980 +-10.348178 +-10.344375 +-10.340573 +-10.336771 +-10.332968 +-10.329166 +-10.325364 +-10.321561 +-10.317759 +-10.313956 +-10.310154 +-10.306352 +-10.302549 +-10.298747 +-10.294944 +-10.291142 +-10.287340 +-10.283537 +-10.279735 +-10.275933 +-10.272130 +-10.268328 +-10.264525 +-10.260723 +-10.256921 +-10.253118 +-10.249316 +-10.245514 +-10.241711 +-10.237909 +-10.234106 +-10.230304 +-10.226502 +-10.222699 +-10.218897 +-10.215095 +-10.211292 +-10.207490 +-10.203687 +-10.199885 +-10.196083 +-10.192280 +-10.188478 +-10.184675 +-10.180873 +-10.177071 +-10.173268 +-10.169466 +-10.165664 +-10.161861 +-10.158059 +-10.154256 +-10.150454 +-10.146652 +-10.142849 +-10.139047 +-10.135245 +-10.131442 +-10.127640 +-10.123837 +-10.120035 +-10.116233 +-10.112430 +-10.108628 +-10.104825 +-10.101023 +-10.097221 +-10.093418 +-10.089616 +-10.085814 +-10.082011 +-10.078209 +-10.074406 +-10.070604 +-10.066802 +-10.062999 +-10.059197 +-10.055395 +-10.051592 +-10.047790 +-10.043987 +-10.040185 +-10.036383 +-10.032580 +-10.028778 +-10.024975 +-10.021173 +-10.017371 +-10.013568 +-10.009766 +-10.005964 +-10.002161 +-9.998359 +-9.994556 +-9.990754 +-9.986952 +-9.983149 +-9.979347 +-9.975545 +-9.971742 +-9.967940 +-9.964137 +-9.960335 +-9.956533 +-9.952730 +-9.948928 +-9.945126 +-9.941323 +-9.937521 +-9.933718 +-9.929916 +-9.926114 +-9.922311 +-9.918509 +-9.914706 +-9.910904 +-9.907102 +-9.903299 +-9.899497 +-9.895695 +-9.891892 +-9.888090 +-9.884287 +-9.880485 +-9.876683 +-9.872880 +-9.869078 +-9.865276 +-9.861473 +-9.857671 +-9.853868 +-9.850066 +-9.846264 +-9.842461 +-9.838659 +-9.834856 +-9.831054 +-9.827252 +-9.823449 +-9.819647 +-9.815845 +-9.812042 +-9.808240 +-9.804437 +-9.800635 +-9.796833 +-9.793030 +-9.789228 +-9.785426 +-9.781623 +-9.777821 +-9.774018 +-9.770216 +-9.766414 +-9.762611 +-9.758809 +-9.755007 +-9.751204 +-9.747402 +-9.743599 +-9.739797 +-9.735995 +-9.732192 +-9.728390 +-9.724587 +-9.720785 +-9.716983 +-9.713180 +-9.709378 +-9.705576 +-9.701773 +-9.697971 +-9.694168 +-9.690366 +-9.686564 +-9.682761 +-9.678959 +-9.675157 +-9.671354 +-9.667552 +-9.663749 +-9.659947 +-9.656145 +-9.652342 +-9.648540 +-9.644737 +-9.640935 +-9.637133 +-9.633330 +-9.629528 +-9.625726 +-9.621923 +-9.618121 +-9.614318 +-9.610516 +-9.606714 +-9.602911 +-9.599109 +-9.595307 +-9.591504 +-9.587702 +-9.583899 +-9.580097 +-9.576295 +-9.572492 +-9.568690 +-9.564887 +-9.561085 +-9.557283 +-9.553480 +-9.549678 +-9.545876 +-9.542073 +-9.538271 +-9.534468 +-9.530666 +-9.526864 +-9.523061 +-9.519259 +-9.515457 +-9.511654 +-9.507852 +-9.504049 +-9.500247 +-9.496445 +-9.492642 +-9.488840 +-9.485038 +-9.481235 +-9.477433 +-9.473630 +-9.469828 +-9.466026 +-9.462223 +-9.458421 +-9.454618 +-9.450816 +-9.447014 +-9.443211 +-9.439409 +-9.435607 +-9.431804 +-9.428002 +-9.424199 +-9.420397 +-9.416595 +-9.412792 +-9.408990 +-9.405188 +-9.401385 +-9.397583 +-9.393780 +-9.389978 +-9.386176 +-9.382373 +-9.378571 +-9.374768 +-9.370966 +-9.367164 +-9.363361 +-9.359559 +-9.355757 +-9.351954 +-9.348152 +-9.344349 +-9.340547 +-9.336745 +-9.332942 +-9.329140 +-9.325338 +-9.321535 +-9.317733 +-9.313930 +-9.310128 +-9.306326 +-9.302523 +-9.298721 +-9.294918 +-9.291116 +-9.287314 +-9.283511 +-9.279709 +-9.275907 +-9.272104 +-9.268302 +-9.264499 +-9.260697 +-9.256895 +-9.253092 +-9.249290 +-9.245488 +-9.241685 +-9.237883 +-9.234080 +-9.230278 +-9.226476 +-9.222673 +-9.218871 +-9.215069 +-9.211266 +-9.207464 +-9.203661 +-9.199859 +-9.196057 +-9.192254 +-9.188452 +-9.184649 +-9.180847 +-9.177045 +-9.173242 +-9.169440 +-9.165638 +-9.161835 +-9.158033 +-9.154230 +-9.150428 +-9.146626 +-9.142823 +-9.139021 +-9.135219 +-9.131416 +-9.127614 +-9.123811 +-9.120009 +-9.116207 +-9.112404 +-9.108602 +-9.104799 +-9.100997 +-9.097195 +-9.093392 +-9.089590 +-9.085788 +-9.081985 +-9.078183 +-9.074380 +-9.070578 +-9.066776 +-9.062973 +-9.059171 +-9.055369 +-9.051566 +-9.047764 +-9.043961 +-9.040159 +-9.036357 +-9.032554 +-9.028752 +-9.024949 +-9.021147 +-9.017345 +-9.013542 +-9.009740 +-9.005938 +-9.002135 +-8.998333 +-8.994530 +-8.990728 +-8.986926 +-8.983123 +-8.979321 +-8.975519 +-8.971716 +-8.967914 +-8.964111 +-8.960309 +-8.956507 +-8.952704 +-8.948902 +-8.945100 +-8.941297 +-8.937495 +-8.933692 +-8.929890 +-8.926088 +-8.922285 +-8.918483 +-8.914680 +-8.910878 +-8.907076 +-8.903273 +-8.899471 +-8.895669 +-8.891866 +-8.888064 +-8.884261 +-8.880459 +-8.876657 +-8.872854 +-8.869052 +-8.865250 +-8.861447 +-8.857645 +-8.853842 +-8.850040 +-8.846238 +-8.842435 +-8.838633 +-8.834830 +-8.831028 +-8.827226 +-8.823423 +-8.819621 +-8.815819 +-8.812016 +-8.808214 +-8.804411 +-8.800609 +-8.796807 +-8.793004 +-8.789202 +-8.785400 +-8.781597 +-8.777795 +-8.773992 +-8.770190 +-8.766388 +-8.762585 +-8.758783 +-8.754980 +-8.751178 +-8.747376 +-8.743573 +-8.739771 +-8.735969 +-8.732166 +-8.728364 +-8.724561 +-8.720759 +-8.716957 +-8.713154 +-8.709352 +-8.705550 +-8.701747 +-8.697945 +-8.694142 +-8.690340 +-8.686538 +-8.682735 +-8.678933 +-8.675131 +-8.671328 +-8.667526 +-8.663723 +-8.659921 +-8.656119 +-8.652316 +-8.648514 +-8.644711 +-8.640909 +-8.637107 +-8.633304 +-8.629502 +-8.625700 +-8.621897 +-8.618095 +-8.614292 +-8.610490 +-8.606688 +-8.602885 +-8.599083 +-8.595281 +-8.591478 +-8.587676 +-8.583873 +-8.580071 +-8.576269 +-8.572466 +-8.568664 +-8.564861 +-8.561059 +-8.557257 +-8.553454 +-8.549652 +-8.545850 +-8.542047 +-8.538245 +-8.534442 +-8.530640 +-8.526838 +-8.523035 +-8.519233 +-8.515431 +-8.511628 +-8.507826 +-8.504023 +-8.500221 +-8.496419 +-8.492616 +-8.488814 +-8.485012 +-8.481209 +-8.477407 +-8.473604 +-8.469802 +-8.466000 +-8.462197 +-8.458395 +-8.454592 +-8.450790 +-8.446988 +-8.443185 +-8.439383 +-8.435581 +-8.431778 +-8.427976 +-8.424173 +-8.420371 +-8.416569 +-8.412766 +-8.408964 +-8.405162 +-8.401359 +-8.397557 +-8.393754 +-8.389952 +-8.386150 +-8.382347 +-8.378545 +-8.374742 +-8.370940 +-8.367138 +-8.363335 +-8.359533 +-8.355731 +-8.351928 +-8.348126 +-8.344323 +-8.340521 +-8.336719 +-8.332916 +-8.329114 +-8.325312 +-8.321509 +-8.317707 +-8.313904 +-8.310102 +-8.306300 +-8.302497 +-8.298695 +-8.294892 +-8.291090 +-8.287288 +-8.283485 +-8.279683 +-8.275881 +-8.272078 +-8.268276 +-8.264473 +-8.260671 +-8.256869 +-8.253066 +-8.249264 +-8.245462 +-8.241659 +-8.237857 +-8.234054 +-8.230252 +-8.226450 +-8.222647 +-8.218845 +-8.215043 +-8.211240 +-8.207438 +-8.203635 +-8.199833 +-8.196031 +-8.192228 +-8.188426 +-8.184623 +-8.180821 +-8.177019 +-8.173216 +-8.169414 +-8.165612 +-8.161809 +-8.158007 +-8.154204 +-8.150402 +-8.146600 +-8.142797 +-8.138995 +-8.135193 +-8.131390 +-8.127588 +-8.123785 +-8.119983 +-8.116181 +-8.112378 +-8.108576 +-8.104773 +-8.100971 +-8.097169 +-8.093366 +-8.089564 +-8.085762 +-8.081959 +-8.078157 +-8.074354 +-8.070552 +-8.066750 +-8.062947 +-8.059145 +-8.055343 +-8.051540 +-8.047738 +-8.043935 +-8.040133 +-8.036331 +-8.032528 +-8.028726 +-8.024923 +-8.021121 +-8.017319 +-8.013516 +-8.009714 +-8.005912 +-8.002109 +-7.998307 +-7.994504 +-7.990702 +-7.986900 +-7.983097 +-7.979295 +-7.975493 +-7.971690 +-7.967888 +-7.964085 +-7.960283 +-7.956481 +-7.952678 +-7.948876 +-7.945074 +-7.941271 +-7.937469 +-7.933666 +-7.929864 +-7.926062 +-7.922259 +-7.918457 +-7.914654 +-7.910852 +-7.907050 +-7.903247 +-7.899445 +-7.895643 +-7.891840 +-7.888038 +-7.884235 +-7.880433 +-7.876631 +-7.872828 +-7.869026 +-7.865224 +-7.861421 +-7.857619 +-7.853816 +-7.850014 +-7.846212 +-7.842409 +-7.838607 +-7.834804 +-7.831002 +-7.827200 +-7.823397 +-7.819595 +-7.815793 +-7.811990 +-7.808188 +-7.804385 +-7.800583 +-7.796781 +-7.792978 +-7.789176 +-7.785374 +-7.781571 +-7.777769 +-7.773966 +-7.770164 +-7.766362 +-7.762559 +-7.758757 +-7.754954 +-7.751152 +-7.747350 +-7.743547 +-7.739745 +-7.735943 +-7.732140 +-7.728338 +-7.724535 +-7.720733 +-7.716931 +-7.713128 +-7.709326 +-7.705524 +-7.701721 +-7.697919 +-7.694116 +-7.690314 +-7.686512 +-7.682709 +-7.678907 +-7.675105 +-7.671302 +-7.667500 +-7.663697 +-7.659895 +-7.656093 +-7.652290 +-7.648488 +-7.644685 +-7.640883 +-7.637081 +-7.633278 +-7.629476 +-7.625674 +-7.621871 +-7.618069 +-7.614266 +-7.610464 +-7.606662 +-7.602859 +-7.599057 +-7.595255 +-7.591452 +-7.587650 +-7.583847 +-7.580045 +-7.576243 +-7.572440 +-7.568638 +-7.564835 +-7.561033 +-7.557231 +-7.553428 +-7.549626 +-7.545824 +-7.542021 +-7.538219 +-7.534416 +-7.530614 +-7.526812 +-7.523009 +-7.519207 +-7.515405 +-7.511602 +-7.507800 +-7.503997 +-7.500195 +-7.496393 +-7.492590 +-7.488788 +-7.484985 +-7.481183 +-7.477381 +-7.473578 +-7.469776 +-7.465974 +-7.462171 +-7.458369 +-7.454566 +-7.450764 +-7.446962 +-7.443159 +-7.439357 +-7.435555 +-7.431752 +-7.427950 +-7.424147 +-7.420345 +-7.416543 +-7.412740 +-7.408938 +-7.405136 +-7.401333 +-7.397531 +-7.393728 +-7.389926 +-7.386124 +-7.382321 +-7.378519 +-7.374716 +-7.370914 +-7.367112 +-7.363309 +-7.359507 +-7.355705 +-7.351902 +-7.348100 +-7.344297 +-7.340495 +-7.336693 +-7.332890 +-7.329088 +-7.325286 +-7.321483 +-7.317681 +-7.313878 +-7.310076 +-7.306274 +-7.302471 +-7.298669 +-7.294866 +-7.291064 +-7.287262 +-7.283459 +-7.279657 +-7.275855 +-7.272052 +-7.268250 +-7.264447 +-7.260645 +-7.256843 +-7.253040 +-7.249238 +-7.245436 +-7.241633 +-7.237831 +-7.234028 +-7.230226 +-7.226424 +-7.222621 +-7.218819 +-7.215017 +-7.211214 +-7.207412 +-7.203609 +-7.199807 +-7.196005 +-7.192202 +-7.188400 +-7.184597 +-7.180795 +-7.176993 +-7.173190 +-7.169388 +-7.165586 +-7.161783 +-7.157981 +-7.154178 +-7.150376 +-7.146574 +-7.142771 +-7.138969 +-7.135167 +-7.131364 +-7.127562 +-7.123759 +-7.119957 +-7.116155 +-7.112352 +-7.108550 +-7.104747 +-7.100945 +-7.097143 +-7.093340 +-7.089538 +-7.085736 +-7.081933 +-7.078131 +-7.074328 +-7.070526 +-7.066724 +-7.062921 +-7.059119 +-7.055317 +-7.051514 +-7.047712 +-7.043909 +-7.040107 +-7.036305 +-7.032502 +-7.028700 +-7.024897 +-7.021095 +-7.017293 +-7.013490 +-7.009688 +-7.005886 +-7.002083 +-6.998281 +-6.994478 +-6.990676 +-6.986874 +-6.983071 +-6.979269 +-6.975467 +-6.971664 +-6.967862 +-6.964059 +-6.960257 +-6.956455 +-6.952652 +-6.948850 +-6.945048 +-6.941245 +-6.937443 +-6.933640 +-6.929838 +-6.926036 +-6.922233 +-6.918431 +-6.914628 +-6.910826 +-6.907024 +-6.903221 +-6.899419 +-6.895617 +-6.891814 +-6.888012 +-6.884209 +-6.880407 +-6.876605 +-6.872802 +-6.869000 +-6.865198 +-6.861395 +-6.857593 +-6.853790 +-6.849988 +-6.846186 +-6.842383 +-6.838581 +-6.834778 +-6.830976 +-6.827174 +-6.823371 +-6.819569 +-6.815767 +-6.811964 +-6.808162 +-6.804359 +-6.800557 +-6.796755 +-6.792952 +-6.789150 +-6.785348 +-6.781545 +-6.777743 +-6.773940 +-6.770138 +-6.766336 +-6.762533 +-6.758731 +-6.754928 +-6.751126 +-6.747324 +-6.743521 +-6.739719 +-6.735917 +-6.732114 +-6.728312 +-6.724509 +-6.720707 +-6.716905 +-6.713102 +-6.709300 +-6.705498 +-6.701695 +-6.697893 +-6.694090 +-6.690288 +-6.686486 +-6.682683 +-6.678881 +-6.675079 +-6.671276 +-6.667474 +-6.663671 +-6.659869 +-6.656067 +-6.652264 +-6.648462 +-6.644659 +-6.640857 +-6.637055 +-6.633252 +-6.629450 +-6.625648 +-6.621845 +-6.618043 +-6.614240 +-6.610438 +-6.606636 +-6.602833 +-6.599031 +-6.595229 +-6.591426 +-6.587624 +-6.583821 +-6.580019 +-6.576217 +-6.572414 +-6.568612 +-6.564809 +-6.561007 +-6.557205 +-6.553402 +-6.549600 +-6.545798 +-6.541995 +-6.538193 +-6.534390 +-6.530588 +-6.526786 +-6.522983 +-6.519181 +-6.515379 +-6.511576 +-6.507774 +-6.503971 +-6.500169 +-6.496367 +-6.492564 +-6.488762 +-6.484959 +-6.481157 +-6.477355 +-6.473552 +-6.469750 +-6.465948 +-6.462145 +-6.458343 +-6.454540 +-6.450738 +-6.446936 +-6.443133 +-6.439331 +-6.435529 +-6.431726 +-6.427924 +-6.424121 +-6.420319 +-6.416517 +-6.412714 +-6.408912 +-6.405110 +-6.401307 +-6.397505 +-6.393702 +-6.389900 +-6.386098 +-6.382295 +-6.378493 +-6.374690 +-6.370888 +-6.367086 +-6.363283 +-6.359481 +-6.355679 +-6.351876 +-6.348074 +-6.344271 +-6.340469 +-6.336667 +-6.332864 +-6.329062 +-6.325260 +-6.321457 +-6.317655 +-6.313852 +-6.310050 +-6.306248 +-6.302445 +-6.298643 +-6.294840 +-6.291038 +-6.287236 +-6.283433 +-6.279631 +-6.275829 +-6.272026 +-6.268224 +-6.264421 +-6.260619 +-6.256817 +-6.253014 +-6.249212 +-6.245410 +-6.241607 +-6.237805 +-6.234002 +-6.230200 +-6.226398 +-6.222595 +-6.218793 +-6.214990 +-6.211188 +-6.207386 +-6.203583 +-6.199781 +-6.195979 +-6.192176 +-6.188374 +-6.184571 +-6.180769 +-6.176967 +-6.173164 +-6.169362 +-6.165560 +-6.161757 +-6.157955 +-6.154152 +-6.150350 +-6.146548 +-6.142745 +-6.138943 +-6.135141 +-6.131338 +-6.127536 +-6.123733 +-6.119931 +-6.116129 +-6.112326 +-6.108524 +-6.104721 +-6.100919 +-6.097117 +-6.093314 +-6.089512 +-6.085710 +-6.081907 +-6.078105 +-6.074302 +-6.070500 +-6.066698 +-6.062895 +-6.059093 +-6.055291 +-6.051488 +-6.047686 +-6.043883 +-6.040081 +-6.036279 +-6.032476 +-6.028674 +-6.024871 +-6.021069 +-6.017267 +-6.013464 +-6.009662 +-6.005860 +-6.002057 +-5.998255 +-5.994452 +-5.990650 +-5.986848 +-5.983045 +-5.979243 +-5.975441 +-5.971638 +-5.967836 +-5.964033 +-5.960231 +-5.956429 +-5.952626 +-5.948824 +-5.945022 +-5.941219 +-5.937417 +-5.933614 +-5.929812 +-5.926010 +-5.922207 +-5.918405 +-5.914602 +-5.910800 +-5.906998 +-5.903195 +-5.899393 +-5.895591 +-5.891788 +-5.887986 +-5.884183 +-5.880381 +-5.876579 +-5.872776 +-5.868974 +-5.865172 +-5.861369 +-5.857567 +-5.853764 +-5.849962 +-5.846160 +-5.842357 +-5.838555 +-5.834752 +-5.830950 +-5.827148 +-5.823345 +-5.819543 +-5.815741 +-5.811938 +-5.808136 +-5.804333 +-5.800531 +-5.796729 +-5.792926 +-5.789124 +-5.785322 +-5.781519 +-5.777717 +-5.773914 +-5.770112 +-5.766310 +-5.762507 +-5.758705 +-5.754902 +-5.751100 +-5.747298 +-5.743495 +-5.739693 +-5.735891 +-5.732088 +-5.728286 +-5.724483 +-5.720681 +-5.716879 +-5.713076 +-5.709274 +-5.705472 +-5.701669 +-5.697867 +-5.694064 +-5.690262 +-5.686460 +-5.682657 +-5.678855 +-5.675053 +-5.671250 +-5.667448 +-5.663645 +-5.659843 +-5.656041 +-5.652238 +-5.648436 +-5.644633 +-5.640831 +-5.637029 +-5.633226 +-5.629424 +-5.625622 +-5.621819 +-5.618017 +-5.614214 +-5.610412 +-5.606610 +-5.602807 +-5.599005 +-5.595203 +-5.591400 +-5.587598 +-5.583795 +-5.579993 +-5.576191 +-5.572388 +-5.568586 +-5.564783 +-5.560981 +-5.557179 +-5.553376 +-5.549574 +-5.545772 +-5.541969 +-5.538167 +-5.534364 +-5.530562 +-5.526760 +-5.522957 +-5.519155 +-5.515353 +-5.511550 +-5.507748 +-5.503945 +-5.500143 +-5.496341 +-5.492538 +-5.488736 +-5.484933 +-5.481131 +-5.477329 +-5.473526 +-5.469724 +-5.465922 +-5.462119 +-5.458317 +-5.454514 +-5.450712 +-5.446910 +-5.443107 +-5.439305 +-5.435503 +-5.431700 +-5.427898 +-5.424095 +-5.420293 +-5.416491 +-5.412688 +-5.408886 +-5.405084 +-5.401281 +-5.397479 +-5.393676 +-5.389874 +-5.386072 +-5.382269 +-5.378467 +-5.374664 +-5.370862 +-5.367060 +-5.363257 +-5.359455 +-5.355653 +-5.351850 +-5.348048 +-5.344245 +-5.340443 +-5.336641 +-5.332838 +-5.329036 +-5.325234 +-5.321431 +-5.317629 +-5.313826 +-5.310024 +-5.306222 +-5.302419 +-5.298617 +-5.294814 +-5.291012 +-5.287210 +-5.283407 +-5.279605 +-5.275803 +-5.272000 +-5.268198 +-5.264395 +-5.260593 +-5.256791 +-5.252988 +-5.249186 +-5.245384 +-5.241581 +-5.237779 +-5.233976 +-5.230174 +-5.226372 +-5.222569 +-5.218767 +-5.214964 +-5.211162 +-5.207360 +-5.203557 +-5.199755 +-5.195953 +-5.192150 +-5.188348 +-5.184545 +-5.180743 +-5.176941 +-5.173138 +-5.169336 +-5.165534 +-5.161731 +-5.157929 +-5.154126 +-5.150324 +-5.146522 +-5.142719 +-5.138917 +-5.135115 +-5.131312 +-5.127510 +-5.123707 +-5.119905 +-5.116103 +-5.112300 +-5.108498 +-5.104695 +-5.100893 +-5.097091 +-5.093288 +-5.089486 +-5.085684 +-5.081881 +-5.078079 +-5.074276 +-5.070474 +-5.066672 +-5.062869 +-5.059067 +-5.055265 +-5.051462 +-5.047660 +-5.043857 +-5.040055 +-5.036253 +-5.032450 +-5.028648 +-5.024845 +-5.021043 +-5.017241 +-5.013438 +-5.009636 +-5.005834 +-5.002031 +-4.998229 +-4.994426 +-4.990624 +-4.986822 +-4.983019 +-4.979217 +-4.975415 +-4.971612 +-4.967810 +-4.964007 +-4.960205 +-4.956403 +-4.952600 +-4.948798 +-4.944995 +-4.941193 +-4.937391 +-4.933588 +-4.929786 +-4.925984 +-4.922181 +-4.918379 +-4.914576 +-4.910774 +-4.906972 +-4.903169 +-4.899367 +-4.895565 +-4.891762 +-4.887960 +-4.884157 +-4.880355 +-4.876553 +-4.872750 +-4.868948 +-4.865146 +-4.861343 +-4.857541 +-4.853738 +-4.849936 +-4.846134 +-4.842331 +-4.838529 +-4.834726 +-4.830924 +-4.827122 +-4.823319 +-4.819517 +-4.815715 +-4.811912 +-4.808110 +-4.804307 +-4.800505 +-4.796703 +-4.792900 +-4.789098 +-4.785296 +-4.781493 +-4.777691 +-4.773888 +-4.770086 +-4.766284 +-4.762481 +-4.758679 +-4.754876 +-4.751074 +-4.747272 +-4.743469 +-4.739667 +-4.735865 +-4.732062 +-4.728260 +-4.724457 +-4.720655 +-4.716853 +-4.713050 +-4.709248 +-4.705446 +-4.701643 +-4.697841 +-4.694038 +-4.690236 +-4.686434 +-4.682631 +-4.678829 +-4.675027 +-4.671224 +-4.667422 +-4.663619 +-4.659817 +-4.656015 +-4.652212 +-4.648410 +-4.644607 +-4.640805 +-4.637003 +-4.633200 +-4.629398 +-4.625596 +-4.621793 +-4.617991 +-4.614188 +-4.610386 +-4.606584 +-4.602781 +-4.598979 +-4.595177 +-4.591374 +-4.587572 +-4.583769 +-4.579967 +-4.576165 +-4.572362 +-4.568560 +-4.564757 +-4.560955 +-4.557153 +-4.553350 +-4.549548 +-4.545746 +-4.541943 +-4.538141 +-4.534338 +-4.530536 +-4.526734 +-4.522931 +-4.519129 +-4.515327 +-4.511524 +-4.507722 +-4.503919 +-4.500117 +-4.496315 +-4.492512 +-4.488710 +-4.484907 +-4.481105 +-4.477303 +-4.473500 +-4.469698 +-4.465896 +-4.462093 +-4.458291 +-4.454488 +-4.450686 +-4.446884 +-4.443081 +-4.439279 +-4.435477 +-4.431674 +-4.427872 +-4.424069 +-4.420267 +-4.416465 +-4.412662 +-4.408860 +-4.405058 +-4.401255 +-4.397453 +-4.393650 +-4.389848 +-4.386046 +-4.382243 +-4.378441 +-4.374638 +-4.370836 +-4.367034 +-4.363231 +-4.359429 +-4.355627 +-4.351824 +-4.348022 +-4.344219 +-4.340417 +-4.336615 +-4.332812 +-4.329010 +-4.325208 +-4.321405 +-4.317603 +-4.313800 +-4.309998 +-4.306196 +-4.302393 +-4.298591 +-4.294788 +-4.290986 +-4.287184 +-4.283381 +-4.279579 +-4.275777 +-4.271974 +-4.268172 +-4.264369 +-4.260567 +-4.256765 +-4.252962 +-4.249160 +-4.245358 +-4.241555 +-4.237753 +-4.233950 +-4.230148 +-4.226346 +-4.222543 +-4.218741 +-4.214938 +-4.211136 +-4.207334 +-4.203531 +-4.199729 +-4.195927 +-4.192124 +-4.188322 +-4.184519 +-4.180717 +-4.176915 +-4.173112 +-4.169310 +-4.165508 +-4.161705 +-4.157903 +-4.154100 +-4.150298 +-4.146496 +-4.142693 +-4.138891 +-4.135089 +-4.131286 +-4.127484 +-4.123681 +-4.119879 +-4.116077 +-4.112274 +-4.108472 +-4.104669 +-4.100867 +-4.097065 +-4.093262 +-4.089460 +-4.085658 +-4.081855 +-4.078053 +-4.074250 +-4.070448 +-4.066646 +-4.062843 +-4.059041 +-4.055239 +-4.051436 +-4.047634 +-4.043831 +-4.040029 +-4.036227 +-4.032424 +-4.028622 +-4.024819 +-4.021017 +-4.017215 +-4.013412 +-4.009610 +-4.005808 +-4.002005 +-3.998203 +-3.994400 +-3.990598 +-3.986796 +-3.982993 +-3.979191 +-3.975389 +-3.971586 +-3.967784 +-3.963981 +-3.960179 +-3.956377 +-3.952574 +-3.948772 +-3.944969 +-3.941167 +-3.937365 +-3.933562 +-3.929760 +-3.925958 +-3.922155 +-3.918353 +-3.914550 +-3.910748 +-3.906946 +-3.903143 +-3.899341 +-3.895539 +-3.891736 +-3.887934 +-3.884131 +-3.880329 +-3.876527 +-3.872724 +-3.868922 +-3.865120 +-3.861317 +-3.857515 +-3.853712 +-3.849910 +-3.846108 +-3.842305 +-3.838503 +-3.834700 +-3.830898 +-3.827096 +-3.823293 +-3.819491 +-3.815689 +-3.811886 +-3.808084 +-3.804281 +-3.800479 +-3.796677 +-3.792874 +-3.789072 +-3.785270 +-3.781467 +-3.777665 +-3.773862 +-3.770060 +-3.766258 +-3.762455 +-3.758653 +-3.754850 +-3.751048 +-3.747246 +-3.743443 +-3.739641 +-3.735839 +-3.732036 +-3.728234 +-3.724431 +-3.720629 +-3.716827 +-3.713024 +-3.709222 +-3.705420 +-3.701617 +-3.697815 +-3.694012 +-3.690210 +-3.686408 +-3.682605 +-3.678803 +-3.675001 +-3.671198 +-3.667396 +-3.663593 +-3.659791 +-3.655989 +-3.652186 +-3.648384 +-3.644581 +-3.640779 +-3.636977 +-3.633174 +-3.629372 +-3.625570 +-3.621767 +-3.617965 +-3.614162 +-3.610360 +-3.606558 +-3.602755 +-3.598953 +-3.595151 +-3.591348 +-3.587546 +-3.583743 +-3.579941 +-3.576139 +-3.572336 +-3.568534 +-3.564731 +-3.560929 +-3.557127 +-3.553324 +-3.549522 +-3.545720 +-3.541917 +-3.538115 +-3.534312 +-3.530510 +-3.526708 +-3.522905 +-3.519103 +-3.515301 +-3.511498 +-3.507696 +-3.503893 +-3.500091 +-3.496289 +-3.492486 +-3.488684 +-3.484881 +-3.481079 +-3.477277 +-3.473474 +-3.469672 +-3.465870 +-3.462067 +-3.458265 +-3.454462 +-3.450660 +-3.446858 +-3.443055 +-3.439253 +-3.435451 +-3.431648 +-3.427846 +-3.424043 +-3.420241 +-3.416439 +-3.412636 +-3.408834 +-3.405032 +-3.401229 +-3.397427 +-3.393624 +-3.389822 +-3.386020 +-3.382217 +-3.378415 +-3.374612 +-3.370810 +-3.367008 +-3.363205 +-3.359403 +-3.355601 +-3.351798 +-3.347996 +-3.344193 +-3.340391 +-3.336589 +-3.332786 +-3.328984 +-3.325182 +-3.321379 +-3.317577 +-3.313774 +-3.309972 +-3.306170 +-3.302367 +-3.298565 +-3.294762 +-3.290960 +-3.287158 +-3.283355 +-3.279553 +-3.275751 +-3.271948 +-3.268146 +-3.264343 +-3.260541 +-3.256739 +-3.252936 +-3.249134 +-3.245332 +-3.241529 +-3.237727 +-3.233924 +-3.230122 +-3.226320 +-3.222517 +-3.218715 +-3.214912 +-3.211110 +-3.207308 +-3.203505 +-3.199703 +-3.195901 +-3.192098 +-3.188296 +-3.184493 +-3.180691 +-3.176889 +-3.173086 +-3.169284 +-3.165482 +-3.161679 +-3.157877 +-3.154074 +-3.150272 +-3.146470 +-3.142667 +-3.138865 +-3.135063 +-3.131260 +-3.127458 +-3.123655 +-3.119853 +-3.116051 +-3.112248 +-3.108446 +-3.104643 +-3.100841 +-3.097039 +-3.093236 +-3.089434 +-3.085632 +-3.081829 +-3.078027 +-3.074224 +-3.070422 +-3.066620 +-3.062817 +-3.059015 +-3.055213 +-3.051410 +-3.047608 +-3.043805 +-3.040003 +-3.036201 +-3.032398 +-3.028596 +-3.024793 +-3.020991 +-3.017189 +-3.013386 +-3.009584 +-3.005782 +-3.001979 +-2.998177 +-2.994374 +-2.990572 +-2.986770 +-2.982967 +-2.979165 +-2.975363 +-2.971560 +-2.967758 +-2.963955 +-2.960153 +-2.956351 +-2.952548 +-2.948746 +-2.944943 +-2.941141 +-2.937339 +-2.933536 +-2.929734 +-2.925932 +-2.922129 +-2.918327 +-2.914524 +-2.910722 +-2.906920 +-2.903117 +-2.899315 +-2.895513 +-2.891710 +-2.887908 +-2.884105 +-2.880303 +-2.876501 +-2.872698 +-2.868896 +-2.865094 +-2.861291 +-2.857489 +-2.853686 +-2.849884 +-2.846082 +-2.842279 +-2.838477 +-2.834674 +-2.830872 +-2.827070 +-2.823267 +-2.819465 +-2.815663 +-2.811860 +-2.808058 +-2.804255 +-2.800453 +-2.796651 +-2.792848 +-2.789046 +-2.785244 +-2.781441 +-2.777639 +-2.773836 +-2.770034 +-2.766232 +-2.762429 +-2.758627 +-2.754824 +-2.751022 +-2.747220 +-2.743417 +-2.739615 +-2.735813 +-2.732010 +-2.728208 +-2.724405 +-2.720603 +-2.716801 +-2.712998 +-2.709196 +-2.705394 +-2.701591 +-2.697789 +-2.693986 +-2.690184 +-2.686382 +-2.682579 +-2.678777 +-2.674974 +-2.671172 +-2.667370 +-2.663567 +-2.659765 +-2.655963 +-2.652160 +-2.648358 +-2.644555 +-2.640753 +-2.636951 +-2.633148 +-2.629346 +-2.625544 +-2.621741 +-2.617939 +-2.614136 +-2.610334 +-2.606532 +-2.602729 +-2.598927 +-2.595125 +-2.591322 +-2.587520 +-2.583717 +-2.579915 +-2.576113 +-2.572310 +-2.568508 +-2.564705 +-2.560903 +-2.557101 +-2.553298 +-2.549496 +-2.545694 +-2.541891 +-2.538089 +-2.534286 +-2.530484 +-2.526682 +-2.522879 +-2.519077 +-2.515275 +-2.511472 +-2.507670 +-2.503867 +-2.500065 +-2.496263 +-2.492460 +-2.488658 +-2.484855 +-2.481053 +-2.477251 +-2.473448 +-2.469646 +-2.465844 +-2.462041 +-2.458239 +-2.454436 +-2.450634 +-2.446832 +-2.443029 +-2.439227 +-2.435425 +-2.431622 +-2.427820 +-2.424017 +-2.420215 +-2.416413 +-2.412610 +-2.408808 +-2.405006 +-2.401203 +-2.397401 +-2.393598 +-2.389796 +-2.385994 +-2.382191 +-2.378389 +-2.374586 +-2.370784 +-2.366982 +-2.363179 +-2.359377 +-2.355575 +-2.351772 +-2.347970 +-2.344167 +-2.340365 +-2.336563 +-2.332760 +-2.328958 +-2.325156 +-2.321353 +-2.317551 +-2.313748 +-2.309946 +-2.306144 +-2.302341 +-2.298539 +-2.294736 +-2.290934 +-2.287132 +-2.283329 +-2.279527 +-2.275725 +-2.271922 +-2.268120 +-2.264317 +-2.260515 +-2.256713 +-2.252910 +-2.249108 +-2.245306 +-2.241503 +-2.237701 +-2.233898 +-2.230096 +-2.226294 +-2.222491 +-2.218689 +-2.214886 +-2.211084 +-2.207282 +-2.203479 +-2.199677 +-2.195875 +-2.192072 +-2.188270 +-2.184467 +-2.180665 +-2.176863 +-2.173060 +-2.169258 +-2.165456 +-2.161653 +-2.157851 +-2.154048 +-2.150246 +-2.146444 +-2.142641 +-2.138839 +-2.135037 +-2.131234 +-2.127432 +-2.123629 +-2.119827 +-2.116025 +-2.112222 +-2.108420 +-2.104617 +-2.100815 +-2.097013 +-2.093210 +-2.089408 +-2.085606 +-2.081803 +-2.078001 +-2.074198 +-2.070396 +-2.066594 +-2.062791 +-2.058989 +-2.055187 +-2.051384 +-2.047582 +-2.043779 +-2.039977 +-2.036175 +-2.032372 +-2.028570 +-2.024767 +-2.020965 +-2.017163 +-2.013360 +-2.009558 +-2.005756 +-2.001953 +-1.998151 +-1.994348 +-1.990546 +-1.986744 +-1.982941 +-1.979139 +-1.975337 +-1.971534 +-1.967732 +-1.963929 +-1.960127 +-1.956325 +-1.952522 +-1.948720 +-1.944917 +-1.941115 +-1.937313 +-1.933510 +-1.929708 +-1.925906 +-1.922103 +-1.918301 +-1.914498 +-1.910696 +-1.906894 +-1.903091 +-1.899289 +-1.895487 +-1.891684 +-1.887882 +-1.884079 +-1.880277 +-1.876475 +-1.872672 +-1.868870 +-1.865068 +-1.861265 +-1.857463 +-1.853660 +-1.849858 +-1.846056 +-1.842253 +-1.838451 +-1.834648 +-1.830846 +-1.827044 +-1.823241 +-1.819439 +-1.815637 +-1.811834 +-1.808032 +-1.804229 +-1.800427 +-1.796625 +-1.792822 +-1.789020 +-1.785218 +-1.781415 +-1.777613 +-1.773810 +-1.770008 +-1.766206 +-1.762403 +-1.758601 +-1.754798 +-1.750996 +-1.747194 +-1.743391 +-1.739589 +-1.735787 +-1.731984 +-1.728182 +-1.724379 +-1.720577 +-1.716775 +-1.712972 +-1.709170 +-1.705368 +-1.701565 +-1.697763 +-1.693960 +-1.690158 +-1.686356 +-1.682553 +-1.678751 +-1.674948 +-1.671146 +-1.667344 +-1.663541 +-1.659739 +-1.655937 +-1.652134 +-1.648332 +-1.644529 +-1.640727 +-1.636925 +-1.633122 +-1.629320 +-1.625518 +-1.621715 +-1.617913 +-1.614110 +-1.610308 +-1.606506 +-1.602703 +-1.598901 +-1.595099 +-1.591296 +-1.587494 +-1.583691 +-1.579889 +-1.576087 +-1.572284 +-1.568482 +-1.564679 +-1.560877 +-1.557075 +-1.553272 +-1.549470 +-1.545668 +-1.541865 +-1.538063 +-1.534260 +-1.530458 +-1.526656 +-1.522853 +-1.519051 +-1.515249 +-1.511446 +-1.507644 +-1.503841 +-1.500039 +-1.496237 +-1.492434 +-1.488632 +-1.484829 +-1.481027 +-1.477225 +-1.473422 +-1.469620 +-1.465818 +-1.462015 +-1.458213 +-1.454410 +-1.450608 +-1.446806 +-1.443003 +-1.439201 +-1.435399 +-1.431596 +-1.427794 +-1.423991 +-1.420189 +-1.416387 +-1.412584 +-1.408782 +-1.404979 +-1.401177 +-1.397375 +-1.393572 +-1.389770 +-1.385968 +-1.382165 +-1.378363 +-1.374560 +-1.370758 +-1.366956 +-1.363153 +-1.359351 +-1.355549 +-1.351746 +-1.347944 +-1.344141 +-1.340339 +-1.336537 +-1.332734 +-1.328932 +-1.325130 +-1.321327 +-1.317525 +-1.313722 +-1.309920 +-1.306118 +-1.302315 +-1.298513 +-1.294710 +-1.290908 +-1.287106 +-1.283303 +-1.279501 +-1.275699 +-1.271896 +-1.268094 +-1.264291 +-1.260489 +-1.256687 +-1.252884 +-1.249082 +-1.245280 +-1.241477 +-1.237675 +-1.233872 +-1.230070 +-1.226268 +-1.222465 +-1.218663 +-1.214860 +-1.211058 +-1.207256 +-1.203453 +-1.199651 +-1.195849 +-1.192046 +-1.188244 +-1.184441 +-1.180639 +-1.176837 +-1.173034 +-1.169232 +-1.165430 +-1.161627 +-1.157825 +-1.154022 +-1.150220 +-1.146418 +-1.142615 +-1.138813 +-1.135011 +-1.131208 +-1.127406 +-1.123603 +-1.119801 +-1.115999 +-1.112196 +-1.108394 +-1.104591 +-1.100789 +-1.096987 +-1.093184 +-1.089382 +-1.085580 +-1.081777 +-1.077975 +-1.074172 +-1.070370 +-1.066568 +-1.062765 +-1.058963 +-1.055161 +-1.051358 +-1.047556 +-1.043753 +-1.039951 +-1.036149 +-1.032346 +-1.028544 +-1.024741 +-1.020939 +-1.017137 +-1.013334 +-1.009532 +-1.005730 +-1.001927 +-0.998125 +-0.994322 +-0.990520 +-0.986718 +-0.982915 +-0.979113 +-0.975311 +-0.971508 +-0.967706 +-0.963903 +-0.960101 +-0.956299 +-0.952496 +-0.948694 +-0.944891 +-0.941089 +-0.937287 +-0.933484 +-0.929682 +-0.925880 +-0.922077 +-0.918275 +-0.914472 +-0.910670 +-0.906868 +-0.903065 +-0.899263 +-0.895461 +-0.891658 +-0.887856 +-0.884053 +-0.880251 +-0.876449 +-0.872646 +-0.868844 +-0.865042 +-0.861239 +-0.857437 +-0.853634 +-0.849832 +-0.846030 +-0.842227 +-0.838425 +-0.834622 +-0.830820 +-0.827018 +-0.823215 +-0.819413 +-0.815611 +-0.811808 +-0.808006 +-0.804203 +-0.800401 +-0.796599 +-0.792796 +-0.788994 +-0.785192 +-0.781389 +-0.777587 +-0.773784 +-0.769982 +-0.766180 +-0.762377 +-0.758575 +-0.754772 +-0.750970 +-0.747168 +-0.743365 +-0.739563 +-0.735761 +-0.731958 +-0.728156 +-0.724353 +-0.720551 +-0.716749 +-0.712946 +-0.709144 +-0.705342 +-0.701539 +-0.697737 +-0.693934 +-0.690132 +-0.686330 +-0.682527 +-0.678725 +-0.674922 +-0.671120 +-0.667318 +-0.663515 +-0.659713 +-0.655911 +-0.652108 +-0.648306 +-0.644503 +-0.640701 +-0.636899 +-0.633096 +-0.629294 +-0.625492 +-0.621689 +-0.617887 +-0.614084 +-0.610282 +-0.606480 +-0.602677 +-0.598875 +-0.595073 +-0.591270 +-0.587468 +-0.583665 +-0.579863 +-0.576061 +-0.572258 +-0.568456 +-0.564653 +-0.560851 +-0.557049 +-0.553246 +-0.549444 +-0.545642 +-0.541839 +-0.538037 +-0.534234 +-0.530432 +-0.526630 +-0.522827 +-0.519025 +-0.515223 +-0.511420 +-0.507618 +-0.503815 +-0.500013 +-0.496211 +-0.492408 +-0.488606 +-0.484803 +-0.481001 +-0.477199 +-0.473396 +-0.469594 +-0.465792 +-0.461989 +-0.458187 +-0.454384 +-0.450582 +-0.446780 +-0.442977 +-0.439175 +-0.435373 +-0.431570 +-0.427768 +-0.423965 +-0.420163 +-0.416361 +-0.412558 +-0.408756 +-0.404953 +-0.401151 +-0.397349 +-0.393546 +-0.389744 +-0.385942 +-0.382139 +-0.378337 +-0.374534 +-0.370732 +-0.366930 +-0.363127 +-0.359325 +-0.355523 +-0.351720 +-0.347918 +-0.344115 +-0.340313 +-0.336511 +-0.332708 +-0.328906 +-0.325104 +-0.321301 +-0.317499 +-0.313696 +-0.309894 +-0.306092 +-0.302289 +-0.298487 +-0.294684 +-0.290882 +-0.287080 +-0.283277 +-0.279475 +-0.275673 +-0.271870 +-0.268068 +-0.264265 +-0.260463 +-0.256661 +-0.252858 +-0.249056 +-0.245254 +-0.241451 +-0.237649 +-0.233846 +-0.230044 +-0.226242 +-0.222439 +-0.218637 +-0.214834 +-0.211032 +-0.207230 +-0.203427 +-0.199625 +-0.195823 +-0.192020 +-0.188218 +-0.184415 +-0.180613 +-0.176811 +-0.173008 +-0.169206 +-0.165404 +-0.161601 +-0.157799 +-0.153996 +-0.150194 +-0.146392 +-0.142589 +-0.138787 +-0.134984 +-0.131182 +-0.127380 +-0.123577 +-0.119775 +-0.115973 +-0.112170 +-0.108368 +-0.104565 +-0.100763 +-0.096961 +-0.093158 +-0.089356 +-0.085554 +-0.081751 +-0.077949 +-0.074146 +-0.070344 +-0.066542 +-0.062739 +-0.058937 +-0.055135 +-0.051332 +-0.047530 +-0.043727 +-0.039925 +-0.036123 +-0.032320 +-0.028518 +-0.024715 +-0.020913 +-0.017111 +-0.013308 +-0.009506 +-0.005704 +-0.001901 +0.001901 +0.005704 +0.009506 +0.013308 +0.017111 +0.020913 +0.024715 +0.028518 +0.032320 +0.036123 +0.039925 +0.043727 +0.047530 +0.051332 +0.055135 +0.058937 +0.062739 +0.066542 +0.070344 +0.074146 +0.077949 +0.081751 +0.085554 +0.089356 +0.093158 +0.096961 +0.100763 +0.104565 +0.108368 +0.112170 +0.115973 +0.119775 +0.123577 +0.127380 +0.131182 +0.134984 +0.138787 +0.142589 +0.146392 +0.150194 +0.153996 +0.157799 +0.161601 +0.165404 +0.169206 +0.173008 +0.176811 +0.180613 +0.184415 +0.188218 +0.192020 +0.195823 +0.199625 +0.203427 +0.207230 +0.211032 +0.214834 +0.218637 +0.222439 +0.226242 +0.230044 +0.233846 +0.237649 +0.241451 +0.245254 +0.249056 +0.252858 +0.256661 +0.260463 +0.264265 +0.268068 +0.271870 +0.275673 +0.279475 +0.283277 +0.287080 +0.290882 +0.294684 +0.298487 +0.302289 +0.306092 +0.309894 +0.313696 +0.317499 +0.321301 +0.325104 +0.328906 +0.332708 +0.336511 +0.340313 +0.344115 +0.347918 +0.351720 +0.355523 +0.359325 +0.363127 +0.366930 +0.370732 +0.374534 +0.378337 +0.382139 +0.385942 +0.389744 +0.393546 +0.397349 +0.401151 +0.404953 +0.408756 +0.412558 +0.416361 +0.420163 +0.423965 +0.427768 +0.431570 +0.435373 +0.439175 +0.442977 +0.446780 +0.450582 +0.454384 +0.458187 +0.461989 +0.465792 +0.469594 +0.473396 +0.477199 +0.481001 +0.484803 +0.488606 +0.492408 +0.496211 +0.500013 +0.503815 +0.507618 +0.511420 +0.515223 +0.519025 +0.522827 +0.526630 +0.530432 +0.534234 +0.538037 +0.541839 +0.545642 +0.549444 +0.553246 +0.557049 +0.560851 +0.564653 +0.568456 +0.572258 +0.576061 +0.579863 +0.583665 +0.587468 +0.591270 +0.595073 +0.598875 +0.602677 +0.606480 +0.610282 +0.614084 +0.617887 +0.621689 +0.625492 +0.629294 +0.633096 +0.636899 +0.640701 +0.644503 +0.648306 +0.652108 +0.655911 +0.659713 +0.663515 +0.667318 +0.671120 +0.674922 +0.678725 +0.682527 +0.686330 +0.690132 +0.693934 +0.697737 +0.701539 +0.705342 +0.709144 +0.712946 +0.716749 +0.720551 +0.724353 +0.728156 +0.731958 +0.735761 +0.739563 +0.743365 +0.747168 +0.750970 +0.754772 +0.758575 +0.762377 +0.766180 +0.769982 +0.773784 +0.777587 +0.781389 +0.785192 +0.788994 +0.792796 +0.796599 +0.800401 +0.804203 +0.808006 +0.811808 +0.815611 +0.819413 +0.823215 +0.827018 +0.830820 +0.834622 +0.838425 +0.842227 +0.846030 +0.849832 +0.853634 +0.857437 +0.861239 +0.865042 +0.868844 +0.872646 +0.876449 +0.880251 +0.884053 +0.887856 +0.891658 +0.895461 +0.899263 +0.903065 +0.906868 +0.910670 +0.914472 +0.918275 +0.922077 +0.925880 +0.929682 +0.933484 +0.937287 +0.941089 +0.944891 +0.948694 +0.952496 +0.956299 +0.960101 +0.963903 +0.967706 +0.971508 +0.975311 +0.979113 +0.982915 +0.986718 +0.990520 +0.994322 +0.998125 +1.001927 +1.005730 +1.009532 +1.013334 +1.017137 +1.020939 +1.024741 +1.028544 +1.032346 +1.036149 +1.039951 +1.043753 +1.047556 +1.051358 +1.055161 +1.058963 +1.062765 +1.066568 +1.070370 +1.074172 +1.077975 +1.081777 +1.085580 +1.089382 +1.093184 +1.096987 +1.100789 +1.104591 +1.108394 +1.112196 +1.115999 +1.119801 +1.123603 +1.127406 +1.131208 +1.135011 +1.138813 +1.142615 +1.146418 +1.150220 +1.154022 +1.157825 +1.161627 +1.165430 +1.169232 +1.173034 +1.176837 +1.180639 +1.184441 +1.188244 +1.192046 +1.195849 +1.199651 +1.203453 +1.207256 +1.211058 +1.214860 +1.218663 +1.222465 +1.226268 +1.230070 +1.233872 +1.237675 +1.241477 +1.245280 +1.249082 +1.252884 +1.256687 +1.260489 +1.264291 +1.268094 +1.271896 +1.275699 +1.279501 +1.283303 +1.287106 +1.290908 +1.294710 +1.298513 +1.302315 +1.306118 +1.309920 +1.313722 +1.317525 +1.321327 +1.325130 +1.328932 +1.332734 +1.336537 +1.340339 +1.344141 +1.347944 +1.351746 +1.355549 +1.359351 +1.363153 +1.366956 +1.370758 +1.374560 +1.378363 +1.382165 +1.385968 +1.389770 +1.393572 +1.397375 +1.401177 +1.404979 +1.408782 +1.412584 +1.416387 +1.420189 +1.423991 +1.427794 +1.431596 +1.435399 +1.439201 +1.443003 +1.446806 +1.450608 +1.454410 +1.458213 +1.462015 +1.465818 +1.469620 +1.473422 +1.477225 +1.481027 +1.484829 +1.488632 +1.492434 +1.496237 +1.500039 +1.503841 +1.507644 +1.511446 +1.515249 +1.519051 +1.522853 +1.526656 +1.530458 +1.534260 +1.538063 +1.541865 +1.545668 +1.549470 +1.553272 +1.557075 +1.560877 +1.564679 +1.568482 +1.572284 +1.576087 +1.579889 +1.583691 +1.587494 +1.591296 +1.595099 +1.598901 +1.602703 +1.606506 +1.610308 +1.614110 +1.617913 +1.621715 +1.625518 +1.629320 +1.633122 +1.636925 +1.640727 +1.644529 +1.648332 +1.652134 +1.655937 +1.659739 +1.663541 +1.667344 +1.671146 +1.674948 +1.678751 +1.682553 +1.686356 +1.690158 +1.693960 +1.697763 +1.701565 +1.705368 +1.709170 +1.712972 +1.716775 +1.720577 +1.724379 +1.728182 +1.731984 +1.735787 +1.739589 +1.743391 +1.747194 +1.750996 +1.754798 +1.758601 +1.762403 +1.766206 +1.770008 +1.773810 +1.777613 +1.781415 +1.785218 +1.789020 +1.792822 +1.796625 +1.800427 +1.804229 +1.808032 +1.811834 +1.815637 +1.819439 +1.823241 +1.827044 +1.830846 +1.834648 +1.838451 +1.842253 +1.846056 +1.849858 +1.853660 +1.857463 +1.861265 +1.865068 +1.868870 +1.872672 +1.876475 +1.880277 +1.884079 +1.887882 +1.891684 +1.895487 +1.899289 +1.903091 +1.906894 +1.910696 +1.914498 +1.918301 +1.922103 +1.925906 +1.929708 +1.933510 +1.937313 +1.941115 +1.944917 +1.948720 +1.952522 +1.956325 +1.960127 +1.963929 +1.967732 +1.971534 +1.975337 +1.979139 +1.982941 +1.986744 +1.990546 +1.994348 +1.998151 +2.001953 +2.005756 +2.009558 +2.013360 +2.017163 +2.020965 +2.024767 +2.028570 +2.032372 +2.036175 +2.039977 +2.043779 +2.047582 +2.051384 +2.055187 +2.058989 +2.062791 +2.066594 +2.070396 +2.074198 +2.078001 +2.081803 +2.085606 +2.089408 +2.093210 +2.097013 +2.100815 +2.104617 +2.108420 +2.112222 +2.116025 +2.119827 +2.123629 +2.127432 +2.131234 +2.135037 +2.138839 +2.142641 +2.146444 +2.150246 +2.154048 +2.157851 +2.161653 +2.165456 +2.169258 +2.173060 +2.176863 +2.180665 +2.184467 +2.188270 +2.192072 +2.195875 +2.199677 +2.203479 +2.207282 +2.211084 +2.214886 +2.218689 +2.222491 +2.226294 +2.230096 +2.233898 +2.237701 +2.241503 +2.245306 +2.249108 +2.252910 +2.256713 +2.260515 +2.264317 +2.268120 +2.271922 +2.275725 +2.279527 +2.283329 +2.287132 +2.290934 +2.294736 +2.298539 +2.302341 +2.306144 +2.309946 +2.313748 +2.317551 +2.321353 +2.325156 +2.328958 +2.332760 +2.336563 +2.340365 +2.344167 +2.347970 +2.351772 +2.355575 +2.359377 +2.363179 +2.366982 +2.370784 +2.374586 +2.378389 +2.382191 +2.385994 +2.389796 +2.393598 +2.397401 +2.401203 +2.405006 +2.408808 +2.412610 +2.416413 +2.420215 +2.424017 +2.427820 +2.431622 +2.435425 +2.439227 +2.443029 +2.446832 +2.450634 +2.454436 +2.458239 +2.462041 +2.465844 +2.469646 +2.473448 +2.477251 +2.481053 +2.484855 +2.488658 +2.492460 +2.496263 +2.500065 +2.503867 +2.507670 +2.511472 +2.515275 +2.519077 +2.522879 +2.526682 +2.530484 +2.534286 +2.538089 +2.541891 +2.545694 +2.549496 +2.553298 +2.557101 +2.560903 +2.564705 +2.568508 +2.572310 +2.576113 +2.579915 +2.583717 +2.587520 +2.591322 +2.595125 +2.598927 +2.602729 +2.606532 +2.610334 +2.614136 +2.617939 +2.621741 +2.625544 +2.629346 +2.633148 +2.636951 +2.640753 +2.644555 +2.648358 +2.652160 +2.655963 +2.659765 +2.663567 +2.667370 +2.671172 +2.674974 +2.678777 +2.682579 +2.686382 +2.690184 +2.693986 +2.697789 +2.701591 +2.705394 +2.709196 +2.712998 +2.716801 +2.720603 +2.724405 +2.728208 +2.732010 +2.735813 +2.739615 +2.743417 +2.747220 +2.751022 +2.754824 +2.758627 +2.762429 +2.766232 +2.770034 +2.773836 +2.777639 +2.781441 +2.785244 +2.789046 +2.792848 +2.796651 +2.800453 +2.804255 +2.808058 +2.811860 +2.815663 +2.819465 +2.823267 +2.827070 +2.830872 +2.834674 +2.838477 +2.842279 +2.846082 +2.849884 +2.853686 +2.857489 +2.861291 +2.865094 +2.868896 +2.872698 +2.876501 +2.880303 +2.884105 +2.887908 +2.891710 +2.895513 +2.899315 +2.903117 +2.906920 +2.910722 +2.914524 +2.918327 +2.922129 +2.925932 +2.929734 +2.933536 +2.937339 +2.941141 +2.944943 +2.948746 +2.952548 +2.956351 +2.960153 +2.963955 +2.967758 +2.971560 +2.975363 +2.979165 +2.982967 +2.986770 +2.990572 +2.994374 +2.998177 +3.001979 +3.005782 +3.009584 +3.013386 +3.017189 +3.020991 +3.024793 +3.028596 +3.032398 +3.036201 +3.040003 +3.043805 +3.047608 +3.051410 +3.055213 +3.059015 +3.062817 +3.066620 +3.070422 +3.074224 +3.078027 +3.081829 +3.085632 +3.089434 +3.093236 +3.097039 +3.100841 +3.104643 +3.108446 +3.112248 +3.116051 +3.119853 +3.123655 +3.127458 +3.131260 +3.135063 +3.138865 +3.142667 +3.146470 +3.150272 +3.154074 +3.157877 +3.161679 +3.165482 +3.169284 +3.173086 +3.176889 +3.180691 +3.184493 +3.188296 +3.192098 +3.195901 +3.199703 +3.203505 +3.207308 +3.211110 +3.214912 +3.218715 +3.222517 +3.226320 +3.230122 +3.233924 +3.237727 +3.241529 +3.245332 +3.249134 +3.252936 +3.256739 +3.260541 +3.264343 +3.268146 +3.271948 +3.275751 +3.279553 +3.283355 +3.287158 +3.290960 +3.294762 +3.298565 +3.302367 +3.306170 +3.309972 +3.313774 +3.317577 +3.321379 +3.325182 +3.328984 +3.332786 +3.336589 +3.340391 +3.344193 +3.347996 +3.351798 +3.355601 +3.359403 +3.363205 +3.367008 +3.370810 +3.374612 +3.378415 +3.382217 +3.386020 +3.389822 +3.393624 +3.397427 +3.401229 +3.405032 +3.408834 +3.412636 +3.416439 +3.420241 +3.424043 +3.427846 +3.431648 +3.435451 +3.439253 +3.443055 +3.446858 +3.450660 +3.454462 +3.458265 +3.462067 +3.465870 +3.469672 +3.473474 +3.477277 +3.481079 +3.484881 +3.488684 +3.492486 +3.496289 +3.500091 +3.503893 +3.507696 +3.511498 +3.515301 +3.519103 +3.522905 +3.526708 +3.530510 +3.534312 +3.538115 +3.541917 +3.545720 +3.549522 +3.553324 +3.557127 +3.560929 +3.564731 +3.568534 +3.572336 +3.576139 +3.579941 +3.583743 +3.587546 +3.591348 +3.595151 +3.598953 +3.602755 +3.606558 +3.610360 +3.614162 +3.617965 +3.621767 +3.625570 +3.629372 +3.633174 +3.636977 +3.640779 +3.644581 +3.648384 +3.652186 +3.655989 +3.659791 +3.663593 +3.667396 +3.671198 +3.675001 +3.678803 +3.682605 +3.686408 +3.690210 +3.694012 +3.697815 +3.701617 +3.705420 +3.709222 +3.713024 +3.716827 +3.720629 +3.724431 +3.728234 +3.732036 +3.735839 +3.739641 +3.743443 +3.747246 +3.751048 +3.754850 +3.758653 +3.762455 +3.766258 +3.770060 +3.773862 +3.777665 +3.781467 +3.785270 +3.789072 +3.792874 +3.796677 +3.800479 +3.804281 +3.808084 +3.811886 +3.815689 +3.819491 +3.823293 +3.827096 +3.830898 +3.834700 +3.838503 +3.842305 +3.846108 +3.849910 +3.853712 +3.857515 +3.861317 +3.865120 +3.868922 +3.872724 +3.876527 +3.880329 +3.884131 +3.887934 +3.891736 +3.895539 +3.899341 +3.903143 +3.906946 +3.910748 +3.914550 +3.918353 +3.922155 +3.925958 +3.929760 +3.933562 +3.937365 +3.941167 +3.944969 +3.948772 +3.952574 +3.956377 +3.960179 +3.963981 +3.967784 +3.971586 +3.975389 +3.979191 +3.982993 +3.986796 +3.990598 +3.994400 +3.998203 +4.002005 +4.005808 +4.009610 +4.013412 +4.017215 +4.021017 +4.024819 +4.028622 +4.032424 +4.036227 +4.040029 +4.043831 +4.047634 +4.051436 +4.055239 +4.059041 +4.062843 +4.066646 +4.070448 +4.074250 +4.078053 +4.081855 +4.085658 +4.089460 +4.093262 +4.097065 +4.100867 +4.104669 +4.108472 +4.112274 +4.116077 +4.119879 +4.123681 +4.127484 +4.131286 +4.135089 +4.138891 +4.142693 +4.146496 +4.150298 +4.154100 +4.157903 +4.161705 +4.165508 +4.169310 +4.173112 +4.176915 +4.180717 +4.184519 +4.188322 +4.192124 +4.195927 +4.199729 +4.203531 +4.207334 +4.211136 +4.214938 +4.218741 +4.222543 +4.226346 +4.230148 +4.233950 +4.237753 +4.241555 +4.245358 +4.249160 +4.252962 +4.256765 +4.260567 +4.264369 +4.268172 +4.271974 +4.275777 +4.279579 +4.283381 +4.287184 +4.290986 +4.294788 +4.298591 +4.302393 +4.306196 +4.309998 +4.313800 +4.317603 +4.321405 +4.325208 +4.329010 +4.332812 +4.336615 +4.340417 +4.344219 +4.348022 +4.351824 +4.355627 +4.359429 +4.363231 +4.367034 +4.370836 +4.374638 +4.378441 +4.382243 +4.386046 +4.389848 +4.393650 +4.397453 +4.401255 +4.405058 +4.408860 +4.412662 +4.416465 +4.420267 +4.424069 +4.427872 +4.431674 +4.435477 +4.439279 +4.443081 +4.446884 +4.450686 +4.454488 +4.458291 +4.462093 +4.465896 +4.469698 +4.473500 +4.477303 +4.481105 +4.484907 +4.488710 +4.492512 +4.496315 +4.500117 +4.503919 +4.507722 +4.511524 +4.515327 +4.519129 +4.522931 +4.526734 +4.530536 +4.534338 +4.538141 +4.541943 +4.545746 +4.549548 +4.553350 +4.557153 +4.560955 +4.564757 +4.568560 +4.572362 +4.576165 +4.579967 +4.583769 +4.587572 +4.591374 +4.595177 +4.598979 +4.602781 +4.606584 +4.610386 +4.614188 +4.617991 +4.621793 +4.625596 +4.629398 +4.633200 +4.637003 +4.640805 +4.644607 +4.648410 +4.652212 +4.656015 +4.659817 +4.663619 +4.667422 +4.671224 +4.675027 +4.678829 +4.682631 +4.686434 +4.690236 +4.694038 +4.697841 +4.701643 +4.705446 +4.709248 +4.713050 +4.716853 +4.720655 +4.724457 +4.728260 +4.732062 +4.735865 +4.739667 +4.743469 +4.747272 +4.751074 +4.754876 +4.758679 +4.762481 +4.766284 +4.770086 +4.773888 +4.777691 +4.781493 +4.785296 +4.789098 +4.792900 +4.796703 +4.800505 +4.804307 +4.808110 +4.811912 +4.815715 +4.819517 +4.823319 +4.827122 +4.830924 +4.834726 +4.838529 +4.842331 +4.846134 +4.849936 +4.853738 +4.857541 +4.861343 +4.865146 +4.868948 +4.872750 +4.876553 +4.880355 +4.884157 +4.887960 +4.891762 +4.895565 +4.899367 +4.903169 +4.906972 +4.910774 +4.914576 +4.918379 +4.922181 +4.925984 +4.929786 +4.933588 +4.937391 +4.941193 +4.944995 +4.948798 +4.952600 +4.956403 +4.960205 +4.964007 +4.967810 +4.971612 +4.975415 +4.979217 +4.983019 +4.986822 +4.990624 +4.994426 +4.998229 +5.002031 +5.005834 +5.009636 +5.013438 +5.017241 +5.021043 +5.024845 +5.028648 +5.032450 +5.036253 +5.040055 +5.043857 +5.047660 +5.051462 +5.055265 +5.059067 +5.062869 +5.066672 +5.070474 +5.074276 +5.078079 +5.081881 +5.085684 +5.089486 +5.093288 +5.097091 +5.100893 +5.104695 +5.108498 +5.112300 +5.116103 +5.119905 +5.123707 +5.127510 +5.131312 +5.135115 +5.138917 +5.142719 +5.146522 +5.150324 +5.154126 +5.157929 +5.161731 +5.165534 +5.169336 +5.173138 +5.176941 +5.180743 +5.184545 +5.188348 +5.192150 +5.195953 +5.199755 +5.203557 +5.207360 +5.211162 +5.214964 +5.218767 +5.222569 +5.226372 +5.230174 +5.233976 +5.237779 +5.241581 +5.245384 +5.249186 +5.252988 +5.256791 +5.260593 +5.264395 +5.268198 +5.272000 +5.275803 +5.279605 +5.283407 +5.287210 +5.291012 +5.294814 +5.298617 +5.302419 +5.306222 +5.310024 +5.313826 +5.317629 +5.321431 +5.325234 +5.329036 +5.332838 +5.336641 +5.340443 +5.344245 +5.348048 +5.351850 +5.355653 +5.359455 +5.363257 +5.367060 +5.370862 +5.374664 +5.378467 +5.382269 +5.386072 +5.389874 +5.393676 +5.397479 +5.401281 +5.405084 +5.408886 +5.412688 +5.416491 +5.420293 +5.424095 +5.427898 +5.431700 +5.435503 +5.439305 +5.443107 +5.446910 +5.450712 +5.454514 +5.458317 +5.462119 +5.465922 +5.469724 +5.473526 +5.477329 +5.481131 +5.484933 +5.488736 +5.492538 +5.496341 +5.500143 +5.503945 +5.507748 +5.511550 +5.515353 +5.519155 +5.522957 +5.526760 +5.530562 +5.534364 +5.538167 +5.541969 +5.545772 +5.549574 +5.553376 +5.557179 +5.560981 +5.564783 +5.568586 +5.572388 +5.576191 +5.579993 +5.583795 +5.587598 +5.591400 +5.595203 +5.599005 +5.602807 +5.606610 +5.610412 +5.614214 +5.618017 +5.621819 +5.625622 +5.629424 +5.633226 +5.637029 +5.640831 +5.644633 +5.648436 +5.652238 +5.656041 +5.659843 +5.663645 +5.667448 +5.671250 +5.675053 +5.678855 +5.682657 +5.686460 +5.690262 +5.694064 +5.697867 +5.701669 +5.705472 +5.709274 +5.713076 +5.716879 +5.720681 +5.724483 +5.728286 +5.732088 +5.735891 +5.739693 +5.743495 +5.747298 +5.751100 +5.754902 +5.758705 +5.762507 +5.766310 +5.770112 +5.773914 +5.777717 +5.781519 +5.785322 +5.789124 +5.792926 +5.796729 +5.800531 +5.804333 +5.808136 +5.811938 +5.815741 +5.819543 +5.823345 +5.827148 +5.830950 +5.834752 +5.838555 +5.842357 +5.846160 +5.849962 +5.853764 +5.857567 +5.861369 +5.865172 +5.868974 +5.872776 +5.876579 +5.880381 +5.884183 +5.887986 +5.891788 +5.895591 +5.899393 +5.903195 +5.906998 +5.910800 +5.914602 +5.918405 +5.922207 +5.926010 +5.929812 +5.933614 +5.937417 +5.941219 +5.945022 +5.948824 +5.952626 +5.956429 +5.960231 +5.964033 +5.967836 +5.971638 +5.975441 +5.979243 +5.983045 +5.986848 +5.990650 +5.994452 +5.998255 +6.002057 +6.005860 +6.009662 +6.013464 +6.017267 +6.021069 +6.024871 +6.028674 +6.032476 +6.036279 +6.040081 +6.043883 +6.047686 +6.051488 +6.055291 +6.059093 +6.062895 +6.066698 +6.070500 +6.074302 +6.078105 +6.081907 +6.085710 +6.089512 +6.093314 +6.097117 +6.100919 +6.104721 +6.108524 +6.112326 +6.116129 +6.119931 +6.123733 +6.127536 +6.131338 +6.135141 +6.138943 +6.142745 +6.146548 +6.150350 +6.154152 +6.157955 +6.161757 +6.165560 +6.169362 +6.173164 +6.176967 +6.180769 +6.184571 +6.188374 +6.192176 +6.195979 +6.199781 +6.203583 +6.207386 +6.211188 +6.214990 +6.218793 +6.222595 +6.226398 +6.230200 +6.234002 +6.237805 +6.241607 +6.245410 +6.249212 +6.253014 +6.256817 +6.260619 +6.264421 +6.268224 +6.272026 +6.275829 +6.279631 +6.283433 +6.287236 +6.291038 +6.294840 +6.298643 +6.302445 +6.306248 +6.310050 +6.313852 +6.317655 +6.321457 +6.325260 +6.329062 +6.332864 +6.336667 +6.340469 +6.344271 +6.348074 +6.351876 +6.355679 +6.359481 +6.363283 +6.367086 +6.370888 +6.374690 +6.378493 +6.382295 +6.386098 +6.389900 +6.393702 +6.397505 +6.401307 +6.405110 +6.408912 +6.412714 +6.416517 +6.420319 +6.424121 +6.427924 +6.431726 +6.435529 +6.439331 +6.443133 +6.446936 +6.450738 +6.454540 +6.458343 +6.462145 +6.465948 +6.469750 +6.473552 +6.477355 +6.481157 +6.484959 +6.488762 +6.492564 +6.496367 +6.500169 +6.503971 +6.507774 +6.511576 +6.515379 +6.519181 +6.522983 +6.526786 +6.530588 +6.534390 +6.538193 +6.541995 +6.545798 +6.549600 +6.553402 +6.557205 +6.561007 +6.564809 +6.568612 +6.572414 +6.576217 +6.580019 +6.583821 +6.587624 +6.591426 +6.595229 +6.599031 +6.602833 +6.606636 +6.610438 +6.614240 +6.618043 +6.621845 +6.625648 +6.629450 +6.633252 +6.637055 +6.640857 +6.644659 +6.648462 +6.652264 +6.656067 +6.659869 +6.663671 +6.667474 +6.671276 +6.675079 +6.678881 +6.682683 +6.686486 +6.690288 +6.694090 +6.697893 +6.701695 +6.705498 +6.709300 +6.713102 +6.716905 +6.720707 +6.724509 +6.728312 +6.732114 +6.735917 +6.739719 +6.743521 +6.747324 +6.751126 +6.754928 +6.758731 +6.762533 +6.766336 +6.770138 +6.773940 +6.777743 +6.781545 +6.785348 +6.789150 +6.792952 +6.796755 +6.800557 +6.804359 +6.808162 +6.811964 +6.815767 +6.819569 +6.823371 +6.827174 +6.830976 +6.834778 +6.838581 +6.842383 +6.846186 +6.849988 +6.853790 +6.857593 +6.861395 +6.865198 +6.869000 +6.872802 +6.876605 +6.880407 +6.884209 +6.888012 +6.891814 +6.895617 +6.899419 +6.903221 +6.907024 +6.910826 +6.914628 +6.918431 +6.922233 +6.926036 +6.929838 +6.933640 +6.937443 +6.941245 +6.945048 +6.948850 +6.952652 +6.956455 +6.960257 +6.964059 +6.967862 +6.971664 +6.975467 +6.979269 +6.983071 +6.986874 +6.990676 +6.994478 +6.998281 +7.002083 +7.005886 +7.009688 +7.013490 +7.017293 +7.021095 +7.024897 +7.028700 +7.032502 +7.036305 +7.040107 +7.043909 +7.047712 +7.051514 +7.055317 +7.059119 +7.062921 +7.066724 +7.070526 +7.074328 +7.078131 +7.081933 +7.085736 +7.089538 +7.093340 +7.097143 +7.100945 +7.104747 +7.108550 +7.112352 +7.116155 +7.119957 +7.123759 +7.127562 +7.131364 +7.135167 +7.138969 +7.142771 +7.146574 +7.150376 +7.154178 +7.157981 +7.161783 +7.165586 +7.169388 +7.173190 +7.176993 +7.180795 +7.184597 +7.188400 +7.192202 +7.196005 +7.199807 +7.203609 +7.207412 +7.211214 +7.215017 +7.218819 +7.222621 +7.226424 +7.230226 +7.234028 +7.237831 +7.241633 +7.245436 +7.249238 +7.253040 +7.256843 +7.260645 +7.264447 +7.268250 +7.272052 +7.275855 +7.279657 +7.283459 +7.287262 +7.291064 +7.294866 +7.298669 +7.302471 +7.306274 +7.310076 +7.313878 +7.317681 +7.321483 +7.325286 +7.329088 +7.332890 +7.336693 +7.340495 +7.344297 +7.348100 +7.351902 +7.355705 +7.359507 +7.363309 +7.367112 +7.370914 +7.374716 +7.378519 +7.382321 +7.386124 +7.389926 +7.393728 +7.397531 +7.401333 +7.405136 +7.408938 +7.412740 +7.416543 +7.420345 +7.424147 +7.427950 +7.431752 +7.435555 +7.439357 +7.443159 +7.446962 +7.450764 +7.454566 +7.458369 +7.462171 +7.465974 +7.469776 +7.473578 +7.477381 +7.481183 +7.484985 +7.488788 +7.492590 +7.496393 +7.500195 +7.503997 +7.507800 +7.511602 +7.515405 +7.519207 +7.523009 +7.526812 +7.530614 +7.534416 +7.538219 +7.542021 +7.545824 +7.549626 +7.553428 +7.557231 +7.561033 +7.564835 +7.568638 +7.572440 +7.576243 +7.580045 +7.583847 +7.587650 +7.591452 +7.595255 +7.599057 +7.602859 +7.606662 +7.610464 +7.614266 +7.618069 +7.621871 +7.625674 +7.629476 +7.633278 +7.637081 +7.640883 +7.644685 +7.648488 +7.652290 +7.656093 +7.659895 +7.663697 +7.667500 +7.671302 +7.675105 +7.678907 +7.682709 +7.686512 +7.690314 +7.694116 +7.697919 +7.701721 +7.705524 +7.709326 +7.713128 +7.716931 +7.720733 +7.724535 +7.728338 +7.732140 +7.735943 +7.739745 +7.743547 +7.747350 +7.751152 +7.754954 +7.758757 +7.762559 +7.766362 +7.770164 +7.773966 +7.777769 +7.781571 +7.785374 +7.789176 +7.792978 +7.796781 +7.800583 +7.804385 +7.808188 +7.811990 +7.815793 +7.819595 +7.823397 +7.827200 +7.831002 +7.834804 +7.838607 +7.842409 +7.846212 +7.850014 +7.853816 +7.857619 +7.861421 +7.865224 +7.869026 +7.872828 +7.876631 +7.880433 +7.884235 +7.888038 +7.891840 +7.895643 +7.899445 +7.903247 +7.907050 +7.910852 +7.914654 +7.918457 +7.922259 +7.926062 +7.929864 +7.933666 +7.937469 +7.941271 +7.945074 +7.948876 +7.952678 +7.956481 +7.960283 +7.964085 +7.967888 +7.971690 +7.975493 +7.979295 +7.983097 +7.986900 +7.990702 +7.994504 +7.998307 +8.002109 +8.005912 +8.009714 +8.013516 +8.017319 +8.021121 +8.024923 +8.028726 +8.032528 +8.036331 +8.040133 +8.043935 +8.047738 +8.051540 +8.055343 +8.059145 +8.062947 +8.066750 +8.070552 +8.074354 +8.078157 +8.081959 +8.085762 +8.089564 +8.093366 +8.097169 +8.100971 +8.104773 +8.108576 +8.112378 +8.116181 +8.119983 +8.123785 +8.127588 +8.131390 +8.135193 +8.138995 +8.142797 +8.146600 +8.150402 +8.154204 +8.158007 +8.161809 +8.165612 +8.169414 +8.173216 +8.177019 +8.180821 +8.184623 +8.188426 +8.192228 +8.196031 +8.199833 +8.203635 +8.207438 +8.211240 +8.215043 +8.218845 +8.222647 +8.226450 +8.230252 +8.234054 +8.237857 +8.241659 +8.245462 +8.249264 +8.253066 +8.256869 +8.260671 +8.264473 +8.268276 +8.272078 +8.275881 +8.279683 +8.283485 +8.287288 +8.291090 +8.294892 +8.298695 +8.302497 +8.306300 +8.310102 +8.313904 +8.317707 +8.321509 +8.325312 +8.329114 +8.332916 +8.336719 +8.340521 +8.344323 +8.348126 +8.351928 +8.355731 +8.359533 +8.363335 +8.367138 +8.370940 +8.374742 +8.378545 +8.382347 +8.386150 +8.389952 +8.393754 +8.397557 +8.401359 +8.405162 +8.408964 +8.412766 +8.416569 +8.420371 +8.424173 +8.427976 +8.431778 +8.435581 +8.439383 +8.443185 +8.446988 +8.450790 +8.454592 +8.458395 +8.462197 +8.466000 +8.469802 +8.473604 +8.477407 +8.481209 +8.485012 +8.488814 +8.492616 +8.496419 +8.500221 +8.504023 +8.507826 +8.511628 +8.515431 +8.519233 +8.523035 +8.526838 +8.530640 +8.534442 +8.538245 +8.542047 +8.545850 +8.549652 +8.553454 +8.557257 +8.561059 +8.564861 +8.568664 +8.572466 +8.576269 +8.580071 +8.583873 +8.587676 +8.591478 +8.595281 +8.599083 +8.602885 +8.606688 +8.610490 +8.614292 +8.618095 +8.621897 +8.625700 +8.629502 +8.633304 +8.637107 +8.640909 +8.644711 +8.648514 +8.652316 +8.656119 +8.659921 +8.663723 +8.667526 +8.671328 +8.675131 +8.678933 +8.682735 +8.686538 +8.690340 +8.694142 +8.697945 +8.701747 +8.705550 +8.709352 +8.713154 +8.716957 +8.720759 +8.724561 +8.728364 +8.732166 +8.735969 +8.739771 +8.743573 +8.747376 +8.751178 +8.754980 +8.758783 +8.762585 +8.766388 +8.770190 +8.773992 +8.777795 +8.781597 +8.785400 +8.789202 +8.793004 +8.796807 +8.800609 +8.804411 +8.808214 +8.812016 +8.815819 +8.819621 +8.823423 +8.827226 +8.831028 +8.834830 +8.838633 +8.842435 +8.846238 +8.850040 +8.853842 +8.857645 +8.861447 +8.865250 +8.869052 +8.872854 +8.876657 +8.880459 +8.884261 +8.888064 +8.891866 +8.895669 +8.899471 +8.903273 +8.907076 +8.910878 +8.914680 +8.918483 +8.922285 +8.926088 +8.929890 +8.933692 +8.937495 +8.941297 +8.945100 +8.948902 +8.952704 +8.956507 +8.960309 +8.964111 +8.967914 +8.971716 +8.975519 +8.979321 +8.983123 +8.986926 +8.990728 +8.994530 +8.998333 +9.002135 +9.005938 +9.009740 +9.013542 +9.017345 +9.021147 +9.024949 +9.028752 +9.032554 +9.036357 +9.040159 +9.043961 +9.047764 +9.051566 +9.055369 +9.059171 +9.062973 +9.066776 +9.070578 +9.074380 +9.078183 +9.081985 +9.085788 +9.089590 +9.093392 +9.097195 +9.100997 +9.104799 +9.108602 +9.112404 +9.116207 +9.120009 +9.123811 +9.127614 +9.131416 +9.135219 +9.139021 +9.142823 +9.146626 +9.150428 +9.154230 +9.158033 +9.161835 +9.165638 +9.169440 +9.173242 +9.177045 +9.180847 +9.184649 +9.188452 +9.192254 +9.196057 +9.199859 +9.203661 +9.207464 +9.211266 +9.215069 +9.218871 +9.222673 +9.226476 +9.230278 +9.234080 +9.237883 +9.241685 +9.245488 +9.249290 +9.253092 +9.256895 +9.260697 +9.264499 +9.268302 +9.272104 +9.275907 +9.279709 +9.283511 +9.287314 +9.291116 +9.294918 +9.298721 +9.302523 +9.306326 +9.310128 +9.313930 +9.317733 +9.321535 +9.325338 +9.329140 +9.332942 +9.336745 +9.340547 +9.344349 +9.348152 +9.351954 +9.355757 +9.359559 +9.363361 +9.367164 +9.370966 +9.374768 +9.378571 +9.382373 +9.386176 +9.389978 +9.393780 +9.397583 +9.401385 +9.405188 +9.408990 +9.412792 +9.416595 +9.420397 +9.424199 +9.428002 +9.431804 +9.435607 +9.439409 +9.443211 +9.447014 +9.450816 +9.454618 +9.458421 +9.462223 +9.466026 +9.469828 +9.473630 +9.477433 +9.481235 +9.485038 +9.488840 +9.492642 +9.496445 +9.500247 +9.504049 +9.507852 +9.511654 +9.515457 +9.519259 +9.523061 +9.526864 +9.530666 +9.534468 +9.538271 +9.542073 +9.545876 +9.549678 +9.553480 +9.557283 +9.561085 +9.564887 +9.568690 +9.572492 +9.576295 +9.580097 +9.583899 +9.587702 +9.591504 +9.595307 +9.599109 +9.602911 +9.606714 +9.610516 +9.614318 +9.618121 +9.621923 +9.625726 +9.629528 +9.633330 +9.637133 +9.640935 +9.644737 +9.648540 +9.652342 +9.656145 +9.659947 +9.663749 +9.667552 +9.671354 +9.675157 +9.678959 +9.682761 +9.686564 +9.690366 +9.694168 +9.697971 +9.701773 +9.705576 +9.709378 +9.713180 +9.716983 +9.720785 +9.724587 +9.728390 +9.732192 +9.735995 +9.739797 +9.743599 +9.747402 +9.751204 +9.755007 +9.758809 +9.762611 +9.766414 +9.770216 +9.774018 +9.777821 +9.781623 +9.785426 +9.789228 +9.793030 +9.796833 +9.800635 +9.804437 +9.808240 +9.812042 +9.815845 +9.819647 +9.823449 +9.827252 +9.831054 +9.834856 +9.838659 +9.842461 +9.846264 +9.850066 +9.853868 +9.857671 +9.861473 +9.865276 +9.869078 +9.872880 +9.876683 +9.880485 +9.884287 +9.888090 +9.891892 +9.895695 +9.899497 +9.903299 +9.907102 +9.910904 +9.914706 +9.918509 +9.922311 +9.926114 +9.929916 +9.933718 +9.937521 +9.941323 +9.945126 +9.948928 +9.952730 +9.956533 +9.960335 +9.964137 +9.967940 +9.971742 +9.975545 +9.979347 +9.983149 +9.986952 +9.990754 +9.994556 +9.998359 +10.002161 +10.005964 +10.009766 +10.013568 +10.017371 +10.021173 +10.024975 +10.028778 +10.032580 +10.036383 +10.040185 +10.043987 +10.047790 +10.051592 +10.055395 +10.059197 +10.062999 +10.066802 +10.070604 +10.074406 +10.078209 +10.082011 +10.085814 +10.089616 +10.093418 +10.097221 +10.101023 +10.104825 +10.108628 +10.112430 +10.116233 +10.120035 +10.123837 +10.127640 +10.131442 +10.135245 +10.139047 +10.142849 +10.146652 +10.150454 +10.154256 +10.158059 +10.161861 +10.165664 +10.169466 +10.173268 +10.177071 +10.180873 +10.184675 +10.188478 +10.192280 +10.196083 +10.199885 +10.203687 +10.207490 +10.211292 +10.215095 +10.218897 +10.222699 +10.226502 +10.230304 +10.234106 +10.237909 +10.241711 +10.245514 +10.249316 +10.253118 +10.256921 +10.260723 +10.264525 +10.268328 +10.272130 +10.275933 +10.279735 +10.283537 +10.287340 +10.291142 +10.294944 +10.298747 +10.302549 +10.306352 +10.310154 +10.313956 +10.317759 +10.321561 +10.325364 +10.329166 +10.332968 +10.336771 +10.340573 +10.344375 +10.348178 +10.351980 +10.355783 +10.359585 +10.363387 +10.367190 +10.370992 +10.374794 +10.378597 +10.382399 +10.386202 +10.390004 +10.393806 +10.397609 +10.401411 +10.405214 +10.409016 +10.412818 +10.416621 +10.420423 +10.424225 +10.428028 +10.431830 +10.435633 +10.439435 +10.443237 +10.447040 +10.450842 +10.454644 +10.458447 +10.462249 +10.466052 +10.469854 +10.473656 +10.477459 +10.481261 +10.485064 +10.488866 +10.492668 +10.496471 +10.500273 +10.504075 +10.507878 +10.511680 +10.515483 +10.519285 +10.523087 +10.526890 +10.530692 +10.534494 +10.538297 +10.542099 +10.545902 +10.549704 +10.553506 +10.557309 +10.561111 +10.564913 +10.568716 +10.572518 +10.576321 +10.580123 +10.583925 +10.587728 +10.591530 +10.595333 +10.599135 +10.602937 +10.606740 +10.610542 +10.614344 +10.618147 +10.621949 +10.625752 +10.629554 +10.633356 +10.637159 +10.640961 +10.644763 +10.648566 +10.652368 +10.656171 +10.659973 +10.663775 +10.667578 +10.671380 +10.675183 +10.678985 +10.682787 +10.686590 +10.690392 +10.694194 +10.697997 +10.701799 +10.705602 +10.709404 +10.713206 +10.717009 +10.720811 +10.724613 +10.728416 +10.732218 +10.736021 +10.739823 +10.743625 +10.747428 +10.751230 +10.755033 +10.758835 +10.762637 +10.766440 +10.770242 +10.774044 +10.777847 +10.781649 +10.785452 +10.789254 +10.793056 +10.796859 +10.800661 +10.804463 +10.808266 +10.812068 +10.815871 +10.819673 +10.823475 +10.827278 +10.831080 +10.834882 +10.838685 +10.842487 +10.846290 +10.850092 +10.853894 +10.857697 +10.861499 +10.865302 +10.869104 +10.872906 +10.876709 +10.880511 +10.884313 +10.888116 +10.891918 +10.895721 +10.899523 +10.903325 +10.907128 +10.910930 +10.914732 +10.918535 +10.922337 +10.926140 +10.929942 +10.933744 +10.937547 +10.941349 +10.945152 +10.948954 +10.952756 +10.956559 +10.960361 +10.964163 +10.967966 +10.971768 +10.975571 +10.979373 +10.983175 +10.986978 +10.990780 +10.994582 +10.998385 +11.002187 +11.005990 +11.009792 +11.013594 +11.017397 +11.021199 +11.025002 +11.028804 +11.032606 +11.036409 +11.040211 +11.044013 +11.047816 +11.051618 +11.055421 +11.059223 +11.063025 +11.066828 +11.070630 +11.074432 +11.078235 +11.082037 +11.085840 +11.089642 +11.093444 +11.097247 +11.101049 +11.104851 +11.108654 +11.112456 +11.116259 +11.120061 +11.123863 +11.127666 +11.131468 +11.135271 +11.139073 +11.142875 +11.146678 +11.150480 +11.154282 +11.158085 +11.161887 +11.165690 +11.169492 +11.173294 +11.177097 +11.180899 +11.184701 +11.188504 +11.192306 +11.196109 +11.199911 +11.203713 +11.207516 +11.211318 +11.215121 +11.218923 +11.222725 +11.226528 +11.230330 +11.234132 +11.237935 +11.241737 +11.245540 +11.249342 +11.253144 +11.256947 +11.260749 +11.264551 +11.268354 +11.272156 +11.275959 +11.279761 +11.283563 +11.287366 +11.291168 +11.294970 +11.298773 +11.302575 +11.306378 +11.310180 +11.313982 +11.317785 +11.321587 +11.325390 +11.329192 +11.332994 +11.336797 +11.340599 +11.344401 +11.348204 +11.352006 +11.355809 +11.359611 +11.363413 +11.367216 +11.371018 +11.374820 +11.378623 +11.382425 +11.386228 +11.390030 +11.393832 +11.397635 +11.401437 +11.405240 +11.409042 +11.412844 +11.416647 +11.420449 +11.424251 +11.428054 +11.431856 +11.435659 +11.439461 +11.443263 +11.447066 +11.450868 +11.454670 +11.458473 +11.462275 +11.466078 +11.469880 +11.473682 +11.477485 +11.481287 +11.485090 +11.488892 +11.492694 +11.496497 +11.500299 +11.504101 +11.507904 +11.511706 +11.515509 +11.519311 +11.523113 +11.526916 +11.530718 +11.534520 +11.538323 +11.542125 +11.545928 +11.549730 +11.553532 +11.557335 +11.561137 +11.564939 +11.568742 +11.572544 +11.576347 +11.580149 +11.583951 +11.587754 +11.591556 +11.595359 +11.599161 +11.602963 +11.606766 +11.610568 +11.614370 +11.618173 +11.621975 +11.625778 +11.629580 +11.633382 +11.637185 +11.640987 +11.644789 +11.648592 +11.652394 +11.656197 +11.659999 +11.663801 +11.667604 +11.671406 +11.675209 +11.679011 +11.682813 +11.686616 +11.690418 +11.694220 +11.698023 +11.701825 +11.705628 +11.709430 +11.713232 +11.717035 +11.720837 +11.724639 +11.728442 +11.732244 +11.736047 +11.739849 +11.743651 +11.747454 +11.751256 +11.755059 +11.758861 +11.762663 +11.766466 +11.770268 +11.774070 +11.777873 +11.781675 +11.785478 +11.789280 +11.793082 +11.796885 +11.800687 +11.804489 +11.808292 +11.812094 +11.815897 +11.819699 +11.823501 +11.827304 +11.831106 +11.834908 +11.838711 +11.842513 +11.846316 +11.850118 +11.853920 +11.857723 +11.861525 +11.865328 +11.869130 +11.872932 +11.876735 +11.880537 +11.884339 +11.888142 +11.891944 +11.895747 +11.899549 +11.903351 +11.907154 +11.910956 +11.914758 +11.918561 +11.922363 +11.926166 +11.929968 +11.933770 +11.937573 +11.941375 +11.945178 +11.948980 +11.952782 +11.956585 +11.960387 +11.964189 +11.967992 +11.971794 +11.975597 +11.979399 +11.983201 +11.987004 +11.990806 +11.994608 +11.998411 +12.002213 +12.006016 +12.009818 +12.013620 +12.017423 +12.021225 +12.025028 +12.028830 +12.032632 +12.036435 +12.040237 +12.044039 +12.047842 +12.051644 +12.055447 +12.059249 +12.063051 +12.066854 +12.070656 +12.074458 +12.078261 +12.082063 +12.085866 +12.089668 +12.093470 +12.097273 +12.101075 +12.104877 +12.108680 +12.112482 +12.116285 +12.120087 +12.123889 +12.127692 +12.131494 +12.135297 +12.139099 +12.142901 +12.146704 +12.150506 +12.154308 +12.158111 +12.161913 +12.165716 +12.169518 +12.173320 +12.177123 +12.180925 +12.184727 +12.188530 +12.192332 +12.196135 +12.199937 +12.203739 +12.207542 +12.211344 +12.215147 +12.218949 +12.222751 +12.226554 +12.230356 +12.234158 +12.237961 +12.241763 +12.245566 +12.249368 +12.253170 +12.256973 +12.260775 +12.264577 +12.268380 +12.272182 +12.275985 +12.279787 +12.283589 +12.287392 +12.291194 +12.294996 +12.298799 +12.302601 +12.306404 +12.310206 +12.314008 +12.317811 +12.321613 +12.325416 +12.329218 +12.333020 +12.336823 +12.340625 +12.344427 +12.348230 +12.352032 +12.355835 +12.359637 +12.363439 +12.367242 +12.371044 +12.374846 +12.378649 +12.382451 +12.386254 +12.390056 +12.393858 +12.397661 +12.401463 +12.405266 +12.409068 +12.412870 +12.416673 +12.420475 +12.424277 +12.428080 +12.431882 +12.435685 +12.439487 +12.443289 +12.447092 +12.450894 +12.454696 +12.458499 +12.462301 +12.466104 +12.469906 +12.473708 +12.477511 +12.481313 +12.485116 +12.488918 +12.492720 +12.496523 +12.500325 +12.504127 +12.507930 +12.511732 +12.515535 +12.519337 +12.523139 +12.526942 +12.530744 +12.534546 +12.538349 +12.542151 +12.545954 +12.549756 +12.553558 +12.557361 +12.561163 +12.564965 +12.568768 +12.572570 +12.576373 +12.580175 +12.583977 +12.587780 +12.591582 +12.595385 +12.599187 +12.602989 +12.606792 +12.610594 +12.614396 +12.618199 +12.622001 +12.625804 +12.629606 +12.633408 +12.637211 +12.641013 +12.644815 +12.648618 +12.652420 +12.656223 +12.660025 +12.663827 +12.667630 +12.671432 +12.675235 +12.679037 +12.682839 +12.686642 +12.690444 +12.694246 +12.698049 +12.701851 +12.705654 +12.709456 +12.713258 +12.717061 +12.720863 +12.724665 +12.728468 +12.732270 +12.736073 +12.739875 +12.743677 +12.747480 +12.751282 +12.755085 +12.758887 +12.762689 +12.766492 +12.770294 +12.774096 +12.777899 +12.781701 +12.785504 +12.789306 +12.793108 +12.796911 +12.800713 +12.804515 +12.808318 +12.812120 +12.815923 +12.819725 +12.823527 +12.827330 +12.831132 +12.834934 +12.838737 +12.842539 +12.846342 +12.850144 +12.853946 +12.857749 +12.861551 +12.865354 +12.869156 +12.872958 +12.876761 +12.880563 +12.884365 +12.888168 +12.891970 +12.895773 +12.899575 +12.903377 +12.907180 +12.910982 +12.914784 +12.918587 +12.922389 +12.926192 +12.929994 +12.933796 +12.937599 +12.941401 +12.945204 +12.949006 +12.952808 +12.956611 +12.960413 +12.964215 +12.968018 +12.971820 +12.975623 +12.979425 +12.983227 +12.987030 +12.990832 +12.994634 +12.998437 +13.002239 +13.006042 +13.009844 +13.013646 +13.017449 +13.021251 +13.025054 +13.028856 +13.032658 +13.036461 +13.040263 +13.044065 +13.047868 +13.051670 +13.055473 +13.059275 +13.063077 +13.066880 +13.070682 +13.074484 +13.078287 +13.082089 +13.085892 +13.089694 +13.093496 +13.097299 +13.101101 +13.104903 +13.108706 +13.112508 +13.116311 +13.120113 +13.123915 +13.127718 +13.131520 +13.135323 +13.139125 +13.142927 +13.146730 +13.150532 +13.154334 +13.158137 +13.161939 +13.165742 +13.169544 +13.173346 +13.177149 +13.180951 +13.184753 +13.188556 +13.192358 +13.196161 +13.199963 +13.203765 +13.207568 +13.211370 +13.215173 +13.218975 +13.222777 +13.226580 +13.230382 +13.234184 +13.237987 +13.241789 +13.245592 +13.249394 +13.253196 +13.256999 +13.260801 +13.264603 +13.268406 +13.272208 +13.276011 +13.279813 +13.283615 +13.287418 +13.291220 +13.295023 +13.298825 +13.302627 +13.306430 +13.310232 +13.314034 +13.317837 +13.321639 +13.325442 +13.329244 +13.333046 +13.336849 +13.340651 +13.344453 +13.348256 +13.352058 +13.355861 +13.359663 +13.363465 +13.367268 +13.371070 +13.374872 +13.378675 +13.382477 +13.386280 +13.390082 +13.393884 +13.397687 +13.401489 +13.405292 +13.409094 +13.412896 +13.416699 +13.420501 +13.424303 +13.428106 +13.431908 +13.435711 +13.439513 +13.443315 +13.447118 +13.450920 +13.454722 +13.458525 +13.462327 +13.466130 +13.469932 +13.473734 +13.477537 +13.481339 +13.485142 +13.488944 +13.492746 +13.496549 +13.500351 +13.504153 +13.507956 +13.511758 +13.515561 +13.519363 +13.523165 +13.526968 +13.530770 +13.534572 +13.538375 +13.542177 +13.545980 +13.549782 +13.553584 +13.557387 +13.561189 +13.564991 +13.568794 +13.572596 +13.576399 +13.580201 +13.584003 +13.587806 +13.591608 +13.595411 +13.599213 +13.603015 +13.606818 +13.610620 +13.614422 +13.618225 +13.622027 +13.625830 +13.629632 +13.633434 +13.637237 +13.641039 +13.644841 +13.648644 +13.652446 +13.656249 +13.660051 +13.663853 +13.667656 +13.671458 +13.675261 +13.679063 +13.682865 +13.686668 +13.690470 +13.694272 +13.698075 +13.701877 +13.705680 +13.709482 +13.713284 +13.717087 +13.720889 +13.724691 +13.728494 +13.732296 +13.736099 +13.739901 +13.743703 +13.747506 +13.751308 +13.755111 +13.758913 +13.762715 +13.766518 +13.770320 +13.774122 +13.777925 +13.781727 +13.785530 +13.789332 +13.793134 +13.796937 +13.800739 +13.804541 +13.808344 +13.812146 +13.815949 +13.819751 +13.823553 +13.827356 +13.831158 +13.834960 +13.838763 +13.842565 +13.846368 +13.850170 +13.853972 +13.857775 +13.861577 +13.865380 +13.869182 +13.872984 +13.876787 +13.880589 +13.884391 +13.888194 +13.891996 +13.895799 +13.899601 +13.903403 +13.907206 +13.911008 +13.914810 +13.918613 +13.922415 +13.926218 +13.930020 +13.933822 +13.937625 +13.941427 +13.945230 +13.949032 +13.952834 +13.956637 +13.960439 +13.964241 +13.968044 +13.971846 +13.975649 +13.979451 +13.983253 +13.987056 +13.990858 +13.994660 +13.998463 +14.002265 +14.006068 +14.009870 +14.013672 +14.017475 +14.021277 +14.025080 +14.028882 +14.032684 +14.036487 +14.040289 +14.044091 +14.047894 +14.051696 +14.055499 +14.059301 +14.063103 +14.066906 +14.070708 +14.074510 +14.078313 +14.082115 +14.085918 +14.089720 +14.093522 +14.097325 +14.101127 +14.104929 +14.108732 +14.112534 +14.116337 +14.120139 +14.123941 +14.127744 +14.131546 +14.135349 +14.139151 +14.142953 +14.146756 +14.150558 +14.154360 +14.158163 +14.161965 +14.165768 +14.169570 +14.173372 +14.177175 +14.180977 +14.184779 +14.188582 +14.192384 +14.196187 +14.199989 +14.203791 +14.207594 +14.211396 +14.215199 +14.219001 +14.222803 +14.226606 +14.230408 +14.234210 +14.238013 +14.241815 +14.245618 +14.249420 +14.253222 +14.257025 +14.260827 +14.264629 +14.268432 +14.272234 +14.276037 +14.279839 +14.283641 +14.287444 +14.291246 +14.295049 +14.298851 +14.302653 +14.306456 +14.310258 +14.314060 +14.317863 +14.321665 +14.325468 +14.329270 +14.333072 +14.336875 +14.340677 +14.344479 +14.348282 +14.352084 +14.355887 +14.359689 +14.363491 +14.367294 +14.371096 +14.374898 +14.378701 +14.382503 +14.386306 +14.390108 +14.393910 +14.397713 +14.401515 +14.405318 +14.409120 +14.412922 +14.416725 +14.420527 +14.424329 +14.428132 +14.431934 +14.435737 +14.439539 +14.443341 +14.447144 +14.450946 +14.454748 +14.458551 +14.462353 +14.466156 +14.469958 +14.473760 +14.477563 +14.481365 +14.485168 +14.488970 +14.492772 +14.496575 +14.500377 +14.504179 +14.507982 +14.511784 +14.515587 +14.519389 +14.523191 +14.526994 +14.530796 +14.534598 +14.538401 +14.542203 +14.546006 +14.549808 +14.553610 +14.557413 +14.561215 +14.565018 +14.568820 +14.572622 +14.576425 +14.580227 +14.584029 +14.587832 +14.591634 +14.595437 +14.599239 +14.603041 +14.606844 +14.610646 +14.614448 +14.618251 +14.622053 +14.625856 +14.629658 +14.633460 +14.637263 +14.641065 +14.644867 +14.648670 +14.652472 +14.656275 +14.660077 +14.663879 +14.667682 +14.671484 +14.675287 +14.679089 +14.682891 +14.686694 +14.690496 +14.694298 +14.698101 +14.701903 +14.705706 +14.709508 +14.713310 +14.717113 +14.720915 +14.724717 +14.728520 +14.732322 +14.736125 +14.739927 +14.743729 +14.747532 +14.751334 +14.755137 +14.758939 +14.762741 +14.766544 +14.770346 +14.774148 +14.777951 +14.781753 +14.785556 +14.789358 +14.793160 +14.796963 +14.800765 +14.804567 +14.808370 +14.812172 +14.815975 +14.819777 +14.823579 +14.827382 +14.831184 +14.834986 +14.838789 +14.842591 +14.846394 +14.850196 +14.853998 +14.857801 +14.861603 +14.865406 +14.869208 +14.873010 +14.876813 +14.880615 +14.884417 +14.888220 +14.892022 +14.895825 +14.899627 +14.903429 +14.907232 +14.911034 +14.914836 +14.918639 +14.922441 +14.926244 +14.930046 +14.933848 +14.937651 +14.941453 +14.945256 +14.949058 +14.952860 +14.956663 +14.960465 +14.964267 +14.968070 +14.971872 +14.975675 +14.979477 +14.983279 +14.987082 +14.990884 +14.994686 +14.998489 +15.002291 +15.006094 +15.009896 +15.013698 +15.017501 +15.021303 +15.025106 +15.028908 +15.032710 +15.036513 +15.040315 +15.044117 +15.047920 +15.051722 +15.055525 +15.059327 +15.063129 +15.066932 +15.070734 +15.074536 +15.078339 +15.082141 +15.085944 +15.089746 +15.093548 +15.097351 +15.101153 +15.104955 +15.108758 +15.112560 +15.116363 +15.120165 +15.123967 +15.127770 +15.131572 +15.135375 +15.139177 +15.142979 +15.146782 +15.150584 +15.154386 +15.158189 +15.161991 +15.165794 +15.169596 +15.173398 +15.177201 +15.181003 +15.184805 +15.188608 +15.192410 +15.196213 +15.200015 +15.203817 +15.207620 +15.211422 +15.215225 +15.219027 +15.222829 +15.226632 +15.230434 +15.234236 +15.238039 +15.241841 +15.245644 +15.249446 +15.253248 +15.257051 +15.260853 +15.264655 +15.268458 +15.272260 +15.276063 +15.279865 +15.283667 +15.287470 +15.291272 +15.295075 +15.298877 +15.302679 +15.306482 +15.310284 +15.314086 +15.317889 +15.321691 +15.325494 +15.329296 +15.333098 +15.336901 +15.340703 +15.344505 +15.348308 +15.352110 +15.355913 +15.359715 +15.363517 +15.367320 +15.371122 +15.374924 +15.378727 +15.382529 +15.386332 +15.390134 +15.393936 +15.397739 +15.401541 +15.405344 +15.409146 +15.412948 +15.416751 +15.420553 +15.424355 +15.428158 +15.431960 +15.435763 +15.439565 +15.443367 +15.447170 +15.450972 +15.454774 +15.458577 +15.462379 +15.466182 +15.469984 +15.473786 +15.477589 +15.481391 +15.485194 +15.488996 +15.492798 +15.496601 +15.500403 +15.504205 +15.508008 +15.511810 +15.515613 +15.519415 +15.523217 +15.527020 +15.530822 +15.534624 +15.538427 +15.542229 +15.546032 +15.549834 +15.553636 +15.557439 +15.561241 +15.565044 +15.568846 +15.572648 +15.576451 +15.580253 +15.584055 +15.587858 +15.591660 +15.595463 +15.599265 +15.603067 +15.606870 +15.610672 +15.614474 +15.618277 +15.622079 +15.625882 +15.629684 +15.633486 +15.637289 +15.641091 +15.644893 +15.648696 +15.652498 +15.656301 +15.660103 +15.663905 +15.667708 +15.671510 +15.675313 +15.679115 +15.682917 +15.686720 +15.690522 +15.694324 +15.698127 +15.701929 +15.705732 +15.709534 +15.713336 +15.717139 +15.720941 +15.724743 +15.728546 +15.732348 +15.736151 +15.739953 +15.743755 +15.747558 +15.751360 +15.755163 +15.758965 +15.762767 +15.766570 +15.770372 +15.774174 +15.777977 +15.781779 +15.785582 +15.789384 +15.793186 +15.796989 +15.800791 +15.804593 +15.808396 +15.812198 +15.816001 +15.819803 +15.823605 +15.827408 +15.831210 +15.835013 +15.838815 +15.842617 +15.846420 +15.850222 +15.854024 +15.857827 +15.861629 +15.865432 +15.869234 +15.873036 +15.876839 +15.880641 +15.884443 +15.888246 +15.892048 +15.895851 +15.899653 +15.903455 +15.907258 +15.911060 +15.914862 +15.918665 +15.922467 +15.926270 +15.930072 +15.933874 +15.937677 +15.941479 +15.945282 +15.949084 +15.952886 +15.956689 +15.960491 +15.964293 +15.968096 +15.971898 +15.975701 +15.979503 +15.983305 +15.987108 +15.990910 +15.994712 +15.998515 +16.002317 +16.006120 +16.009922 +16.013724 +16.017527 +16.021329 +16.025132 +16.028934 +16.032736 +16.036539 +16.040341 +16.044143 +16.047946 +16.051748 +16.055551 +16.059353 +16.063155 +16.066958 +16.070760 +16.074562 +16.078365 +16.082167 +16.085970 +16.089772 +16.093574 +16.097377 +16.101179 +16.104981 +16.108784 +16.112586 +16.116389 +16.120191 +16.123993 +16.127796 +16.131598 +16.135401 +16.139203 +16.143005 +16.146808 +16.150610 +16.154412 +16.158215 +16.162017 +16.165820 +16.169622 +16.173424 +16.177227 +16.181029 +16.184831 +16.188634 +16.192436 +16.196239 +16.200041 +16.203843 +16.207646 +16.211448 +16.215251 +16.219053 +16.222855 +16.226658 +16.230460 +16.234262 +16.238065 +16.241867 +16.245670 +16.249472 +16.253274 +16.257077 +16.260879 +16.264681 +16.268484 +16.272286 +16.276089 +16.279891 +16.283693 +16.287496 +16.291298 +16.295101 +16.298903 +16.302705 +16.306508 +16.310310 +16.314112 +16.317915 +16.321717 +16.325520 +16.329322 +16.333124 +16.336927 +16.340729 +16.344531 +16.348334 +16.352136 +16.355939 +16.359741 +16.363543 +16.367346 +16.371148 +16.374950 +16.378753 +16.382555 +16.386358 +16.390160 +16.393962 +16.397765 +16.401567 +16.405370 +16.409172 +16.412974 +16.416777 +16.420579 +16.424381 +16.428184 +16.431986 +16.435789 +16.439591 +16.443393 +16.447196 +16.450998 +16.454800 +16.458603 +16.462405 +16.466208 +16.470010 +16.473812 +16.477615 +16.481417 +16.485220 +16.489022 +16.492824 +16.496627 +16.500429 +16.504231 +16.508034 +16.511836 +16.515639 +16.519441 +16.523243 +16.527046 +16.530848 +16.534650 +16.538453 +16.542255 +16.546058 +16.549860 +16.553662 +16.557465 +16.561267 +16.565070 +16.568872 +16.572674 +16.576477 +16.580279 +16.584081 +16.587884 +16.591686 +16.595489 +16.599291 +16.603093 +16.606896 +16.610698 +16.614500 +16.618303 +16.622105 +16.625908 +16.629710 +16.633512 +16.637315 +16.641117 +16.644919 +16.648722 +16.652524 +16.656327 +16.660129 +16.663931 +16.667734 +16.671536 +16.675339 +16.679141 +16.682943 +16.686746 +16.690548 +16.694350 +16.698153 +16.701955 +16.705758 +16.709560 +16.713362 +16.717165 +16.720967 +16.724769 +16.728572 +16.732374 +16.736177 +16.739979 +16.743781 +16.747584 +16.751386 +16.755189 +16.758991 +16.762793 +16.766596 +16.770398 +16.774200 +16.778003 +16.781805 +16.785608 +16.789410 +16.793212 +16.797015 +16.800817 +16.804619 +16.808422 +16.812224 +16.816027 +16.819829 +16.823631 +16.827434 +16.831236 +16.835039 +16.838841 +16.842643 +16.846446 +16.850248 +16.854050 +16.857853 +16.861655 +16.865458 +16.869260 +16.873062 +16.876865 +16.880667 +16.884469 +16.888272 +16.892074 +16.895877 +16.899679 +16.903481 +16.907284 +16.911086 +16.914888 +16.918691 +16.922493 +16.926296 +16.930098 +16.933900 +16.937703 +16.941505 +16.945308 +16.949110 +16.952912 +16.956715 +16.960517 +16.964319 +16.968122 +16.971924 +16.975727 +16.979529 +16.983331 +16.987134 +16.990936 +16.994738 +16.998541 +17.002343 +17.006146 +17.009948 +17.013750 +17.017553 +17.021355 +17.025158 +17.028960 +17.032762 +17.036565 +17.040367 +17.044169 +17.047972 +17.051774 +17.055577 +17.059379 +17.063181 +17.066984 +17.070786 +17.074588 +17.078391 +17.082193 +17.085996 +17.089798 +17.093600 +17.097403 +17.101205 +17.105008 +17.108810 +17.112612 +17.116415 +17.120217 +17.124019 +17.127822 +17.131624 +17.135427 +17.139229 +17.143031 +17.146834 +17.150636 +17.154438 +17.158241 +17.162043 +17.165846 +17.169648 +17.173450 +17.177253 +17.181055 +17.184857 +17.188660 +17.192462 +17.196265 +17.200067 +17.203869 +17.207672 +17.211474 +17.215277 +17.219079 +17.222881 +17.226684 +17.230486 +17.234288 +17.238091 +17.241893 +17.245696 +17.249498 +17.253300 +17.257103 +17.260905 +17.264707 +17.268510 +17.272312 +17.276115 +17.279917 +17.283719 +17.287522 +17.291324 +17.295127 +17.298929 +17.302731 +17.306534 +17.310336 +17.314138 +17.317941 +17.321743 +17.325546 +17.329348 +17.333150 +17.336953 +17.340755 +17.344557 +17.348360 +17.352162 +17.355965 +17.359767 +17.363569 +17.367372 +17.371174 +17.374976 +17.378779 +17.382581 +17.386384 +17.390186 +17.393988 +17.397791 +17.401593 +17.405396 +17.409198 +17.413000 +17.416803 +17.420605 +17.424407 +17.428210 +17.432012 +17.435815 +17.439617 +17.443419 +17.447222 +17.451024 +17.454826 +17.458629 +17.462431 +17.466234 +17.470036 +17.473838 +17.477641 +17.481443 +17.485246 +17.489048 +17.492850 +17.496653 +17.500455 +17.504257 +17.508060 +17.511862 +17.515665 +17.519467 +17.523269 +17.527072 +17.530874 +17.534676 +17.538479 +17.542281 +17.546084 +17.549886 +17.553688 +17.557491 +17.561293 +17.565096 +17.568898 +17.572700 +17.576503 +17.580305 +17.584107 +17.587910 +17.591712 +17.595515 +17.599317 +17.603119 +17.606922 +17.610724 +17.614526 +17.618329 +17.622131 +17.625934 +17.629736 +17.633538 +17.637341 +17.641143 +17.644945 +17.648748 +17.652550 +17.656353 +17.660155 +17.663957 +17.667760 +17.671562 +17.675365 +17.679167 +17.682969 +17.686772 +17.690574 +17.694376 +17.698179 +17.701981 +17.705784 +17.709586 +17.713388 +17.717191 +17.720993 +17.724795 +17.728598 +17.732400 +17.736203 +17.740005 +17.743807 +17.747610 +17.751412 +17.755215 +17.759017 +17.762819 +17.766622 +17.770424 +17.774226 +17.778029 +17.781831 +17.785634 +17.789436 +17.793238 +17.797041 +17.800843 +17.804645 +17.808448 +17.812250 +17.816053 +17.819855 +17.823657 +17.827460 +17.831262 +17.835065 +17.838867 +17.842669 +17.846472 +17.850274 +17.854076 +17.857879 +17.861681 +17.865484 +17.869286 +17.873088 +17.876891 +17.880693 +17.884495 +17.888298 +17.892100 +17.895903 +17.899705 +17.903507 +17.907310 +17.911112 +17.914914 +17.918717 +17.922519 +17.926322 +17.930124 +17.933926 +17.937729 +17.941531 +17.945334 +17.949136 +17.952938 +17.956741 +17.960543 +17.964345 +17.968148 +17.971950 +17.975753 +17.979555 +17.983357 +17.987160 +17.990962 +17.994764 +17.998567 +18.002369 +18.006172 +18.009974 +18.013776 +18.017579 +18.021381 +18.025184 +18.028986 +18.032788 +18.036591 +18.040393 +18.044195 +18.047998 +18.051800 +18.055603 +18.059405 +18.063207 +18.067010 +18.070812 +18.074614 +18.078417 +18.082219 +18.086022 +18.089824 +18.093626 +18.097429 +18.101231 +18.105034 +18.108836 +18.112638 +18.116441 +18.120243 +18.124045 +18.127848 +18.131650 +18.135453 +18.139255 +18.143057 +18.146860 +18.150662 +18.154464 +18.158267 +18.162069 +18.165872 +18.169674 +18.173476 +18.177279 +18.181081 +18.184883 +18.188686 +18.192488 +18.196291 +18.200093 +18.203895 +18.207698 +18.211500 +18.215303 +18.219105 +18.222907 +18.226710 +18.230512 +18.234314 +18.238117 +18.241919 +18.245722 +18.249524 +18.253326 +18.257129 +18.260931 +18.264733 +18.268536 +18.272338 +18.276141 +18.279943 +18.283745 +18.287548 +18.291350 +18.295153 +18.298955 +18.302757 +18.306560 +18.310362 +18.314164 +18.317967 +18.321769 +18.325572 +18.329374 +18.333176 +18.336979 +18.340781 +18.344583 +18.348386 +18.352188 +18.355991 +18.359793 +18.363595 +18.367398 +18.371200 +18.375003 +18.378805 +18.382607 +18.386410 +18.390212 +18.394014 +18.397817 +18.401619 +18.405422 +18.409224 +18.413026 +18.416829 +18.420631 +18.424433 +18.428236 +18.432038 +18.435841 +18.439643 +18.443445 +18.447248 +18.451050 +18.454852 +18.458655 +18.462457 +18.466260 +18.470062 +18.473864 +18.477667 +18.481469 +18.485272 +18.489074 +18.492876 +18.496679 +18.500481 +18.504283 +18.508086 +18.511888 +18.515691 +18.519493 +18.523295 +18.527098 +18.530900 +18.534702 +18.538505 +18.542307 +18.546110 +18.549912 +18.553714 +18.557517 +18.561319 +18.565122 +18.568924 +18.572726 +18.576529 +18.580331 +18.584133 +18.587936 +18.591738 +18.595541 +18.599343 +18.603145 +18.606948 +18.610750 +18.614552 +18.618355 +18.622157 +18.625960 +18.629762 +18.633564 +18.637367 +18.641169 +18.644971 +18.648774 +18.652576 +18.656379 +18.660181 +18.663983 +18.667786 +18.671588 +18.675391 +18.679193 +18.682995 +18.686798 +18.690600 +18.694402 +18.698205 +18.702007 +18.705810 +18.709612 +18.713414 +18.717217 +18.721019 +18.724821 +18.728624 +18.732426 +18.736229 +18.740031 +18.743833 +18.747636 +18.751438 +18.755241 +18.759043 +18.762845 +18.766648 +18.770450 +18.774252 +18.778055 +18.781857 +18.785660 +18.789462 +18.793264 +18.797067 +18.800869 +18.804671 +18.808474 +18.812276 +18.816079 +18.819881 +18.823683 +18.827486 +18.831288 +18.835091 +18.838893 +18.842695 +18.846498 +18.850300 +18.854102 +18.857905 +18.861707 +18.865510 +18.869312 +18.873114 +18.876917 +18.880719 +18.884521 +18.888324 +18.892126 +18.895929 +18.899731 +18.903533 +18.907336 +18.911138 +18.914940 +18.918743 +18.922545 +18.926348 +18.930150 +18.933952 +18.937755 +18.941557 +18.945360 +18.949162 +18.952964 +18.956767 +18.960569 +18.964371 +18.968174 +18.971976 +18.975779 +18.979581 +18.983383 +18.987186 +18.990988 +18.994790 +18.998593 +19.002395 +19.006198 +19.010000 diff --git a/inputFiles/lagrangianContactMechanics/dataTables/y.csv b/inputFiles/lagrangianContactMechanics/dataTables/y.csv new file mode 100644 index 00000000000..1d65b3e555f --- /dev/null +++ b/inputFiles/lagrangianContactMechanics/dataTables/y.csv @@ -0,0 +1 @@ +0.00 \ No newline at end of file diff --git a/inputFiles/lagrangianContactMechanics/dataTables/z.csv b/inputFiles/lagrangianContactMechanics/dataTables/z.csv new file mode 100644 index 00000000000..1d65b3e555f --- /dev/null +++ b/inputFiles/lagrangianContactMechanics/dataTables/z.csv @@ -0,0 +1 @@ +0.00 \ No newline at end of file diff --git a/inputFiles/lagrangianContactMechanics/scripts/fixedFaultSlip.py b/inputFiles/lagrangianContactMechanics/scripts/fixedFaultSlip.py new file mode 100644 index 00000000000..64cbb7e5575 --- /dev/null +++ b/inputFiles/lagrangianContactMechanics/scripts/fixedFaultSlip.py @@ -0,0 +1,213 @@ +import numpy as np +import os +import sys +import xml.etree.ElementTree as ElementTree +import matplotlib +import matplotlib.pyplot as plt +import argparse + +class SingularCrackSlip: + + def __init__(self, mechanicalParameters, length ): + K = mechanicalParameters["bulkModulus"] + G = mechanicalParameters["shearModulus"] + poisson_ratio= (3 * K - 2 * G) / (2 * (3 * K + G)) + + mu_star = G /( 1 - poisson_ratio) + self.tau_0 = 0.0 + self.tau_r = -1.0 + + self.scaling = 2*(self.tau_0 - self.tau_r)/mu_star + self.halfLength = length + + def computeSlip(self, x): + return self.scaling * np.sqrt(self.halfLength**2 - x**2) + + def computeTraction(self, x): + if x < -self.halfLength or x > self.halfLength: + return self.tau_0 + (self.tau_0-self.tau_r) * ( np.abs(x)/np.sqrt(x**2 - self.halfLength**2) - 1 ) + else: + return self.tau_r +class GaussianSlip: + + def __init__(self, peakStrength, length ): + self.scaling = peakStrength + self.halfLength = length + + def computeSlip(self, x): + denom = 1 / (self.halfLength/2) + return self.scaling*np.exp(-0.5*((x)/denom)**2) + +def getMechanicalParametersFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + param = tree.find('Constitutive/ElasticIsotropic') + + mechanicalParameters = dict.fromkeys(["bulkModulus", "shearModulus"]) + mechanicalParameters["bulkModulus"] = float(param.get("defaultBulkModulus")) + mechanicalParameters["shearModulus"] = float(param.get("defaultShearModulus")) + return mechanicalParameters + +def getFractureLengthFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + rectangle = tree.find('Geometry/Box') + xmin = rectangle.get("xMin") + xmax = rectangle.get("xMax") + xmin = [float(i) for i in xmin[1:-1].split(",")] + xmax = [float(i) for i in xmax[1:-1].split(",")] + length = ( xmax[0] - xmin[0] ) / 2 + origin = 0.0 + + return length, origin + +def curve_check_solution(**kwargs): + #-------- Extract info from XML + xmlFilePath = f'./LagrangeContactBubbleStab_FixedSlip_base.xml' + + mechanicalParameters = getMechanicalParametersFromXML(xmlFilePath) + + # Get length of the fracture + xmlFilePath = f'./LagrangeContactBubbleStab_FixedSlip_smoke.xml' + totalHalfLength, originShift = getFractureLengthFromXML(xmlFilePath) + halfLength = 2.0 + + x = kwargs['traction elementCenter'] + x_geos = x[0, :, 0] + + return analytical_solution(x, mechanicalParameters, totalHalfLength, halfLength) + +def analytical_solution(x, mechanicalParameters, totalHalfLength, halfLength): + + singularCrackSlipSolution = SingularCrackSlip(mechanicalParameters, halfLength) + x = np.linspace(-totalHalfLength, totalHalfLength, 10000, endpoint=True) + traction_analytical = np.zeros(len(x)) + i = 0 + for xCell in x: + traction_analytical[i] = singularCrackSlipSolution.computeTraction(xCell) + i += 1 + return traction_analytical + +def plot_traction_solution(inputFileDirectory, outputDirectory): + # Read HDF5 + import hdf5_wrapper + hdf5File1Path = f'outputDirectory/traction.hdf5' + + # Read HDF5 + data = hdf5_wrapper.hdf5_wrapper(hdf5File1Path).get_copy() + traction = data['traction'] + traction = np.asarray(traction) + traction_geos = traction[0, :, 1] + x = data['traction elementCenter'] + x_geos = x[0, :, 0] + + #-------- Extract info from XML + xmlFilePath = f'{inputFileDirectory}/lagrangianContactMechanics/LagrangeContactBubbleStab_FixedSlip_base.xml' + + mechanicalParameters = getMechanicalParametersFromXML(xmlFilePath) + + # Get length of the fracture + xmlFilePath = f'{inputFileDirectory}lagrangianContactMechanics/LagrangeContactBubbleStab_FixedSlip_smoke.xml' + totalHalfLength, originShift = getFractureLengthFromXML(xmlFilePath) + halfLength = 2.0 + + traction_analytical = analytical_solution(x, mechanicalParameters, totalHalfLength, halfLength) + + fsize = 30 + msize = 15 + lw = 2 + fig, ax = plt.subplots(1, figsize=(16, 12)) + cmap = plt.get_cmap("tab10") + + # Plot analytical (continuous line) and numerical (markers) aperture solution + ax.plot(x, traction_analytical, color='r', label='Traction analytical', lw=lw) + ax.plot(x_geos, traction_geos, color='k', label='geos', marker="o", lw=lw) + + ax.set_xlabel('Fault coordinate [m]', size=fsize, weight="bold") + ax.set_ylabel('Shear traction', size=fsize, weight="bold") + ax.legend(bbox_to_anchor=(0.75, 0.9), loc='center', borderaxespad=0., fontsize=fsize) + ax.xaxis.set_tick_params(labelsize=fsize) + ax.yaxis.set_tick_params(labelsize=fsize) + plt.savefig("traction.png") + +def output_tables(x, slip, name): + # Save x to x.csv with one value per row + np.savetxt('x.csv', x, fmt='%f') + + # Save aperture_analytical to jump.csv with one value per row + np.savetxt(f'{name}.csv', slip, fmt='%f') + + +def generate_tables(inputFileDirectory): + #-------- Extract info from XML + xmlFilePath = f'{inputFileDirectory}/lagrangianContactMechanics/LagrangeContactBubbleStab_FixedSlip_base.xml' + + mechanicalParameters = getMechanicalParametersFromXML(xmlFilePath) + appliedPressure = 1.0 + + # Get length of the fracture + xmlFilePath = f'{inputFileDirectory}/lagrangianContactMechanics/LagrangeContactBubbleStab_FixedSlip_smoke.xml' + totalHalfLength, originShift = getFractureLengthFromXML(xmlFilePath) + halfLength = 2.0 + + # Initialize Sneddon's analytical solution + singularCrackSlipSolution = SingularCrackSlip(mechanicalParameters, halfLength ) + peakStrength = 3.0 + gaussianSlipSolution = GaussianSlip( peakStrength, halfLength) + + # Plot analytical (continuous line) and numerical (markers) aperture solution + x = np.linspace(-totalHalfLength, totalHalfLength, 10000, endpoint=True) + singularCrackSlip = np.zeros(len(x)) + gaussianSlip = np.zeros(len(x)) + i = 0 + for xCell in x: + if xCell > -halfLength and xCell < halfLength: + singularCrackSlip[i] = singularCrackSlipSolution.computeSlip(xCell) + gaussianSlip[i] = gaussianSlipSolution.computeSlip(xCell) + i += 1 + + fsize = 24 + msize = 15 + lw = 6 + fig, ax = plt.subplots(1, figsize=(16, 12)) + cmap = plt.get_cmap("tab10") + + ax.plot(x, singularCrackSlip , color='k', label='Analytical Solution', lw=lw) + ax.grid() + ax.set_xlabel('Fault coordinate [m]', size=fsize, weight="bold") + ax.set_ylabel('slip [m]', size=fsize, weight="bold") + ax.legend(bbox_to_anchor=(0.7, 1), loc='center', borderaxespad=0., fontsize=fsize) + ax.xaxis.set_tick_params(labelsize=fsize) + ax.yaxis.set_tick_params(labelsize=fsize) + plt.savefig("singularCrackSlip.png") + + fig, ax = plt.subplots(1, figsize=(16, 12)) + cmap = plt.get_cmap("tab10") + + ax.plot(x, gaussianSlip , color='k', label='Analytical Solution', lw=lw) + ax.grid() + ax.set_xlabel('Fault coordinate [m]', size=fsize, weight="bold") + ax.set_ylabel('slip [m]', size=fsize, weight="bold") + ax.legend(bbox_to_anchor=(0.75, 0.9), loc='center', borderaxespad=0., fontsize=fsize) + ax.xaxis.set_tick_params(labelsize=fsize) + ax.yaxis.set_tick_params(labelsize=fsize) + plt.savefig("gaussianSlip.png") + + output_tables(x, singularCrackSlip, "singularCrackSlip") + output_tables(x, gaussianSlip, "gaussianSlip") + +if __name__ == "__main__": + + parser = argparse.ArgumentParser() + parser.add_argument('-a', '--action', type=str, choices=['generate_tables', 'plotTractions'], required=True, help='Action to perform: generate_tables or plotTractions') + parser.add_argument('-i', '--input-files-path', type=str, required=True, help='Path to the inputFilesFolder') + parser.add_argument('-o', '--output-dir', type=str, help='Directory containing the output files') + + args = parser.parse_args() + + if args.action == 'generate_tables': + print("Generating tables...") + generate_tables(os.path.normpath(args.input_files_path)) + elif args.action == 'plotTractions': + print("Plotting tractions...") + plot_traction_solution(os.path.normpath(args.input_files_path), os.path.normpath(args.output_dir)) diff --git a/inputFiles/poromechanicsFractures/ExponentialDecayPermeability_conformingFracture_base.xml b/inputFiles/poromechanicsFractures/ExponentialDecayPermeability_conformingFracture_base.xml index 133e70876ff..d21f7f7fb80 100644 --- a/inputFiles/poromechanicsFractures/ExponentialDecayPermeability_conformingFracture_base.xml +++ b/inputFiles/poromechanicsFractures/ExponentialDecayPermeability_conformingFracture_base.xml @@ -89,7 +89,7 @@ name="Fracture" faceBlock="FractureSubRegion" materialList="{ water, fractureFilling, fractureContact, rock, hApertureModel}" - defaultAperture="1e-3"/> + defaultAperture="1.0e-3"/> @@ -265,7 +265,7 @@ + values="{ 1.0e-6, 1.0e-3 }"/> + defaultAperture="1.0e-3"/> @@ -131,7 +131,7 @@ + values="{ 1.0e-6, 1.0e-3 }"/> diff --git a/inputFiles/poromechanicsFractures/SlipPermeability_embeddedFrac.xml b/inputFiles/poromechanicsFractures/SlipPermeability_embeddedFrac.xml old mode 100755 new mode 100644 index 27a00a1005d..b0426e12899 --- a/inputFiles/poromechanicsFractures/SlipPermeability_embeddedFrac.xml +++ b/inputFiles/poromechanicsFractures/SlipPermeability_embeddedFrac.xml @@ -173,7 +173,7 @@ faceBlock="embeddedSurfaceSubRegion" subRegionType="embeddedElement" materialList="{ water, fractureFilling, fractureContact, hApertureModel }" - defaultAperture="1e-3"/> + defaultAperture="1.0e-3"/> @@ -249,7 +249,7 @@ + values="{ 1.0e-6, 1.0e-3 }"/> diff --git a/inputFiles/poromechanicsFractures/SlipPermeability_pEDFM_base.xml b/inputFiles/poromechanicsFractures/SlipPermeability_pEDFM_base.xml old mode 100755 new mode 100644 index 0d8af6099a1..089a856d6a7 --- a/inputFiles/poromechanicsFractures/SlipPermeability_pEDFM_base.xml +++ b/inputFiles/poromechanicsFractures/SlipPermeability_pEDFM_base.xml @@ -65,7 +65,7 @@ faceBlock="embeddedSurfaceSubRegion" subRegionType="embeddedElement" materialList="{ water, fractureFilling, fractureContact, hApertureModel}" - defaultAperture="1e-3"/> + defaultAperture="1.0e-3"/> @@ -132,7 +132,7 @@ + values="{ 1.0e-6, 1.0e-3 }"/> diff --git a/inputFiles/poromechanicsFractures/WillisRichardsPermeability_efem-edfm_base.xml b/inputFiles/poromechanicsFractures/WillisRichardsPermeability_efem-edfm_base.xml old mode 100755 new mode 100644 index 5227b229979..03f827efd1d --- a/inputFiles/poromechanicsFractures/WillisRichardsPermeability_efem-edfm_base.xml +++ b/inputFiles/poromechanicsFractures/WillisRichardsPermeability_efem-edfm_base.xml @@ -68,7 +68,7 @@ faceBlock="embeddedSurfaceSubRegion" subRegionType="embeddedElement" materialList="{ water, fractureFilling, fractureContact, hApertureModel }" - defaultAperture="1e-3"/> + defaultAperture="1.0e-3"/> @@ -135,7 +135,7 @@ + values="{ 1.0e-6, 1.0e-3 }"/> diff --git a/scripts/test_submodule_updated.sh b/scripts/test_submodule_updated.sh index e2668a41f60..604d95f2f80 100755 --- a/scripts/test_submodule_updated.sh +++ b/scripts/test_submodule_updated.sh @@ -30,7 +30,7 @@ declare -Ar main_branches=( ["LvArray"]="origin/develop" ["integratedTests"]="origin/develop" ["hdf5_interface"]="origin/master" - ["PVTPackage"]="origin/master" + ["PVTPackage"]="origin/develop" ) diff --git a/src/cmake/thirdparty/SetupGeosxThirdParty.cmake b/src/cmake/thirdparty/SetupGeosxThirdParty.cmake index e30dbd937bc..28549eb8927 100644 --- a/src/cmake/thirdparty/SetupGeosxThirdParty.cmake +++ b/src/cmake/thirdparty/SetupGeosxThirdParty.cmake @@ -670,7 +670,7 @@ if(DEFINED HYPRE_DIR AND ENABLE_HYPRE) find_package( rocsolver REQUIRED ) find_package( rocsparse REQUIRED ) find_package( rocrand REQUIRED ) - append( APPEND HYPRE_DEPENDS roc::rocblas roc::rocsparse roc::rocsolver roc::rocrand ) + list( APPEND HYPRE_DEPENDS roc::rocblas roc::rocsparse roc::rocsolver roc::rocrand ) endif( ) find_and_import( NAME hypre diff --git a/src/coreComponents/common/format/StringUtilities.cpp b/src/coreComponents/common/format/StringUtilities.cpp index 83afce1cf87..cfc00307781 100644 --- a/src/coreComponents/common/format/StringUtilities.cpp +++ b/src/coreComponents/common/format/StringUtilities.cpp @@ -93,8 +93,9 @@ string addCommaSeparators( T const & num ) return result; } -template string addCommaSeparators( localIndex const & num ); -template string addCommaSeparators( globalIndex const & num ); +template string addCommaSeparators( int const & num ); +template string addCommaSeparators( long int const & num ); +template string addCommaSeparators( long long int const & num ); // put definition here so we can control the allowable values of T and // modication of this function triggers a whole code recompile...which diff --git a/src/coreComponents/constitutive/CMakeLists.txt b/src/coreComponents/constitutive/CMakeLists.txt index c763fd49e49..b8a3d02c811 100644 --- a/src/coreComponents/constitutive/CMakeLists.txt +++ b/src/coreComponents/constitutive/CMakeLists.txt @@ -97,8 +97,10 @@ set( constitutive_headers fluid/multifluid/compositional/models/CriticalVolume.hpp fluid/multifluid/compositional/models/EquationOfState.hpp fluid/multifluid/compositional/models/FunctionBase.hpp + fluid/multifluid/compositional/models/ImmiscibleWaterDensity.hpp fluid/multifluid/compositional/models/ImmiscibleWaterFlashModel.hpp fluid/multifluid/compositional/models/ImmiscibleWaterParameters.hpp + fluid/multifluid/compositional/models/ImmiscibleWaterViscosity.hpp fluid/multifluid/compositional/models/LohrenzBrayClarkViscosity.hpp fluid/multifluid/compositional/models/LohrenzBrayClarkViscosityImpl.hpp fluid/multifluid/compositional/models/NegativeTwoPhaseFlashModel.hpp @@ -242,8 +244,10 @@ set( constitutive_sources fluid/multifluid/compositional/models/CompositionalDensity.cpp fluid/multifluid/compositional/models/ConstantViscosity.cpp fluid/multifluid/compositional/models/CriticalVolume.cpp + fluid/multifluid/compositional/models/ImmiscibleWaterDensity.cpp fluid/multifluid/compositional/models/ImmiscibleWaterFlashModel.cpp fluid/multifluid/compositional/models/ImmiscibleWaterParameters.cpp + fluid/multifluid/compositional/models/ImmiscibleWaterViscosity.cpp fluid/multifluid/compositional/models/LohrenzBrayClarkViscosity.cpp fluid/multifluid/compositional/models/NegativeTwoPhaseFlashModel.cpp fluid/multifluid/compositional/CompositionalMultiphaseFluid.cpp diff --git a/src/coreComponents/constitutive/ConstitutivePassThru.hpp b/src/coreComponents/constitutive/ConstitutivePassThru.hpp index decabffbb6a..3ec1b954192 100644 --- a/src/coreComponents/constitutive/ConstitutivePassThru.hpp +++ b/src/coreComponents/constitutive/ConstitutivePassThru.hpp @@ -50,6 +50,7 @@ #include "permeability/SlipDependentPermeability.hpp" #include "permeability/WillisRichardsPermeability.hpp" #include "contact/CoulombFriction.hpp" +#include "contact/RateAndStateFriction.hpp" namespace geos @@ -84,6 +85,23 @@ struct ConstitutivePassThru< ElasticIsotropic > } }; +/** + * Specialization for models that derive from FrictionBase. + */ +template<> +struct ConstitutivePassThru< FrictionBase > +{ + template< typename LAMBDA > + static + void execute( ConstitutiveBase & constitutiveRelation, LAMBDA && lambda ) + { + ConstitutivePassThruHandler< CoulombFriction, + RateAndStateFriction >::execute( constitutiveRelation, + std::forward< LAMBDA >( lambda ) ); + } +}; + + /** * Specialization for models that derive from CoulombFriction. */ diff --git a/src/coreComponents/constitutive/PVTPackage b/src/coreComponents/constitutive/PVTPackage index 59d81b149e3..3bf1c021569 160000 --- a/src/coreComponents/constitutive/PVTPackage +++ b/src/coreComponents/constitutive/PVTPackage @@ -1 +1 @@ -Subproject commit 59d81b149e35ea5db0d715e608217d8bd56e9291 +Subproject commit 3bf1c02156911768f022fc2954939ee1c1c2f66d diff --git a/src/coreComponents/constitutive/contact/CoulombFriction.hpp b/src/coreComponents/constitutive/contact/CoulombFriction.hpp index d117d8895e5..575aef0d3fe 100644 --- a/src/coreComponents/constitutive/contact/CoulombFriction.hpp +++ b/src/coreComponents/constitutive/contact/CoulombFriction.hpp @@ -96,6 +96,7 @@ class CoulombFrictionUpdates : public FrictionBaseUpdates arraySlice1d< real64 const > const & dispJump, arraySlice1d< real64 const > const & penalty, arraySlice1d< real64 const > const & traction, + real64 const faceArea, bool const symmetric, bool const fixedLimitTau, real64 const normalTractionTolerance, @@ -111,6 +112,7 @@ class CoulombFrictionUpdates : public FrictionBaseUpdates arraySlice1d< real64 const > const & deltaDispJump, arraySlice1d< real64 const > const & penalty, arraySlice1d< real64 const > const & traction, + real64 const faceArea, arraySlice1d< real64 > const & tractionNew ) const override final; GEOS_HOST_DEVICE @@ -221,7 +223,7 @@ GEOS_HOST_DEVICE real64 CoulombFrictionUpdates::computeLimitTangentialTractionNorm( real64 const & normalTraction, real64 & dLimitTangentialTractionNorm_dTraction ) const { - dLimitTangentialTractionNorm_dTraction = m_frictionCoefficient; + dLimitTangentialTractionNorm_dTraction = -m_frictionCoefficient; return ( m_cohesion - normalTraction * m_frictionCoefficient ); } @@ -274,10 +276,10 @@ inline void CoulombFrictionUpdates::computeShearTraction( localIndex const k, dTractionVector_dJump[1][0] = dTractionVector_dJump[0][0] * dLimitTau_dNormalTraction * slip[0] / slipNorm; dTractionVector_dJump[1][1] = limitTau * pow( slip[1], 2 ) / pow( LvArray::tensorOps::l2NormSquared< 2 >( slip ), 1.5 ); - dTractionVector_dJump[1][2] = limitTau * slip[0] * slip[1] / pow( LvArray::tensorOps::l2NormSquared< 2 >( slip ), 1.5 ); + dTractionVector_dJump[1][2] = -limitTau * slip[0] * slip[1] / pow( LvArray::tensorOps::l2NormSquared< 2 >( slip ), 1.5 ); dTractionVector_dJump[2][0] = dTractionVector_dJump[0][0] * dLimitTau_dNormalTraction * slip[1] / slipNorm; - dTractionVector_dJump[2][1] = limitTau * slip[0] * slip[1] / pow( LvArray::tensorOps::l2NormSquared< 2 >( slip ), 1.5 ); + dTractionVector_dJump[2][1] = -limitTau * slip[0] * slip[1] / pow( LvArray::tensorOps::l2NormSquared< 2 >( slip ), 1.5 ); dTractionVector_dJump[2][2] = limitTau * pow( slip[0], 2 ) / pow( LvArray::tensorOps::l2NormSquared< 2 >( slip ), 1.5 ); // Compute elastic component of the slip for this case @@ -328,6 +330,7 @@ inline void CoulombFrictionUpdates::updateTraction( arraySlice1d< real64 const > arraySlice1d< real64 const > const & dispJump, arraySlice1d< real64 const > const & penalty, arraySlice1d< real64 const > const & traction, + real64 const faceArea, bool const symmetric, bool const fixedLimitTau, real64 const normalTractionTolerance, @@ -344,9 +347,9 @@ inline void CoulombFrictionUpdates::updateTraction( arraySlice1d< real64 const > // Compute the trial traction real64 tractionTrial[ 3 ]; - tractionTrial[ 0 ] = traction[0] + penalty[0] * dispJump[0]; - tractionTrial[ 1 ] = traction[1] + penalty[1] * (dispJump[1] - oldDispJump[1]); - tractionTrial[ 2 ] = traction[2] + penalty[1] * (dispJump[2] - oldDispJump[2]); + tractionTrial[ 0 ] = traction[0] + penalty[0] * dispJump[0] * faceArea; + tractionTrial[ 1 ] = traction[1] + penalty[1] * (dispJump[1] - oldDispJump[1]) * faceArea; + tractionTrial[ 2 ] = traction[2] + penalty[1] * (dispJump[2] - oldDispJump[2]) * faceArea; // Compute tangential trial traction norm real64 const tau[2] = { tractionTrial[1], @@ -462,15 +465,16 @@ inline void CoulombFrictionUpdates::updateTractionOnly( arraySlice1d< real64 con arraySlice1d< real64 const > const & deltaDispJump, arraySlice1d< real64 const > const & penalty, arraySlice1d< real64 const > const & traction, + real64 const faceArea, arraySlice1d< real64 > const & tractionNew ) const { // TODO: Pass this tol as an argument or define a new class member real64 const zero = LvArray::NumericLimits< real64 >::epsilon; - tractionNew[0] = traction[0] + penalty[0] * dispJump[0]; - tractionNew[1] = traction[1] + penalty[1] * deltaDispJump[1]; - tractionNew[2] = traction[2] + penalty[1] * deltaDispJump[2]; + tractionNew[0] = traction[0] + penalty[0] * dispJump[0] * faceArea; + tractionNew[1] = traction[1] + penalty[1] * deltaDispJump[1] * faceArea; + tractionNew[2] = traction[2] + penalty[1] * deltaDispJump[2] * faceArea; real64 const tau[2] = { tractionNew[1], tractionNew[2] }; diff --git a/src/coreComponents/constitutive/contact/FrictionBase.hpp b/src/coreComponents/constitutive/contact/FrictionBase.hpp index e05923f2998..b41547880c5 100644 --- a/src/coreComponents/constitutive/contact/FrictionBase.hpp +++ b/src/coreComponents/constitutive/contact/FrictionBase.hpp @@ -109,6 +109,7 @@ class FrictionBaseUpdates arraySlice1d< real64 const > const & dispJump, arraySlice1d< real64 const > const & penalty, arraySlice1d< real64 const > const & traction, + real64 const faceArea, bool const symmetric, bool const fixedLimitTau, real64 const normalTractionTolerance, @@ -117,7 +118,7 @@ class FrictionBaseUpdates real64 ( & tractionNew )[3], integer & fractureState ) const { - GEOS_UNUSED_VAR( oldDispJump, dispJump, penalty, traction, symmetric, fixedLimitTau, + GEOS_UNUSED_VAR( oldDispJump, dispJump, penalty, traction, faceArea, symmetric, fixedLimitTau, normalTractionTolerance, tangentialTractionTolerance, dTraction_dDispJump, tractionNew, fractureState ); } @@ -136,8 +137,9 @@ class FrictionBaseUpdates arraySlice1d< real64 const > const & deltaDispJump, arraySlice1d< real64 const > const & penalty, arraySlice1d< real64 const > const & traction, + real64 const faceArea, arraySlice1d< real64 > const & tractionNew ) const - { GEOS_UNUSED_VAR( dispJump, deltaDispJump, penalty, traction, tractionNew ); } + { GEOS_UNUSED_VAR( dispJump, deltaDispJump, penalty, traction, faceArea, tractionNew ); } /** * @brief Check for the constraint satisfaction @@ -175,7 +177,11 @@ class FrictionBaseUpdates inline virtual real64 computeLimitTangentialTractionNorm( real64 const & normalTraction, real64 & dLimitTangentialTractionNorm_dTraction ) const - { GEOS_UNUSED_VAR( normalTraction, dLimitTangentialTractionNorm_dTraction ); return 0; }; + { + GEOS_UNUSED_VAR( normalTraction ); + dLimitTangentialTractionNorm_dTraction = 0.0; + return 0; + } protected: diff --git a/src/coreComponents/constitutive/contact/FrictionSelector.hpp b/src/coreComponents/constitutive/contact/FrictionSelector.hpp index 8eab7ff72dd..08b7a232a1b 100644 --- a/src/coreComponents/constitutive/contact/FrictionSelector.hpp +++ b/src/coreComponents/constitutive/contact/FrictionSelector.hpp @@ -23,6 +23,7 @@ #include "constitutive/ConstitutivePassThruHandler.hpp" #include "constitutive/contact/CoulombFriction.hpp" #include "constitutive/contact/FrictionlessContact.hpp" +#include "constitutive/contact/RateAndStateFriction.hpp" namespace geos { @@ -35,7 +36,8 @@ void constitutiveUpdatePassThru( FrictionBase const & contact, LAMBDA && lambda ) { ConstitutivePassThruHandler< FrictionlessContact, - CoulombFriction >::execute( contact, std::forward< LAMBDA >( lambda ) ); + CoulombFriction, + RateAndStateFriction >::execute( contact, std::forward< LAMBDA >( lambda ) ); } template< typename LAMBDA > @@ -43,7 +45,8 @@ void constitutiveUpdatePassThru( FrictionBase & contact, LAMBDA && lambda ) { ConstitutivePassThruHandler< FrictionlessContact, - CoulombFriction >::execute( contact, std::forward< LAMBDA >( lambda ) ); + CoulombFriction, + RateAndStateFriction >::execute( contact, std::forward< LAMBDA >( lambda ) ); } } /* namespace constitutive */ diff --git a/src/coreComponents/constitutive/contact/FrictionlessContact.hpp b/src/coreComponents/constitutive/contact/FrictionlessContact.hpp index 83e53fd8e14..6b3552acf75 100644 --- a/src/coreComponents/constitutive/contact/FrictionlessContact.hpp +++ b/src/coreComponents/constitutive/contact/FrictionlessContact.hpp @@ -63,20 +63,6 @@ class FrictionlessContactUpdates : public FrictionBaseUpdates arraySlice1d< real64 const > const & tractionVector, integer & fractureState ) const override final; - - /** - * @brief Evaluate the limit tangential traction norm and return the derivative wrt normal traction - * @param[in] normalTraction the normal traction - * @param[out] dLimitTangentialTractionNorm_dTraction the derivative of the limit tangential traction norm wrt normal traction - * @return the limit tangential traction norm - */ - GEOS_HOST_DEVICE - inline - virtual real64 computeLimitTangentialTractionNorm( real64 const & normalTraction, - real64 & dLimitTangentialTractionNorm_dTraction ) const override final - { GEOS_UNUSED_VAR( normalTraction, dLimitTangentialTractionNorm_dTraction ); return 0.0; } - -private: }; diff --git a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/EzrokhiBrineDensity.cpp b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/EzrokhiBrineDensity.cpp index 7ba7020fa9e..a1a7c238df4 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/EzrokhiBrineDensity.cpp +++ b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/EzrokhiBrineDensity.cpp @@ -59,7 +59,7 @@ EzrokhiBrineDensity::EzrokhiBrineDensity( string const & name, void EzrokhiBrineDensity::makeCoefficients( string_array const & inputPara ) { - // compute brine density following Ezrokhi`s method (referenced in Eclipse TD, Aqueous phase properties) + // compute brine density following Ezrokhi`s method // Reference : Zaytsev, I.D. and Aseyev, G.G. Properties of Aqueous Solutions of Electrolytes, Boca Raton, Florida, USA CRC Press (1993). m_waterCompressibility = 4.5e-10; // Pa-1 diff --git a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/EzrokhiBrineViscosity.cpp b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/EzrokhiBrineViscosity.cpp index c300237899a..c0411ad922b 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/EzrokhiBrineViscosity.cpp +++ b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/EzrokhiBrineViscosity.cpp @@ -57,7 +57,7 @@ EzrokhiBrineViscosity::EzrokhiBrineViscosity( string const & name, void EzrokhiBrineViscosity::makeCoefficients( string_array const & inputPara ) { - // compute brine viscosity following Ezrokhi`s method (referenced in Eclipse TD, Aqueous phase properties) + // compute brine viscosity following Ezrokhi`s method // Reference : Zaytsev, I.D. and Aseyev, G.G. Properties of Aqueous Solutions of Electrolytes, Boca Raton, Florida, USA CRC Press (1993). GEOS_THROW_IF_LT_MSG( inputPara.size(), 5, GEOS_FMT( "{}: insufficient number of model parameters", m_functionName ), diff --git a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/PVTFunctionHelpers.cpp b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/PVTFunctionHelpers.cpp index a05497483eb..b0297d9b00e 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/PVTFunctionHelpers.cpp +++ b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/PVTFunctionHelpers.cpp @@ -45,7 +45,7 @@ BlackOilTables::readTable( string const & fileName, // Remove whitespace and end-of-line characters, if any str = stringutilities::trim( str, " \r" ); - // Remove # and -- (Eclipse-style) comments + // Remove # and -- comments str = stringutilities::removeStringAndFollowingContent( str, "#" ); str = stringutilities::removeStringAndFollowingContent( str, "--" ); diff --git a/src/coreComponents/constitutive/fluid/multifluid/MultiFluidSelector.hpp b/src/coreComponents/constitutive/fluid/multifluid/MultiFluidSelector.hpp index 580a965061b..7ca5afe50cc 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/MultiFluidSelector.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/MultiFluidSelector.hpp @@ -53,6 +53,7 @@ void constitutiveUpdatePassThru( constitutive::MultiFluidBase const & fluid, #if !defined(GEOS_DEVICE_COMPILE) CO2BrineEzrokhiThermalFluid, CompositionalTwoPhaseLohrenzBrayClarkViscosity, + CompositionalThreePhaseLohrenzBrayClarkViscosity, #endif CompositionalTwoPhaseConstantViscosity >::execute( fluid, std::forward< LAMBDA >( lambda ) ); @@ -75,6 +76,7 @@ void constitutiveUpdatePassThru( constitutive::MultiFluidBase & fluid, #if !defined(GEOS_DEVICE_COMPILE) CO2BrineEzrokhiThermalFluid, CompositionalTwoPhaseLohrenzBrayClarkViscosity, + CompositionalThreePhaseLohrenzBrayClarkViscosity, #endif CompositionalTwoPhaseConstantViscosity >::execute( fluid, std::forward< LAMBDA >( lambda ) ); diff --git a/src/coreComponents/constitutive/fluid/multifluid/blackOil/BlackOilFluid.cpp b/src/coreComponents/constitutive/fluid/multifluid/blackOil/BlackOilFluid.cpp index 4a4118c1cbf..66e017b23fe 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/blackOil/BlackOilFluid.cpp +++ b/src/coreComponents/constitutive/fluid/multifluid/blackOil/BlackOilFluid.cpp @@ -49,7 +49,7 @@ void BlackOilFluid::postInputInitialization() void BlackOilFluid::readInputDataFromTableFunctions() { - GEOS_THROW( GEOS_FMT( "{}: this option is not implemented yet, please provide PVT files in standard Eclipse format", getFullName() ), + GEOS_THROW( GEOS_FMT( "{}: this option is not implemented yet, please provide PVT files in standard text format", getFullName() ), InputError ); } diff --git a/src/coreComponents/constitutive/fluid/multifluid/blackOil/BlackOilFluid.hpp b/src/coreComponents/constitutive/fluid/multifluid/blackOil/BlackOilFluid.hpp index 112c677bad3..f789a7a82c2 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/blackOil/BlackOilFluid.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/blackOil/BlackOilFluid.hpp @@ -276,7 +276,7 @@ class BlackOilFluid : public BlackOilFluidBase virtual void readInputDataFromPVTFiles() override; /** - * @brief Read all the PVT table provided by the user in Eclipse format + * @brief Read all the PVT table provided by the user in text format * @param[in] oilTable the oil table data read from file * @param[in] oilSurfaceMassDensity the oil phase surface mass density * @param[in] oilSurfaceMolecularWeight the oil phase surface molecular weight diff --git a/src/coreComponents/constitutive/fluid/multifluid/blackOil/BlackOilFluidBase.hpp b/src/coreComponents/constitutive/fluid/multifluid/blackOil/BlackOilFluidBase.hpp index dbca6083fca..eb7215a8361 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/blackOil/BlackOilFluidBase.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/blackOil/BlackOilFluidBase.hpp @@ -144,7 +144,7 @@ class BlackOilFluidBase : public MultiFluidBase virtual void readInputDataFromTableFunctions() = 0; /** - * @brief Read all the PVT table provided by the user in Eclipse format + * @brief Read all the PVT table provided by the user in text format */ virtual void readInputDataFromPVTFiles() = 0; diff --git a/src/coreComponents/constitutive/fluid/multifluid/blackOil/DeadOilFluid.hpp b/src/coreComponents/constitutive/fluid/multifluid/blackOil/DeadOilFluid.hpp index 69311e692f2..86d82b50114 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/blackOil/DeadOilFluid.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/blackOil/DeadOilFluid.hpp @@ -148,7 +148,7 @@ class DeadOilFluid : public BlackOilFluidBase virtual void readInputDataFromTableFunctions() override; /** - * @brief Read all the PVT table provided by the user in Eclipse format + * @brief Read all the PVT table provided by the user in text format */ virtual void readInputDataFromPVTFiles() override; diff --git a/src/coreComponents/constitutive/fluid/multifluid/compositional/CompositionalMultiphaseFluid.cpp b/src/coreComponents/constitutive/fluid/multifluid/compositional/CompositionalMultiphaseFluid.cpp index aa91a802388..6e95fed3f4c 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/compositional/CompositionalMultiphaseFluid.cpp +++ b/src/coreComponents/constitutive/fluid/multifluid/compositional/CompositionalMultiphaseFluid.cpp @@ -22,6 +22,7 @@ #include "constitutive/fluid/multifluid/CO2Brine/functions/PVTFunctionHelpers.hpp" #include "constitutive/fluid/multifluid/MultiFluidFields.hpp" #include "codingUtilities/Utilities.hpp" +#include "common/format/StringUtilities.hpp" namespace geos { @@ -51,6 +52,7 @@ CompositionalMultiphaseFluid( string const & name, Group * const parent ) m_parameters( createModelParameters() ) { using InputFlags = dataRepository::InputFlags; + using RestartFlags = dataRepository::RestartFlags; getWrapperBase( viewKeyStruct::componentNamesString() ).setInputFlag( InputFlags::REQUIRED ); getWrapperBase( viewKeyStruct::componentMolarWeightString() ).setInputFlag( InputFlags::REQUIRED ); @@ -80,13 +82,18 @@ CompositionalMultiphaseFluid( string const & name, Group * const parent ) // Link parameters specific to each model m_parameters->registerParameters( this ); + + // Register extra wrappers to enable auto-cloning + registerWrapper( "phaseOrder", &m_phaseOrder ) + .setSizedFromParent( 0 ) + .setRestartFlags( RestartFlags::NO_WRITE ); } template< typename FLASH, typename PHASE1, typename PHASE2, typename PHASE3 > integer CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::getWaterPhaseIndex() const { - string const expectedWaterPhaseNames[] = { "water" }; - return PVTProps::PVTFunctionHelpers::findName( m_phaseNames, expectedWaterPhaseNames, viewKeyStruct::phaseNamesString() ); + integer const aqueous = static_cast< integer >(PhaseType::AQUEOUS); + return m_phaseOrder.size() > aqueous ? m_phaseOrder[aqueous] : -1; } template< typename FLASH, typename PHASE1, typename PHASE2, typename PHASE3 > @@ -170,6 +177,12 @@ void CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::postInputIni } } + // Determine the phase ordering + m_phaseOrder.resize( 3 ); + m_phaseOrder[PhaseType::LIQUID] = findPhaseIndex( "oil,liq,liquid" ); + m_phaseOrder[PhaseType::VAPOUR] = findPhaseIndex( "gas,vap,vapor,vapour" ); + m_phaseOrder[PhaseType::AQUEOUS] = findPhaseIndex( "wat,water,aqueous" ); + m_parameters->postInputInitialization( this, *m_componentProperties ); } @@ -210,6 +223,7 @@ CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::createKernelWrapp *m_phase1, *m_phase2, *m_phase3, + m_phaseOrder.toViewConst(), m_componentMolarWeight, m_useMass, m_phaseFraction.toView(), @@ -247,6 +261,22 @@ void CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::createModels *m_parameters ); } +template< typename FLASH, typename PHASE1, typename PHASE2, typename PHASE3 > +integer CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::findPhaseIndex( string names ) const +{ + auto const nameContainer = stringutilities::tokenize( names, ",", true, false ); + + for( integer ip = 0; ip < numFluidPhases(); ++ip ) + { + std::string const phaseName = stringutilities::toLower( m_phaseNames[ip] ); + if( std::find( nameContainer.begin(), nameContainer.end(), phaseName ) != nameContainer.end()) + { + return ip; + } + } + return -1; +} + // Create the fluid models template< typename FLASH, typename PHASE1, typename PHASE2, typename PHASE3 > std::unique_ptr< compositional::ModelParameters > @@ -269,6 +299,11 @@ template class CompositionalMultiphaseFluid< compositional::NegativeTwoPhaseFlashModel, compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity, compositional::NullModel >, compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity, compositional::NullModel > >; +template class CompositionalMultiphaseFluid< + compositional::ImmiscibleWaterFlashModel, + compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity, compositional::NullModel >, + compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity, compositional::NullModel >, + compositional::PhaseModel< compositional::ImmiscibleWaterDensity, compositional::ImmiscibleWaterViscosity, compositional::NullModel > >; REGISTER_CATALOG_ENTRY( ConstitutiveBase, CompositionalTwoPhaseConstantViscosity, @@ -280,6 +315,11 @@ REGISTER_CATALOG_ENTRY( ConstitutiveBase, string const &, dataRepository::Group * const ) +REGISTER_CATALOG_ENTRY( ConstitutiveBase, + CompositionalThreePhaseLohrenzBrayClarkViscosity, + string const &, + dataRepository::Group * const ) + } // namespace constitutive } // namespace geos diff --git a/src/coreComponents/constitutive/fluid/multifluid/compositional/CompositionalMultiphaseFluid.hpp b/src/coreComponents/constitutive/fluid/multifluid/compositional/CompositionalMultiphaseFluid.hpp index a8f846aac39..b43047ade63 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/compositional/CompositionalMultiphaseFluid.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/compositional/CompositionalMultiphaseFluid.hpp @@ -23,6 +23,9 @@ #include "constitutive/fluid/multifluid/compositional/CompositionalMultiphaseFluidUpdates.hpp" #include "constitutive/fluid/multifluid/compositional/models/ConstantViscosity.hpp" #include "constitutive/fluid/multifluid/compositional/models/CompositionalDensity.hpp" +#include "constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterDensity.hpp" +#include "constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterFlashModel.hpp" +#include "constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterViscosity.hpp" #include "constitutive/fluid/multifluid/compositional/models/LohrenzBrayClarkViscosity.hpp" #include "constitutive/fluid/multifluid/compositional/models/NegativeTwoPhaseFlashModel.hpp" #include "constitutive/fluid/multifluid/compositional/models/ModelParameters.hpp" @@ -110,15 +113,27 @@ class CompositionalMultiphaseFluid : public MultiFluidBase virtual void resizeFields( localIndex const size, localIndex const numPts ) override; + enum PhaseType : integer + { + LIQUID = 0, + VAPOUR = 1, + AQUEOUS = 2, + }; + private: // Create the fluid models void createModels(); + integer findPhaseIndex( string names ) const; + static std::unique_ptr< compositional::ModelParameters > createModelParameters(); // Flash model std::unique_ptr< FLASH > m_flash{}; + // Phase ordering + array1d< integer > m_phaseOrder; + // Phase models std::unique_ptr< PHASE1 > m_phase1{}; std::unique_ptr< PHASE2 > m_phase2{}; @@ -142,6 +157,11 @@ using CompositionalTwoPhaseLohrenzBrayClarkViscosity = CompositionalMultiphaseFl compositional::NegativeTwoPhaseFlashModel, compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity, compositional::NullModel >, compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity, compositional::NullModel > >; +using CompositionalThreePhaseLohrenzBrayClarkViscosity = CompositionalMultiphaseFluid< + compositional::ImmiscibleWaterFlashModel, + compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity, compositional::NullModel >, + compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity, compositional::NullModel >, + compositional::PhaseModel< compositional::ImmiscibleWaterDensity, compositional::ImmiscibleWaterViscosity, compositional::NullModel > >; } /* namespace constitutive */ diff --git a/src/coreComponents/constitutive/fluid/multifluid/compositional/CompositionalMultiphaseFluidUpdates.hpp b/src/coreComponents/constitutive/fluid/multifluid/compositional/CompositionalMultiphaseFluidUpdates.hpp index 1567f4b4c46..c3a301e98a5 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/compositional/CompositionalMultiphaseFluidUpdates.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/compositional/CompositionalMultiphaseFluidUpdates.hpp @@ -46,6 +46,7 @@ class CompositionalMultiphaseFluidUpdates final : public MultiFluidBase::KernelW PHASE1 const & phase1, PHASE2 const & phase2, PHASE3 const & phase3, + arrayView1d< integer const > const & phaseOrder, arrayView1d< real64 const > const & componentMolarWeight, bool const useMass, MultiFluidBase::PhaseProp::ViewType phaseFrac, @@ -122,6 +123,9 @@ class CompositionalMultiphaseFluidUpdates final : public MultiFluidBase::KernelW // Flash kernel wrapper typename FLASH::KernelWrapper m_flash; + // The ordering of phases + arrayView1d< integer const > const m_phaseOrder; + // Phase model kernel wrappers typename PHASE1::KernelWrapper m_phase1; typename PHASE2::KernelWrapper m_phase2; @@ -138,6 +142,7 @@ CompositionalMultiphaseFluidUpdates( compositional::ComponentProperties const & PHASE1 const & phase1, PHASE2 const & phase2, PHASE3 const & phase3, + arrayView1d< integer const > const & phaseOrder, arrayView1d< real64 const > const & componentMolarWeight, bool const useMass, MultiFluidBase::PhaseProp::ViewType phaseFrac, @@ -161,6 +166,7 @@ CompositionalMultiphaseFluidUpdates( compositional::ComponentProperties const & std::move( totalDensity ) ), m_componentProperties( componentProperties.createKernelWrapper() ), m_flash( flash.createKernelWrapper() ), + m_phaseOrder( phaseOrder ), m_phase1( phase1.createKernelWrapper() ), m_phase2( phase2.createKernelWrapper() ), m_phase3( phase3.createKernelWrapper() ), @@ -262,31 +268,31 @@ CompositionalMultiphaseFluidUpdates< FLASH, PHASE1, PHASE2, PHASE3 >::compute( m_phase1.density.compute( m_componentProperties, pressure, temperature, - phaseCompFrac.value[0].toSliceConst(), - phaseDens.value[0], - phaseDens.derivs[0], - phaseMassDensity.value[0], - phaseMassDensity.derivs[0], + phaseCompFrac.value[m_phaseOrder[0]].toSliceConst(), + phaseDens.value[m_phaseOrder[0]], + phaseDens.derivs[m_phaseOrder[0]], + phaseMassDensity.value[m_phaseOrder[0]], + phaseMassDensity.derivs[m_phaseOrder[0]], m_useMass ); m_phase2.density.compute( m_componentProperties, pressure, temperature, - phaseCompFrac.value[1].toSliceConst(), - phaseDens.value[1], - phaseDens.derivs[1], - phaseMassDensity.value[1], - phaseMassDensity.derivs[1], + phaseCompFrac.value[m_phaseOrder[1]].toSliceConst(), + phaseDens.value[m_phaseOrder[1]], + phaseDens.derivs[m_phaseOrder[1]], + phaseMassDensity.value[m_phaseOrder[1]], + phaseMassDensity.derivs[m_phaseOrder[1]], m_useMass ); if constexpr (2 < FLASH::KernelWrapper::getNumberOfPhases()) { m_phase3.density.compute( m_componentProperties, pressure, temperature, - phaseCompFrac.value[2].toSliceConst(), - phaseDens.value[2], - phaseDens.derivs[2], - phaseMassDensity.value[2], - phaseMassDensity.derivs[2], + phaseCompFrac.value[m_phaseOrder[2]].toSliceConst(), + phaseDens.value[m_phaseOrder[2]], + phaseDens.derivs[m_phaseOrder[2]], + phaseMassDensity.value[m_phaseOrder[2]], + phaseMassDensity.derivs[m_phaseOrder[2]], m_useMass ); } @@ -294,31 +300,31 @@ CompositionalMultiphaseFluidUpdates< FLASH, PHASE1, PHASE2, PHASE3 >::compute( m_phase1.viscosity.compute( m_componentProperties, pressure, temperature, - phaseCompFrac.value[0].toSliceConst(), - phaseMassDensity.value[0], - phaseMassDensity.derivs[0].toSliceConst(), - phaseVisc.value[0], - phaseVisc.derivs[0], + phaseCompFrac.value[m_phaseOrder[0]].toSliceConst(), + phaseMassDensity.value[m_phaseOrder[0]], + phaseMassDensity.derivs[m_phaseOrder[0]].toSliceConst(), + phaseVisc.value[m_phaseOrder[0]], + phaseVisc.derivs[m_phaseOrder[0]], m_useMass ); m_phase2.viscosity.compute( m_componentProperties, pressure, temperature, - phaseCompFrac.value[1].toSliceConst(), - phaseMassDensity.value[1], - phaseMassDensity.derivs[1].toSliceConst(), - phaseVisc.value[1], - phaseVisc.derivs[1], + phaseCompFrac.value[m_phaseOrder[1]].toSliceConst(), + phaseMassDensity.value[m_phaseOrder[1]], + phaseMassDensity.derivs[m_phaseOrder[1]].toSliceConst(), + phaseVisc.value[m_phaseOrder[1]], + phaseVisc.derivs[m_phaseOrder[1]], m_useMass ); if constexpr (2 < FLASH::KernelWrapper::getNumberOfPhases()) { m_phase3.viscosity.compute( m_componentProperties, pressure, temperature, - phaseCompFrac.value[2].toSliceConst(), - phaseMassDensity.value[2], - phaseMassDensity.derivs[2].toSliceConst(), - phaseVisc.value[2], - phaseVisc.derivs[2], + phaseCompFrac.value[m_phaseOrder[2]].toSliceConst(), + phaseMassDensity.value[m_phaseOrder[2]], + phaseMassDensity.derivs[m_phaseOrder[2]].toSliceConst(), + phaseVisc.value[m_phaseOrder[2]], + phaseVisc.derivs[m_phaseOrder[2]], m_useMass ); } diff --git a/src/coreComponents/constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterDensity.cpp b/src/coreComponents/constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterDensity.cpp new file mode 100644 index 00000000000..e257b3b984a --- /dev/null +++ b/src/coreComponents/constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterDensity.cpp @@ -0,0 +1,82 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2024 Total, S.A + * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2018-2024 Chevron + * Copyright (c) 2019- GEOS/GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file ImmiscibleWaterDensity.cpp + */ + +#include "ImmiscibleWaterDensity.hpp" +#include "ImmiscibleWaterParameters.hpp" +#include "dataRepository/InputFlags.hpp" + +namespace geos +{ + +namespace constitutive +{ + +namespace compositional +{ + +ImmiscibleWaterDensityUpdate::ImmiscibleWaterDensityUpdate( real64 const waterMolecularWeight, + real64 const referencePressure, + real64 const referenceTemperature, + real64 const density, + real64 const compressibility, + real64 const expansionCoefficient ): + m_waterMolecularWeight( waterMolecularWeight ), + m_referencePressure( referencePressure ), + m_referenceTemperature( referenceTemperature ), + m_density( density ), + m_compressibility( compressibility ), + m_expansionCoefficient( expansionCoefficient ) +{} + +ImmiscibleWaterDensity::ImmiscibleWaterDensity( string const & name, + ComponentProperties const & componentProperties, + integer const phaseIndex, + ModelParameters const & modelParameters ): + FunctionBase( name, componentProperties ), + m_parameters( modelParameters ) +{ + GEOS_UNUSED_VAR( phaseIndex ); + integer const h2oIndex = ImmiscibleWaterParameters::getWaterComponentIndex( componentProperties ); + GEOS_THROW_IF_LT_MSG( h2oIndex, 0, "Water component not found", InputError ); + m_waterMolecularWeight = componentProperties.getComponentMolarWeight()[h2oIndex]; +} + +ImmiscibleWaterDensity::KernelWrapper +ImmiscibleWaterDensity::createKernelWrapper() const +{ + ImmiscibleWaterParameters const * waterParameters = m_parameters.get< ImmiscibleWaterParameters >(); + return KernelWrapper( m_waterMolecularWeight, + waterParameters->m_waterReferencePressure, + waterParameters->m_waterReferenceTemperature, + waterParameters->m_waterDensity, + waterParameters->m_waterCompressibility, + waterParameters->m_waterExpansionCoefficient ); +} + +std::unique_ptr< ModelParameters > +ImmiscibleWaterDensity::createParameters( std::unique_ptr< ModelParameters > parameters ) +{ + return ImmiscibleWaterParameters::create( std::move( parameters ) ); +} + +} // namespace compositional + +} // namespace constitutive + +} // namespace geos diff --git a/src/coreComponents/constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterDensity.hpp b/src/coreComponents/constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterDensity.hpp new file mode 100644 index 00000000000..9d258085649 --- /dev/null +++ b/src/coreComponents/constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterDensity.hpp @@ -0,0 +1,140 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2024 Total, S.A + * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2018-2024 Chevron + * Copyright (c) 2019- GEOS/GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file ImmiscibleWaterDensity.cpp + */ + +#ifndef GEOS_CONSTITUTIVE_FLUID_MULTIFLUID_COMPOSITIONAL_MODELS_IMMISCIBLEWATERDENSITY_HPP_ +#define GEOS_CONSTITUTIVE_FLUID_MULTIFLUID_COMPOSITIONAL_MODELS_IMMISCIBLEWATERDENSITY_HPP_ + +#include "FunctionBase.hpp" +#include "constitutive/fluid/multifluid/Layouts.hpp" + +namespace geos +{ + +namespace constitutive +{ + +namespace compositional +{ + +class ImmiscibleWaterDensityUpdate final : public FunctionBaseUpdate +{ + using Deriv = geos::constitutive::multifluid::DerivativeOffset; +public: + ImmiscibleWaterDensityUpdate( real64 const waterMolecularWeight, + real64 const referencePressure, + real64 const referenceTemperature, + real64 const density, + real64 const compressibility, + real64 const expansionCoefficient ); + + template< integer USD1, integer USD2 > + GEOS_HOST_DEVICE + void compute( ComponentProperties::KernelWrapper const & componentProperties, + real64 const & pressure, + real64 const & temperature, + arraySlice1d< real64 const, USD1 > const & phaseComposition, + real64 & molarDensity, + arraySlice1d< real64, USD2 > const & dMolarDensity, + real64 & massDensity, + arraySlice1d< real64, USD2 > const & dMassDensity, + bool useMass ) const; + +private: + real64 const m_waterMolecularWeight; + real64 const m_referencePressure; + real64 const m_referenceTemperature; + real64 const m_density; + real64 const m_compressibility; + real64 const m_expansionCoefficient; +}; + +class ImmiscibleWaterDensity : public FunctionBase +{ +public: + ImmiscibleWaterDensity( string const & name, + ComponentProperties const & componentProperties, + integer const phaseIndex, + ModelParameters const & modelParameters ); + + static string catalogName() { return "ImmiscibleWaterDensity"; } + + virtual FunctionType functionType() const override + { + return FunctionType::DENSITY; + } + + /// Type of kernel wrapper for in-kernel update + using KernelWrapper = ImmiscibleWaterDensityUpdate; + + /** + * @brief Create an update kernel wrapper. + * @return the wrapper + */ + KernelWrapper createKernelWrapper() const; + + // Create parameters unique to this model + static std::unique_ptr< ModelParameters > createParameters( std::unique_ptr< ModelParameters > parameters ); + +private: + ModelParameters const & m_parameters; + real64 m_waterMolecularWeight{0.0}; +}; + +template< integer USD1, integer USD2 > +GEOS_HOST_DEVICE +void ImmiscibleWaterDensityUpdate::compute( + ComponentProperties::KernelWrapper const & componentProperties, + real64 const & pressure, + real64 const & temperature, + arraySlice1d< real64 const, USD1 > const & phaseComposition, + real64 & molarDensity, + arraySlice1d< real64, USD2 > const & dMolarDensity, + real64 & massDensity, + arraySlice1d< real64, USD2 > const & dMassDensity, + bool useMass ) const +{ + GEOS_UNUSED_VAR( componentProperties ); + GEOS_UNUSED_VAR( phaseComposition ); + GEOS_UNUSED_VAR( useMass ); + + LvArray::forValuesInSlice( dMolarDensity, setZero ); + LvArray::forValuesInSlice( dMassDensity, setZero ); + + real64 const density = m_density * + LvArray::math::exp( m_compressibility * (pressure - m_referencePressure) ) * + LvArray::math::exp( -m_expansionCoefficient * (temperature - m_referenceTemperature) ); + real64 const dDensity_dp = m_compressibility * density; + real64 const dDensity_dT = -m_expansionCoefficient * density; + + massDensity = density; + dMassDensity[Deriv::dP] = dDensity_dp; + dMassDensity[Deriv::dT] = dDensity_dT; + + molarDensity = density / m_waterMolecularWeight; + dMolarDensity[Deriv::dP] = dDensity_dp / m_waterMolecularWeight; + dMolarDensity[Deriv::dT] = dDensity_dT / m_waterMolecularWeight; +} + +} // end namespace compositional + +} // end namespace constitutive + +} // end namespace geos + +#endif //GEOS_CONSTITUTIVE_FLUID_MULTIFLUID_COMPOSITIONAL_MODELS_IMMISCIBLEWATERDENSITY_HPP_ diff --git a/src/coreComponents/constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterParameters.cpp b/src/coreComponents/constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterParameters.cpp index 87c1d659435..ddb64316270 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterParameters.cpp +++ b/src/coreComponents/constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterParameters.cpp @@ -63,7 +63,41 @@ integer ImmiscibleWaterParameters::getWaterComponentIndex( ComponentProperties c void ImmiscibleWaterParameters::registerParametersImpl( MultiFluidBase * fluid ) { - GEOS_UNUSED_VAR( fluid ); + fluid->registerWrapper( viewKeyStruct::waterReferencePressureString(), &m_waterReferencePressure ). + setInputFlag( dataRepository::InputFlags::REQUIRED ). + setDescription( "The reference pressure for water density and viscosity" ); + + fluid->registerWrapper( viewKeyStruct::waterReferenceTemperatureString(), &m_waterReferenceTemperature ). + setInputFlag( dataRepository::InputFlags::OPTIONAL ). + setDefaultValue( m_waterReferenceTemperature ). + setDescription( "The reference temperature for water density and viscosity" ); + + fluid->registerWrapper( viewKeyStruct::waterDensityString(), &m_waterDensity ). + setInputFlag( dataRepository::InputFlags::REQUIRED ). + setDescription( "The water density at the reference pressure and temperature" ); + + fluid->registerWrapper( viewKeyStruct::waterViscosityString(), &m_waterViscosity ). + setInputFlag( dataRepository::InputFlags::REQUIRED ). + setDescription( "The water viscosity at the reference pressure and temperature" ); + + fluid->registerWrapper( viewKeyStruct::waterCompressibilityString(), &m_waterCompressibility ). + setInputFlag( dataRepository::InputFlags::REQUIRED ). + setDescription( "The compressibility of water" ); + + fluid->registerWrapper( viewKeyStruct::waterViscosityCompressibilityString(), &m_waterViscosityCompressibility ). + setInputFlag( dataRepository::InputFlags::OPTIONAL ). + setDefaultValue( m_waterViscosityCompressibility ). + setDescription( "The compressibility (normalized derivative with respect to pressure) of the water viscosity" ); + + fluid->registerWrapper( viewKeyStruct::waterExpansionCoefficientString(), &m_waterExpansionCoefficient ). + setInputFlag( dataRepository::InputFlags::OPTIONAL ). + setDefaultValue( m_waterExpansionCoefficient ). + setDescription( "The volumetric coefficient of thermal expansion of water" ); + + fluid->registerWrapper( viewKeyStruct::waterViscosityExpansionCoefficientString(), &m_waterViscosityExpansionCoefficient ). + setInputFlag( dataRepository::InputFlags::OPTIONAL ). + setDefaultValue( m_waterViscosityExpansionCoefficient ). + setDescription( "The coefficient of thermal expansion (normalized derivative with respect to temperature) of water viscosity" ); } void ImmiscibleWaterParameters::postInputInitializationImpl( MultiFluidBase const * fluid, @@ -80,6 +114,24 @@ void ImmiscibleWaterParameters::postInputInitializationImpl( MultiFluidBase cons GEOS_FMT( "{}: water component not found '{}'", fluid->getFullName(), MultiFluidBase::viewKeyStruct::componentNamesString() ), InputError ); + + // Pretty much everything should be positive + auto const checkLowerBound = [&]( real64 const & value, real64 const & bound, string const & attribute ) + { + GEOS_THROW_IF_LT_MSG( value, bound, + GEOS_FMT( "{}: invalid number of value in attribute '{}'. Should be greater than {}", + fluid->getFullName(), bound, attribute ), + InputError ); + }; + + real64 constexpr epsilon = MultiFluidConstants::epsilon; + + checkLowerBound( m_waterDensity, epsilon, viewKeyStruct::waterDensityString()); + checkLowerBound( m_waterViscosity, epsilon, viewKeyStruct::waterViscosityString()); + checkLowerBound( m_waterCompressibility, 0.0, viewKeyStruct::waterCompressibilityString()); + checkLowerBound( m_waterViscosityCompressibility, 0.0, viewKeyStruct::waterViscosityCompressibilityString()); + checkLowerBound( m_waterExpansionCoefficient, 0.0, viewKeyStruct::waterExpansionCoefficientString()); + checkLowerBound( m_waterViscosityExpansionCoefficient, 0.0, viewKeyStruct::waterViscosityExpansionCoefficientString()); } } // end namespace compositional diff --git a/src/coreComponents/constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterParameters.hpp b/src/coreComponents/constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterParameters.hpp index 9404e565f83..da1e0e4ddf4 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterParameters.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterParameters.hpp @@ -44,6 +44,27 @@ class ImmiscibleWaterParameters : public ModelParameters static integer getWaterComponentIndex( ComponentProperties const & componentProperties ); + struct viewKeyStruct + { + static constexpr char const * waterReferencePressureString() { return "waterReferencePressure"; } + static constexpr char const * waterReferenceTemperatureString() { return "waterReferenceTemperature"; } + static constexpr char const * waterDensityString() { return "waterDensity"; } + static constexpr char const * waterViscosityString() { return "waterViscosity"; } + static constexpr char const * waterCompressibilityString() { return "waterCompressibility"; } + static constexpr char const * waterViscosityCompressibilityString() { return "waterViscosityCompressibility"; } + static constexpr char const * waterExpansionCoefficientString() { return "waterExpansionCoefficient"; } + static constexpr char const * waterViscosityExpansionCoefficientString() { return "waterViscosityExpansionCoefficient"; } + }; + + real64 m_waterReferencePressure; + real64 m_waterReferenceTemperature{293.15}; + real64 m_waterDensity; + real64 m_waterViscosity; + real64 m_waterCompressibility; + real64 m_waterViscosityCompressibility{0.0}; + real64 m_waterExpansionCoefficient{0.0}; + real64 m_waterViscosityExpansionCoefficient{0.0}; + protected: void registerParametersImpl( MultiFluidBase * fluid ) override; diff --git a/src/coreComponents/constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterViscosity.cpp b/src/coreComponents/constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterViscosity.cpp new file mode 100644 index 00000000000..d1e5cd30867 --- /dev/null +++ b/src/coreComponents/constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterViscosity.cpp @@ -0,0 +1,75 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2024 Total, S.A + * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2018-2024 Chevron + * Copyright (c) 2019- GEOS/GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file ImmiscibleWaterViscosity.cpp + */ + +#include "ImmiscibleWaterViscosity.hpp" +#include "ImmiscibleWaterParameters.hpp" + +namespace geos +{ + +namespace constitutive +{ + +namespace compositional +{ + +ImmiscibleWaterViscosityUpdate::ImmiscibleWaterViscosityUpdate( real64 const referencePressure, + real64 const referenceTemperature, + real64 const viscosity, + real64 const compressibility, + real64 const expansionCoefficient ): + m_referencePressure( referencePressure ), + m_referenceTemperature( referenceTemperature ), + m_viscosity( viscosity ), + m_compressibility( compressibility ), + m_expansionCoefficient( expansionCoefficient ) +{} + +ImmiscibleWaterViscosity::ImmiscibleWaterViscosity( string const & name, + ComponentProperties const & componentProperties, + integer const phaseIndex, + ModelParameters const & modelParameters ): + FunctionBase( name, componentProperties ), + m_parameters( modelParameters ) +{ + GEOS_UNUSED_VAR( phaseIndex ); +} + +ImmiscibleWaterViscosity::KernelWrapper +ImmiscibleWaterViscosity::createKernelWrapper() const +{ + ImmiscibleWaterParameters const * waterParameters = m_parameters.get< ImmiscibleWaterParameters >(); + return KernelWrapper( waterParameters->m_waterReferencePressure, + waterParameters->m_waterReferenceTemperature, + waterParameters->m_waterViscosity, + waterParameters->m_waterViscosityCompressibility, + waterParameters->m_waterViscosityExpansionCoefficient ); +} + +std::unique_ptr< ModelParameters > +ImmiscibleWaterViscosity::createParameters( std::unique_ptr< ModelParameters > parameters ) +{ + return ImmiscibleWaterParameters::create( std::move( parameters ) ); +} + +} // namespace compositional + +} // namespace constitutive + +} // end namespace geos diff --git a/src/coreComponents/constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterViscosity.hpp b/src/coreComponents/constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterViscosity.hpp new file mode 100644 index 00000000000..815769110ab --- /dev/null +++ b/src/coreComponents/constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterViscosity.hpp @@ -0,0 +1,130 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2024 Total, S.A + * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2018-2024 Chevron + * Copyright (c) 2019- GEOS/GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file ImmiscibleWaterViscosity.hpp + */ + +#ifndef GEOS_CONSTITUTIVE_FLUID_MULTIFLUID_COMPOSITIONAL_MODELS_IMMISCIBLEWATERVISCOSITY_HPP_ +#define GEOS_CONSTITUTIVE_FLUID_MULTIFLUID_COMPOSITIONAL_MODELS_IMMISCIBLEWATERVISCOSITY_HPP_ + +#include "FunctionBase.hpp" +#include "constitutive/fluid/multifluid/Layouts.hpp" + +namespace geos +{ + +namespace constitutive +{ + +namespace compositional +{ + +class ImmiscibleWaterViscosityUpdate final : public FunctionBaseUpdate +{ + using Deriv = geos::constitutive::multifluid::DerivativeOffset; +public: + ImmiscibleWaterViscosityUpdate( real64 const referencePressure, + real64 const referenceTemperature, + real64 const viscosity, + real64 const compressibility, + real64 const expansionCoefficient ); + + template< integer USD1, integer USD2 > + GEOS_HOST_DEVICE + void compute( ComponentProperties::KernelWrapper const & componentProperties, + real64 const & pressure, + real64 const & temperature, + arraySlice1d< real64 const, USD1 > const & phaseComposition, + real64 const & density, + arraySlice1d< real64 const, USD2 > const & dDensity, + real64 & viscosity, + arraySlice1d< real64, USD2 > const & dViscosity, + bool useMass ) const; + +private: + real64 const m_referencePressure; + real64 const m_referenceTemperature; + real64 const m_viscosity; + real64 const m_compressibility; + real64 const m_expansionCoefficient; +}; + +class ImmiscibleWaterViscosity : public FunctionBase +{ +public: + ImmiscibleWaterViscosity( string const & name, + ComponentProperties const & componentProperties, + integer const phaseIndex, + ModelParameters const & modelParameters ); + + static string catalogName() { return ""; } + + FunctionType functionType() const override + { + return FunctionType::VISCOSITY; + } + + /// Type of kernel wrapper for in-kernel update + using KernelWrapper = ImmiscibleWaterViscosityUpdate; + + /** + * @brief Create an update kernel wrapper. + * @return the wrapper + */ + KernelWrapper createKernelWrapper() const; + + // Create parameters unique to this model + static std::unique_ptr< ModelParameters > createParameters( std::unique_ptr< ModelParameters > parameters ); + +private: + ModelParameters const & m_parameters; +}; + +template< integer USD1, integer USD2 > +GEOS_HOST_DEVICE +GEOS_FORCE_INLINE +void ImmiscibleWaterViscosityUpdate::compute( ComponentProperties::KernelWrapper const & componentProperties, + real64 const & pressure, + real64 const & temperature, + arraySlice1d< real64 const, USD1 > const & phaseComposition, + real64 const & density, + arraySlice1d< real64 const, USD2 > const & dDensity, + real64 & viscosity, + arraySlice1d< real64, USD2 > const & dViscosity, + bool useMass ) const +{ + GEOS_UNUSED_VAR( componentProperties ); + GEOS_UNUSED_VAR( phaseComposition ); + GEOS_UNUSED_VAR( density ); + GEOS_UNUSED_VAR( dDensity ); + GEOS_UNUSED_VAR( useMass ); + + LvArray::forValuesInSlice( dViscosity, setZero ); + + viscosity = m_viscosity * + LvArray::math::exp( m_compressibility * (pressure - m_referencePressure) ) * + LvArray::math::exp( -m_expansionCoefficient * (temperature - m_referenceTemperature) ); + dViscosity[Deriv::dP] = m_compressibility * viscosity; + dViscosity[Deriv::dT] = -m_expansionCoefficient * viscosity; +} + +} // end namespace compositional + +} // end namespace constitutive + +} // end namespace geos + +#endif //GEOS_CONSTITUTIVE_FLUID_MULTIFLUID_COMPOSITIONAL_MODELS_IMMISCIBLEWATERVISCOSITY_HPP_ diff --git a/src/coreComponents/constitutive/relativePermeability/BrooksCoreyBakerRelativePermeability.hpp b/src/coreComponents/constitutive/relativePermeability/BrooksCoreyBakerRelativePermeability.hpp index 57181e7f726..723abef4df9 100644 --- a/src/coreComponents/constitutive/relativePermeability/BrooksCoreyBakerRelativePermeability.hpp +++ b/src/coreComponents/constitutive/relativePermeability/BrooksCoreyBakerRelativePermeability.hpp @@ -86,7 +86,7 @@ class BrooksCoreyBakerRelativePermeabilityUpdate final : public RelativePermeabi * @param[in] maxValue the endpoint relative permeability value * * This function evaluates the relperm function and its derivative at a given phase saturation - * Reference: Eclipse technical description and Petrowiki + * Reference: Petrowiki */ GEOS_HOST_DEVICE GEOS_FORCE_INLINE diff --git a/src/coreComponents/constitutive/relativePermeability/BrooksCoreyStone2RelativePermeability.hpp b/src/coreComponents/constitutive/relativePermeability/BrooksCoreyStone2RelativePermeability.hpp index 99e6caff614..c6486d65551 100644 --- a/src/coreComponents/constitutive/relativePermeability/BrooksCoreyStone2RelativePermeability.hpp +++ b/src/coreComponents/constitutive/relativePermeability/BrooksCoreyStone2RelativePermeability.hpp @@ -86,7 +86,7 @@ class BrooksCoreyStone2RelativePermeabilityUpdate final : public RelativePermeab * @param[in] maxValue the endpoint relative permeability value * * This function evaluates the relperm function and its derivative at a given phase saturation - * Reference: Eclipse technical description and Petrowiki + * Reference: Petrowiki */ GEOS_HOST_DEVICE inline diff --git a/src/coreComponents/constitutive/relativePermeability/RelativePermeabilityInterpolators.hpp b/src/coreComponents/constitutive/relativePermeability/RelativePermeabilityInterpolators.hpp index eae8eb8b394..b2e18b9df9a 100644 --- a/src/coreComponents/constitutive/relativePermeability/RelativePermeabilityInterpolators.hpp +++ b/src/coreComponents/constitutive/relativePermeability/RelativePermeabilityInterpolators.hpp @@ -46,8 +46,8 @@ struct Baker * @param[in] dGoRelPerm_dOilVolFrac * * This function interpolates the two-phase relperms to compute the three-phase relperm - * The interpolation is based on the modified Baker method, also used as default in Eclipse - * Reference: Eclipse technical description and PetroWiki + * The interpolation is based on the modified Baker method + * Reference: PetroWiki */ GEOS_HOST_DEVICE GEOS_FORCE_INLINE @@ -131,7 +131,6 @@ struct Stone2 * * This function interpolates the two-phase relperms to compute the three-phase relperm * The interpolation is based on the modified Stone 2 method - * Reference: Eclipse technical description */ GEOS_HOST_DEVICE GEOS_FORCE_INLINE diff --git a/src/coreComponents/constitutive/relativePermeability/TableRelativePermeabilityHysteresis.cpp b/src/coreComponents/constitutive/relativePermeability/TableRelativePermeabilityHysteresis.cpp index 4eb224bb5e2..5fda6ae4c6a 100644 --- a/src/coreComponents/constitutive/relativePermeability/TableRelativePermeabilityHysteresis.cpp +++ b/src/coreComponents/constitutive/relativePermeability/TableRelativePermeabilityHysteresis.cpp @@ -488,7 +488,7 @@ void TableRelativePermeabilityHysteresis::computeLandCoefficient() ipNonWetting = m_phaseOrder[PhaseType::GAS]; } - // Note: for simplicity, the notations are taken from IX documentation (although this breaks our phaseVolFrac naming convention) + // Note: for simplicity, the notations are taken reservoir simulation literature (although this breaks our phaseVolFrac naming convention) // Step 1: Land parameter for the wetting phase diff --git a/src/coreComponents/constitutive/relativePermeability/TableRelativePermeabilityHysteresis.hpp b/src/coreComponents/constitutive/relativePermeability/TableRelativePermeabilityHysteresis.hpp index 1ecd09e95f7..7e5edb71292 100644 --- a/src/coreComponents/constitutive/relativePermeability/TableRelativePermeabilityHysteresis.hpp +++ b/src/coreComponents/constitutive/relativePermeability/TableRelativePermeabilityHysteresis.hpp @@ -568,7 +568,7 @@ class TableRelativePermeabilityHysteresis : public RelativePermeabilityBase /// Max krwo value (unique as krwo and krgo are considred non hysteretical in our implementation) real64 m_waterOilMaxRelPerm; - /// enum class to dispatch interpolator (Baker/Eclipse,StoneII) + /// enum class to dispatch interpolator (Baker,StoneII) ThreePhaseInterpolator m_threePhaseInterpolator; }; @@ -711,11 +711,11 @@ TableRelativePermeabilityHysteresis::KernelWrapper:: real64 & phaseRelPerm, real64 & dPhaseRelPerm_dPhaseVolFrac ) const { - // note: for simplicity, the notations are taken from IX documentation (although this breaks our phaseVolFrac naming convention) + // note: for simplicity, the notations are taken from reservoir simulation literature (although this breaks our phaseVolFrac naming + // convention) // Step 1: for a given value of the max historical saturation, Shy, compute the trapped critical saturation, Scrt, - // using Land's method. The calculation includes the modifications from Jerauld. This is equation 2.162 from - // the IX technical description. + // using Land's method. The calculation includes the modifications from Jerauld. real64 const S = phaseVolFraction; real64 const Scri = imbibitionPhaseMinVolFraction; real64 const Scrd = drainagePhaseMinVolFraction; @@ -744,9 +744,8 @@ TableRelativePermeabilityHysteresis::KernelWrapper:: else { // Step 2: compute the normalized saturation, S_norm, at which the imbibition relperm curve will be evaluated. - // This is equation 2.166 from the IX technical description. real64 const ratio = ( Smx - Scri ) / ( Shy - Scrt ); - real64 const Snorm = Scri + ( S - Scrt ) * ratio; // normalized saturation from equation 2.166 + real64 const Snorm = Scri + ( S - Scrt ) * ratio; // normalized saturation real64 const dSnorm_dS = ratio; // Step 3: evaluate the imbibition relperm, kri(Snorm), at the normalized saturation, Snorm. @@ -761,7 +760,6 @@ TableRelativePermeabilityHysteresis::KernelWrapper:: real64 const krdAtSmx = drainageRelPermEndPoint; // Step 6: apply the formula blending drainage and imbibition relperms from the Killough model. - // This equation 2.165 from the IX technical description. real64 const drainageRelPermRatio = krdAtShy / krdAtSmx; phaseRelPerm = kriAtSnorm * drainageRelPermRatio; dPhaseRelPerm_dPhaseVolFrac = dkriAtSnorm_dS * drainageRelPermRatio; diff --git a/src/coreComponents/constitutive/relativePermeability/VanGenuchtenBakerRelativePermeability.hpp b/src/coreComponents/constitutive/relativePermeability/VanGenuchtenBakerRelativePermeability.hpp index 88ac8c2eafc..cf3d399f2ef 100644 --- a/src/coreComponents/constitutive/relativePermeability/VanGenuchtenBakerRelativePermeability.hpp +++ b/src/coreComponents/constitutive/relativePermeability/VanGenuchtenBakerRelativePermeability.hpp @@ -87,7 +87,7 @@ class VanGenuchtenBakerRelativePermeabilityUpdate final : public RelativePermeab * @return (void) * * This function evaluates the relperm function and its derivative at a given phase saturation - * Reference: Eclipse technical description and Petrowiki + * Reference: Petrowiki */ GEOS_HOST_DEVICE GEOS_FORCE_INLINE diff --git a/src/coreComponents/constitutive/relativePermeability/VanGenuchtenStone2RelativePermeability.hpp b/src/coreComponents/constitutive/relativePermeability/VanGenuchtenStone2RelativePermeability.hpp index 9896b892950..28c9adda0b7 100644 --- a/src/coreComponents/constitutive/relativePermeability/VanGenuchtenStone2RelativePermeability.hpp +++ b/src/coreComponents/constitutive/relativePermeability/VanGenuchtenStone2RelativePermeability.hpp @@ -87,7 +87,7 @@ class VanGenuchtenStone2RelativePermeabilityUpdate final : public RelativePermea * @return (void) * * This function evaluates the relperm function and its derivative at a given phase saturation - * Reference: Eclipse technical description and Petrowiki + * Reference: Petrowiki */ GEOS_HOST_DEVICE inline diff --git a/src/coreComponents/constitutive/unitTests/CMakeLists.txt b/src/coreComponents/constitutive/unitTests/CMakeLists.txt index d357ad9290c..aa095d493c8 100644 --- a/src/coreComponents/constitutive/unitTests/CMakeLists.txt +++ b/src/coreComponents/constitutive/unitTests/CMakeLists.txt @@ -8,6 +8,7 @@ set( gtest_geosx_tests testElasticIsotropic.cpp testKValueInitialization.cpp testImmiscibleWaterFlashModel.cpp + testImmiscibleWaterProperties.cpp testLohrenzBrayClarkViscosity.cpp testModifiedCamClay.cpp testMultiFluidSelector.cpp diff --git a/src/coreComponents/constitutive/unitTests/testImmiscibleWaterProperties.cpp b/src/coreComponents/constitutive/unitTests/testImmiscibleWaterProperties.cpp new file mode 100644 index 00000000000..6b31ceffc9e --- /dev/null +++ b/src/coreComponents/constitutive/unitTests/testImmiscibleWaterProperties.cpp @@ -0,0 +1,285 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2024 Total, S.A + * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2023-2024 Chevron + * Copyright (c) 2019- GEOS/GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +// Source includes +#include "codingUtilities/UnitTestUtilities.hpp" +#include "constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterParameters.hpp" +#include "constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterDensity.hpp" +#include "constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterViscosity.hpp" +#include "TestFluid.hpp" +#include "TestFluidUtilities.hpp" + +using namespace geos::constitutive::compositional; + +namespace geos +{ +namespace testing +{ + +template< int NC > +using TestData = std::tuple< + real64 const, // pressure + real64 const, // temperature + Feed< NC > const, // phase composition + real64 const, // expected molar density + real64 const, // expected mass density + real64 const // expected viscosity + >; + +template< int NC > +struct FluidData {}; + +template<> +struct FluidData< 3 > +{ + static std::unique_ptr< TestFluid< 3 > > createFluid() + { + auto fluid = TestFluid< 3 >::create( {Fluid::C1, Fluid::C10, Fluid::H2O} ); + std::array< real64, 3 > const bics = {0.25, 0.0, 0.0}; + fluid->setBinaryCoefficients( bics ); + return fluid; + } +}; + +template< int NC > +class ImmiscibleWaterPropertiesTestFixture : public ::testing::TestWithParam< TestData< NC > > +{ + static constexpr real64 relTol = 1.0e-5; + static constexpr real64 absTol = 1.0e-7; + static constexpr int numComps = NC; + static constexpr int numDofs = NC + 2; + using Deriv = geos::constitutive::multifluid::DerivativeOffset; +public: + ImmiscibleWaterPropertiesTestFixture() + : m_fluid( FluidData< NC >::createFluid() ) + { + ComponentProperties const & componentProperties = this->m_fluid->getComponentProperties(); + + m_parameters = ImmiscibleWaterDensity::createParameters( std::make_unique< ModelParameters >() ); + m_parameters = ImmiscibleWaterViscosity::createParameters( std::move( m_parameters ) ); + + auto * waterParameters = const_cast< ImmiscibleWaterParameters * >(m_parameters->get< ImmiscibleWaterParameters >()); + waterParameters->m_waterReferencePressure = 215.0e5; + waterParameters->m_waterDensity = 1020.0; + waterParameters->m_waterCompressibility = 4.1483E-10; + waterParameters->m_waterViscosityCompressibility = 2.0E-11; + waterParameters->m_waterViscosity = 0.32929e-3; + + m_density = std::make_unique< ImmiscibleWaterDensity >( "PhaseDensity", componentProperties, 0, *m_parameters ); + m_viscosity = std::make_unique< ImmiscibleWaterViscosity >( "PhaseViscosity", componentProperties, 0, *m_parameters ); + } + + ~ImmiscibleWaterPropertiesTestFixture() = default; + + void testProperties( TestData< NC > const & data ) + { + real64 const pressure = std::get< 0 >( data ); + real64 const temperature = std::get< 1 >( data ); + stackArray1d< real64, numComps > phaseComposition; + TestFluid< NC >::createArray( phaseComposition, std::get< 2 >( data )); + real64 const expectedMolarDensity = std::get< 3 >( data ); + real64 const expectedMassDensity = std::get< 4 >( data ); + real64 const expectedViscosity = std::get< 5 >( data ); + + real64 molarDensity = 0.0; + real64 massDensity = 0.0; + real64 viscosity = 0.0; + stackArray1d< real64, numDofs > tempDerivs( numDofs ); + + auto componentProperties = m_fluid->createKernelWrapper(); + auto densityKernelWrapper = m_density->createKernelWrapper(); + auto viscosityKernelWrapper = m_viscosity->createKernelWrapper(); + + densityKernelWrapper.compute( componentProperties, + pressure, + temperature, + phaseComposition.toSliceConst(), + molarDensity, + tempDerivs.toSlice(), + massDensity, + tempDerivs.toSlice(), + false ); + + viscosityKernelWrapper.compute( componentProperties, + pressure, + temperature, + phaseComposition.toSliceConst(), + massDensity, + tempDerivs.toSliceConst(), + viscosity, + tempDerivs.toSlice(), + false ); + + checkRelativeError( molarDensity, expectedMolarDensity, relTol, absTol ); + checkRelativeError( massDensity, expectedMassDensity, relTol, absTol ); + checkRelativeError( viscosity, expectedViscosity, relTol, absTol ); + } + + void testPropertyDerivatives( TestData< NC > const & data ) + { + real64 const pressure = std::get< 0 >( data ); + real64 const temperature = std::get< 1 >( data ); + stackArray1d< real64, numComps > phaseComposition; + TestFluid< NC >::createArray( phaseComposition, std::get< 2 >( data )); + + auto componentProperties = m_fluid->createKernelWrapper(); + auto densityKernelWrapper = m_density->createKernelWrapper(); + auto viscosityKernelWrapper = m_viscosity->createKernelWrapper(); + + real64 molarDensity = 0.0; + real64 massDensity = 0.0; + real64 viscosity = 0.0; + stackArray1d< real64, numDofs > molarDensityDerivs( numDofs ); + stackArray1d< real64, numDofs > massDensityDerivs( numDofs ); + stackArray1d< real64, numDofs > viscosityDerivs( numDofs ); + stackArray1d< real64, 3 > derivatives( 3 ); + + densityKernelWrapper.compute( componentProperties, + pressure, + temperature, + phaseComposition.toSliceConst(), + molarDensity, + molarDensityDerivs.toSlice(), + massDensity, + massDensityDerivs.toSlice(), + false ); + + viscosityKernelWrapper.compute( componentProperties, + pressure, + temperature, + phaseComposition.toSliceConst(), + massDensity, + massDensityDerivs.toSliceConst(), + viscosity, + viscosityDerivs.toSlice(), + false ); + + // Viscosity values are very small so we will inflate the values to avoid false positives due + // to the absolute value check + real64 constexpr viscosityScale = 1.0e6; + + auto calculateProperties = [&]( real64 const p, real64 const t, auto const & zmf, auto & values ) { + stackArray1d< real64, numDofs > tempDerivs( numDofs ); + densityKernelWrapper.compute( componentProperties, p, t, zmf.toSliceConst(), + values[0], tempDerivs.toSlice(), values[1], tempDerivs.toSlice(), false ); + viscosityKernelWrapper.compute( componentProperties, p, t, zmf.toSliceConst(), + values[1], tempDerivs.toSliceConst(), values[2], tempDerivs.toSlice(), false ); + values[2] *= viscosityScale; + }; + + auto concatDerivatives = [&]( int idof ){ + derivatives[0] = molarDensityDerivs[idof]; + derivatives[1] = massDensityDerivs[idof]; + derivatives[2] = viscosityScale * viscosityDerivs[idof]; + }; + + // Compare against numerical derivatives + // -- Pressure derivative + concatDerivatives( Deriv::dP ); + real64 const dp = 1.0e-4 * pressure; + internal::testNumericalDerivative< 3 >( pressure, dp, derivatives.toSliceConst(), + [&]( real64 const p, auto & values ) { + calculateProperties( p, temperature, phaseComposition, values ); + }, absTol, relTol ); + + // -- Temperature derivative + concatDerivatives( Deriv::dT ); + real64 const dT = 1.0e-6 * temperature; + internal::testNumericalDerivative< 3 >( temperature, dT, derivatives.toSliceConst(), + [&]( real64 const t, auto & values ) { + calculateProperties( pressure, t, phaseComposition, values ); + }, absTol, relTol ); + + // -- Composition derivatives derivative + real64 const dz = 1.0e-7; + for( integer ic = 0; ic < NC; ++ic ) + { + concatDerivatives( Deriv::dC+ic ); + internal::testNumericalDerivative< 3 >( 0.0, dz, derivatives.toSliceConst(), + [&]( real64 const z, auto & values ) { + stackArray1d< real64, numComps > zmf( numComps ); + for( integer jc = 0; jc < numComps; ++jc ) + { + zmf[jc] = phaseComposition[jc]; + } + zmf[ic] += z; + calculateProperties( pressure, temperature, zmf, values ); + }, absTol, relTol ); + } + } + +protected: + std::unique_ptr< TestFluid< NC > > m_fluid{}; + std::unique_ptr< ImmiscibleWaterDensity > m_density{}; + std::unique_ptr< ImmiscibleWaterViscosity > m_viscosity{}; + std::unique_ptr< ModelParameters > m_parameters{}; +}; + +using ImmiscibleWaterProperties3 = ImmiscibleWaterPropertiesTestFixture< 3 >; + +TEST_P( ImmiscibleWaterProperties3, testProperties ) +{ + testProperties( GetParam() ); +} + +TEST_P( ImmiscibleWaterProperties3, testPropertyDerivatives ) +{ + testPropertyDerivatives( GetParam() ); +} + +//------------------------------------------------------------------------------- +// Data +//------------------------------------------------------------------------------- + +/* UNCRUSTIFY-OFF */ + +INSTANTIATE_TEST_SUITE_P( + ImmiscibleWaterProperties, ImmiscibleWaterProperties3, + ::testing::Values( + TestData< 3 >( 2.0e+06, 293.15, { 0.30, 0.30, 0.40 }, 5.616333e+04, 1.011782e+03, 3.291616e-04 ), + TestData< 3 >( 1.5e+07, 293.15, { 0.30, 0.30, 0.40 }, 5.646702e+04, 1.017253e+03, 3.292472e-04 ), + TestData< 3 >( 6.0e+07, 293.15, { 0.30, 0.30, 0.40 }, 5.753101e+04, 1.036421e+03, 3.295437e-04 ), + TestData< 3 >( 2.0e+06, 353.15, { 0.30, 0.30, 0.40 }, 5.616333e+04, 1.011782e+03, 3.291616e-04 ), + TestData< 3 >( 1.5e+07, 353.15, { 0.30, 0.30, 0.40 }, 5.646702e+04, 1.017253e+03, 3.292472e-04 ), + TestData< 3 >( 6.0e+07, 353.15, { 0.30, 0.30, 0.40 }, 5.753101e+04, 1.036421e+03, 3.295437e-04 ), + TestData< 3 >( 2.0e+06, 573.15, { 0.30, 0.30, 0.40 }, 5.616333e+04, 1.011782e+03, 3.291616e-04 ), + TestData< 3 >( 1.5e+07, 573.15, { 0.30, 0.30, 0.40 }, 5.646702e+04, 1.017253e+03, 3.292472e-04 ), + TestData< 3 >( 6.0e+07, 573.15, { 0.30, 0.30, 0.40 }, 5.753101e+04, 1.036421e+03, 3.295437e-04 ), + TestData< 3 >( 2.0e+06, 293.15, { 0.00, 0.00, 1.00 }, 5.616333e+04, 1.011782e+03, 3.291616e-04 ), + TestData< 3 >( 1.5e+07, 293.15, { 0.00, 0.00, 1.00 }, 5.646702e+04, 1.017253e+03, 3.292472e-04 ), + TestData< 3 >( 6.0e+07, 293.15, { 0.00, 0.00, 1.00 }, 5.753101e+04, 1.036421e+03, 3.295437e-04 ), + TestData< 3 >( 2.0e+06, 353.15, { 0.00, 0.00, 1.00 }, 5.616333e+04, 1.011782e+03, 3.291616e-04 ), + TestData< 3 >( 1.5e+07, 353.15, { 0.00, 0.00, 1.00 }, 5.646702e+04, 1.017253e+03, 3.292472e-04 ), + TestData< 3 >( 6.0e+07, 353.15, { 0.00, 0.00, 1.00 }, 5.753101e+04, 1.036421e+03, 3.295437e-04 ), + TestData< 3 >( 2.0e+06, 573.15, { 0.00, 0.00, 1.00 }, 5.616333e+04, 1.011782e+03, 3.291616e-04 ), + TestData< 3 >( 1.5e+07, 573.15, { 0.00, 0.00, 1.00 }, 5.646702e+04, 1.017253e+03, 3.292472e-04 ), + TestData< 3 >( 6.0e+07, 573.15, { 0.00, 0.00, 1.00 }, 5.753101e+04, 1.036421e+03, 3.295437e-04 ), + TestData< 3 >( 2.0e+06, 293.15, { 0.20, 0.80, 0.00 }, 5.616333e+04, 1.011782e+03, 3.291616e-04 ), + TestData< 3 >( 1.5e+07, 293.15, { 0.20, 0.80, 0.00 }, 5.646702e+04, 1.017253e+03, 3.292472e-04 ), + TestData< 3 >( 6.0e+07, 293.15, { 0.20, 0.80, 0.00 }, 5.753101e+04, 1.036421e+03, 3.295437e-04 ), + TestData< 3 >( 2.0e+06, 353.15, { 0.20, 0.80, 0.00 }, 5.616333e+04, 1.011782e+03, 3.291616e-04 ), + TestData< 3 >( 1.5e+07, 353.15, { 0.20, 0.80, 0.00 }, 5.646702e+04, 1.017253e+03, 3.292472e-04 ), + TestData< 3 >( 6.0e+07, 353.15, { 0.20, 0.80, 0.00 }, 5.753101e+04, 1.036421e+03, 3.295437e-04 ), + TestData< 3 >( 2.0e+06, 573.15, { 0.20, 0.80, 0.00 }, 5.616333e+04, 1.011782e+03, 3.291616e-04 ), + TestData< 3 >( 1.5e+07, 573.15, { 0.20, 0.80, 0.00 }, 5.646702e+04, 1.017253e+03, 3.292472e-04 ), + TestData< 3 >( 6.0e+07, 573.15, { 0.20, 0.80, 0.00 }, 5.753101e+04, 1.036421e+03, 3.295437e-04 ) + ) +); + +/* UNCRUSTIFY-ON */ + +} // testing + +} // geos diff --git a/src/coreComponents/constitutiveDrivers/CMakeLists.txt b/src/coreComponents/constitutiveDrivers/CMakeLists.txt index 376d4d34573..4cc69dd4935 100644 --- a/src/coreComponents/constitutiveDrivers/CMakeLists.txt +++ b/src/coreComponents/constitutiveDrivers/CMakeLists.txt @@ -39,6 +39,7 @@ set( constitutiveDrivers_sources fluid/multiFluid/CO2Brine/PVTDriverRunTestCO2BrinePhillipsThermalFluid.cpp fluid/multiFluid/CO2Brine/PVTDriverRunTestCO2BrineEzrokhiFluid.cpp fluid/multiFluid/CO2Brine/PVTDriverRunTestCO2BrineEzrokhiThermalFluid.cpp + fluid/multiFluid/compositional/PVTDriverRunTestCompositionalThreePhaseLohrenzBrayClarkViscosity.cpp fluid/multiFluid/compositional/PVTDriverRunTestCompositionalTwoPhaseConstantViscosity.cpp fluid/multiFluid/compositional/PVTDriverRunTestCompositionalTwoPhaseLohrenzBrayClarkViscosity.cpp fluid/multiFluid/reactive/ReactiveFluidDriver.cpp diff --git a/src/coreComponents/constitutiveDrivers/fluid/multiFluid/compositional/PVTDriverRunTestCompositionalThreePhaseLohrenzBrayClarkViscosity.cpp b/src/coreComponents/constitutiveDrivers/fluid/multiFluid/compositional/PVTDriverRunTestCompositionalThreePhaseLohrenzBrayClarkViscosity.cpp new file mode 100644 index 00000000000..c7ae9568177 --- /dev/null +++ b/src/coreComponents/constitutiveDrivers/fluid/multiFluid/compositional/PVTDriverRunTestCompositionalThreePhaseLohrenzBrayClarkViscosity.cpp @@ -0,0 +1,27 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2024 Total, S.A + * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2018-2024 Chevron + * Copyright (c) 2019- GEOS/GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/* + * PVTDriverRunTestCompositionalThreePhaseLohrenzBrayClarkViscosity.cpp + */ + +#include "constitutiveDrivers/fluid/multiFluid/PVTDriverRunTest.hpp" +#include "constitutive/fluid/multifluid/compositional/CompositionalMultiphaseFluid.hpp" + +namespace geos +{ +template void PVTDriver::runTest< constitutive::CompositionalThreePhaseLohrenzBrayClarkViscosity >( + constitutive::CompositionalThreePhaseLohrenzBrayClarkViscosity &, arrayView2d< real64 > const & ); +} diff --git a/src/coreComponents/fieldSpecification/AquiferBoundaryCondition.cpp b/src/coreComponents/fieldSpecification/AquiferBoundaryCondition.cpp index dffd783e997..afaa450a27e 100644 --- a/src/coreComponents/fieldSpecification/AquiferBoundaryCondition.cpp +++ b/src/coreComponents/fieldSpecification/AquiferBoundaryCondition.cpp @@ -163,7 +163,7 @@ void AquiferBoundaryCondition::postInputInitialization() void AquiferBoundaryCondition::setupDefaultPressureInfluenceFunction() { - // default table; see Eclipse or Intersect documentation + // default table array1d< array1d< real64 > > dimensionlessTime; dimensionlessTime.resize( 1 ); @@ -281,14 +281,13 @@ void AquiferBoundaryCondition::setGravityVector( R1Tensor const & gravityVector void AquiferBoundaryCondition::computeTimeConstant() { - // equation 5.3 of the Eclipse TD m_timeConstant = m_viscosity * m_porosity * m_totalCompressibility * m_innerRadius * m_innerRadius; m_timeConstant /= m_permeability; } void AquiferBoundaryCondition::computeInfluxConstant() { - // equation 5.4 of the Eclipse TD, including the constant 6.283 of the Carter-Tracy model + // 6.283 is the constant of the Carter-Tracy model m_influxConstant = 6.283 * m_thickness * ( m_angle / 360.0 ) * m_porosity * m_totalCompressibility * m_innerRadius * m_innerRadius; } diff --git a/src/coreComponents/fieldSpecification/AquiferBoundaryCondition.hpp b/src/coreComponents/fieldSpecification/AquiferBoundaryCondition.hpp index 9ee270df074..00333656f74 100644 --- a/src/coreComponents/fieldSpecification/AquiferBoundaryCondition.hpp +++ b/src/coreComponents/fieldSpecification/AquiferBoundaryCondition.hpp @@ -357,7 +357,7 @@ AquiferBoundaryCondition::KernelWrapper:: real64 const & areaFraction, real64 & dAquiferVolFlux_dPres ) const { - // compute the dimensionless time (equation 5.5 of the Eclipse TD) + // compute the dimensionless time real64 const dimensionlessTimeAtBeginningOfStep = timeAtBeginningOfStep / m_timeConstant; real64 const dimensionlessTimeAtEndOfStep = ( timeAtBeginningOfStep + dt ) / m_timeConstant; @@ -368,15 +368,15 @@ AquiferBoundaryCondition::KernelWrapper:: // compute the potential difference between the reservoir (old pressure) and the aquifer real64 const potDiff = m_initialPressure - reservoirPressure_n - m_density * ( m_gravCoef - reservoirGravCoef ); - // compute the a (equation 5.8 of the Eclipse TD) + // compute the a real64 const timeConstantInv = 1.0 / m_timeConstant; real64 const denom = presInfluence - dimensionlessTimeAtBeginningOfStep * dPresInfluence_dTime; real64 const a = timeConstantInv * ( m_influxConstant * potDiff - m_cumulativeFlux * dPresInfluence_dTime ) / denom; - // compute the b (equation 5.9 of the Eclipse TD) + // compute the b real64 const b = timeConstantInv * m_influxConstant / denom; - // compute the average inflow rate Q (equation 5.7 of the Eclipse TD) + // compute the average inflow rate Q real64 const aquiferVolFlux = areaFraction * ( a - b * ( reservoirPressure - reservoirPressure_n ) ); dAquiferVolFlux_dPres = -areaFraction * b; diff --git a/src/coreComponents/physicsSolvers/PhysicsSolverBase.cpp b/src/coreComponents/physicsSolvers/PhysicsSolverBase.cpp index 1e2ef81d5a9..13066188e5c 100644 --- a/src/coreComponents/physicsSolvers/PhysicsSolverBase.cpp +++ b/src/coreComponents/physicsSolvers/PhysicsSolverBase.cpp @@ -350,17 +350,17 @@ void PhysicsSolverBase::logEndOfCycleInformation( integer const cycleNumber, std::vector< real64 > const & subStepDt ) const { // The formating here is a work in progress. - GEOS_LOG_RANK_0( "\n------------------------- TIMESTEP END -------------------------" ); - GEOS_LOG_RANK_0( GEOS_FMT( " - Cycle: {}", cycleNumber ) ); - GEOS_LOG_RANK_0( GEOS_FMT( " - N substeps: {}", numOfSubSteps ) ); + GEOS_LOG_LEVEL_INFO_RANK_0( logInfo::TimeStep, "\n------------------------- TIMESTEP END -------------------------" ); + GEOS_LOG_LEVEL_INFO_RANK_0( logInfo::TimeStep, GEOS_FMT( " - Cycle: {}", cycleNumber ) ); + GEOS_LOG_LEVEL_INFO_RANK_0( logInfo::TimeStep, GEOS_FMT( " - N substeps: {}", numOfSubSteps ) ); std::string logMessage = " - dt:"; for( integer i = 0; i < numOfSubSteps; ++i ) { logMessage += " " + units::TimeFormatInfo::fromSeconds( subStepDt[i] ).toString(); } // Log the complete message once - GEOS_LOG_RANK_0( logMessage ); - GEOS_LOG_RANK_0( "------------------------------------------------------------------\n" ); + GEOS_LOG_LEVEL_INFO_RANK_0( logInfo::TimeStep, logMessage ); + GEOS_LOG_LEVEL_INFO_RANK_0( logInfo::TimeStep, "------------------------------------------------------------------\n" ); } real64 PhysicsSolverBase::setNextDt( real64 const & currentDt, diff --git a/src/coreComponents/physicsSolvers/contact/CMakeLists.txt b/src/coreComponents/physicsSolvers/contact/CMakeLists.txt index c9bf75bec3e..ac5fbe3bc1a 100644 --- a/src/coreComponents/physicsSolvers/contact/CMakeLists.txt +++ b/src/coreComponents/physicsSolvers/contact/CMakeLists.txt @@ -3,18 +3,21 @@ set( physicsSolvers_headers ${physicsSolvers_headers} contact/ContactSolverBase.hpp contact/ContactFields.hpp - contact/SolidMechanicsEFEMKernelsBase.hpp - contact/SolidMechanicsEFEMKernels.hpp - contact/SolidMechanicsEFEMStaticCondensationKernels.hpp - contact/SolidMechanicsEFEMKernelsHelper.hpp contact/SolidMechanicsEmbeddedFractures.hpp contact/SolidMechanicsLagrangeContact.hpp + contact/SolidMechanicsLagrangeContactBubbleStab.hpp contact/SolidMechanicsAugmentedLagrangianContact.hpp - contact/SolidMechanicsALMKernelsBase.hpp - contact/SolidMechanicsALMKernels.hpp - contact/SolidMechanicsALMKernelsHelper.hpp - contact/SolidMechanicsALMJumpUpdateKernels.hpp - contact/SolidMechanicsALMBubbleKernels.hpp + contact/kernels/SolidMechanicsConformingContactKernelsBase.hpp + contact/kernels/SolidMechanicsDisplacementJumpUpdateKernels.hpp + contact/kernels/SolidMechanicsEFEMKernelsBase.hpp + contact/kernels/SolidMechanicsEFEMKernels.hpp + contact/kernels/SolidMechanicsEFEMStaticCondensationKernels.hpp + contact/kernels/SolidMechanicsEFEMKernelsHelper.hpp + contact/kernels/SolidMechanicsALMKernelsBase.hpp + contact/kernels/SolidMechanicsALMKernels.hpp + contact/kernels/SolidMechanicsConformingContactKernelsHelper.hpp + contact/kernels/SolidMechanicsContactFaceBubbleKernels.hpp + contact/kernels/SolidMechanicsLagrangeContactKernels.hpp contact/LogLevelsInfo.hpp PARENT_SCOPE ) @@ -25,5 +28,6 @@ set( physicsSolvers_sources contact/ContactSolverBase.cpp contact/SolidMechanicsEmbeddedFractures.cpp contact/SolidMechanicsLagrangeContact.cpp + contact/SolidMechanicsLagrangeContactBubbleStab.cpp contact/SolidMechanicsAugmentedLagrangianContact.cpp PARENT_SCOPE ) \ No newline at end of file diff --git a/src/coreComponents/physicsSolvers/contact/ContactFields.hpp b/src/coreComponents/physicsSolvers/contact/ContactFields.hpp index f86521ffd75..59671a5ad6b 100644 --- a/src/coreComponents/physicsSolvers/contact/ContactFields.hpp +++ b/src/coreComponents/physicsSolvers/contact/ContactFields.hpp @@ -82,6 +82,14 @@ DECLARE_FIELD( slip, NO_WRITE, "Slip." ); +DECLARE_FIELD( deltaSlip, + "deltaSlip", + array2d< real64 >, + 0.0, + LEVEL_0, + WRITE_AND_READ, + "Slip increment" ); + DECLARE_FIELD( deltaDispJump, "deltaDisplacementJump", array2d< real64 >, @@ -146,6 +154,14 @@ DECLARE_FIELD( oldFractureState, NO_WRITE, "Fracture state at the previous timestep." ); +DECLARE_FIELD( targetIncrementalJump, + "targetIncrementalJump", + array2d< real64 >, + 0, + NOPLOT, + WRITE_AND_READ, + "It's the target incremental jump in a timestep (e.g., slip coming from RS)." ); + ENUM_STRINGS( FractureState::State, "stick", "new_slip", "slip", "open" ); diff --git a/src/coreComponents/physicsSolvers/contact/ContactSolverBase.cpp b/src/coreComponents/physicsSolvers/contact/ContactSolverBase.cpp index 63210cb686c..4b6aaef3599 100644 --- a/src/coreComponents/physicsSolvers/contact/ContactSolverBase.cpp +++ b/src/coreComponents/physicsSolvers/contact/ContactSolverBase.cpp @@ -92,6 +92,8 @@ void ContactSolverBase::registerDataOnMesh( dataRepository::Group & meshBodies ) subRegion.registerField< fields::contact::oldFractureState >( getName() ); subRegion.registerField< fields::contact::slip >( getName() ); + + subRegion.registerField< fields::contact::deltaSlip >( getName() ); } ); } ); @@ -251,4 +253,4 @@ void ContactSolverBase::setConstitutiveNamesCallSuper( ElementSubRegionBase & su } } -} /* namespace geos */ +} /* namespace geos */ diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsAugmentedLagrangianContact.cpp b/src/coreComponents/physicsSolvers/contact/SolidMechanicsAugmentedLagrangianContact.cpp index fee37cee7b9..466438795b6 100644 --- a/src/coreComponents/physicsSolvers/contact/SolidMechanicsAugmentedLagrangianContact.cpp +++ b/src/coreComponents/physicsSolvers/contact/SolidMechanicsAugmentedLagrangianContact.cpp @@ -20,10 +20,12 @@ #include "mesh/DomainPartition.hpp" #include "SolidMechanicsAugmentedLagrangianContact.hpp" -#include "physicsSolvers/contact/SolidMechanicsALMKernels.hpp" -#include "physicsSolvers/contact/SolidMechanicsALMSimultaneousKernels.hpp" -#include "physicsSolvers/contact/SolidMechanicsALMJumpUpdateKernels.hpp" -#include "physicsSolvers/contact/SolidMechanicsALMBubbleKernels.hpp" +#include "physicsSolvers/contact/kernels/SolidMechanicsConformingContactKernelsBase.hpp" +#include "physicsSolvers/contact/kernels/SolidMechanicsALMKernels.hpp" +#include "physicsSolvers/contact/kernels/SolidMechanicsALMKernelsBase.hpp" +#include "physicsSolvers/contact/kernels/SolidMechanicsALMSimultaneousKernels.hpp" +#include "physicsSolvers/contact/kernels/SolidMechanicsDisplacementJumpUpdateKernels.hpp" +#include "physicsSolvers/contact/kernels/SolidMechanicsContactFaceBubbleKernels.hpp" #include "physicsSolvers/contact/LogLevelsInfo.hpp" #include "constitutive/ConstitutiveManager.hpp" @@ -81,26 +83,13 @@ void SolidMechanicsAugmentedLagrangianContact::registerDataOnMesh( dataRepositor { fractureRegion.forElementSubRegions< SurfaceElementSubRegion >( [&]( SurfaceElementSubRegion & subRegion ) { + subRegion.registerField< fields::contact::deltaTraction >( getName() ). + reference().resizeDimension< 1 >( 3 ); + // Register the rotation matrix subRegion.registerField< contact::rotationMatrix >( this->getName() ). reference().resizeDimension< 1, 2 >( 3, 3 ); - // Register the traction field - subRegion.registerField< contact::traction >( this->getName() ). - reference().resizeDimension< 1 >( 3 ); - - // Register the displacement jump - subRegion.registerField< contact::dispJump >( this->getName() ). - reference().resizeDimension< 1 >( 3 ); - - // Register the delta displacement jump - subRegion.registerField< contact::deltaDispJump >( this->getName() ). - reference().resizeDimension< 1 >( 3 ); - - // Register the displacement jump old - subRegion.registerField< contact::oldDispJump >( this->getName() ). - reference().resizeDimension< 1 >( 3 ); - // Register the penalty coefficients for the iterative procedure subRegion.registerField< contact::iterativePenalty >( this->getName() ). reference().resizeDimension< 1 >( 5 ); @@ -252,12 +241,19 @@ void SolidMechanicsAugmentedLagrangianContact::implicitStepSetup( real64 const & arrayView3d< real64 > const rotationMatrix = subRegion.getField< fields::contact::rotationMatrix >().toView(); + arrayView2d< real64 > const unitNormal = subRegion.getNormalVector(); + arrayView2d< real64 > const unitTangent1 = subRegion.getTangentVector1(); + arrayView2d< real64 > const unitTangent2 = subRegion.getTangentVector2(); + // Compute rotation matrices - solidMechanicsALMKernels::ComputeRotationMatricesKernel:: + solidMechanicsConformingContactKernels::ComputeRotationMatricesKernel:: launch< parallelDevicePolicy<> >( subRegion.size(), faceNormal, elemsToFaces, - rotationMatrix ); + rotationMatrix, + unitNormal, + unitTangent1, + unitTangent2 ); // Set the tollerances computeTolerances( domain ); @@ -492,13 +488,13 @@ void SolidMechanicsAugmentedLagrangianContact::assembleSystem( real64 const time real64 const gravityVectorData[3] = LVARRAY_TENSOROPS_INIT_LOCAL_3( gravityVector() ); - solidMechanicsALMKernels::ALMBubbleFactory kernelFactory( dispDofNumber, - bubbleDofNumber, - dofManager.rankOffset(), - localMatrix, - localRhs, - dt, - gravityVectorData ); + solidMechanicsConformingContactKernels::FaceBubbleFactory kernelFactory( dispDofNumber, + bubbleDofNumber, + dofManager.rankOffset(), + localMatrix, + localRhs, + dt, + gravityVectorData ); real64 maxTraction = finiteElement:: regionBasedKernelApplication @@ -699,13 +695,13 @@ void SolidMechanicsAugmentedLagrangianContact::applySystemSolution( DofManager c arrayView1d< localIndex const > const & faceElementList ) { - solidMechanicsALMKernels::ALMJumpUpdateFactory kernelFactory( dispDofNumber, - bubbleDofNumber, - dofManager.rankOffset(), - voidMatrix.toViewConstSizes(), - voidRhs.toView(), - dt, - faceElementList ); + solidMechanicsConformingContactKernels::DispJumpUpdateFactory kernelFactory( dispDofNumber, + bubbleDofNumber, + dofManager.rankOffset(), + voidMatrix.toViewConstSizes(), + voidRhs.toView(), + dt, + faceElementList ); real64 maxTraction = finiteElement:: interfaceBasedKernelApplication @@ -787,7 +783,7 @@ bool SolidMechanicsAugmentedLagrangianContact::updateConfiguration( DomainPartit arrayView1d< real64 const > const & normalTractionTolerance = subRegion.getReference< array1d< real64 > >( viewKeyStruct::normalTractionToleranceString() ); - arrayView1d< real64 const > const area = subRegion.getElementArea().toViewConst(); + arrayView1d< real64 const > const faceElementArea = subRegion.getElementArea().toViewConst(); std::ptrdiff_t const sizes[ 2 ] = {subRegion.size(), 3}; traction_new.resize( 2, sizes ); @@ -810,6 +806,7 @@ bool SolidMechanicsAugmentedLagrangianContact::updateConfiguration( DomainPartit traction, dispJump, deltaDispJump, + faceElementArea, traction_new_v ); } else @@ -821,6 +818,7 @@ bool SolidMechanicsAugmentedLagrangianContact::updateConfiguration( DomainPartit traction, dispJump, deltaDispJump, + faceElementArea, traction_new_v ); } } ); @@ -843,7 +841,6 @@ bool SolidMechanicsAugmentedLagrangianContact::updateConfiguration( DomainPartit normalDisplacementTolerance, slidingTolerance, slidingCheckTolerance, - area, fractureState, condConv_v ); } ); @@ -967,6 +964,8 @@ bool SolidMechanicsAugmentedLagrangianContact::updateConfiguration( DomainPartit arrayView2d< real64 const > const deltaDispJump = subRegion.getField< contact::deltaDispJump >(); + arrayView1d< real64 const > const faceElementArea = subRegion.getField< fields::elementArea >(); + constitutiveUpdatePassThru( frictionLaw, [&] ( auto & castedFrictionLaw ) { using FrictionType = TYPEOFREF( castedFrictionLaw ); @@ -978,6 +977,7 @@ bool SolidMechanicsAugmentedLagrangianContact::updateConfiguration( DomainPartit oldDispJump, dispJump, iterativePenalty, + faceElementArea, m_symmetric, normalTractionTolerance, traction, diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsEmbeddedFractures.cpp b/src/coreComponents/physicsSolvers/contact/SolidMechanicsEmbeddedFractures.cpp index 65584046e5c..e25682f1a13 100644 --- a/src/coreComponents/physicsSolvers/contact/SolidMechanicsEmbeddedFractures.cpp +++ b/src/coreComponents/physicsSolvers/contact/SolidMechanicsEmbeddedFractures.cpp @@ -32,9 +32,9 @@ #include "mesh/SurfaceElementRegion.hpp" #include "physicsSolvers/solidMechanics/SolidMechanicsFields.hpp" #include "physicsSolvers/solidMechanics/SolidMechanicsLagrangianFEM.hpp" -#include "physicsSolvers/contact/SolidMechanicsEFEMKernels.hpp" -#include "physicsSolvers/contact/SolidMechanicsEFEMStaticCondensationKernels.hpp" -#include "physicsSolvers/contact/SolidMechanicsEFEMJumpUpdateKernels.hpp" +#include "physicsSolvers/contact/kernels/SolidMechanicsEFEMKernels.hpp" +#include "physicsSolvers/contact/kernels/SolidMechanicsEFEMStaticCondensationKernels.hpp" +#include "physicsSolvers/contact/kernels/SolidMechanicsEFEMJumpUpdateKernels.hpp" namespace geos { diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsLagrangeContact.cpp b/src/coreComponents/physicsSolvers/contact/SolidMechanicsLagrangeContact.cpp index 003ed8cb7f7..3c1537f9c8f 100644 --- a/src/coreComponents/physicsSolvers/contact/SolidMechanicsLagrangeContact.cpp +++ b/src/coreComponents/physicsSolvers/contact/SolidMechanicsLagrangeContact.cpp @@ -504,9 +504,9 @@ void SolidMechanicsLagrangeContact::computeFaceDisplacementJump( DomainPartition ArrayOfArraysView< localIndex const > const & elemsToFaces = subRegion.faceList().toViewConst(); arrayView1d< real64 const > const & area = subRegion.getElementArea().toViewConst(); - arrayView2d< real64 > const & dispJump = subRegion.getField< contact::dispJump >(); - arrayView1d< real64 > const & slip = subRegion.getField< fields::contact::slip >(); - arrayView1d< real64 > const & aperture = subRegion.getField< fields::elementAperture >(); + arrayView2d< real64 > const dispJump = subRegion.getField< contact::dispJump >(); + arrayView1d< real64 > const slip = subRegion.getField< fields::contact::slip >(); + arrayView1d< real64 > const aperture = subRegion.getField< fields::elementAperture >(); forAll< parallelHostPolicy >( subRegion.size(), [=] ( localIndex const kfe ) { @@ -1593,7 +1593,7 @@ void SolidMechanicsLagrangeContact:: { elemRHS[i] = Ja * ( traction[kfe][i] - limitTau * sliding[ i-1 ] / slidingNorm ); - dRdT( i, 0 ) = Ja * dLimitTau_dNormalTraction * sliding[ i-1 ] / slidingNorm; + dRdT( i, 0 ) = -Ja * dLimitTau_dNormalTraction * sliding[ i-1 ] / slidingNorm; dRdT( i, i ) = Ja; } @@ -1641,7 +1641,7 @@ void SolidMechanicsLagrangeContact:: { elemRHS[i] = Ja * traction[kfe][i] * ( 1.0 - limitTau / vauxNorm ); - dRdT( i, 0 ) = Ja * traction[kfe][i] * dLimitTau_dNormalTraction / vauxNorm; + dRdT( i, 0 ) = -Ja * traction[kfe][i] * dLimitTau_dNormalTraction / vauxNorm; dRdT( i, i ) = Ja; } } diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsLagrangeContactBubbleStab.cpp b/src/coreComponents/physicsSolvers/contact/SolidMechanicsLagrangeContactBubbleStab.cpp new file mode 100644 index 00000000000..88f575a8c88 --- /dev/null +++ b/src/coreComponents/physicsSolvers/contact/SolidMechanicsLagrangeContactBubbleStab.cpp @@ -0,0 +1,1180 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2024 Total, S.A + * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2023-2024 Chevron + * Copyright (c) 2019- GEOS/GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file SolidMechanicsLagrangeContactBubbleStab.cpp + * + */ + +#include "mesh/DomainPartition.hpp" +#include "SolidMechanicsLagrangeContactBubbleStab.hpp" + +#include "physicsSolvers/contact/kernels/SolidMechanicsConformingContactKernelsBase.hpp" +#include "physicsSolvers/contact/kernels/SolidMechanicsLagrangeContactKernels.hpp" +#include "physicsSolvers/contact/kernels/SolidMechanicsDisplacementJumpUpdateKernels.hpp" +#include "physicsSolvers/contact/kernels/SolidMechanicsContactFaceBubbleKernels.hpp" +#include "physicsSolvers/contact/LogLevelsInfo.hpp" + +#include "constitutive/ConstitutiveManager.hpp" +#include "constitutive/contact/FrictionSelector.hpp" +#include "fieldSpecification/FieldSpecificationManager.hpp" + + +namespace geos +{ + +using namespace constitutive; +using namespace dataRepository; +using namespace fields; + +SolidMechanicsLagrangeContactBubbleStab::SolidMechanicsLagrangeContactBubbleStab( const string & name, + Group * const parent ): + ContactSolverBase( name, parent ) +{ + m_faceTypeToFiniteElements["Quadrilateral"] = std::make_unique< finiteElement::H1_QuadrilateralFace_Lagrange1_GaussLegendre2 >(); + m_faceTypeToFiniteElements["Triangle"] = std::make_unique< finiteElement::H1_TriangleFace_Lagrange1_Gauss1 >(); + +} + +SolidMechanicsLagrangeContactBubbleStab::~SolidMechanicsLagrangeContactBubbleStab() +{ + // TODO Auto-generated destructor stub +} + +real64 SolidMechanicsLagrangeContactBubbleStab::solverStep( real64 const & time_n, + real64 const & dt, + const integer cycleNumber, + DomainPartition & domain ) +{ + if( cycleNumber == 0 ) + { + /// Apply initial conditions to the Fault + FieldSpecificationManager & fieldSpecificationManager = FieldSpecificationManager::getInstance(); + + forDiscretizationOnMeshTargets ( domain.getMeshBodies(), [&]( string const &, + MeshLevel & mesh, + arrayView1d< string const > const & ) + + { + fieldSpecificationManager.applyInitialConditions( mesh ); + // Would like to do it like this but it is not working. There is a cast in Object path that tries to cast + // all objects that derive from ElementSubRegionBase to the specified type so this obviously fails. + // fieldSpecificationManager.forSubGroups< FieldSpecificationBase >( [&] ( FieldSpecificationBase const & fs ) + // { + // if( fs.initialCondition() ) + // { + // fs.apply< SurfaceElementSubRegion >( mesh, + // [&]( FieldSpecificationBase const & bc, + // string const &, + // SortedArrayView< localIndex const > const & targetSet, + // SurfaceElementSubRegion & targetGroup, + // string const fieldName ) + // { + // bc.applyFieldValue< FieldSpecificationEqual >( targetSet, 0.0, targetGroup, fieldName ); + // } ); + // } + // } ); + } ); + } + + return ContactSolverBase::solverStep( time_n, dt, cycleNumber, domain ); +} + +void SolidMechanicsLagrangeContactBubbleStab::registerDataOnMesh( Group & meshBodies ) +{ + ContactSolverBase::registerDataOnMesh( meshBodies ); + + forDiscretizationOnMeshTargets( meshBodies, [&] ( string const &, + MeshLevel & meshLevel, + arrayView1d< string const > const & ) + { + FaceManager & faceManager = meshLevel.getFaceManager(); + + // Register the total bubble displacement + faceManager.registerField< solidMechanics::totalBubbleDisplacement >( this->getName() ). + reference().resizeDimension< 1 >( 3 ); + + // Register the incremental bubble displacement + faceManager.registerField< solidMechanics::incrementalBubbleDisplacement >( this->getName() ). + reference().resizeDimension< 1 >( 3 ); + } ); + + forFractureRegionOnMeshTargets( meshBodies, [&] ( SurfaceElementRegion & fractureRegion ) + { + fractureRegion.forElementSubRegions< SurfaceElementSubRegion >( [&]( SurfaceElementSubRegion & subRegion ) + { + // Register the rotation matrix + subRegion.registerField< contact::rotationMatrix >( this->getName() ). + reference().resizeDimension< 1, 2 >( 3, 3 ); + + subRegion.registerField< fields::contact::deltaTraction >( getName() ). + reference().resizeDimension< 1 >( 3 ); + + subRegion.registerField< fields::contact::targetIncrementalJump >( getName() ). + reference().resizeDimension< 1 >( 3 ); + } ); + } ); +} + +void SolidMechanicsLagrangeContactBubbleStab::setupDofs( DomainPartition const & domain, + DofManager & dofManager ) const +{ + GEOS_MARK_FUNCTION; + + SolidMechanicsLagrangianFEM::setupDofs( domain, dofManager ); + + map< std::pair< string, string >, array1d< string > > meshTargets; + forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const & meshBodyName, + MeshLevel const & meshLevel, + arrayView1d< string const > const & regionNames ) + { + array1d< string > regions; + ElementRegionManager const & elementRegionManager = meshLevel.getElemManager(); + elementRegionManager.forElementRegions< SurfaceElementRegion >( regionNames, + [&]( localIndex const, + SurfaceElementRegion const & region ) + { + regions.emplace_back( region.getName() ); + } ); + meshTargets[std::make_pair( meshBodyName, meshLevel.getName())] = std::move( regions ); + } ); + + dofManager.addField( solidMechanics::totalBubbleDisplacement::key(), + FieldLocation::Face, + 3, + meshTargets ); + + dofManager.addField( contact::traction::key(), + FieldLocation::Elem, + 3, + meshTargets ); + + // Add coupling between bubble + dofManager.addCoupling( solidMechanics::totalBubbleDisplacement::key(), + solidMechanics::totalBubbleDisplacement::key(), + DofManager::Connector::Elem ); + + dofManager.addCoupling( contact::traction::key(), + contact::traction::key(), + DofManager::Connector::Elem ); + + dofManager.addCoupling( solidMechanics::totalDisplacement::key(), + contact::traction::key(), + DofManager::Connector::Elem, + meshTargets ); + + dofManager.addCoupling( solidMechanics::totalBubbleDisplacement::key(), + contact::traction::key(), + DofManager::Connector::Elem, + meshTargets ); + + dofManager.addCoupling( solidMechanics::totalDisplacement::key(), + solidMechanics::totalBubbleDisplacement::key(), + DofManager::Connector::Elem, + meshTargets ); +} + +void SolidMechanicsLagrangeContactBubbleStab::setupSystem( DomainPartition & domain, + DofManager & dofManager, + CRSMatrix< real64, globalIndex > & localMatrix, + ParallelVector & rhs, + ParallelVector & solution, + bool const GEOS_UNUSED_PARAM( setSparsity ) ) +{ + + + // setup monolithic coupled system + + // Create the lists of interface elements that have same type. + createFaceTypeList( domain ); + + // Create the lists of interface elements that have same type and same fracture state. + updateStickSlipList( domain ); + + // Create the list of cell elements that they are enriched with bubble functions. + createBubbleCellList( domain ); + + dofManager.setDomain( domain ); + setupDofs( domain, dofManager ); + dofManager.reorderByRank(); + + // Set the sparsity pattern without the Abu and Aub blocks. + SparsityPattern< globalIndex > patternDiag; + dofManager.setSparsityPattern( patternDiag ); + + // Get the original row lengths (diagonal blocks only) + array1d< localIndex > rowLengths( patternDiag.numRows() ); + for( localIndex localRow = 0; localRow < patternDiag.numRows(); ++localRow ) + { + rowLengths[localRow] = patternDiag.numNonZeros( localRow ); + } + + // Add the number of nonzeros induced by coupling + this->addCouplingNumNonzeros( domain, dofManager, rowLengths.toView() ); + + // Create a new pattern with enough capacity for coupled matrix + SparsityPattern< globalIndex > pattern; + pattern.resizeFromRowCapacities< parallelHostPolicy >( patternDiag.numRows(), patternDiag.numColumns(), rowLengths.data() ); + + // Copy the original nonzeros + for( localIndex localRow = 0; localRow < patternDiag.numRows(); ++localRow ) + { + globalIndex const * cols = patternDiag.getColumns( localRow ).dataIfContiguous(); + pattern.insertNonZeros( localRow, cols, cols + patternDiag.numNonZeros( localRow ) ); + } + + // Add the nonzeros from coupling + this->addCouplingSparsityPattern( domain, dofManager, pattern.toView() ); + + // Finally, steal the pattern into a CRS matrix + localMatrix.assimilate< parallelDevicePolicy<> >( std::move( pattern ) ); + localMatrix.setName( this->getName() + "/localMatrix" ); + + rhs.setName( this->getName() + "/rhs" ); + rhs.create( dofManager.numLocalDofs(), MPI_COMM_GEOS ); + + solution.setName( this->getName() + "/solution" ); + solution.create( dofManager.numLocalDofs(), MPI_COMM_GEOS ); + + computeRotationMatrices( domain ); +} + +void SolidMechanicsLagrangeContactBubbleStab::computeRotationMatrices( DomainPartition & domain ) const +{ + forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const &, + MeshLevel & mesh, + arrayView1d< string const > const & ) + { + + FaceManager & faceManager = mesh.getFaceManager(); + ElementRegionManager & elemManager = mesh.getElemManager(); + + SurfaceElementRegion & region = elemManager.getRegion< SurfaceElementRegion >( getUniqueFractureRegionName() ); + FaceElementSubRegion & subRegion = region.getUniqueSubRegion< FaceElementSubRegion >(); + + arrayView2d< real64 const > const faceNormal = faceManager.faceNormal(); + ArrayOfArraysView< localIndex const > const elemsToFaces = subRegion.faceList().toViewConst(); + + arrayView2d< real64 > const incrBubbleDisp = + faceManager.getField< fields::solidMechanics::incrementalBubbleDisplacement >(); + + arrayView3d< real64 > const rotationMatrix = + subRegion.getField< fields::contact::rotationMatrix >().toView(); + + arrayView2d< real64 > const unitNormal = subRegion.getNormalVector(); + arrayView2d< real64 > const unitTangent1 = subRegion.getTangentVector1(); + arrayView2d< real64 > const unitTangent2 = subRegion.getTangentVector2(); + + // Compute rotation matrices + solidMechanicsConformingContactKernels::ComputeRotationMatricesKernel::launch< parallelDevicePolicy<> >( subRegion.size(), + faceNormal, + elemsToFaces, + rotationMatrix, + unitNormal, + unitTangent1, + unitTangent2 ); + + forAll< parallelDevicePolicy<> >( subRegion.size(), + [ = ] + GEOS_HOST_DEVICE ( localIndex const k ) + { + localIndex const kf0 = elemsToFaces[k][0]; + localIndex const kf1 = elemsToFaces[k][1]; + LvArray::tensorOps::fill< 3 >( incrBubbleDisp[kf0], 0.0 ); + LvArray::tensorOps::fill< 3 >( incrBubbleDisp[kf1], 0.0 ); + } ); + } ); +} + +void SolidMechanicsLagrangeContactBubbleStab::implicitStepSetup( real64 const & time_n, + real64 const & dt, + DomainPartition & domain ) +{ + SolidMechanicsLagrangianFEM::implicitStepSetup( time_n, dt, domain ); +} + +void SolidMechanicsLagrangeContactBubbleStab::assembleSystem( real64 const time, + real64 const dt, + DomainPartition & domain, + DofManager const & dofManager, + CRSMatrixView< real64, globalIndex const > const & localMatrix, + arrayView1d< real64 > const & localRhs ) +{ + GEOS_MARK_FUNCTION; + + SolidMechanicsLagrangianFEM::assembleSystem( time, + dt, + domain, + dofManager, + localMatrix, + localRhs ); + + assembleStabilization( dt, domain, dofManager, localMatrix, localRhs ); + + assembleContact( dt, domain, dofManager, localMatrix, localRhs ); + + // parallel_matrix.create( localMatrix.toViewConst(), dofManager.numLocalDofs(), MPI_COMM_GEOS ); + // parallel_matrix.write("newMatrix.mtx"); + // std::cout << localRhs << std::endl; +} + +void SolidMechanicsLagrangeContactBubbleStab::assembleStabilization( real64 const dt, + DomainPartition & domain, + DofManager const & dofManager, + CRSMatrixView< real64, globalIndex const > const & localMatrix, + arrayView1d< real64 > const & localRhs ) +{ + // Loop for assembling contributes of bubble elements (Abb, Abu, Aub) + forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const &, + MeshLevel & mesh, + arrayView1d< string const > const & regionNames ) + { + NodeManager const & nodeManager = mesh.getNodeManager(); + FaceManager const & faceManager = mesh.getFaceManager(); + + string const & dispDofKey = dofManager.getKey( solidMechanics::totalDisplacement::key() ); + string const & bubbleDofKey = dofManager.getKey( solidMechanics::totalBubbleDisplacement::key() ); + + arrayView1d< globalIndex const > const dispDofNumber = nodeManager.getReference< globalIndex_array >( dispDofKey ); + arrayView1d< globalIndex const > const bubbleDofNumber = faceManager.getReference< globalIndex_array >( bubbleDofKey ); + + real64 const gravityVectorData[3] = LVARRAY_TENSOROPS_INIT_LOCAL_3( gravityVector() ); + + + solidMechanicsConformingContactKernels::FaceBubbleFactory kernelFactory( dispDofNumber, + bubbleDofNumber, + dofManager.rankOffset(), + localMatrix, + localRhs, + dt, + gravityVectorData ); + + real64 maxTraction = finiteElement:: + regionBasedKernelApplication + < parallelDevicePolicy< >, + constitutive::ElasticIsotropic, + CellElementSubRegion >( mesh, + regionNames, + getDiscretizationName(), + SolidMechanicsLagrangianFEM::viewKeyStruct::solidMaterialNamesString(), + kernelFactory ); + + GEOS_UNUSED_VAR( maxTraction ); + + } ); +} + +void SolidMechanicsLagrangeContactBubbleStab::assembleContact( real64 const dt, + DomainPartition & domain, + DofManager const & dofManager, + CRSMatrixView< real64, globalIndex const > const & localMatrix, + arrayView1d< real64 > const & localRhs ) +{ + forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const & meshName, + MeshLevel & mesh, + arrayView1d< string const > const & ) + { + NodeManager const & nodeManager = mesh.getNodeManager(); + FaceManager const & faceManager = mesh.getFaceManager(); + + string const & dispDofKey = dofManager.getKey( solidMechanics::totalDisplacement::key() ); + string const & bubbleDofKey = dofManager.getKey( solidMechanics::totalBubbleDisplacement::key() ); + string const & tractionDofKey = dofManager.getKey( contact::traction::key() ); + + arrayView1d< globalIndex const > const dispDofNumber = nodeManager.getReference< globalIndex_array >( dispDofKey ); + arrayView1d< globalIndex const > const bubbleDofNumber = faceManager.getReference< globalIndex_array >( bubbleDofKey ); + + string const & fractureRegionName = this->getUniqueFractureRegionName(); + + forFiniteElementOnStickFractureSubRegions( meshName, [&] ( string const &, + finiteElement::FiniteElementBase const & subRegionFE, + arrayView1d< localIndex const > const & faceElementList, + bool const ) + { + solidMechanicsLagrangeContactKernels::LagrangeContactFactory kernelFactory( dispDofNumber, + bubbleDofNumber, + dofManager.rankOffset(), + localMatrix, + localRhs, + dt, + faceElementList, + tractionDofKey ); + + real64 maxTraction = finiteElement:: + interfaceBasedKernelApplication + < parallelDevicePolicy< >, + constitutive::FrictionBase >( mesh, + fractureRegionName, + faceElementList, + subRegionFE, + viewKeyStruct::frictionLawNameString(), + kernelFactory ); + + GEOS_UNUSED_VAR( maxTraction ); + } ); + } ); +} + +void SolidMechanicsLagrangeContactBubbleStab::implicitStepComplete( real64 const & time_n, + real64 const & dt, + DomainPartition & domain ) +{ + SolidMechanicsLagrangianFEM::implicitStepComplete( time_n, dt, domain ); + + forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const &, + MeshLevel & mesh, + arrayView1d< string const > const & ) + { + mesh.getElemManager().forElementSubRegions< FaceElementSubRegion >( [&]( FaceElementSubRegion & subRegion ) + { + arrayView2d< real64 > const deltaTraction = subRegion.getField< contact::deltaTraction >(); + arrayView2d< real64 > const deltaDispJump = subRegion.getField< contact::deltaDispJump >(); + arrayView2d< real64 const > const dispJump = subRegion.getField< contact::dispJump >(); + arrayView2d< real64 > const oldDispJump = subRegion.getField< contact::oldDispJump >(); + + forAll< parallelHostPolicy >( subRegion.size(), [=] ( localIndex const kfe ) + { + LvArray::tensorOps::fill< 3 >( deltaDispJump[kfe], 0.0 ); + LvArray::tensorOps::fill< 3 >( deltaTraction[kfe], 0.0 ); + LvArray::tensorOps::copy< 3 >( oldDispJump[kfe], dispJump[kfe] ); + } ); + } ); + } ); +} + +real64 SolidMechanicsLagrangeContactBubbleStab::calculateResidualNorm( real64 const & time, + real64 const & dt, + DomainPartition const & domain, + DofManager const & dofManager, + arrayView1d< real64 const > const & localRhs ) +{ + GEOS_MARK_FUNCTION; + + real64 const solidResidual = SolidMechanicsLagrangianFEM::calculateResidualNorm( time, dt, domain, dofManager, localRhs ); + + real64 const contactResidual = calculateContactResidualNorm( domain, dofManager, localRhs ); + + return sqrt( solidResidual * solidResidual + contactResidual * contactResidual ); +} + +real64 SolidMechanicsLagrangeContactBubbleStab::calculateContactResidualNorm( DomainPartition const & domain, + DofManager const & dofManager, + arrayView1d< real64 const > const & localRhs ) +{ + string const & dofKey = dofManager.getKey( contact::traction::key() ); + globalIndex const rankOffset = dofManager.rankOffset(); + + real64 stickResidual = 0.0; + forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const &, + MeshLevel const & mesh, + arrayView1d< string const > const & regionNames ) + { + mesh.getElemManager().forElementSubRegions< FaceElementSubRegion >( regionNames, + [&]( localIndex const, FaceElementSubRegion const & subRegion ) + { + arrayView1d< globalIndex const > const & dofNumber = subRegion.getReference< array1d< globalIndex > >( dofKey ); + arrayView1d< integer const > const & ghostRank = subRegion.ghostRank(); + arrayView1d< real64 const > const & area = subRegion.getElementArea(); + + RAJA::ReduceSum< parallelHostReduce, real64 > stickSum( 0.0 ); + forAll< parallelHostPolicy >( subRegion.size(), [=] ( localIndex const k ) + { + if( ghostRank[k] < 0 ) + { + localIndex const localRow = LvArray::integerConversion< localIndex >( dofNumber[k] - rankOffset ); + for( localIndex dim = 0; dim < 3; ++dim ) + { + real64 const norm = localRhs[localRow + dim] / area[k]; + stickSum += norm * norm; + } + } + } ); + + stickResidual += stickSum.get(); + } ); + } ); + + stickResidual = MpiWrapper::sum( stickResidual ); + stickResidual = sqrt( stickResidual ); + + if( getLogLevel() >= 1 && logger::internal::rank==0 ) + { + std::cout << GEOS_FMT( " ( Rt ) = ( {:15.6e} )", stickResidual ); + } + + return sqrt( stickResidual * stickResidual ); +} + + +void SolidMechanicsLagrangeContactBubbleStab::applySystemSolution( DofManager const & dofManager, + arrayView1d< real64 const > const & localSolution, + real64 const scalingFactor, + real64 const dt, + DomainPartition & domain ) +{ + GEOS_MARK_FUNCTION; + + SolidMechanicsLagrangianFEM::applySystemSolution( dofManager, localSolution, scalingFactor, dt, domain ); + + dofManager.addVectorToField( localSolution, + contact::traction::key(), + contact::deltaTraction::key(), + scalingFactor ); + + dofManager.addVectorToField( localSolution, + contact::traction::key(), + contact::traction::key(), + scalingFactor ); + + dofManager.addVectorToField( localSolution, + solidMechanics::totalBubbleDisplacement::key(), + solidMechanics::totalBubbleDisplacement::key(), + scalingFactor ); + + dofManager.addVectorToField( localSolution, + solidMechanics::totalBubbleDisplacement::key(), + solidMechanics::incrementalBubbleDisplacement::key(), + scalingFactor ); + + + // Loop for updating the displacement jump + forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const & meshName, + MeshLevel & mesh, + arrayView1d< string const > const & ) + + { + + NodeManager const & nodeManager = mesh.getNodeManager(); + FaceManager const & faceManager = mesh.getFaceManager(); + + string const & dispDofKey = dofManager.getKey( solidMechanics::totalDisplacement::key() ); + string const & bubbleDofKey = dofManager.getKey( solidMechanics::totalBubbleDisplacement::key() ); + + arrayView1d< globalIndex const > const dispDofNumber = nodeManager.getReference< globalIndex_array >( dispDofKey ); + arrayView1d< globalIndex const > const bubbleDofNumber = faceManager.getReference< globalIndex_array >( bubbleDofKey ); + + string const & fractureRegionName = this->getUniqueFractureRegionName(); + + CRSMatrix< real64, globalIndex > const voidMatrix; + array1d< real64 > const voidRhs; + + forFiniteElementOnFractureSubRegions( meshName, [&] ( string const &, + finiteElement::FiniteElementBase const & subRegionFE, + arrayView1d< localIndex const > const & faceElementList ) + { + + solidMechanicsConformingContactKernels::DispJumpUpdateFactory kernelFactory( dispDofNumber, + bubbleDofNumber, + dofManager.rankOffset(), + voidMatrix.toViewConstSizes(), + voidRhs.toView(), + dt, + faceElementList ); + + real64 maxTraction = finiteElement:: + interfaceBasedKernelApplication + < parallelDevicePolicy< >, + constitutive::NullModel >( mesh, + fractureRegionName, + faceElementList, + subRegionFE, + "", + kernelFactory ); + + GEOS_UNUSED_VAR( maxTraction ); + + } ); + } ); + + forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const &, + MeshLevel & mesh, + arrayView1d< string const > const & ) + { + FieldIdentifiers fieldsToBeSync; + + fieldsToBeSync.addFields( FieldLocation::Face, + { solidMechanics::incrementalBubbleDisplacement::key(), + solidMechanics::totalBubbleDisplacement::key() } ); + + fieldsToBeSync.addElementFields( { contact::traction::key(), + contact::deltaTraction::key(), + contact::dispJump::key() }, + { getUniqueFractureRegionName() } ); + + CommunicationTools::getInstance().synchronizeFields( fieldsToBeSync, + mesh, + domain.getNeighbors(), + true ); + } ); +} + +void SolidMechanicsLagrangeContactBubbleStab::addCouplingNumNonzeros( DomainPartition & domain, + DofManager & dofManager, + arrayView1d< localIndex > const & rowLengths ) const +{ + + forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const &, + MeshLevel const & mesh, + arrayView1d< string const > const & regionNames ) + { + + ElementRegionManager const & elemManager = mesh.getElemManager(); + NodeManager const & nodeManager = mesh.getNodeManager(); + FaceManager const & faceManager = mesh.getFaceManager(); + + ArrayOfArraysView< localIndex const > const faceToNodeMap = faceManager.nodeList().toViewConst(); + + globalIndex const rankOffset = dofManager.rankOffset(); + + string const bubbleDofKey = dofManager.getKey( solidMechanics::totalBubbleDisplacement::key() ); + string const dispDofKey = dofManager.getKey( solidMechanics::totalDisplacement::key() ); + + arrayView1d< globalIndex const > const bubbleDofNumber = faceManager.getReference< globalIndex_array >( bubbleDofKey ); + arrayView1d< globalIndex const > const dispDofNumber = nodeManager.getReference< globalIndex_array >( dispDofKey ); + + elemManager.forElementSubRegions< CellElementSubRegion >( regionNames, [&]( localIndex const, CellElementSubRegion const & cellElementSubRegion ) + { + + arrayView1d< localIndex const > const bubbleElemsList = cellElementSubRegion.bubbleElementsList(); + arrayView2d< localIndex const > const faceElemsList = cellElementSubRegion.faceElementsList(); + + localIndex const numDispDof = 3*cellElementSubRegion.numNodesPerElement(); + + for( localIndex bi=0; bi( bubbleDofNumber[k] - rankOffset ); + + if( localRow >= 0 && localRow < rowLengths.size() ) + { + for( localIndex i=0; i<3; ++i ) + { + rowLengths[localRow + i] += numDispDof; + } + } + + for( localIndex a=0; a( dispDofNumber[node] - rankOffset ); + + if( localDispRow >= 0 && localDispRow < rowLengths.size() ) + { + for( int d=0; d<3; ++d ) + { + rowLengths[localDispRow + d] += 3; + } + } + } + } + + } ); + + SurfaceElementRegion const & region = elemManager.getRegion< SurfaceElementRegion >( getUniqueFractureRegionName() ); + FaceElementSubRegion const & subRegion = region.getUniqueSubRegion< FaceElementSubRegion >(); + ArrayOfArraysView< localIndex const > const elemsToFaces = subRegion.faceList().toViewConst(); + + for( localIndex kfe=0; kfe( bubbleDofNumber[kf] - rankOffset ); + + if( localRow >= 0 && localRow < rowLengths.size() ) + { + for( localIndex i=0; i<3; ++i ) + { + rowLengths[localRow + i] += numDispDof; + } + } + + for( localIndex a=0; a( dispDofNumber[node] - rankOffset ); + + if( localDispRow >= 0 && localDispRow < rowLengths.size() ) + { + for( int d=0; d<3; ++d ) + { + rowLengths[localDispRow + d] += 3; + } + } + } + } + + } + + } ); +} + +void SolidMechanicsLagrangeContactBubbleStab::addCouplingSparsityPattern( DomainPartition const & domain, + DofManager const & dofManager, + SparsityPatternView< globalIndex > const & pattern ) const +{ + + forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const &, + MeshLevel const & mesh, + arrayView1d< string const > const & regionNames ) + { + + ElementRegionManager const & elemManager = mesh.getElemManager(); + NodeManager const & nodeManager = mesh.getNodeManager(); + FaceManager const & faceManager = mesh.getFaceManager(); + + globalIndex const rankOffset = dofManager.rankOffset(); + + string const bubbleDofKey = dofManager.getKey( solidMechanics::totalBubbleDisplacement::key() ); + string const dispDofKey = dofManager.getKey( solidMechanics::totalDisplacement::key() ); + + arrayView1d< globalIndex const > const bubbleDofNumber = faceManager.getReference< globalIndex_array >( bubbleDofKey ); + arrayView1d< globalIndex const > const dispDofNumber = nodeManager.getReference< globalIndex_array >( dispDofKey ); + + static constexpr int maxNumDispDof = 3 * 8; + + elemManager.forElementSubRegions< CellElementSubRegion >( regionNames, [&]( localIndex const, CellElementSubRegion const & cellElementSubRegion ) + { + + arrayView1d< localIndex const > const bubbleElemsList = cellElementSubRegion.bubbleElementsList(); + arrayView2d< localIndex const > const faceElemsList = cellElementSubRegion.faceElementsList(); + + localIndex const numDispDof = 3*cellElementSubRegion.numNodesPerElement(); + + for( localIndex bi=0; bi eqnRowIndicesDisp ( numDispDof ); + stackArray1d< globalIndex, 3 > eqnRowIndicesBubble( 3 ); + stackArray1d< globalIndex, maxNumDispDof > dofColIndicesDisp ( numDispDof ); + stackArray1d< globalIndex, 3 > dofColIndicesBubble( 3 ); + + for( localIndex idof = 0; idof < 3; ++idof ) + { + eqnRowIndicesBubble[idof] = bubbleDofNumber[k] + idof - rankOffset; + dofColIndicesBubble[idof] = bubbleDofNumber[k] + idof; + } + + for( localIndex a=0; a= 0 && eqnRowIndicesDisp[i] < pattern.numRows() ) + { + for( localIndex j = 0; j < dofColIndicesBubble.size(); ++j ) + { + pattern.insertNonZero( eqnRowIndicesDisp[i], dofColIndicesBubble[j] ); + } + } + } + + for( localIndex i = 0; i < eqnRowIndicesBubble.size(); ++i ) + { + if( eqnRowIndicesBubble[i] >= 0 && eqnRowIndicesBubble[i] < pattern.numRows() ) + { + for( localIndex j=0; j < dofColIndicesDisp.size(); ++j ) + { + pattern.insertNonZero( eqnRowIndicesBubble[i], dofColIndicesDisp[j] ); + } + } + } + + } + + } ); + + SurfaceElementRegion const & region = elemManager.getRegion< SurfaceElementRegion >( getUniqueFractureRegionName() ); + FaceElementSubRegion const & subRegion = region.getUniqueSubRegion< FaceElementSubRegion >(); + ArrayOfArraysView< localIndex const > const elemsToFaces = subRegion.faceList().toViewConst(); + ArrayOfArraysView< localIndex const > const faceToNodeMap = faceManager.nodeList().toViewConst(); + + static constexpr int maxNumDispFaceDof = 3 * 4; + + for( localIndex kfe=0; kfe eqnRowIndicesDisp ( numDispDof ); + stackArray1d< globalIndex, 3 > eqnRowIndicesBubble( 3 ); + stackArray1d< globalIndex, maxNumDispFaceDof > dofColIndicesDisp ( numDispDof ); + stackArray1d< globalIndex, 3 > dofColIndicesBubble( 3 ); + + for( localIndex idof = 0; idof < 3; ++idof ) + { + eqnRowIndicesBubble[idof] = bubbleDofNumber[kf] + idof - rankOffset; + dofColIndicesBubble[idof] = bubbleDofNumber[kf] + idof; + } + + for( localIndex a=0; a= 0 && eqnRowIndicesDisp[i] < pattern.numRows() ) + { + for( localIndex j = 0; j < dofColIndicesBubble.size(); ++j ) + { + pattern.insertNonZero( eqnRowIndicesDisp[i], dofColIndicesBubble[j] ); + } + } + } + + for( localIndex i = 0; i < eqnRowIndicesBubble.size(); ++i ) + { + if( eqnRowIndicesBubble[i] >= 0 && eqnRowIndicesBubble[i] < pattern.numRows() ) + { + for( localIndex j=0; j < dofColIndicesDisp.size(); ++j ) + { + pattern.insertNonZero( eqnRowIndicesBubble[i], dofColIndicesDisp[j] ); + } + } + } + + } + } + } ); + +} + +void SolidMechanicsLagrangeContactBubbleStab::updateStickSlipList( DomainPartition const & domain ) +{ + + forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const & meshName, + MeshLevel const & mesh, + arrayView1d< string const > const & ) + + { + + ElementRegionManager const & elemManager = mesh.getElemManager(); + SurfaceElementRegion const & region = elemManager.getRegion< SurfaceElementRegion >( getUniqueFractureRegionName() ); + FaceElementSubRegion const & subRegion = region.getUniqueSubRegion< FaceElementSubRegion >(); + + arrayView1d< integer const > const fractureState = subRegion.getField< contact::fractureState >(); + + forFiniteElementOnFractureSubRegions( meshName, [&] ( string const & finiteElementName, + finiteElement::FiniteElementBase const &, + arrayView1d< localIndex const > const & faceElementList ) + { + + array1d< localIndex > keys( subRegion.size()); + array1d< localIndex > vals( subRegion.size()); + array1d< localIndex > stickList; + array1d< localIndex > slipList; + RAJA::ReduceSum< ReducePolicy< parallelDevicePolicy<> >, localIndex > nStick_r( 0 ); + RAJA::ReduceSum< ReducePolicy< parallelDevicePolicy<> >, localIndex > nSlip_r( 0 ); + + arrayView1d< localIndex > const keys_v = keys.toView(); + arrayView1d< localIndex > const vals_v = vals.toView(); + forAll< parallelDevicePolicy<> >( faceElementList.size(), + [ = ] + GEOS_HOST_DEVICE ( localIndex const kfe ) + { + + localIndex const faceIndex = faceElementList[kfe]; + if( fractureState[faceIndex] == contact::FractureState::Stick ) + { + keys_v[kfe]=0; + vals_v[kfe]=faceIndex; + nStick_r += 1; + } + else if(( fractureState[faceIndex] == contact::FractureState::Slip ) || + (fractureState[faceIndex] == contact::FractureState::NewSlip)) + { + keys_v[kfe]=1; + vals_v[kfe]=faceIndex; + nSlip_r += 1; + } + else + { + keys_v[kfe] = 2; + } + + } ); + + localIndex nStick = static_cast< localIndex >(nStick_r.get()); + localIndex nSlip = static_cast< localIndex >(nSlip_r.get()); + + // Sort vals according to keys to ensure that + // elements of the same type are adjacent in the vals list. + // This arrangement allows for efficient copying into the container + // by leveraging parallelism. + RAJA::sort_pairs< parallelDevicePolicy<> >( keys_v, vals_v ); + + stickList.resize( nStick ); + slipList.resize( nSlip ); + arrayView1d< localIndex > const stickList_v = stickList.toView(); + arrayView1d< localIndex > const slipList_v = slipList.toView(); + + forAll< parallelDevicePolicy<> >( nStick, [ = ] + GEOS_HOST_DEVICE ( localIndex const kfe ) + { + stickList_v[kfe] = vals_v[kfe]; + } ); + + forAll< parallelDevicePolicy<> >( nSlip, [ = ] + GEOS_HOST_DEVICE ( localIndex const kfe ) + { + slipList_v[kfe] = vals_v[nStick+kfe]; + } ); + + this->m_faceTypesToFaceElementsStick[meshName][finiteElementName] = stickList; + this->m_faceTypesToFaceElementsSlip[meshName][finiteElementName] = slipList; + + GEOS_LOG_LEVEL_INFO_RANK_0( logInfo::Configuration, GEOS_FMT( "# stick elements: {}, # slip elements: {}", nStick, nSlip )) + } ); + } ); + +} + +void SolidMechanicsLagrangeContactBubbleStab::createFaceTypeList( DomainPartition const & domain ) +{ + + // Generate lists containing elements of various face types + forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const & meshName, + MeshLevel const & mesh, + arrayView1d< string const > const ) + { + FaceManager const & faceManager = mesh.getFaceManager(); + ElementRegionManager const & elemManager = mesh.getElemManager(); + ArrayOfArraysView< localIndex const > const faceToNodeMap = faceManager.nodeList().toViewConst(); + + SurfaceElementRegion const & region = elemManager.getRegion< SurfaceElementRegion >( getUniqueFractureRegionName() ); + FaceElementSubRegion const & subRegion = region.getUniqueSubRegion< FaceElementSubRegion >(); + + array1d< localIndex > keys( subRegion.size()); + array1d< localIndex > vals( subRegion.size()); + array1d< localIndex > quadList; + array1d< localIndex > triList; + RAJA::ReduceSum< ReducePolicy< parallelDevicePolicy<> >, localIndex > nTri_r( 0 ); + RAJA::ReduceSum< ReducePolicy< parallelDevicePolicy<> >, localIndex > nQuad_r( 0 ); + + arrayView1d< localIndex > const keys_v = keys.toView(); + arrayView1d< localIndex > const vals_v = vals.toView(); + // Determine the size of the lists and generate the vector keys and vals for parallel indexing into lists. + // (With RAJA, parallelizing this operation seems the most viable approach.) + forAll< parallelDevicePolicy<> >( subRegion.size(), + [ = ] GEOS_HOST_DEVICE ( localIndex const kfe ) + { + + localIndex const numNodesPerFace = faceToNodeMap.sizeOfArray( kfe ); + if( numNodesPerFace == 3 ) + { + keys_v[kfe]=0; + vals_v[kfe]=kfe; + nTri_r += 1; + } + else if( numNodesPerFace == 4 ) + { + keys_v[kfe]=1; + vals_v[kfe]=kfe; + nQuad_r += 1; + } + else + { + GEOS_ERROR( "SolidMechanicsLagrangeContactBubbleStab:: invalid face type" ); + } + } ); + + localIndex nQuad = static_cast< localIndex >(nQuad_r.get()); + localIndex nTri = static_cast< localIndex >(nTri_r.get()); + + // Sort vals according to keys to ensure that + // elements of the same type are adjacent in the vals list. + // This arrangement allows for efficient copying into the container + // by leveraging parallelism. + RAJA::sort_pairs< parallelDevicePolicy<> >( keys_v, vals_v ); + + quadList.resize( nQuad ); + triList.resize( nTri ); + arrayView1d< localIndex > const quadList_v = quadList.toView(); + arrayView1d< localIndex > const triList_v = triList.toView(); + + forAll< parallelDevicePolicy<> >( nTri, [ = ] GEOS_HOST_DEVICE ( localIndex const kfe ) + { + triList_v[kfe] = vals_v[kfe]; + } ); + + forAll< parallelDevicePolicy<> >( nQuad, [ = ] GEOS_HOST_DEVICE ( localIndex const kfe ) + { + quadList_v[kfe] = vals_v[nTri+kfe]; + } ); + + this->m_faceTypesToFaceElements[meshName]["Quadrilateral"] = quadList; + this->m_faceTypesToFaceElements[meshName]["Triangle"] = triList; + } ); + +} + +void SolidMechanicsLagrangeContactBubbleStab::createBubbleCellList( DomainPartition & domain ) const +{ + + forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const &, + MeshLevel & mesh, + arrayView1d< string const > const regionNames ) + { + ElementRegionManager & elemManager = mesh.getElemManager(); + + SurfaceElementRegion const & region = elemManager.getRegion< SurfaceElementRegion >( getUniqueFractureRegionName() ); + FaceElementSubRegion const & subRegion = region.getUniqueSubRegion< FaceElementSubRegion >(); + // Array to store face indexes + array1d< localIndex > tmpSpace( 2*subRegion.size()); + SortedArray< localIndex > faceIdList; + + arrayView1d< localIndex > const tmpSpace_v = tmpSpace.toView(); + // Store indexes of faces in the temporany array. + { + ArrayOfArraysView< localIndex const > const elemsToFaces = subRegion.faceList().toViewConst(); + + forAll< parallelDevicePolicy<> >( subRegion.size(), [ = ] GEOS_HOST_DEVICE ( localIndex const kfe ) + { + + localIndex const kf0 = elemsToFaces[kfe][0], kf1 = elemsToFaces[kfe][1]; + tmpSpace_v[2*kfe] = kf0, tmpSpace_v[2*kfe+1] = kf1; + + } ); + } + + // Sort indexes to enable efficient searching using binary search. + RAJA::stable_sort< parallelDevicePolicy<> >( tmpSpace_v ); + faceIdList.insert( tmpSpace_v.begin(), tmpSpace_v.end()); + + // Search for bubble element on each CellElementSubRegion and + // store element indexes, global and local face indexes. + elemManager.forElementSubRegions< CellElementSubRegion >( regionNames, [&]( localIndex const, CellElementSubRegion & cellElementSubRegion ) + { + + arrayView2d< localIndex const > const elemsToFaces = cellElementSubRegion.faceList().toViewConst(); + + RAJA::ReduceSum< ReducePolicy< parallelDevicePolicy<> >, localIndex > nBubElems_r( 0 ); + + localIndex const n_max = cellElementSubRegion.size() * elemsToFaces.size( 1 ); + array1d< localIndex > keys( n_max ); + array1d< localIndex > perms( n_max ); + array1d< localIndex > vals( n_max ); + array1d< localIndex > localFaceIds( n_max ); + + arrayView1d< localIndex > const keys_v = keys.toView(); + arrayView1d< localIndex > const perms_v = perms.toView(); + arrayView1d< localIndex > const vals_v = vals.toView(); + arrayView1d< localIndex > const localFaceIds_v = localFaceIds.toView(); + SortedArrayView< localIndex const > const faceIdList_v = faceIdList.toViewConst(); + + forAll< parallelDevicePolicy<> >( cellElementSubRegion.size(), + [ = ] + GEOS_HOST_DEVICE ( localIndex const kfe ) + { + for( int i=0; i < elemsToFaces.size( 1 ); ++i ) + { + perms_v[kfe*elemsToFaces.size( 1 )+i] = kfe*elemsToFaces.size( 1 )+i; + if( faceIdList_v.contains( elemsToFaces[kfe][i] )) + { + keys_v[kfe*elemsToFaces.size( 1 )+i] = 0; + vals_v[kfe*elemsToFaces.size( 1 )+i] = kfe; + localFaceIds_v[kfe*elemsToFaces.size( 1 )+i] = i; + nBubElems_r += 1; + } + else + { + keys_v[kfe*elemsToFaces.size( 1 )+i] = 1; + vals_v[kfe*elemsToFaces.size( 1 )+i] = -1; + localFaceIds_v[kfe*elemsToFaces.size( 1 )+i] = -1; + } + } + } ); + + // Sort perms according to keys to ensure that bubble elements are adjacent + // and occupy the first positions of the list. + // This arrangement allows for efficient copying into the container + // by leveraging parallelism. + localIndex nBubElems = static_cast< localIndex >(nBubElems_r.get()); + RAJA::sort_pairs< parallelDevicePolicy<> >( keys_v, perms_v ); + + array1d< localIndex > bubbleElemsList; + bubbleElemsList.resize( nBubElems ); + + arrayView1d< localIndex > const bubbleElemsList_v = bubbleElemsList.toView(); + + forAll< parallelDevicePolicy<> >( n_max, [ = ] GEOS_HOST_DEVICE ( localIndex const k ) + { + keys_v[k] = vals_v[perms_v[k]]; + } ); + + forAll< parallelDevicePolicy<> >( nBubElems, [ = ] GEOS_HOST_DEVICE ( localIndex const k ) + { + bubbleElemsList_v[k] = keys_v[k]; + } ); + cellElementSubRegion.setBubbleElementsList( bubbleElemsList.toViewConst()); + + forAll< parallelDevicePolicy<> >( n_max, [ = ] GEOS_HOST_DEVICE ( localIndex const k ) + { + keys_v[k] = localFaceIds_v[perms_v[k]]; + } ); + + array2d< localIndex > faceElemsList; + faceElemsList.resize( nBubElems, 2 ); + + arrayView2d< localIndex > const faceElemsList_v = faceElemsList.toView(); + + forAll< parallelDevicePolicy<> >( nBubElems, + [ = ] + GEOS_HOST_DEVICE ( localIndex const k ) + { + localIndex const kfe = bubbleElemsList_v[k]; + faceElemsList_v[k][0] = elemsToFaces[kfe][keys_v[k]]; + faceElemsList_v[k][1] = keys_v[k]; + } ); + cellElementSubRegion.setFaceElementsList( faceElemsList.toViewConst()); + + } ); + + } ); + +} + +REGISTER_CATALOG_ENTRY( PhysicsSolverBase, SolidMechanicsLagrangeContactBubbleStab, string const &, Group * const ) + +} /* namespace geos */ diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsLagrangeContactBubbleStab.hpp b/src/coreComponents/physicsSolvers/contact/SolidMechanicsLagrangeContactBubbleStab.hpp new file mode 100644 index 00000000000..b1256f47d1f --- /dev/null +++ b/src/coreComponents/physicsSolvers/contact/SolidMechanicsLagrangeContactBubbleStab.hpp @@ -0,0 +1,240 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2024 Total, S.A + * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2023-2024 Chevron + * Copyright (c) 2019- GEOS/GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file SolidMechanicsLagrangeContactBubbleStab.hpp + * + */ + +#ifndef GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSLAGRANGECONTACTBUBBLESTAB_HPP_ +#define GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSLAGRANGECONTACTBUBBLESTAB_HPP_ + +#include "physicsSolvers/contact/ContactSolverBase.hpp" + +namespace geos +{ + +class NumericalMethodsManager; + +class SolidMechanicsLagrangeContactBubbleStab : public ContactSolverBase +{ +public: + + SolidMechanicsLagrangeContactBubbleStab( const string & name, + Group * const parent ); + + ~SolidMechanicsLagrangeContactBubbleStab() override; + + /** + * @brief name of the node manager in the object catalog + * @return string that contains the catalog name to generate a new NodeManager object through the object catalog. + */ + static string catalogName() + { + return "SolidMechanicsLagrangeContactBubbleStab"; + } + /** + * @copydoc SolverBase::getCatalogName() + */ + string getCatalogName() const override { return catalogName(); } + + virtual void registerDataOnMesh( Group & MeshBodies ) override final; + + real64 solverStep( real64 const & time_n, + real64 const & dt, + const integer cycleNumber, + DomainPartition & domain ) override final; + + virtual void + setupDofs( DomainPartition const & domain, + DofManager & dofManager ) const override; + + virtual void + setupSystem( DomainPartition & domain, + DofManager & dofManager, + CRSMatrix< real64, globalIndex > & localMatrix, + ParallelVector & rhs, + ParallelVector & solution, + bool const setSparsity = true ) override final; + + virtual void + implicitStepSetup( real64 const & time_n, + real64 const & dt, + DomainPartition & domain ) override final; + + virtual void + implicitStepComplete( real64 const & time_n, + real64 const & dt, + DomainPartition & domain ) override final; + + virtual void + assembleSystem( real64 const time, + real64 const dt, + DomainPartition & domain, + DofManager const & dofManager, + CRSMatrixView< real64, globalIndex const > const & localMatrix, + arrayView1d< real64 > const & localRhs ) override; + + virtual real64 + calculateResidualNorm( real64 const & time, + real64 const & dt, + DomainPartition const & domain, + DofManager const & dofManager, + arrayView1d< real64 const > const & localRhs ) override; + + virtual void + applySystemSolution( DofManager const & dofManager, + arrayView1d< real64 const > const & localSolution, + real64 const scalingFactor, + real64 const dt, + DomainPartition & domain ) override; + + void assembleContact( real64 const dt, + DomainPartition & domain, + DofManager const & dofManager, + CRSMatrixView< real64, globalIndex const > const & localMatrix, + arrayView1d< real64 > const & localRhs ); + + void assembleStabilization( real64 const dt, + DomainPartition & domain, + DofManager const & dofManager, + CRSMatrixView< real64, globalIndex const > const & localMatrix, + arrayView1d< real64 > const & localRhs ); + + real64 calculateContactResidualNorm( DomainPartition const & domain, + DofManager const & dofManager, + arrayView1d< real64 const > const & localRhs ); + + /** + * @brief Loop over the finite element type on the fracture subregions of meshName and apply callback. + * @tparam LAMBDA The callback function type + * @param meshName The mesh name. + * @param lambda The callback function. Take the finite element type name and + * the list of face element of the same type. + */ + template< typename LAMBDA > + void forFiniteElementOnFractureSubRegions( string const & meshName, LAMBDA && lambda ) const + { + std::map< string, + array1d< localIndex > > const & faceTypesToFaceElements = m_faceTypesToFaceElements.at( meshName ); + + for( const auto & [finiteElementName, faceElementList] : faceTypesToFaceElements ) + { + arrayView1d< localIndex const > const faceElemList = faceElementList.toViewConst(); + + finiteElement::FiniteElementBase const & subRegionFE = *(m_faceTypeToFiniteElements.at( finiteElementName )); + + lambda( finiteElementName, subRegionFE, faceElemList ); + } + } + + /** + * @brief Loop over the finite element type on the stick fracture subregions of meshName and apply callback. + * @tparam LAMBDA The callback function type + * @param meshName The mesh name. + * @param lambda The callback function. Take the finite element type name and + * the list of face element of the same type. + */ + template< typename LAMBDA > + void forFiniteElementOnStickFractureSubRegions( string const & meshName, LAMBDA && lambda ) const + { + bool const isStickState = true; + + std::map< string, array1d< localIndex > > const & + faceTypesToFaceElements = m_faceTypesToFaceElementsStick.at( meshName ); + + for( const auto & [finiteElementName, faceElementList] : faceTypesToFaceElements ) + { + arrayView1d< localIndex const > const faceElemList = faceElementList.toViewConst(); + + finiteElement::FiniteElementBase const & subRegionFE = *(m_faceTypeToFiniteElements.at( finiteElementName )); + + lambda( finiteElementName, subRegionFE, faceElemList, isStickState ); + } + } + +/** + * @brief Create the list of finite elements of the same type + * for each FaceElementSubRegion (Triangle or Quadrilateral) + * and of the same fracture state (Stick or Slip). + * @param domain The physical domain object + */ + void updateStickSlipList( DomainPartition const & domain ); + + /** + * @brief Create the list of finite elements of the same type + * for each FaceElementSubRegion (Triangle or Quadrilateral). + * @param domain The physical domain object + */ + void createFaceTypeList( DomainPartition const & domain ); + + /** + * @brief Create the list of elements belonging to CellElementSubRegion + * that are enriched with the bubble basis functions + * @param domain The physical domain object + */ + void createBubbleCellList( DomainPartition & domain ) const; + + /** + * @brief Compute rotation matrices and unit normal vectors for Face elements. + * @param domain The domain partition object + */ + void computeRotationMatrices( DomainPartition & domain ) const; + + +private: + /** + * @brief add the number of non-zero elements induced by the coupling between + * nodal and bubble displacement. + * @param domain the physical domain object + * @param dofManager degree-of-freedom manager associated with the linear system + * @param rowLengths the array containing the number of non-zero elements for each row + */ + void addCouplingNumNonzeros( DomainPartition & domain, + DofManager & dofManager, + arrayView1d< localIndex > const & rowLengths ) const; + + /** + * @Brief add the sparsity pattern induced by the coupling + * @param domain the physical domain object + * @param dofManager degree-of-freedom manager associated with the linear system + * @param pattern the sparsity pattern + */ + void addCouplingSparsityPattern( DomainPartition const & domain, + DofManager const & dofManager, + SparsityPatternView< globalIndex > const & pattern ) const; + + /// Finite element type to face element index map + std::map< string, std::map< string, array1d< localIndex > > > m_faceTypesToFaceElements; + + /// Finite element type to face element index map (stick mode) + std::map< string, std::map< string, array1d< localIndex > > > m_faceTypesToFaceElementsStick; + + /// Finite element type to face element index map (slip mode) + std::map< string, std::map< string, array1d< localIndex > > > m_faceTypesToFaceElementsSlip; + + /// Finite element type to finite element object map + std::map< string, std::unique_ptr< geos::finiteElement::FiniteElementBase > > m_faceTypeToFiniteElements; + + struct viewKeyStruct : ContactSolverBase::viewKeyStruct + { + constexpr static char const * rotationMatrixString() { return "rotationMatrix"; } + }; + +}; + +} /* namespace geos */ + +#endif /* GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSLAGRANGECONTACTBUBBLESTAB_HPP_ */ diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsALMKernels.hpp b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsALMKernels.hpp similarity index 88% rename from src/coreComponents/physicsSolvers/contact/SolidMechanicsALMKernels.hpp rename to src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsALMKernels.hpp index 9f5c53f5132..4f50212c5be 100644 --- a/src/coreComponents/physicsSolvers/contact/SolidMechanicsALMKernels.hpp +++ b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsALMKernels.hpp @@ -17,10 +17,12 @@ * @file SolidMechanicsALMKernels.hpp */ -#ifndef GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSALMKERNELS_HPP_ -#define GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSALMKERNELS_HPP_ +#ifndef GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSALMKERNELS_HPP_ +#define GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSALMKERNELS_HPP_ + +#include "SolidMechanicsConformingContactKernelsBase.hpp" +#include "mesh/MeshFields.hpp" -#include "SolidMechanicsALMKernelsBase.hpp" namespace geos { @@ -34,13 +36,13 @@ namespace solidMechanicsALMKernels template< typename CONSTITUTIVE_TYPE, typename FE_TYPE > class ALM : - public ALMKernelsBase< CONSTITUTIVE_TYPE, - FE_TYPE > + public solidMechanicsConformingContactKernels::ConformingContactKernelsBase< CONSTITUTIVE_TYPE, + FE_TYPE > { public: /// Alias for the base class. - using Base = ALMKernelsBase< CONSTITUTIVE_TYPE, - FE_TYPE >; + using Base = solidMechanicsConformingContactKernels::ConformingContactKernelsBase< CONSTITUTIVE_TYPE, + FE_TYPE >; /// Maximum number of nodes per element, which is equal to the maxNumTestSupportPointPerElem and /// maxNumTrialSupportPointPerElem by definition. @@ -49,6 +51,15 @@ class ALM : /// Compile time value for the number of quadrature points per element. static constexpr int numQuadraturePointsPerElem = FE_TYPE::numQuadraturePoints; + /// The number of displacement dofs per element. + static constexpr int numUdofs = Base::numUdofs; + + /// The number of bubble dofs per element. + static constexpr int numBdofs = Base::numBdofs; + + /// The number of lagrange multiplier dofs per element. + static constexpr int numTdofs = Base::numTdofs; + using Base::m_elemsToFaces; using Base::m_faceToNodes; using Base::m_finiteElementSpace; @@ -58,7 +69,6 @@ class ALM : using Base::m_dofRankOffset; using Base::m_X; using Base::m_rotationMatrix; - using Base::m_penalty; using Base::m_dispJump; using Base::m_oldDispJump; using Base::m_matrix; @@ -98,7 +108,9 @@ class ALM : inputDt, faceElementList ), m_traction( elementSubRegion.getField< fields::contact::traction >().toViewConst()), - m_symmetric( isSymmetric ) + m_symmetric( isSymmetric ), + m_penalty( elementSubRegion.getField< fields::contact::iterativePenalty >().toViewConst() ), + m_faceArea( elementSubRegion.getField< fields::elementArea >().toViewConst() ) {} //*************************************************************************** @@ -109,27 +121,18 @@ class ALM : struct StackVariables : public Base::StackVariables { - /// The number of displacement dofs per element. - static constexpr int numUdofs = numNodesPerElem * 3 * 2; - - /// The number of lagrange multiplier dofs per element. - static constexpr int numTdofs = 3; - - /// The number of bubble dofs per element. - static constexpr int numBdofs = 3*2; - public: GEOS_HOST_DEVICE StackVariables(): Base::StackVariables(), - dispEqnRowIndices{}, - dispColIndices{}, - bEqnRowIndices{}, - bColIndices{}, - localRu{}, - localRb{}, - localAutAtu{ {} }, + dispEqnRowIndices{}, + dispColIndices{}, + bEqnRowIndices{}, + bColIndices{}, + localRu{}, + localRb{}, + localAutAtu{ {} }, localAbtAtb{ {} }, localAbtAtu{ {} }, localAutAtb{ {} }, @@ -196,8 +199,6 @@ class ALM : { constexpr int shift = numNodesPerElem * 3; - constexpr int numTdofs = 3; - int permutation[numNodesPerElem]; m_finiteElementSpace.getPermutation( permutation ); @@ -251,10 +252,6 @@ class ALM : GEOS_UNUSED_VAR( k ); constexpr real64 zero = LvArray::NumericLimits< real64 >::epsilon; - constexpr int numUdofs = numNodesPerElem * 3 * 2; - - constexpr int numBdofs = 3*2; - real64 matRRtAtu[3][numUdofs], matDRtAtu[3][numUdofs]; real64 matRRtAtb[3][numBdofs], matDRtAtb[3][numBdofs]; @@ -268,6 +265,7 @@ class ALM : m_dispJump[k], m_penalty[k], m_traction[k], + m_faceArea[k], m_symmetric, m_symmetric, zero, @@ -372,6 +370,10 @@ class ALM : bool const m_symmetric; + /// The array containing the penalty coefficients for each element. + arrayView2d< real64 const > const m_penalty; + + arrayView1d< real64 const > const m_faceArea; }; /// The factory used to construct the kernel. @@ -410,6 +412,7 @@ struct ComputeTractionKernel arrayView2d< real64 const > const & traction, arrayView2d< real64 const > const & dispJump, arrayView2d< real64 const > const & deltaDispJump, + arrayView1d< real64 const > const & faceArea, arrayView2d< real64 > const & tractionNew ) { @@ -417,7 +420,7 @@ struct ComputeTractionKernel { contactWrapper.updateTractionOnly( dispJump[k], deltaDispJump[k], - penalty[k], traction[k], tractionNew[k] ); + penalty[k], traction[k], faceArea[k], tractionNew[k] ); } ); } @@ -428,4 +431,4 @@ struct ComputeTractionKernel } // namespace geos -#endif /* GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSALMKERNELS_HPP_ */ +#endif /* GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSALMKERNELS_HPP_ */ diff --git a/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsALMKernelsBase.hpp b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsALMKernelsBase.hpp new file mode 100644 index 00000000000..18e5c3b1a4d --- /dev/null +++ b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsALMKernelsBase.hpp @@ -0,0 +1,173 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2024 Total, S.A + * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2023-2024 Chevron + * Copyright (c) 2019- GEOS/GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file SolidMechanicsALMKernelsBase.hpp + */ + +#ifndef GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSALMKERNELSBASE_HPP_ +#define GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSALMKERNELSBASE_HPP_ + +#include "finiteElement/kernelInterface/InterfaceKernelBase.hpp" +#include "SolidMechanicsConformingContactKernelsHelper.hpp" + +namespace geos +{ + +namespace solidMechanicsALMKernels +{ + +/** + * @brief A struct to check for constraint satisfaction + */ +struct ConstraintCheckKernel +{ + + /** + * @brief Launch the kernel function to check the constraint satisfaction + * @tparam POLICY the type of policy used in the kernel launch + * @tparam CONTACT_WRAPPER the type of contact wrapper doing the fracture traction updates + * @param[in] size the size of the subregion + * @param[in] traction the array containing the current traction + * @param[in] dispJump the array containing the displacement jump + * @param[in] deltaDispJump the array containing the delta displacement jump + * @param[in] normalTractionTolerance Check tolerance (normal traction) + * @param[in] normalDisplacementTolerance Check tolerance (compenetration) + * @param[in] slidingTolerance Check tolerance (sliding) + * @param[in] slidingCheckTolerance Check tolerance (if shear strass exceeds tauLim) + * @param[in] area interface element area + * @param[in] fractureState the array containing the fracture state + * @param[out] condConv the array containing the convergence flag: + * 0: Constraint conditions satisfied + * 1: Open + * 2: Compenetration + * 3: Slip exceeds sliding tolerance + * 4: Shear stress exceeds tauLim + */ + template< typename POLICY, typename CONTACT_WRAPPER > + static void + launch( localIndex const size, + CONTACT_WRAPPER const & contactWrapper, + arrayView1d< integer const > const & ghostRank, + arrayView2d< real64 > const & traction, + arrayView2d< real64 const > const & dispJump, + arrayView2d< real64 const > const & deltaDispJump, + arrayView1d< real64 const > const & normalTractionTolerance, + arrayView1d< real64 const > const & normalDisplacementTolerance, + arrayView1d< real64 const > const & slidingTolerance, + real64 const slidingCheckTolerance, + arrayView1d< integer const > const & fractureState, + arrayView1d< integer > const & condConv ) + { + + forAll< POLICY >( size, [=] GEOS_HOST_DEVICE ( localIndex const k ) + { + if( ghostRank[k] < 0 ) + { + contactWrapper.constraintCheck( dispJump[k], + deltaDispJump[k], + traction[k], + fractureState[k], + normalTractionTolerance[k], + normalDisplacementTolerance[k], + slidingTolerance[k], + slidingCheckTolerance, + condConv[k] ); + } + + } ); + } +}; + +/** + * @brief A struct to check for constraint satisfaction + */ +struct UpdateStateKernel +{ + + /** + * @brief Launch the kernel function to check the constraint satisfaction + * @tparam POLICY the type of policy used in the kernel launch + * @tparam CONTACT_WRAPPER the type of contact wrapper doing the fracture traction updates + * @param[in] size the size of the subregion + * @param[in] oldDispJump the array containing the old displacement jump (previous time step) + * @param[in] dispJump the array containing the displacement jump + * @param[in] penalty the array containing the penalty coefficients + * @param[in] symmetric flag to compute symmetric penalty matrix + * @param[in] normalTractionTolerance Check tolerance (normal traction) + * @param[in] traction the array containing the current traction + * @param[in] fractureState the array containing the fracture state + */ + template< typename POLICY, typename CONTACT_WRAPPER > + static void + launch( localIndex const size, + CONTACT_WRAPPER const & contactWrapper, + arrayView2d< real64 const > const & oldDispJump, + arrayView2d< real64 const > const & dispJump, + arrayView2d< real64 > const & penalty, + arrayView1d< real64 const > const & faceArea, + bool const symmetric, + arrayView1d< real64 const > const & normalTractionTolerance, + arrayView2d< real64 > const & traction, + arrayView1d< integer > const & fractureState ) + + { + forAll< POLICY >( size, [=] GEOS_HOST_DEVICE ( localIndex const k ) + { + + real64 const zero = LvArray::NumericLimits< real64 >::epsilon; + + real64 localPenalty[3][3]{}; + real64 localTractionNew[3]{}; + contactWrapper.updateTraction( oldDispJump[k], + dispJump[k], + penalty[k], + traction[k], + faceArea[k], + symmetric, + false, + normalTractionTolerance[k], + zero, + localPenalty, + localTractionNew, + fractureState[k] ); + + if( fractureState[k] == fields::contact::FractureState::Open ) + { + + LvArray::tensorOps::fill< 3 >( localTractionNew, 0.0 ); + } + else if( LvArray::math::abs( localTractionNew[ 0 ] ) < normalTractionTolerance[k] ) + { + LvArray::tensorOps::fill< 3 >( localTractionNew, 0.0 ); + fractureState[k] = fields::contact::FractureState::Slip; + } + + LvArray::tensorOps::copy< 3 >( traction[k], localTractionNew ); + penalty[k][2] = -localPenalty[1][1]; + penalty[k][3] = -localPenalty[2][2]; + penalty[k][4] = -localPenalty[1][2]; + + } ); + } + +}; + +} // namespace SolidMechanicsALMKernels + +} // namespace geos + + +#endif /* GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSALMKERNELSBASE_HPP_ */ diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsALMSimultaneousKernels.hpp b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsALMSimultaneousKernels.hpp similarity index 87% rename from src/coreComponents/physicsSolvers/contact/SolidMechanicsALMSimultaneousKernels.hpp rename to src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsALMSimultaneousKernels.hpp index f9cd307b6fe..4a39f3580ee 100644 --- a/src/coreComponents/physicsSolvers/contact/SolidMechanicsALMSimultaneousKernels.hpp +++ b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsALMSimultaneousKernels.hpp @@ -16,10 +16,11 @@ * @file SolidMechanicsALMSimultaneousKernels.hpp */ -#ifndef GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSALMSIMULTANEOUSKERNELS_HPP_ -#define GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSALMSIMULTANEOUSKERNELS_HPP_ +#ifndef GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSALMSIMULTANEOUSKERNELS_HPP_ +#define GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSALMSIMULTANEOUSKERNELS_HPP_ -#include "SolidMechanicsALMKernelsBase.hpp" +#include "SolidMechanicsConformingContactKernelsBase.hpp" +#include "mesh/MeshFields.hpp" namespace geos { @@ -33,13 +34,13 @@ namespace solidMechanicsALMKernels template< typename CONSTITUTIVE_TYPE, typename FE_TYPE > class ALMSimultaneous : - public ALMKernelsBase< CONSTITUTIVE_TYPE, - FE_TYPE > + public solidMechanicsConformingContactKernels::ConformingContactKernelsBase< CONSTITUTIVE_TYPE, + FE_TYPE > { public: /// Alias for the base class. - using Base = ALMKernelsBase< CONSTITUTIVE_TYPE, - FE_TYPE >; + using Base = solidMechanicsConformingContactKernels::ConformingContactKernelsBase< CONSTITUTIVE_TYPE, + FE_TYPE >; /// Maximum number of nodes per element, which is equal to the maxNumTestSupportPointPerElem and /// maxNumTrialSupportPointPerElem by definition. @@ -48,6 +49,15 @@ class ALMSimultaneous : /// Compile time value for the number of quadrature points per element. static constexpr int numQuadraturePointsPerElem = FE_TYPE::numQuadraturePoints; + /// The number of displacement dofs per element. + static constexpr int numUdofs = Base::numUdofs; + + /// The number of bubble dofs per element. + static constexpr int numBdofs = Base::numBdofs; + + /// The number of lagrange multiplier dofs per element. + static constexpr int numTdofs = Base::numTdofs; + using Base::m_elemsToFaces; using Base::m_faceToNodes; using Base::m_finiteElementSpace; @@ -56,7 +66,6 @@ class ALMSimultaneous : using Base::m_dofRankOffset; using Base::m_X; using Base::m_rotationMatrix; - using Base::m_penalty; using Base::m_dispJump; using Base::m_oldDispJump; using Base::m_matrix; @@ -94,7 +103,9 @@ class ALMSimultaneous : inputRhs, inputDt, faceElementList ), - m_traction( elementSubRegion.getField< fields::contact::traction >().toViewConst()) + m_traction( elementSubRegion.getField< fields::contact::traction >().toViewConst()), + m_penalty( elementSubRegion.getField< fields::contact::iterativePenalty >().toViewConst() ), + m_faceArea( elementSubRegion.getField< fields::elementArea >().toViewConst() ) {} //*************************************************************************** @@ -192,8 +203,6 @@ class ALMSimultaneous : { constexpr int shift = numNodesPerElem * 3; - constexpr int numTdofs = 3; - int permutation[numNodesPerElem]; m_finiteElementSpace.getPermutation( permutation ); @@ -255,10 +264,6 @@ class ALMSimultaneous : GEOS_UNUSED_VAR( k ); //constexpr real64 zero = 1.e-10; - constexpr int numUdofs = numNodesPerElem * 3 * 2; - - constexpr int numBdofs = 3*2; - real64 matRRtAtu[3][numUdofs], matDRtAtu[3][numUdofs]; real64 matRRtAtb[3][numBdofs], matDRtAtb[3][numBdofs]; @@ -270,9 +275,9 @@ class ALMSimultaneous : // Compute the trial traction real64 dispJump[ 3 ]; - dispJump[0] = stack.dispJumpLocal[0]; - dispJump[1] = stack.dispJumpLocal[1] - stack.oldDispJumpLocal[1]; - dispJump[2] = stack.dispJumpLocal[2] - stack.oldDispJumpLocal[2]; + dispJump[0] = stack.dispJumpLocal[0] * m_faceArea[k]; + dispJump[1] = ( stack.dispJumpLocal[1] - stack.oldDispJumpLocal[1] ) * m_faceArea[k]; + dispJump[2] = ( stack.dispJumpLocal[2] - stack.oldDispJumpLocal[2] ) * m_faceArea[k]; LvArray::tensorOps::scaledCopy< 3 >( tractionNew, stack.tLocal, -1.0 ); LvArray::tensorOps::Ri_add_AijBj< 3, 3 >( tractionNew, stack.localPenalty, dispJump ); @@ -377,6 +382,11 @@ class ALMSimultaneous : protected: arrayView2d< real64 const > const m_traction; + + /// The array containing the penalty coefficients for each element. + arrayView2d< real64 const > const m_penalty; + + arrayView1d< real64 const > const m_faceArea; }; /// The factory used to construct the kernel. @@ -412,16 +422,17 @@ struct ComputeTractionSimultaneousKernel arrayView2d< real64 const > const & traction, arrayView2d< real64 const > const & dispJump, arrayView2d< real64 const > const & deltaDispJump, + arrayView1d< real64 const > const & faceElementArea, arrayView2d< real64 > const & tractionNew ) { forAll< POLICY >( size, [=] GEOS_HOST_DEVICE ( localIndex const kfe ) { - tractionNew[kfe][0] = traction[kfe][0] + penalty[kfe][0] * dispJump[kfe][0]; - tractionNew[kfe][1] = traction[kfe][1] + penalty[kfe][2] * deltaDispJump[kfe][1] + - penalty[kfe][4] * deltaDispJump[kfe][2]; - tractionNew[kfe][2] = traction[kfe][2] + penalty[kfe][3] * deltaDispJump[kfe][2] + - penalty[kfe][4] * deltaDispJump[kfe][1]; + tractionNew[kfe][0] = traction[kfe][0] + penalty[kfe][0] * dispJump[kfe][0] * faceElementArea[kfe]; + tractionNew[kfe][1] = traction[kfe][1] + ( penalty[kfe][2] * deltaDispJump[kfe][1]+ + penalty[kfe][4] * deltaDispJump[kfe][2] ) * faceElementArea[kfe]; + tractionNew[kfe][2] = traction[kfe][2] + ( penalty[kfe][3] * deltaDispJump[kfe][2] + + penalty[kfe][4] * deltaDispJump[kfe][1] ) * faceElementArea[kfe]; } ); } @@ -432,4 +443,4 @@ struct ComputeTractionSimultaneousKernel } // namespace geos -#endif /* GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSALMKERNELS_HPP_ */ +#endif /* GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSALMKERNELS_HPP_ */ diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsALMKernelsBase.hpp b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsConformingContactKernelsBase.hpp similarity index 52% rename from src/coreComponents/physicsSolvers/contact/SolidMechanicsALMKernelsBase.hpp rename to src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsConformingContactKernelsBase.hpp index 4f3504e3d5f..28079e6fc51 100644 --- a/src/coreComponents/physicsSolvers/contact/SolidMechanicsALMKernelsBase.hpp +++ b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsConformingContactKernelsBase.hpp @@ -17,16 +17,17 @@ * @file SolidMechanicsALMKernelsBase.hpp */ -#ifndef GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSALMKERNELSBASE_HPP_ -#define GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSALMKERNELSBASE_HPP_ +#ifndef GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSCONFORMINGCONTACTKERNELSBASE_HPP_ +#define GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSCONFORMINGCONTACTKERNELSBASE_HPP_ #include "finiteElement/kernelInterface/InterfaceKernelBase.hpp" -#include "SolidMechanicsALMKernelsHelper.hpp" +#include "SolidMechanicsConformingContactKernelsHelper.hpp" +#include "codingUtilities/Utilities.hpp" namespace geos { -namespace solidMechanicsALMKernels +namespace solidMechanicsConformingContactKernels { /** @@ -36,7 +37,7 @@ namespace solidMechanicsALMKernels */ template< typename CONSTITUTIVE_TYPE, typename FE_TYPE > -class ALMKernelsBase : +class ConformingContactKernelsBase : public finiteElement::InterfaceKernelBase< CONSTITUTIVE_TYPE, FE_TYPE, 3, 3 > @@ -54,6 +55,15 @@ class ALMKernelsBase : /// Compile time value for the number of quadrature points per element. static constexpr int numQuadraturePointsPerElem = FE_TYPE::numQuadraturePoints; + /// The number of displacement dofs per element. + static constexpr int numUdofs = numNodesPerElem * 3 * 2; + + /// The number of lagrange multiplier dofs per element. + static constexpr int numTdofs = 3; + + /// The number of bubble dofs per element. + static constexpr int numBdofs = 3*2; + using Base::m_dofNumber; using Base::m_dofRankOffset; using Base::m_finiteElementSpace; @@ -64,20 +74,20 @@ class ALMKernelsBase : * @brief Constructor * @copydoc geos::finiteElement::InterfaceKernelBase::InterfaceKernelBase */ - ALMKernelsBase( NodeManager const & nodeManager, - EdgeManager const & edgeManager, - FaceManager const & faceManager, - localIndex const targetRegionIndex, - FaceElementSubRegion & elementSubRegion, - FE_TYPE const & finiteElementSpace, - CONSTITUTIVE_TYPE & inputConstitutiveType, - arrayView1d< globalIndex const > const uDofNumber, - arrayView1d< globalIndex const > const bDofNumber, - globalIndex const rankOffset, - CRSMatrixView< real64, globalIndex const > const inputMatrix, - arrayView1d< real64 > const inputRhs, - real64 const inputDt, - arrayView1d< localIndex const > const & faceElementList ): + ConformingContactKernelsBase( NodeManager const & nodeManager, + EdgeManager const & edgeManager, + FaceManager const & faceManager, + localIndex const targetRegionIndex, + FaceElementSubRegion & elementSubRegion, + FE_TYPE const & finiteElementSpace, + CONSTITUTIVE_TYPE & inputConstitutiveType, + arrayView1d< globalIndex const > const uDofNumber, + arrayView1d< globalIndex const > const bDofNumber, + globalIndex const rankOffset, + CRSMatrixView< real64, globalIndex const > const inputMatrix, + arrayView1d< real64 > const inputRhs, + real64 const inputDt, + arrayView1d< localIndex const > const & faceElementList ): Base( nodeManager, edgeManager, faceManager, @@ -97,8 +107,7 @@ class ALMKernelsBase : m_bDofNumber( bDofNumber ), m_rotationMatrix( elementSubRegion.getField< fields::contact::rotationMatrix >().toViewConst()), m_dispJump( elementSubRegion.getField< fields::contact::dispJump >().toView() ), - m_oldDispJump( elementSubRegion.getField< fields::contact::oldDispJump >().toViewConst() ), - m_penalty( elementSubRegion.getField< fields::contact::iterativePenalty >().toViewConst() ) + m_oldDispJump( elementSubRegion.getField< fields::contact::oldDispJump >().toViewConst() ) {} //*************************************************************************** @@ -107,14 +116,7 @@ class ALMKernelsBase : */ struct StackVariables { - /// The number of displacement dofs per element. - static constexpr int numUdofs = numNodesPerElem * 3 * 2; - - /// The number of lagrange multiplier dofs per element. - static constexpr int numTdofs = 3; - /// The number of bubble dofs per element. - static constexpr int numBdofs = 3*2; public: @@ -191,20 +193,16 @@ class ALMKernelsBase : } //END_kernelLauncher + template< typename LAMBDA = NoOpFunc > GEOS_HOST_DEVICE inline void quadraturePointKernel( localIndex const k, localIndex const q, - StackVariables & stack ) const + StackVariables & stack, + LAMBDA && lambda = NoOpFunc{} ) const { GEOS_UNUSED_VAR( k ); - constexpr int numUdofs = numNodesPerElem * 3 * 2; - - constexpr int numTdofs = 3; - - constexpr int numBdofs = 3*2; - real64 const detJ = m_finiteElementSpace.transformedQuadratureWeight( q, stack.X ); real64 N[ numNodesPerElem ]; @@ -220,19 +218,21 @@ class ALMKernelsBase : m_finiteElementSpace.getPermutation( permutation ); // TODO: Try using bilinear utilities to perform these two operations - solidMechanicsALMKernelsHelper::accumulateAtuLocalOperator< numTdofs, - numUdofs, - numNodesPerElem >( stack.localAtu, - N, - permutation, + solidMechanicsConformingContactKernelsHelper::accumulateAtuLocalOperator< numTdofs, + numUdofs, + numNodesPerElem >( stack.localAtu, + N, + permutation, + detJ ); + + solidMechanicsConformingContactKernelsHelper::accumulateAtuLocalOperator< numTdofs, + numBdofs, + 1 >( stack.localAtb, + BubbleN, + bperm, detJ ); - solidMechanicsALMKernelsHelper::accumulateAtuLocalOperator< numTdofs, - numBdofs, - 1 >( stack.localAtb, - BubbleN, - bperm, - detJ ); + lambda( detJ ); } protected: @@ -260,12 +260,9 @@ class ALMKernelsBase : /// The array containing the displacement jump of previus time step. arrayView2d< real64 const > const m_oldDispJump; - - /// The array containing the penalty coefficients for each element. - arrayView2d< real64 const > const m_penalty; - }; + /** * @brief A struct to compute rotation matrices */ @@ -285,7 +282,10 @@ struct ComputeRotationMatricesKernel launch( localIndex const size, arrayView2d< real64 const > const & faceNormal, ArrayOfArraysView< localIndex const > const & elemsToFaces, - arrayView3d< real64 > const & rotationMatrix ) + arrayView3d< real64 > const & rotationMatrix, + arrayView2d< real64 > const & unitNormal, + arrayView2d< real64 > const & unitTangent1, + arrayView2d< real64 > const & unitTangent2 ) { forAll< POLICY >( size, [=] GEOS_HOST_DEVICE ( localIndex const k ) @@ -302,149 +302,26 @@ struct ComputeRotationMatricesKernel LvArray::tensorOps::normalize< 3 >( Nbar ); computationalGeometry::RotationMatrix_3D( Nbar, rotationMatrix[k] ); - } ); - } + real64 const columnVector1[3] = { rotationMatrix[k][ 0 ][ 1 ], + rotationMatrix[k][ 1 ][ 1 ], + rotationMatrix[k][ 2 ][ 1 ] }; -}; - -/** - * @brief A struct to check for constraint satisfaction - */ -struct ConstraintCheckKernel -{ - - /** - * @brief Launch the kernel function to check the constraint satisfaction - * @tparam POLICY the type of policy used in the kernel launch - * @tparam CONTACT_WRAPPER the type of contact wrapper doing the fracture traction updates - * @param[in] size the size of the subregion - * @param[in] traction the array containing the current traction - * @param[in] dispJump the array containing the displacement jump - * @param[in] deltaDispJump the array containing the delta displacement jump - * @param[in] normalTractionTolerance Check tolerance (normal traction) - * @param[in] normalDisplacementTolerance Check tolerance (compenetration) - * @param[in] slidingTolerance Check tolerance (sliding) - * @param[in] slidingCheckTolerance Check tolerance (if shear strass exceeds tauLim) - * @param[in] area interface element area - * @param[in] fractureState the array containing the fracture state - * @param[out] condConv the array containing the convergence flag: - * 0: Constraint conditions satisfied - * 1: Open - * 2: Compenetration - * 3: Slip exceeds sliding tolerance - * 4: Shear stress exceeds tauLim - */ - template< typename POLICY, typename CONTACT_WRAPPER > - static void - launch( localIndex const size, - CONTACT_WRAPPER const & contactWrapper, - arrayView1d< integer const > const & ghostRank, - arrayView2d< real64 > const & traction, - arrayView2d< real64 const > const & dispJump, - arrayView2d< real64 const > const & deltaDispJump, - arrayView1d< real64 const > const & normalTractionTolerance, - arrayView1d< real64 const > const & normalDisplacementTolerance, - arrayView1d< real64 const > const & slidingTolerance, - real64 const slidingCheckTolerance, - arrayView1d< real64 const > const & area, - arrayView1d< integer const > const & fractureState, - arrayView1d< integer > const & condConv ) - { - - forAll< POLICY >( size, [=] GEOS_HOST_DEVICE ( localIndex const k ) - { - if( ghostRank[k] < 0 ) - { - contactWrapper.constraintCheck( dispJump[k], - deltaDispJump[k], - traction[k], - fractureState[k], - normalTractionTolerance[k], - normalDisplacementTolerance[k]*area[k], - slidingTolerance[k]*area[k], - slidingCheckTolerance, - condConv[k] ); - } - - } ); - } -}; - -/** - * @brief A struct to check for constraint satisfaction - */ -struct UpdateStateKernel -{ - - /** - * @brief Launch the kernel function to check the constraint satisfaction - * @tparam POLICY the type of policy used in the kernel launch - * @tparam CONTACT_WRAPPER the type of contact wrapper doing the fracture traction updates - * @param[in] size the size of the subregion - * @param[in] oldDispJump the array containing the old displacement jump (previous time step) - * @param[in] dispJump the array containing the displacement jump - * @param[in] penalty the array containing the penalty coefficients - * @param[in] symmetric flag to compute symmetric penalty matrix - * @param[in] normalTractionTolerance Check tolerance (normal traction) - * @param[in] traction the array containing the current traction - * @param[in] fractureState the array containing the fracture state - */ - template< typename POLICY, typename CONTACT_WRAPPER > - static void - launch( localIndex const size, - CONTACT_WRAPPER const & contactWrapper, - arrayView2d< real64 const > const & oldDispJump, - arrayView2d< real64 const > const & dispJump, - arrayView2d< real64 > const & penalty, - bool const symmetric, - arrayView1d< real64 const > const & normalTractionTolerance, - arrayView2d< real64 > const & traction, - arrayView1d< integer > const & fractureState ) - - { - forAll< POLICY >( size, [=] GEOS_HOST_DEVICE ( localIndex const k ) - { - - real64 const zero = LvArray::NumericLimits< real64 >::epsilon; - - real64 localPenalty[3][3]{}; - real64 localTractionNew[3]{}; - contactWrapper.updateTraction( oldDispJump[k], - dispJump[k], - penalty[k], - traction[k], - symmetric, - false, - normalTractionTolerance[k], - zero, - localPenalty, - localTractionNew, - fractureState[k] ); - - if( fractureState[k] == fields::contact::FractureState::Open ) - { - - LvArray::tensorOps::fill< 3 >( localTractionNew, 0.0 ); - } - else if( LvArray::math::abs( localTractionNew[ 0 ] ) < normalTractionTolerance[k] ) - { - LvArray::tensorOps::fill< 3 >( localTractionNew, 0.0 ); - fractureState[k] = fields::contact::FractureState::Slip; - } - - LvArray::tensorOps::copy< 3 >( traction[k], localTractionNew ); - penalty[k][2] = -localPenalty[1][1]; - penalty[k][3] = -localPenalty[2][2]; - penalty[k][4] = -localPenalty[1][2]; + real64 const columnVector2[3] = { rotationMatrix[k][ 0 ][ 2 ], + rotationMatrix[k][ 1 ][ 2 ], + rotationMatrix[k][ 2 ][ 2 ] }; + LvArray::tensorOps::copy< 3 >( unitNormal[k], Nbar ); + LvArray::tensorOps::copy< 3 >( unitTangent1[k], columnVector1 ); + LvArray::tensorOps::copy< 3 >( unitTangent2[k], columnVector2 ); } ); } }; -} // namespace SolidMechanicsALMKernels + +} // namespace solidMechanicsConformingContactKernels } // namespace geos -#endif /* GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSALMKERNELSBASE_HPP_ */ +#endif /* GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSCONFORMINGCONTACTKERNELSBASE_HPP_ */ diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsALMKernelsHelper.hpp b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsConformingContactKernelsHelper.hpp similarity index 82% rename from src/coreComponents/physicsSolvers/contact/SolidMechanicsALMKernelsHelper.hpp rename to src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsConformingContactKernelsHelper.hpp index 02250a60170..fc8fb5f6f72 100644 --- a/src/coreComponents/physicsSolvers/contact/SolidMechanicsALMKernelsHelper.hpp +++ b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsConformingContactKernelsHelper.hpp @@ -15,18 +15,18 @@ /** - * @file SolidMechanicsALMKernelsHelper.hpp + * @file SolidMechanicsConformingContactKernelsHelper.hpp */ -#ifndef GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSALMKERNELSHELPER_HPP_ -#define GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSALMKERNELSHELPER_HPP_ +#ifndef GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSCONFORMINGCONTACTKERNELSHELPER_HPP_ +#define GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSCONFORMINGCONTACTKERNELSHELPER_HPP_ #include "common/GeosxMacros.hpp" namespace geos { -namespace solidMechanicsALMKernelsHelper +namespace solidMechanicsConformingContactKernelsHelper { template< int I_SIZE, @@ -76,8 +76,8 @@ void assembleStrainOperator( real64 ( & strainMatrix )[I_SIZE][J_SIZE], } } -} // solidMechanicsALMKernelsHelper +} // solidMechanicsConformingContactKernelsHelper } // geos -#endif /* GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSALMKERNELSHELPER_HPP_ */ +#endif /* GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSCONFORMINGCONTACTKERNELSHELPER_HPP_ */ diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsALMBubbleKernels.hpp b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsContactFaceBubbleKernels.hpp similarity index 85% rename from src/coreComponents/physicsSolvers/contact/SolidMechanicsALMBubbleKernels.hpp rename to src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsContactFaceBubbleKernels.hpp index 4b76b7a4a3d..0d622571def 100644 --- a/src/coreComponents/physicsSolvers/contact/SolidMechanicsALMBubbleKernels.hpp +++ b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsContactFaceBubbleKernels.hpp @@ -14,14 +14,14 @@ */ /** - * @file SolidMechanicsALMBubbleKernels.hpp + * @file SolidMechanicsContactFaceBubbleKernels.hpp */ -#ifndef GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSALMBUBBLEKERNELS_HPP_ -#define GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSALMBUBBLEKERNELS_HPP_ +#ifndef GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSCONTACTFACEBUBBLEKERNELS_HPP_ +#define GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSCONTACTFACEBUBBLEKERNELS_HPP_ #include "physicsSolvers/solidMechanics/kernels/ImplicitSmallStrainQuasiStatic.hpp" -#include "SolidMechanicsALMKernelsHelper.hpp" +#include "SolidMechanicsConformingContactKernelsHelper.hpp" // TODO: Use the bilinear form utilities //#include "finiteElement/BilinearFormUtilities.hpp" @@ -29,7 +29,7 @@ namespace geos { -namespace solidMechanicsALMKernels +namespace solidMechanicsConformingContactKernels { /** @@ -40,7 +40,7 @@ namespace solidMechanicsALMKernels template< typename SUBREGION_TYPE, typename CONSTITUTIVE_TYPE, typename FE_TYPE > -class ALMBubbleKernels : +class FaceBubbleKernels : public solidMechanicsLagrangianFEMKernels::ImplicitSmallStrainQuasiStatic< SUBREGION_TYPE, CONSTITUTIVE_TYPE, FE_TYPE > @@ -75,20 +75,20 @@ class ALMBubbleKernels : * @brief Constructor * @copydoc geos::finiteElement::ImplicitKernelBase::ImplicitKernelBase */ - ALMBubbleKernels( NodeManager const & nodeManager, - EdgeManager const & edgeManager, - FaceManager const & faceManager, - localIndex const targetRegionIndex, - SUBREGION_TYPE const & elementSubRegion, - FE_TYPE const & finiteElementSpace, - CONSTITUTIVE_TYPE & inputConstitutiveType, - arrayView1d< globalIndex const > const uDofNumber, - arrayView1d< globalIndex const > const bDofNumber, - globalIndex const rankOffset, - CRSMatrixView< real64, globalIndex const > const inputMatrix, - arrayView1d< real64 > const inputRhs, - real64 const inputDt, - real64 const (&inputGravityVector)[3] ): + FaceBubbleKernels( NodeManager const & nodeManager, + EdgeManager const & edgeManager, + FaceManager const & faceManager, + localIndex const targetRegionIndex, + SUBREGION_TYPE const & elementSubRegion, + FE_TYPE const & finiteElementSpace, + CONSTITUTIVE_TYPE & inputConstitutiveType, + arrayView1d< globalIndex const > const uDofNumber, + arrayView1d< globalIndex const > const bDofNumber, + globalIndex const rankOffset, + CRSMatrixView< real64, globalIndex const > const inputMatrix, + arrayView1d< real64 > const inputRhs, + real64 const inputDt, + real64 const (&inputGravityVector)[3] ): Base( nodeManager, edgeManager, faceManager, @@ -280,10 +280,10 @@ class ALMBubbleKernels : m_constitutiveUpdate.getElasticStiffness( k, q, stack.constitutiveStiffness ); real64 strainMatrix[6][nUdof]; - solidMechanicsALMKernelsHelper::assembleStrainOperator< 6, nUdof, numNodesPerElem >( strainMatrix, dNdX ); + solidMechanicsConformingContactKernelsHelper::assembleStrainOperator< 6, nUdof, numNodesPerElem >( strainMatrix, dNdX ); real64 strainBubbleMatrix[6][nBubbleUdof]; - solidMechanicsALMKernelsHelper::assembleStrainOperator< 6, nBubbleUdof, numFacesPerElem >( strainBubbleMatrix, dBubbleNdX ); + solidMechanicsConformingContactKernelsHelper::assembleStrainOperator< 6, nBubbleUdof, numFacesPerElem >( strainBubbleMatrix, dBubbleNdX ); // TODO: It would be nice use BilinearFormUtilities::compute @@ -425,18 +425,18 @@ class ALMBubbleKernels : }; /// The factory used to construct a QuasiStatic kernel. -using ALMBubbleFactory = finiteElement::KernelFactory< ALMBubbleKernels, - arrayView1d< globalIndex const > const, - arrayView1d< globalIndex const > const, - globalIndex const, - CRSMatrixView< real64, globalIndex const > const, - arrayView1d< real64 > const, - real64 const, - real64 const (&) [3] >; +using FaceBubbleFactory = finiteElement::KernelFactory< FaceBubbleKernels, + arrayView1d< globalIndex const > const, + arrayView1d< globalIndex const > const, + globalIndex const, + CRSMatrixView< real64, globalIndex const > const, + arrayView1d< real64 > const, + real64 const, + real64 const (&) [3] >; -} // namespace SolidMechanicsALMBubbleKernels +} // namespace SolidMechanicsContactFaceBubbleKernels } // namespace geos -#endif /* GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSALMBUBBLEKERNELS_HPP_ */ +#endif /* GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSCONTACTFACEBUBBLEKERNELS_HPP_ */ diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsALMJumpUpdateKernels.hpp b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsDisplacementJumpUpdateKernels.hpp similarity index 71% rename from src/coreComponents/physicsSolvers/contact/SolidMechanicsALMJumpUpdateKernels.hpp rename to src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsDisplacementJumpUpdateKernels.hpp index 1f434b3a13e..ba0bc23272a 100644 --- a/src/coreComponents/physicsSolvers/contact/SolidMechanicsALMJumpUpdateKernels.hpp +++ b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsDisplacementJumpUpdateKernels.hpp @@ -17,15 +17,16 @@ * @file SolidMechanicsALMUpdateKernels.hpp */ -#ifndef GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSALMUPDATEKERNELS_HPP_ -#define GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSALMUPDATEKERNELS_HPP_ +#ifndef GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSDISPLACEMENTJUPDATEKERNELS_HPP_ +#define GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSDISPLACEMENTJUPDATEKERNELS_HPP_ -#include "SolidMechanicsALMKernelsBase.hpp" +#include "SolidMechanicsConformingContactKernelsBase.hpp" +#include "mesh/MeshFields.hpp" namespace geos { -namespace solidMechanicsALMKernels +namespace solidMechanicsConformingContactKernels { /** @@ -33,19 +34,28 @@ namespace solidMechanicsALMKernels */ template< typename CONSTITUTIVE_TYPE, typename FE_TYPE > -class ALMJumpUpdate : - public ALMKernelsBase< CONSTITUTIVE_TYPE, - FE_TYPE > +class DispJumpUpdate : + public ConformingContactKernelsBase< CONSTITUTIVE_TYPE, + FE_TYPE > { public: /// Alias for the base class; - using Base = ALMKernelsBase< CONSTITUTIVE_TYPE, - FE_TYPE >; + using Base = ConformingContactKernelsBase< CONSTITUTIVE_TYPE, + FE_TYPE >; /// Maximum number of nodes per element, which is equal to the maxNumTestSupportPointPerElem and /// maxNumTrialSupportPointPerElem by definition. static constexpr int numNodesPerElem = Base::maxNumTestSupportPointsPerElem; + /// The number of displacement dofs per element. + static constexpr int numUdofs = Base::numUdofs; + + /// The number of bubble dofs per element. + static constexpr int numBdofs = Base::numBdofs; + + /// The number of lagrange multiplier dofs per element. + static constexpr int numTdofs = Base::numTdofs; + using Base::m_X; using Base::m_finiteElementSpace; using Base::m_dofNumber; @@ -59,20 +69,20 @@ class ALMJumpUpdate : * @brief Constructor * @copydoc geos::finiteElement::InterfaceKernelBase::InterfaceKernelBase */ - ALMJumpUpdate( NodeManager const & nodeManager, - EdgeManager const & edgeManager, - FaceManager const & faceManager, - localIndex const targetRegionIndex, - FaceElementSubRegion & elementSubRegion, - FE_TYPE const & finiteElementSpace, - CONSTITUTIVE_TYPE & inputConstitutiveType, - arrayView1d< globalIndex const > const uDofNumber, - arrayView1d< globalIndex const > const bDofNumber, - globalIndex const rankOffset, - CRSMatrixView< real64, globalIndex const > const inputMatrix, - arrayView1d< real64 > const inputRhs, - real64 const inputDt, - arrayView1d< localIndex const > const & faceElementList ): + DispJumpUpdate( NodeManager const & nodeManager, + EdgeManager const & edgeManager, + FaceManager const & faceManager, + localIndex const targetRegionIndex, + FaceElementSubRegion & elementSubRegion, + FE_TYPE const & finiteElementSpace, + CONSTITUTIVE_TYPE & inputConstitutiveType, + arrayView1d< globalIndex const > const uDofNumber, + arrayView1d< globalIndex const > const bDofNumber, + globalIndex const rankOffset, + CRSMatrixView< real64, globalIndex const > const inputMatrix, + arrayView1d< real64 > const inputRhs, + real64 const inputDt, + arrayView1d< localIndex const > const & faceElementList ): Base( nodeManager, edgeManager, faceManager, @@ -91,7 +101,9 @@ class ALMJumpUpdate : m_bubbleDisp( faceManager.getField< fields::solidMechanics::totalBubbleDisplacement >() ), m_incrDisp( nodeManager.getField< fields::solidMechanics::incrementalDisplacement >() ), m_incrBubbleDisp( faceManager.getField< fields::solidMechanics::incrementalBubbleDisplacement >() ), - m_deltaDispJump( elementSubRegion.getField< fields::contact::deltaDispJump >().toView() ) + m_deltaDispJump( elementSubRegion.getField< fields::contact::deltaDispJump >().toView() ), + m_elementArea( elementSubRegion.getField< fields::elementArea >().toView() ), + m_slip( elementSubRegion.getField< fields::contact::slip >().toView() ) {} //*************************************************************************** @@ -102,25 +114,16 @@ class ALMJumpUpdate : struct StackVariables : public Base::StackVariables { - /// The number of displacement dofs per element. - static constexpr int numUdofs = numNodesPerElem * 3 * 2; - - /// The number of bubble dofs per element. - static constexpr int numBdofs = 3 * 2; - - /// The number of lagrange multiplier dofs per element. - static constexpr int numTdofs = 3; - public: GEOS_HOST_DEVICE StackVariables(): Base::StackVariables(), - uLocal{}, - bLocal{}, - duLocal{}, - dbLocal{}, - deltaDispJumpLocal{} + uLocal{}, + bLocal{}, + duLocal{}, + dbLocal{}, + deltaDispJumpLocal{} {} /// Stack storage for the element local displacement vector @@ -208,11 +211,6 @@ class ALMJumpUpdate : real64 complete( localIndex const k, StackVariables & stack ) const { - - constexpr int numUdofs = numNodesPerElem * 3 * 2; - - constexpr int numBdofs = 3 * 2; - real64 matRtAtu[3][numUdofs]; real64 matRtAtb[3][numBdofs]; @@ -232,12 +230,17 @@ class ALMJumpUpdate : LvArray::tensorOps::Ri_add_AijBj< 3, numBdofs >( stack.deltaDispJumpLocal, matRtAtb, stack.dbLocal ); // Store the results + real64 const scale = 1 / m_elementArea[k]; + for( int i=0; i<3; ++i ) { - m_dispJump[ k ][ i ] = stack.dispJumpLocal[ i ]; - m_deltaDispJump[ k ][ i ] = stack.deltaDispJumpLocal[ i ]; + m_dispJump[ k ][ i ] = scale * stack.dispJumpLocal[ i ]; + m_deltaDispJump[ k ][ i ] = scale * stack.deltaDispJumpLocal[ i ]; } + m_slip[k] = LvArray::math::sqrt( LvArray::math::square( m_dispJump( k, 1 ) ) + LvArray::math::square( m_dispJump( k, 2 ) ) ); + + return 0.0; } @@ -258,19 +261,23 @@ class ALMJumpUpdate : /// The rank-global delta displacement jump array. arrayView2d< real64 > const m_deltaDispJump; + arrayView1d< real64 const > const m_elementArea; + + arrayView1d< real64 > const m_slip; + }; -using ALMJumpUpdateFactory = finiteElement::InterfaceKernelFactory< ALMJumpUpdate, - arrayView1d< globalIndex const > const, - arrayView1d< globalIndex const > const, - globalIndex const, - CRSMatrixView< real64, globalIndex const > const, - arrayView1d< real64 > const, - real64 const, - arrayView1d< localIndex const > const >; +using DispJumpUpdateFactory = finiteElement::InterfaceKernelFactory< DispJumpUpdate, + arrayView1d< globalIndex const > const, + arrayView1d< globalIndex const > const, + globalIndex const, + CRSMatrixView< real64, globalIndex const > const, + arrayView1d< real64 > const, + real64 const, + arrayView1d< localIndex const > const >; } // namespace SolidMechanicsALMKernels } // namespace geos -#endif /* GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSALMUPDATEKERNELS_HPP_ */ +#endif /* GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSDISPLACEMENTJUPDATEKERNELS_HPP_ */ diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsEFEMJumpUpdateKernels.hpp b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsEFEMJumpUpdateKernels.hpp similarity index 97% rename from src/coreComponents/physicsSolvers/contact/SolidMechanicsEFEMJumpUpdateKernels.hpp rename to src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsEFEMJumpUpdateKernels.hpp index 26e6ea5abe0..cca58c08ddd 100644 --- a/src/coreComponents/physicsSolvers/contact/SolidMechanicsEFEMJumpUpdateKernels.hpp +++ b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsEFEMJumpUpdateKernels.hpp @@ -18,8 +18,8 @@ * @file SolidMechanicsEFEMKernels.hpp */ -#ifndef GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSEFEMJUMPUPDATEKERNELS_HPP_ -#define GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSEFEMJUMPUPDATEKERNELS_HPP_ +#ifndef GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSEFEMJUMPUPDATEKERNELS_HPP_ +#define GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSEFEMJUMPUPDATEKERNELS_HPP_ #include "SolidMechanicsEFEMKernelsBase.hpp" @@ -246,4 +246,4 @@ using EFEMJumpUpdateFactory = finiteElement::KernelFactory< EFEMJumpUpdate, } // namespace geos -#endif /* GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSEFEMJUMPUPDATEKERNELS_HPP_ */ +#endif /* GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSEFEMJUMPUPDATEKERNELS_HPP_ */ diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsEFEMKernels.hpp b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsEFEMKernels.hpp similarity index 98% rename from src/coreComponents/physicsSolvers/contact/SolidMechanicsEFEMKernels.hpp rename to src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsEFEMKernels.hpp index f683446af4b..ff06f6137c1 100644 --- a/src/coreComponents/physicsSolvers/contact/SolidMechanicsEFEMKernels.hpp +++ b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsEFEMKernels.hpp @@ -18,8 +18,8 @@ * @file SolidMechanicsEFEMKernels.hpp */ -#ifndef GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSEFEMKERNELS_HPP_ -#define GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSEFEMKERNELS_HPP_ +#ifndef GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSEFEMKERNELS_HPP_ +#define GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSEFEMKERNELS_HPP_ #include "SolidMechanicsEFEMKernelsBase.hpp" @@ -347,4 +347,4 @@ struct StateUpdateKernel } // namespace geos -#endif /* GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSEFEMKERNELS_HPP_ */ +#endif /* GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSEFEMKERNELS_HPP_ */ diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsEFEMKernelsBase.hpp b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsEFEMKernelsBase.hpp similarity index 98% rename from src/coreComponents/physicsSolvers/contact/SolidMechanicsEFEMKernelsBase.hpp rename to src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsEFEMKernelsBase.hpp index 5f1c22b7c19..dd3d95d49b9 100644 --- a/src/coreComponents/physicsSolvers/contact/SolidMechanicsEFEMKernelsBase.hpp +++ b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsEFEMKernelsBase.hpp @@ -18,8 +18,8 @@ * @file SolidMechanicsEFEMKernels.hpp */ -#ifndef GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSEFEMKERNELSBASE_HPP_ -#define GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSEFEMKERNELSBASE_HPP_ +#ifndef GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSEFEMKERNELSBASE_HPP_ +#define GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSEFEMKERNELSBASE_HPP_ #include "physicsSolvers/solidMechanics/kernels/ImplicitSmallStrainQuasiStatic.hpp" #include "SolidMechanicsEFEMKernelsHelper.hpp" @@ -345,4 +345,4 @@ class EFEMKernelsBase : } // namespace geos -#endif /* GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSEFEMKERNELSBASE_HPP_ */ +#endif /* GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSEFEMKERNELSBASE_HPP_ */ diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsEFEMKernelsHelper.hpp b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsEFEMKernelsHelper.hpp similarity index 94% rename from src/coreComponents/physicsSolvers/contact/SolidMechanicsEFEMKernelsHelper.hpp rename to src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsEFEMKernelsHelper.hpp index 3018fb975c7..dc5232d75ee 100644 --- a/src/coreComponents/physicsSolvers/contact/SolidMechanicsEFEMKernelsHelper.hpp +++ b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsEFEMKernelsHelper.hpp @@ -18,8 +18,8 @@ * @file EFEMKernelsHelper.hpp */ -#ifndef GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSEFEMKERNELSHELPER_HPP_ -#define GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSEFEMKERNELSHELPER_HPP_ +#ifndef GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSEFEMKERNELSHELPER_HPP_ +#define GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSEFEMKERNELSHELPER_HPP_ #include "common/DataTypes.hpp" @@ -152,4 +152,4 @@ void assembleEquilibriumOperator( real64 ( & eqMatrix )[3][6], } // geos -#endif /* SRC_CORECOMPONENTS_PHYSICSSOLVERS_CONTACT_EFEMKERNELSHELPER_HPP_ */ +#endif /* SRC_CORECOMPONENTS_PHYSICSSOLVERS_CONTACT_KERNELS_EFEMKERNELSHELPER_HPP_ */ diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsEFEMStaticCondensationKernels.hpp b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsEFEMStaticCondensationKernels.hpp similarity index 97% rename from src/coreComponents/physicsSolvers/contact/SolidMechanicsEFEMStaticCondensationKernels.hpp rename to src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsEFEMStaticCondensationKernels.hpp index 83dfa5fd884..980d6d61892 100644 --- a/src/coreComponents/physicsSolvers/contact/SolidMechanicsEFEMStaticCondensationKernels.hpp +++ b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsEFEMStaticCondensationKernels.hpp @@ -18,8 +18,8 @@ * @file SolidMechanicsEFEMKernels.hpp */ -#ifndef GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSEFEMSTATICCONDENSATIONKERNELS_HPP_ -#define GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSEFEMSTATICCONDENSATIONKERNELS_HPP_ +#ifndef GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSEFEMSTATICCONDENSATIONKERNELS_HPP_ +#define GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSEFEMSTATICCONDENSATIONKERNELS_HPP_ #include "SolidMechanicsEFEMKernelsBase.hpp" @@ -252,4 +252,4 @@ using EFEMStaticCondensationFactory = finiteElement::KernelFactory< EFEMStaticCo } // namespace geos -#endif /* GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSEFEMSTATICCONDENSATIONKERNELS_HPP_ */ +#endif /* GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSEFEMSTATICCONDENSATIONKERNELS_HPP_ */ diff --git a/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsLagrangeContactKernels.hpp b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsLagrangeContactKernels.hpp new file mode 100644 index 00000000000..90fdec8ec4f --- /dev/null +++ b/src/coreComponents/physicsSolvers/contact/kernels/SolidMechanicsLagrangeContactKernels.hpp @@ -0,0 +1,438 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2024 Total, S.A + * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2023-2024 Chevron + * Copyright (c) 2019- GEOS/GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file SolidMechanicsALMKernelsBase.hpp + */ + +#ifndef GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSLAGRANGECONTACTKERNELS_HPP_ +#define GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSLAGRANGECONTACTKERNELS_HPP_ + +#include "finiteElement/kernelInterface/InterfaceKernelBase.hpp" +#include "SolidMechanicsConformingContactKernelsBase.hpp" + +namespace geos +{ + +namespace solidMechanicsLagrangeContactKernels +{ + +/** + * @copydoc geos::finiteElement::ImplicitKernelBase + */ +template< typename CONSTITUTIVE_TYPE, + typename FE_TYPE > +class LagrangeContact : + public solidMechanicsConformingContactKernels::ConformingContactKernelsBase< CONSTITUTIVE_TYPE, + FE_TYPE > +{ +public: + /// Alias for the base class. + using Base = solidMechanicsConformingContactKernels::ConformingContactKernelsBase< CONSTITUTIVE_TYPE, + FE_TYPE >; + + /// Maximum number of nodes per element, which is equal to the maxNumTestSupportPointPerElem and + /// maxNumTrialSupportPointPerElem by definition. + static constexpr int numNodesPerElem = Base::maxNumTestSupportPointsPerElem; + + /// Compile time value for the number of quadrature points per element. + static constexpr int numQuadraturePointsPerElem = FE_TYPE::numQuadraturePoints; + + using Base::numUdofs; + using Base::numTdofs; + using Base::numBdofs; + + using Base::m_elemsToFaces; + using Base::m_faceToNodes; + using Base::m_finiteElementSpace; + using Base::m_constitutiveUpdate; + using Base::m_dofNumber; + using Base::m_bDofNumber; + using Base::m_dofRankOffset; + using Base::m_X; + using Base::m_rotationMatrix; + using Base::m_dispJump; + using Base::m_oldDispJump; + using Base::m_matrix; + using Base::m_rhs; + + /** + * @brief Constructor + * @copydoc geos::finiteElement::InterfaceKernelBase::InterfaceKernelBase + */ + LagrangeContact( NodeManager const & nodeManager, + EdgeManager const & edgeManager, + FaceManager const & faceManager, + localIndex const targetRegionIndex, + FaceElementSubRegion & elementSubRegion, + FE_TYPE const & finiteElementSpace, + CONSTITUTIVE_TYPE & inputConstitutiveType, + arrayView1d< globalIndex const > const uDofNumber, + arrayView1d< globalIndex const > const bDofNumber, + globalIndex const rankOffset, + CRSMatrixView< real64, globalIndex const > const inputMatrix, + arrayView1d< real64 > const inputRhs, + real64 const inputDt, + arrayView1d< localIndex const > const & faceElementList, + string const tractionDofKey ): + Base( nodeManager, + edgeManager, + faceManager, + targetRegionIndex, + elementSubRegion, + finiteElementSpace, + inputConstitutiveType, + uDofNumber, + bDofNumber, + rankOffset, + inputMatrix, + inputRhs, + inputDt, + faceElementList ), + m_traction( elementSubRegion.getField< fields::contact::traction >().toViewConst() ), + m_tDofNumber( elementSubRegion.getReference< globalIndex_array >( tractionDofKey ).toViewConst() ), + m_incrDisp( nodeManager.getField< fields::solidMechanics::incrementalDisplacement >() ), + m_incrBubbleDisp( faceManager.getField< fields::solidMechanics::incrementalBubbleDisplacement >() ), + m_targetIncrementalJump( elementSubRegion.getField< fields::contact::targetIncrementalJump >().toViewConst() ) + {} + + /** + * @copydoc finiteElement::KernelBase::StackVariables + */ + struct StackVariables : public Base::StackVariables + { +public: + + GEOS_HOST_DEVICE + StackVariables(): + Base::StackVariables(), + dispEqnRowIndices{}, + dispColIndices{}, + bEqnRowIndices{}, + bColIndices{}, + tColIndices{}, + localRu{}, + localRb{}, + localRt{}, + localAtt{ {} }, + localAut{ {} }, + localAbt{ {} }, + duLocal{}, + dbLocal{} + {} + + /// C-array storage for the element local row degrees of freedom. + localIndex dispEqnRowIndices[numUdofs]; + + /// C-array storage for the element local column degrees of freedom. + globalIndex dispColIndices[numUdofs]; + + /// C-array storage for the element local row degrees of freedom. + localIndex bEqnRowIndices[numBdofs]; + + /// C-array storage for the element local column degrees of freedom. + globalIndex bColIndices[numBdofs]; + + /// C-array storage for the traction local row degrees of freedom. + localIndex tEqnRowIndices[numTdofs]; + + /// C-array storage for the element local column degrees of freedom. + globalIndex tColIndices[numTdofs]; + + /// C-array storage for the element local Ru residual vector. + real64 localRu[numUdofs]; + + /// C-array storage for the element local Rb residual vector. + real64 localRb[numBdofs]; + + /// C-array storage for the element local Rt residual vector. + real64 localRt[numTdofs]; + + /// C-array storage for the element local Att matrix. + real64 localAtt[numTdofs][numTdofs]; + + /// C-array storage for the element local Aut matrix. + real64 localAut[numUdofs][numTdofs]; + + /// C-array storage for the element local Abt matrix. + real64 localAbt[numBdofs][numTdofs]; + + /// Stack storage for the element local incremental displacement vector + real64 duLocal[numUdofs]; + + /// Stack storage for the element local incremental bubble displacement vector + real64 dbLocal[numBdofs]; + }; + + //*************************************************************************** + + //START_kernelLauncher + template< typename POLICY, + typename KERNEL_TYPE > + static + real64 + kernelLaunch( localIndex const numElems, + KERNEL_TYPE const & kernelComponent ) + { + return Base::template kernelLaunch< POLICY, KERNEL_TYPE >( numElems, kernelComponent ); + } + //END_kernelLauncher + + /** + * @brief Copy global values from primary field to a local stack array. + * @copydoc ::geos::finiteElement::InterfaceKernelBase::setup + */ + GEOS_HOST_DEVICE + inline + void setup( localIndex const k, + StackVariables & stack ) const + { + constexpr int shift = numNodesPerElem * 3; + + int permutation[numNodesPerElem]; + m_finiteElementSpace.getPermutation( permutation ); + + localIndex const kf0 = m_elemsToFaces[k][0]; + localIndex const kf1 = m_elemsToFaces[k][1]; + for( localIndex a=0; a( matRRtAtu, stack.localRotationMatrix, stack.localAtu ); + // transp(R) * Atb + LvArray::tensorOps::Rij_eq_AkiBkj< 3, numBdofs, 3 >( matRRtAtb, stack.localRotationMatrix, stack.localAtb ); + + LvArray::tensorOps::copy< numTdofs, numUdofs >( stack.localAtu, matRRtAtu ); + LvArray::tensorOps::copy< numTdofs, numBdofs >( stack.localAtb, matRRtAtb ); + + LvArray::tensorOps::scale< numTdofs, numUdofs >( stack.localAtu, -1.0 ); + LvArray::tensorOps::scale< numTdofs, numBdofs >( stack.localAtb, -1.0 ); + + LvArray::tensorOps::transpose< numUdofs, numTdofs >( stack.localAut, stack.localAtu ); + LvArray::tensorOps::transpose< numBdofs, numTdofs >( stack.localAbt, stack.localAtb ); + + // Compute the traction contribute of the local residuals + LvArray::tensorOps::Ri_eq_AijBj< numUdofs, numTdofs >( tractionR, stack.localAut, m_traction[k] ); + LvArray::tensorOps::Ri_eq_AijBj< numBdofs, numTdofs >( tractionRb, stack.localAbt, m_traction[k] ); + + // Compute the local residuals + // Force Balance for nodal displacement dofs + LvArray::tensorOps::scaledAdd< numUdofs >( stack.localRu, tractionR, 1.0 ); + // Force Balance for the bubble dofs + LvArray::tensorOps::scaledAdd< numBdofs >( stack.localRb, tractionRb, 1.0 ); + + fillGlobalMatrix( stack ); + + return 0.0; + } + +protected: + + arrayView2d< real64 const > const m_traction; + + arrayView1d< globalIndex const > const m_tDofNumber; + + arrayView2d< real64 const, nodes::INCR_DISPLACEMENT_USD > const m_incrDisp; + + arrayView2d< real64 const > const m_incrBubbleDisp; + + arrayView2d< real64 const > const m_targetIncrementalJump; + + /** + * @brief Create the list of finite elements of the same type + * for each FaceElementSubRegion (Triangle or Quadrilateral) + * and of the same fracture state (Stick or Slip). + * @param domain The physical domain object + */ + void updateStickSlipList( DomainPartition const & domain ); + + /** + * @brief Create the list of finite elements of the same type + * for each FaceElementSubRegion (Triangle or Quadrilateral). + * @param domain The physical domain object + */ + void createFaceTypeList( DomainPartition const & domain ); + + /** + * @brief Create the list of elements belonging to CellElementSubRegion + * that are enriched with the bubble basis functions + * @param domain The physical domain object + */ + void createBubbleCellList( DomainPartition & domain ) const; + + /** + * @brief Fill global matrix and residual vector + * + * @param stack stack variables + */ + GEOS_HOST_DEVICE + void fillGlobalMatrix( StackVariables & stack ) const + { + + for( localIndex i=0; i < numTdofs; ++i ) + { + localIndex const dof = LvArray::integerConversion< localIndex >( stack.tEqnRowIndices[ i ] ); + + if( dof < 0 || dof >= m_matrix.numRows() ) continue; + + // TODO: May not need to be an atomic operation + RAJA::atomicAdd< parallelDeviceAtomic >( &m_rhs[dof], stack.localRt[i] ); + + // Fill in matrix block Att + m_matrix.template addToRowBinarySearchUnsorted< parallelDeviceAtomic >( dof, + stack.tColIndices, + stack.localAtt[i], + numTdofs ); + + // Fill in matrix block Atu + m_matrix.template addToRowBinarySearchUnsorted< parallelDeviceAtomic >( dof, + stack.dispColIndices, + stack.localAtu[i], + numUdofs ); + + // Fill in matrix block Atb + m_matrix.template addToRowBinarySearchUnsorted< parallelDeviceAtomic >( dof, + stack.bColIndices, + stack.localAtb[i], + numBdofs ); + } + + for( localIndex i=0; i < numUdofs; ++i ) + { + localIndex const dof = LvArray::integerConversion< localIndex >( stack.dispEqnRowIndices[ i ] ); + + if( dof < 0 || dof >= m_matrix.numRows() ) continue; + + // Is it necessary? Each row should be indepenedent + RAJA::atomicAdd< parallelDeviceAtomic >( &m_rhs[dof], stack.localRu[i] ); + + // Fill in matrix + m_matrix.template addToRowBinarySearchUnsorted< parallelDeviceAtomic >( dof, + stack.tColIndices, + stack.localAut[i], + numTdofs ); + + } + + for( localIndex i=0; i < numBdofs; ++i ) + { + localIndex const dof = LvArray::integerConversion< localIndex >( stack.bEqnRowIndices[ i ] ); + + if( dof < 0 || dof >= m_matrix.numRows() ) continue; + + // Is it necessary? Each row should be indepenedent + RAJA::atomicAdd< parallelDeviceAtomic >( &m_rhs[dof], stack.localRb[i] ); + + // Fill in matrix + m_matrix.template addToRowBinarySearchUnsorted< parallelDeviceAtomic >( dof, + stack.tColIndices, + stack.localAbt[i], + numTdofs ); + } + } + +}; + +/// The factory used to construct the kernel. +using LagrangeContactFactory = finiteElement::InterfaceKernelFactory< LagrangeContact, + arrayView1d< globalIndex const > const, + arrayView1d< globalIndex const > const, + globalIndex const, + CRSMatrixView< real64, globalIndex const > const, + arrayView1d< real64 > const, + real64 const, + arrayView1d< localIndex const > const, + string const >; + +} // namespace solidMechanicsLagrangeContactKernels + +} // namespace geos + + +#endif /* GEOS_PHYSICSSOLVERS_CONTACT_KERNELS_SOLIDMECHANICSLAGRANGECONTACTKERNELS_HPP_ */ diff --git a/src/coreComponents/physicsSolvers/fluidFlow/CompositionalMultiphaseFVM.cpp b/src/coreComponents/physicsSolvers/fluidFlow/CompositionalMultiphaseFVM.cpp index e67786c8d05..747d048aa5c 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/CompositionalMultiphaseFVM.cpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/CompositionalMultiphaseFVM.cpp @@ -444,10 +444,10 @@ real64 CompositionalMultiphaseFVM::calculateResidualNorm( real64 const & GEOS_UN // step 3: second reduction across MPI ranks real64 residualNorm = 0.0; + array1d< real64 > globalResidualNorm; + globalResidualNorm.resize( numNorm ); if( m_isThermal ) { - array1d< real64 > globalResidualNorm; - globalResidualNorm.resize( numNorm ); if( normType == physicsSolverBaseKernels::NormType::Linf ) { physicsSolverBaseKernels::LinfResidualNormHelper:: @@ -465,8 +465,6 @@ real64 CompositionalMultiphaseFVM::calculateResidualNorm( real64 const & GEOS_UN } else { - array1d< real64 > globalResidualNorm; - globalResidualNorm.resize( numNorm - 1 ); if( normType == physicsSolverBaseKernels::NormType::Linf ) { physicsSolverBaseKernels::LinfResidualNormHelper:: @@ -479,11 +477,8 @@ real64 CompositionalMultiphaseFVM::calculateResidualNorm( real64 const & GEOS_UN } residualNorm = sqrt( globalResidualNorm[0] * globalResidualNorm[0] + globalResidualNorm[1] * globalResidualNorm[1] ); - if( getLogLevel() >= 1 && logger::internal::rank == 0 ) - { - std::cout << GEOS_FMT( " ( Rmass Rvol ) = ( {:4.2e} {:4.2e} )", - globalResidualNorm[0], globalResidualNorm[1] ); - } + GEOS_LOG_LEVEL_INFO_RANK_0_NLR( logInfo::Convergence, GEOS_FMT( " ( Rmass Rvol ) = ( {:4.2e} {:4.2e} )", + globalResidualNorm[0], globalResidualNorm[1] ) ); } return residualNorm; diff --git a/src/coreComponents/physicsSolvers/fluidFlow/CompositionalMultiphaseStatistics.cpp b/src/coreComponents/physicsSolvers/fluidFlow/CompositionalMultiphaseStatistics.cpp index 1aea8723fd8..4e9337b4368 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/CompositionalMultiphaseStatistics.cpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/CompositionalMultiphaseStatistics.cpp @@ -427,7 +427,7 @@ void CompositionalMultiphaseStatistics::computeRegionStatistics( real64 const ti GEOS_FMT( "{} Phase mass: {} {}", statPrefix, regionStatistics.phaseMass, massUnit ) ); - // metric 1: trapping computed with the Land trapping coefficient (similar to Eclipse) + // metric 1: trapping computed with the Land trapping coefficient GEOS_LOG_LEVEL_INFO_RANK_0( logInfo::Statistics, GEOS_FMT( "{} Trapped phase mass (metric 1): {} {}", statPrefix, regionStatistics.trappedPhaseMass, massUnit ) ); diff --git a/src/coreComponents/physicsSolvers/fluidFlow/SinglePhaseBase.cpp b/src/coreComponents/physicsSolvers/fluidFlow/SinglePhaseBase.cpp index 8261e822868..429ea336ab7 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/SinglePhaseBase.cpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/SinglePhaseBase.cpp @@ -471,7 +471,7 @@ void SinglePhaseBase::initializePostInitialConditionsPreSubGroups() [&]( localIndex const, SurfaceElementRegion & region ) { - region.forElementSubRegions< FaceElementSubRegion >( [&]( FaceElementSubRegion & subRegion ) + region.forElementSubRegions< SurfaceElementSubRegion >( [&]( SurfaceElementSubRegion & subRegion ) { subRegion.getWrapper< real64_array >( fields::flow::hydraulicAperture::key() ). setApplyDefaultValue( region.getDefaultAperture() ); @@ -707,8 +707,8 @@ void SinglePhaseBase::implicitStepSetup( real64 const & GEOS_UNUSED_PARAM( time_ } ); - mesh.getElemManager().forElementSubRegions< FaceElementSubRegion >( regionNames, [&]( localIndex const, - FaceElementSubRegion & subRegion ) + mesh.getElemManager().forElementSubRegions< SurfaceElementSubRegion >( regionNames, [&]( localIndex const, + SurfaceElementSubRegion & subRegion ) { arrayView1d< real64 const > const aper = subRegion.getField< fields::flow::hydraulicAperture >(); arrayView1d< real64 > const aper0 = subRegion.getField< fields::flow::aperture0 >(); @@ -728,6 +728,7 @@ void SinglePhaseBase::implicitStepSetup( real64 const & GEOS_UNUSED_PARAM( time_ fluid.saveConvergedState(); } ); + } ); } @@ -791,8 +792,8 @@ void SinglePhaseBase::implicitStepComplete( real64 const & time, } ); - mesh.getElemManager().forElementSubRegions< FaceElementSubRegion >( regionNames, [&]( localIndex const, - FaceElementSubRegion & subRegion ) + mesh.getElemManager().forElementSubRegions< SurfaceElementSubRegion >( regionNames, [&]( localIndex const, + SurfaceElementSubRegion & subRegion ) { arrayView1d< integer const > const elemGhostRank = subRegion.ghostRank(); arrayView1d< real64 const > const volume = subRegion.getElementVolume(); @@ -817,7 +818,6 @@ void SinglePhaseBase::implicitStepComplete( real64 const & time, } } ); } ); - } ); } diff --git a/src/coreComponents/physicsSolvers/fluidFlow/kernels/compositional/ReactiveCompositionalMultiphaseOBLKernels.hpp b/src/coreComponents/physicsSolvers/fluidFlow/kernels/compositional/ReactiveCompositionalMultiphaseOBLKernels.hpp index bc76898511d..362fc17a562 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/kernels/compositional/ReactiveCompositionalMultiphaseOBLKernels.hpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/kernels/compositional/ReactiveCompositionalMultiphaseOBLKernels.hpp @@ -606,7 +606,7 @@ class FluxComputeKernelBase static constexpr real64 secondsToDaysMult = 1.0 / (60 * 60 * 24); - // transmissibility in DARTS is the same as in Eclipse (Metric): + // transmissibility in DARTS is Metric: // T = c * (k * A) / d, where c is Darcy constant, k is permeability [mD], A is area [m2] and d is distance [m] // Darcy constant takes care of unit translation (from SI to Metric), it includes conversion of [s]->[day], [cp->Pa * s], [Pa]->[bar] and // [mD->m2]: diff --git a/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsEmbeddedFractures.cpp b/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsEmbeddedFractures.cpp index 394b95d08d3..0e1c3dd7198 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsEmbeddedFractures.cpp +++ b/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsEmbeddedFractures.cpp @@ -20,7 +20,7 @@ #include "SinglePhasePoromechanicsEmbeddedFractures.hpp" #include "constitutive/contact/HydraulicApertureRelationSelector.hpp" #include "constitutive/fluid/singlefluid/SingleFluidBase.hpp" -#include "physicsSolvers/contact/SolidMechanicsEFEMKernelsHelper.hpp" +#include "physicsSolvers/contact/kernels/SolidMechanicsEFEMKernelsHelper.hpp" #include "physicsSolvers/fluidFlow/SinglePhaseBase.hpp" #include "physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsEFEM.hpp" #include "physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanics.hpp" diff --git a/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsEFEM.hpp b/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsEFEM.hpp index ad5ccf38ab1..e88ce14509f 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsEFEM.hpp +++ b/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsEFEM.hpp @@ -278,7 +278,9 @@ class SinglePhasePoromechanicsEFEM : arrayView1d< real64 const > const m_surfaceArea; - arrayView1d< real64 const > const m_elementVolume; + arrayView1d< real64 const > const m_elementVolumeCell; + + arrayView1d< real64 const > const m_elementVolumeFrac; arrayView1d< real64 const > const m_deltaVolume; diff --git a/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsEFEM_impl.hpp b/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsEFEM_impl.hpp index 0aac71f9acb..9229f1ff774 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsEFEM_impl.hpp +++ b/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsEFEM_impl.hpp @@ -26,7 +26,7 @@ #include "physicsSolvers/fluidFlow/SinglePhaseBaseFields.hpp" #include "physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanics.hpp" #include "physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsEFEM.hpp" -#include "physicsSolvers/contact/SolidMechanicsEFEMKernelsHelper.hpp" +#include "physicsSolvers/contact/kernels/SolidMechanicsEFEMKernelsHelper.hpp" namespace geos { @@ -91,8 +91,9 @@ SinglePhasePoromechanicsEFEM( NodeManager const & nodeManager, m_tVec2( embeddedSurfSubRegion.getTangentVector2() ), m_surfaceCenter( embeddedSurfSubRegion.getElementCenter() ), m_surfaceArea( embeddedSurfSubRegion.getElementArea() ), - m_elementVolume( elementSubRegion.getElementVolume() ), - m_deltaVolume( elementSubRegion.template getField< fields::flow::deltaVolume >() ), + m_elementVolumeCell( elementSubRegion.getElementVolume() ), + m_elementVolumeFrac( embeddedSurfSubRegion.getElementVolume() ), + m_deltaVolume( embeddedSurfSubRegion.template getField< fields::flow::deltaVolume >() ), m_fracturedElems( elementSubRegion.fracturedElementsList() ), m_cellsToEmbeddedSurfaces( elementSubRegion.embeddedSurfacesList().toViewConst() ), m_gravityVector{ inputGravityVector[0], inputGravityVector[1], inputGravityVector[2] }, @@ -148,7 +149,7 @@ setup( localIndex const k, { localIndex const embSurfIndex = m_cellsToEmbeddedSurfaces[k][0]; - stack.hInv = m_surfaceArea[embSurfIndex] / m_elementVolume[k]; + stack.hInv = m_surfaceArea[embSurfIndex] / m_elementVolumeCell[k]; for( localIndex a=0; a + + + + @@ -4817,6 +4821,7 @@ Level 0 outputs no specific information for this solver. Higher levels require m + @@ -5149,6 +5154,55 @@ The expected format is "{ waterMax, oilMax }", in that order--> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/coreComponents/schema/schema.xsd.other b/src/coreComponents/schema/schema.xsd.other index c2a891421d3..5de00ab14f2 100644 --- a/src/coreComponents/schema/schema.xsd.other +++ b/src/coreComponents/schema/schema.xsd.other @@ -1453,6 +1453,7 @@ + @@ -1931,6 +1932,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1970,6 +2021,8 @@ + + @@ -2018,6 +2071,8 @@ + + diff --git a/src/coreComponents/unitTests/constitutiveTests/CMakeLists.txt b/src/coreComponents/unitTests/constitutiveTests/CMakeLists.txt index 523c6c89500..f59c739a956 100644 --- a/src/coreComponents/unitTests/constitutiveTests/CMakeLists.txt +++ b/src/coreComponents/unitTests/constitutiveTests/CMakeLists.txt @@ -28,6 +28,7 @@ set( gtest_pvt_xmls testPVT_CO2Brine.xml testPVT_CO2BrineTables.xml testPVT_PhaseComposition.xml + testPVT_ThreePhaseCompositional.xml ) set( gtest_reactivefluid_xmls diff --git a/src/coreComponents/unitTests/constitutiveTests/testPVT_ThreePhaseCompositional.xml b/src/coreComponents/unitTests/constitutiveTests/testPVT_ThreePhaseCompositional.xml new file mode 100644 index 00000000000..79c4892078e --- /dev/null +++ b/src/coreComponents/unitTests/constitutiveTests/testPVT_ThreePhaseCompositional.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/coreComponents/unitTests/constitutiveTests/testPVT_ThreePhaseCompositional_blackOil.txt b/src/coreComponents/unitTests/constitutiveTests/testPVT_ThreePhaseCompositional_blackOil.txt new file mode 100644 index 00000000000..53e20dce320 --- /dev/null +++ b/src/coreComponents/unitTests/constitutiveTests/testPVT_ThreePhaseCompositional_blackOil.txt @@ -0,0 +1,113 @@ +# column 1 = time +# column 2 = pressure +# column 3 = temperature +# column 4 = density +# column 5 = total compressibility +# columns 6-8 = phase fractions +# columns 9-11 = phase densities +# columns 12-14 = phase mass densities +# columns 15-17 = phase viscosities +# columns 18-20 = oil phase fractions [C1, C7+, H2O] +# columns 21-23 = gas phase fractions [C1, C7+, H2O] +# columns 24-26 = water phase fractions [C1, C7+, H2O] +0.0000e+00 3.5000e+07 5.5315e+02 6.1560e+03 6.0169e-09 8.8729e-01 0.0000e+00 1.1271e-01 5.5295e+03 5.5295e+03 5.6953e+04 5.2265e+02 5.2265e+02 1.0257e+03 1.0240e-04 1.0240e-04 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +2.0000e-02 3.4000e+07 5.5315e+02 6.1183e+03 6.2707e-09 8.8729e-01 0.0000e+00 1.1271e-01 5.4953e+03 5.4953e+03 5.6930e+04 5.1941e+02 5.1941e+02 1.0253e+03 1.0027e-04 1.0027e-04 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +4.0000e-02 3.3000e+07 5.5315e+02 6.0792e+03 6.5439e-09 8.8729e-01 0.0000e+00 1.1271e-01 5.4598e+03 5.4598e+03 5.6906e+04 5.1606e+02 5.1606e+02 1.0249e+03 9.8135e-05 9.8135e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +6.0000e-02 3.2000e+07 5.5315e+02 6.0387e+03 6.8385e-09 8.8729e-01 0.0000e+00 1.1271e-01 5.4230e+03 5.4230e+03 5.6882e+04 5.1258e+02 5.1258e+02 1.0245e+03 9.6007e-05 9.6007e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +8.0000e-02 3.1000e+07 5.5315e+02 5.9966e+03 7.1573e-09 8.8729e-01 0.0000e+00 1.1271e-01 5.3847e+03 5.3847e+03 5.6859e+04 5.0896e+02 5.0896e+02 1.0240e+03 9.3883e-05 9.3883e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.0000e-01 3.0000e+07 5.5315e+02 5.9528e+03 7.5032e-09 8.8729e-01 0.0000e+00 1.1271e-01 5.3450e+03 5.3450e+03 5.6835e+04 5.0521e+02 5.0521e+02 1.0236e+03 9.1761e-05 9.1761e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.2000e-01 2.9000e+07 5.5315e+02 5.9072e+03 7.8796e-09 8.8729e-01 0.0000e+00 1.1271e-01 5.3036e+03 5.3036e+03 5.6812e+04 5.0129e+02 5.0129e+02 1.0232e+03 8.9642e-05 8.9642e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.4000e-01 2.8000e+07 5.5315e+02 5.8597e+03 8.2906e-09 8.8729e-01 0.0000e+00 1.1271e-01 5.2604e+03 5.2604e+03 5.6788e+04 4.9721e+02 4.9721e+02 1.0228e+03 8.7525e-05 8.7525e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.6000e-01 2.7000e+07 5.5315e+02 5.8100e+03 8.7412e-09 8.8729e-01 0.0000e+00 1.1271e-01 5.2153e+03 5.2153e+03 5.6765e+04 4.9295e+02 4.9295e+02 1.0223e+03 8.5409e-05 8.5409e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.8000e-01 2.6000e+07 5.5315e+02 5.7580e+03 9.2370e-09 8.8729e-01 0.0000e+00 1.1271e-01 5.1682e+03 5.1682e+03 5.6741e+04 4.8849e+02 4.8849e+02 1.0219e+03 8.3293e-05 8.3293e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +2.0000e-01 2.5000e+07 5.5315e+02 5.7036e+03 9.7851e-09 8.8729e-01 0.0000e+00 1.1271e-01 5.1187e+03 5.1187e+03 5.6717e+04 4.8382e+02 4.8382e+02 1.0215e+03 8.1175e-05 8.1175e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +2.2000e-01 2.4000e+07 5.5315e+02 5.6174e+03 1.7179e-08 8.8110e-01 6.1877e-03 1.1271e-01 5.0414e+03 4.9180e+03 5.6694e+04 4.8521e+02 1.3086e+02 1.0211e+03 8.1572e-05 2.1495e-05 3.2929e-04 4.8901e-01 5.1099e-01 0.0000e+00 9.3267e-01 6.7327e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +2.4000e-01 2.3000e+07 5.5315e+02 5.5204e+03 1.7647e-08 8.7325e-01 1.4036e-02 1.1271e-01 4.9562e+03 4.7398e+03 5.6670e+04 4.8864e+02 1.2549e+02 1.0206e+03 8.2813e-05 2.1134e-05 3.2929e-04 4.7405e-01 5.2595e-01 0.0000e+00 9.3352e-01 6.6484e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +2.6000e-01 2.2000e+07 5.5315e+02 5.4225e+03 1.8162e-08 8.6581e-01 2.1475e-02 1.1271e-01 4.8719e+03 4.5585e+03 5.6647e+04 4.9205e+02 1.2016e+02 1.0202e+03 8.4061e-05 2.0788e-05 3.2929e-04 4.5873e-01 5.4127e-01 0.0000e+00 9.3426e-01 6.5741e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +2.8000e-01 2.1000e+07 5.5315e+02 5.3234e+03 1.8732e-08 8.5874e-01 2.8551e-02 1.1271e-01 4.7885e+03 4.3743e+03 5.6623e+04 4.9543e+02 1.1486e+02 1.0198e+03 8.5316e-05 2.0456e-05 3.2929e-04 4.4303e-01 5.5697e-01 0.0000e+00 9.3490e-01 6.5103e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +3.0000e-01 2.0000e+07 5.5315e+02 5.2230e+03 1.9369e-08 8.5198e-01 3.5311e-02 1.1271e-01 4.7061e+03 4.1872e+03 5.6600e+04 4.9880e+02 1.0961e+02 1.0194e+03 8.6578e-05 2.0139e-05 3.2929e-04 4.2693e-01 5.7307e-01 0.0000e+00 9.3542e-01 6.4579e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +3.2000e-01 1.9000e+07 5.5315e+02 5.1210e+03 2.0089e-08 8.4549e-01 4.1796e-02 1.1271e-01 4.6246e+03 3.9973e+03 5.6576e+04 5.0214e+02 1.0438e+02 1.0189e+03 8.7844e-05 1.9835e-05 3.2929e-04 4.1042e-01 5.8958e-01 0.0000e+00 9.3582e-01 6.4178e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +3.4000e-01 1.8000e+07 5.5315e+02 5.0171e+03 2.0911e-08 8.3924e-01 4.8049e-02 1.1271e-01 4.5439e+03 3.8047e+03 5.6553e+04 5.0547e+02 9.9197e+01 1.0185e+03 8.9115e-05 1.9544e-05 3.2929e-04 3.9347e-01 6.0653e-01 0.0000e+00 9.3609e-01 6.3914e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +3.6000e-01 1.7000e+07 5.5315e+02 4.9110e+03 2.1861e-08 8.3318e-01 5.4111e-02 1.1271e-01 4.4641e+03 3.6096e+03 5.6530e+04 5.0878e+02 9.4045e+01 1.0181e+03 9.0389e-05 1.9265e-05 3.2929e-04 3.7608e-01 6.2392e-01 0.0000e+00 9.3620e-01 6.3802e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +3.8000e-01 1.6000e+07 5.5315e+02 4.8022e+03 2.2976e-08 8.2726e-01 6.0026e-02 1.1271e-01 4.3852e+03 3.4119e+03 5.6506e+04 5.1208e+02 8.8928e+01 1.0177e+03 9.1664e-05 1.8998e-05 3.2929e-04 3.5822e-01 6.4178e-01 0.0000e+00 9.3614e-01 6.3864e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +4.0000e-01 1.5000e+07 5.5315e+02 4.6901e+03 2.4303e-08 8.2145e-01 6.5840e-02 1.1271e-01 4.3071e+03 3.2118e+03 5.6483e+04 5.1536e+02 8.3846e+01 1.0173e+03 9.2939e-05 1.8741e-05 3.2929e-04 3.3987e-01 6.6013e-01 0.0000e+00 9.3587e-01 6.4127e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +4.2000e-01 1.4000e+07 5.5315e+02 4.5740e+03 2.5910e-08 8.1568e-01 7.1608e-02 1.1271e-01 4.2299e+03 3.0095e+03 5.6459e+04 5.1864e+02 7.8800e+01 1.0168e+03 9.4210e-05 1.8494e-05 3.2929e-04 3.2102e-01 6.7898e-01 0.0000e+00 9.3537e-01 6.4625e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +4.4000e-01 1.3000e+07 5.5315e+02 4.4527e+03 2.7893e-08 8.0990e-01 7.7391e-02 1.1271e-01 4.1535e+03 2.8050e+03 5.6436e+04 5.2190e+02 7.3789e+01 1.0164e+03 9.5475e-05 1.8255e-05 3.2929e-04 3.0163e-01 6.9837e-01 0.0000e+00 9.3459e-01 6.5406e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +4.6000e-01 1.2000e+07 5.5315e+02 4.3251e+03 3.0392e-08 8.0402e-01 8.3265e-02 1.1271e-01 4.0779e+03 2.5984e+03 5.6412e+04 5.2516e+02 6.8814e+01 1.0160e+03 9.6732e-05 1.8022e-05 3.2929e-04 2.8170e-01 7.1830e-01 0.0000e+00 9.3347e-01 6.6532e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +4.8000e-01 1.1000e+07 5.5315e+02 4.1891e+03 3.3618e-08 7.9796e-01 8.9328e-02 1.1271e-01 4.0031e+03 2.3899e+03 5.6389e+04 5.2841e+02 6.3876e+01 1.0156e+03 9.7975e-05 1.7795e-05 3.2929e-04 2.6120e-01 7.3880e-01 0.0000e+00 9.3191e-01 6.8088e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +5.0000e-01 1.0000e+07 5.5315e+02 4.0424e+03 3.7901e-08 7.9158e-01 9.5711e-02 1.1271e-01 3.9291e+03 2.1796e+03 5.6366e+04 5.3165e+02 5.8976e+01 1.0151e+03 9.9202e-05 1.7569e-05 3.2929e-04 2.4011e-01 7.5989e-01 0.0000e+00 9.2981e-01 7.0194e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +5.2000e-01 9.6040e+06 5.5315e+02 3.9806e+03 3.9996e-08 7.8892e-01 9.8365e-02 1.1271e-01 3.9000e+03 2.0959e+03 5.6356e+04 5.3293e+02 5.7046e+01 1.0150e+03 9.9682e-05 1.7479e-05 3.2929e-04 2.3159e-01 7.6841e-01 0.0000e+00 9.2878e-01 7.1215e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +5.4000e-01 9.2080e+06 5.5315e+02 3.9162e+03 4.2382e-08 7.8618e-01 1.0111e-01 1.1271e-01 3.8710e+03 2.0119e+03 5.6347e+04 5.3421e+02 5.5122e+01 1.0148e+03 1.0016e-04 1.7389e-05 3.2929e-04 2.2297e-01 7.7703e-01 0.0000e+00 9.2764e-01 7.2363e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +5.6000e-01 8.8120e+06 5.5315e+02 3.8490e+03 4.5115e-08 7.8332e-01 1.0397e-01 1.1271e-01 3.8422e+03 1.9277e+03 5.6338e+04 5.3549e+02 5.3205e+01 1.0146e+03 1.0063e-04 1.7299e-05 3.2929e-04 2.1425e-01 7.8575e-01 0.0000e+00 9.2635e-01 7.3653e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +5.8000e-01 8.4160e+06 5.5315e+02 3.7785e+03 4.8266e-08 7.8033e-01 1.0696e-01 1.1271e-01 3.8135e+03 1.8432e+03 5.6329e+04 5.3677e+02 5.1293e+01 1.0145e+03 1.0110e-04 1.7207e-05 3.2929e-04 2.0543e-01 7.9457e-01 0.0000e+00 9.2489e-01 7.5105e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +6.0000e-01 8.0200e+06 5.5315e+02 3.7044e+03 5.1924e-08 7.7719e-01 1.1010e-01 1.1271e-01 3.7849e+03 1.7585e+03 5.6319e+04 5.3805e+02 4.9388e+01 1.0143e+03 1.0156e-04 1.7113e-05 3.2929e-04 1.9650e-01 8.0350e-01 0.0000e+00 9.2326e-01 7.6743e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +6.2000e-01 7.6240e+06 5.5315e+02 3.6260e+03 5.6202e-08 7.7386e-01 1.1343e-01 1.1271e-01 3.7565e+03 1.6736e+03 5.6310e+04 5.3933e+02 4.7489e+01 1.0141e+03 1.0202e-04 1.7018e-05 3.2929e-04 1.8748e-01 8.1252e-01 0.0000e+00 9.2141e-01 7.8594e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +6.4000e-01 7.2280e+06 5.5315e+02 3.5428e+03 6.1247e-08 7.7031e-01 1.1698e-01 1.1271e-01 3.7281e+03 1.5884e+03 5.6301e+04 5.4061e+02 4.5597e+01 1.0140e+03 1.0247e-04 1.6920e-05 3.2929e-04 1.7834e-01 8.2166e-01 0.0000e+00 9.1931e-01 8.0692e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +6.6000e-01 6.8320e+06 5.5315e+02 3.4539e+03 6.7247e-08 7.6650e-01 1.2079e-01 1.1271e-01 3.6999e+03 1.5031e+03 5.6292e+04 5.4188e+02 4.3711e+01 1.0138e+03 1.0292e-04 1.6818e-05 3.2929e-04 1.6910e-01 8.3090e-01 0.0000e+00 9.1692e-01 8.3080e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +6.8000e-01 6.4360e+06 5.5315e+02 3.3585e+03 7.4453e-08 7.6236e-01 1.2493e-01 1.1271e-01 3.6718e+03 1.4176e+03 5.6282e+04 5.4316e+02 4.1832e+01 1.0136e+03 1.0335e-04 1.6713e-05 3.2929e-04 1.5975e-01 8.4025e-01 0.0000e+00 9.1419e-01 8.5810e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +7.0000e-01 6.0400e+06 5.5315e+02 3.2554e+03 8.3199e-08 7.5783e-01 1.2946e-01 1.1271e-01 3.6438e+03 1.3319e+03 5.6273e+04 5.4443e+02 3.9959e+01 1.0135e+03 1.0379e-04 1.6602e-05 3.2929e-04 1.5029e-01 8.4971e-01 0.0000e+00 9.1105e-01 8.8948e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +7.2000e-01 5.6440e+06 5.5315e+02 3.1435e+03 9.3938e-08 7.5281e-01 1.3448e-01 1.1271e-01 3.6160e+03 1.2460e+03 5.6264e+04 5.4570e+02 3.8093e+01 1.0133e+03 1.0421e-04 1.6485e-05 3.2929e-04 1.4071e-01 8.5929e-01 0.0000e+00 9.0742e-01 9.2579e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +7.4000e-01 5.2480e+06 5.5315e+02 3.0210e+03 1.0730e-07 7.4718e-01 1.4011e-01 1.1271e-01 3.5883e+03 1.1600e+03 5.6255e+04 5.4698e+02 3.6233e+01 1.0131e+03 1.0463e-04 1.6359e-05 3.2929e-04 1.3102e-01 8.6898e-01 0.0000e+00 9.0319e-01 9.6812e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +7.6000e-01 4.8520e+06 5.5315e+02 2.8861e+03 1.2415e-07 7.4077e-01 1.4652e-01 1.1271e-01 3.5607e+03 1.0738e+03 5.6245e+04 5.4825e+02 3.4381e+01 1.0130e+03 1.0503e-04 1.6224e-05 3.2929e-04 1.2122e-01 8.7878e-01 0.0000e+00 8.9821e-01 1.0179e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +7.8000e-01 4.4560e+06 5.5315e+02 2.7364e+03 1.4578e-07 7.3336e-01 1.5393e-01 1.1271e-01 3.5332e+03 9.8750e+02 5.6236e+04 5.4952e+02 3.2535e+01 1.0128e+03 1.0543e-04 1.6076e-05 3.2929e-04 1.1129e-01 8.8871e-01 0.0000e+00 8.9228e-01 1.0772e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +8.0000e-01 4.0600e+06 5.5315e+02 2.5691e+03 1.7403e-07 7.2461e-01 1.6268e-01 1.1271e-01 3.5058e+03 9.0104e+02 5.6227e+04 5.5079e+02 3.0696e+01 1.0126e+03 1.0582e-04 1.5911e-05 3.2929e-04 1.0125e-01 8.9875e-01 0.0000e+00 8.8514e-01 1.1486e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +8.2000e-01 3.6640e+06 5.5315e+02 2.3811e+03 2.1172e-07 7.1406e-01 1.7323e-01 1.1271e-01 3.4786e+03 8.1446e+02 5.6218e+04 5.5206e+02 2.8865e+01 1.0125e+03 1.0619e-04 1.5725e-05 3.2929e-04 9.1082e-02 9.0892e-01 0.0000e+00 8.7640e-01 1.2360e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +8.4000e-01 3.2680e+06 5.5315e+02 2.1686e+03 2.6326e-07 7.0095e-01 1.8634e-01 1.1271e-01 3.4515e+03 7.2776e+02 5.6208e+04 5.5333e+02 2.7040e+01 1.0123e+03 1.0656e-04 1.5512e-05 3.2929e-04 8.0792e-02 9.1921e-01 0.0000e+00 8.6548e-01 1.3452e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +8.6000e-01 2.8720e+06 5.5315e+02 1.9276e+03 3.3583e-07 6.8411e-01 2.0318e-01 1.1271e-01 3.4245e+03 6.4096e+02 5.6199e+04 5.5460e+02 2.5222e+01 1.0121e+03 1.0691e-04 1.5261e-05 3.2929e-04 7.0376e-02 9.2962e-01 0.0000e+00 8.5148e-01 1.4852e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +8.8000e-01 2.4760e+06 5.5315e+02 1.6549e+03 4.4172e-07 6.6146e-01 2.2583e-01 1.1271e-01 3.3976e+03 5.5407e+02 5.6190e+04 5.5587e+02 2.3412e+01 1.0120e+03 1.0725e-04 1.4958e-05 3.2929e-04 5.9832e-02 9.4017e-01 0.0000e+00 8.3298e-01 1.6702e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +9.0000e-01 2.0800e+06 5.5315e+02 1.3487e+03 6.0350e-07 6.2908e-01 2.5821e-01 1.1271e-01 3.3708e+03 4.6709e+02 5.6181e+04 5.5714e+02 2.1609e+01 1.0118e+03 1.0757e-04 1.4583e-05 3.2929e-04 4.9159e-02 9.5084e-01 0.0000e+00 8.0745e-01 1.9255e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +9.2000e-01 1.6840e+06 5.5315e+02 1.0126e+03 8.6704e-07 5.7850e-01 3.0879e-01 1.1271e-01 3.3442e+03 3.8004e+02 5.6172e+04 5.5841e+02 1.9813e+01 1.0116e+03 1.0788e-04 1.4097e-05 3.2929e-04 3.8354e-02 9.6165e-01 0.0000e+00 7.7004e-01 2.2996e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +9.4000e-01 1.2880e+06 5.5315e+02 6.6052e+02 1.3428e-06 4.8744e-01 3.9985e-01 1.1271e-01 3.3176e+03 2.9292e+02 5.6162e+04 5.5968e+02 1.8025e+01 1.0115e+03 1.0818e-04 1.3437e-05 3.2929e-04 2.7415e-02 9.7259e-01 0.0000e+00 7.1015e-01 2.8985e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +9.6000e-01 8.9200e+05 5.5315e+02 3.2534e+02 2.3985e-06 2.7229e-01 6.1500e-01 1.1271e-01 3.2912e+03 2.0575e+02 5.6153e+04 5.6094e+02 1.6244e+01 1.0113e+03 1.0845e-04 1.2477e-05 3.2929e-04 1.6340e-02 9.8366e-01 0.0000e+00 5.9920e-01 4.0080e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +9.8000e-01 4.9600e+05 5.5315e+02 1.2779e+02 2.1211e-06 8.8729e-01 0.0000e+00 1.1271e-01 1.1342e+02 1.1342e+02 5.6144e+04 1.0720e+01 1.0720e+01 1.0112e+03 1.1716e-05 1.1716e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.0000e+00 1.0000e+05 5.5315e+02 2.4746e+01 1.0099e-05 8.8729e-01 0.0000e+00 1.1271e-01 2.1958e+01 2.1958e+01 5.6135e+04 2.0755e+00 2.0755e+00 1.0110e+03 1.1560e-05 1.1560e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.0200e+00 4.9600e+05 5.8315e+02 1.2012e+02 2.1009e-06 8.8729e-01 0.0000e+00 1.1271e-01 1.0660e+02 1.0660e+02 5.6144e+04 1.0076e+01 1.0076e+01 1.0112e+03 1.2221e-05 1.2221e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.0400e+00 8.9200e+05 5.8315e+02 2.2354e+02 1.2093e-06 8.8729e-01 0.0000e+00 1.1271e-01 1.9843e+02 1.9843e+02 5.6153e+04 1.8756e+01 1.8756e+01 1.0113e+03 1.2405e-05 1.2405e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.0600e+00 1.2880e+06 5.8315e+02 3.4774e+02 1.7667e-06 4.3627e-02 8.4366e-01 1.1271e-01 3.0621e+03 2.9504e+02 5.6162e+04 5.1804e+02 2.7265e+01 1.0115e+03 8.2939e-05 1.2695e-05 3.2929e-04 2.4366e-02 9.7563e-01 0.0000e+00 5.1344e-01 4.8656e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.0800e+00 1.6840e+06 5.8315e+02 6.0704e+02 1.1265e-06 3.0186e-01 5.8543e-01 1.1271e-01 3.0890e+03 3.7828e+02 5.6172e+04 5.1649e+02 2.9209e+01 1.0116e+03 8.2756e-05 1.3409e-05 3.2929e-04 3.6932e-02 9.6307e-01 0.0000e+00 6.1026e-01 3.8974e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.1000e+00 2.0800e+06 5.8315e+02 8.8181e+02 7.8965e-07 4.2838e-01 4.5891e-01 1.1271e-01 3.1161e+03 4.6143e+02 5.6181e+04 5.1495e+02 3.1163e+01 1.0118e+03 8.2556e-05 1.3965e-05 3.2929e-04 4.9339e-02 9.5066e-01 0.0000e+00 6.7192e-01 3.2808e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.1200e+00 2.4760e+06 5.8315e+02 1.1539e+03 5.8364e-07 5.0379e-01 3.8350e-01 1.1271e-01 3.1432e+03 5.4447e+02 5.6190e+04 5.1339e+02 3.3128e+01 1.0120e+03 8.2339e-05 1.4414e-05 3.2929e-04 6.1589e-02 9.3841e-01 0.0000e+00 7.1454e-01 2.8546e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.1400e+00 2.8720e+06 5.8315e+02 1.4127e+03 4.4720e-07 5.5409e-01 3.3320e-01 1.1271e-01 3.1706e+03 6.2740e+02 5.6199e+04 5.1184e+02 3.5105e+01 1.0121e+03 8.2106e-05 1.4788e-05 3.2929e-04 7.3685e-02 9.2632e-01 0.0000e+00 7.4571e-01 2.5429e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.1600e+00 3.2680e+06 5.8315e+02 1.6532e+03 3.5221e-07 5.9019e-01 2.9710e-01 1.1271e-01 3.1980e+03 7.1021e+02 5.6208e+04 5.1028e+02 3.7093e+01 1.0123e+03 8.1860e-05 1.5107e-05 3.2929e-04 8.5630e-02 9.1437e-01 0.0000e+00 7.6944e-01 2.3056e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.1800e+00 3.6640e+06 5.8315e+02 1.8738e+03 2.8372e-07 6.1751e-01 2.6978e-01 1.1271e-01 3.2257e+03 7.9289e+02 5.6218e+04 5.0871e+02 3.9092e+01 1.0125e+03 8.1599e-05 1.5383e-05 3.2929e-04 9.7426e-02 9.0257e-01 0.0000e+00 7.8808e-01 2.1192e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.2000e+00 4.0600e+06 5.8315e+02 2.0746e+03 2.3298e-07 6.3902e-01 2.4827e-01 1.1271e-01 3.2534e+03 8.7543e+02 5.6227e+04 5.0714e+02 4.1103e+01 1.0126e+03 8.1325e-05 1.5628e-05 3.2929e-04 1.0908e-01 8.9092e-01 0.0000e+00 8.0306e-01 1.9694e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.2200e+00 4.4560e+06 5.8315e+02 2.2571e+03 1.9456e-07 6.5648e-01 2.3081e-01 1.1271e-01 3.2813e+03 9.5783e+02 5.6236e+04 5.0557e+02 4.3124e+01 1.0128e+03 8.1039e-05 1.5847e-05 3.2929e-04 1.2058e-01 8.7942e-01 0.0000e+00 8.1535e-01 1.8465e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.2400e+00 4.8520e+06 5.8315e+02 2.4230e+03 1.6492e-07 6.7102e-01 2.1627e-01 1.1271e-01 3.3094e+03 1.0401e+03 5.6245e+04 5.0399e+02 4.5158e+01 1.0130e+03 8.0742e-05 1.6047e-05 3.2929e-04 1.3195e-01 8.6805e-01 0.0000e+00 8.2557e-01 1.7443e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.2600e+00 5.2480e+06 5.8315e+02 2.5742e+03 1.4168e-07 6.8338e-01 2.0390e-01 1.1271e-01 3.3376e+03 1.1221e+03 5.6255e+04 5.0240e+02 4.7203e+01 1.0131e+03 8.0433e-05 1.6230e-05 3.2929e-04 1.4318e-01 8.5682e-01 0.0000e+00 8.3419e-01 1.6581e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.2800e+00 5.6440e+06 5.8315e+02 2.7125e+03 1.2319e-07 6.9409e-01 1.9320e-01 1.1271e-01 3.3660e+03 1.2040e+03 5.6264e+04 5.0081e+02 4.9259e+01 1.0133e+03 8.0115e-05 1.6401e-05 3.2929e-04 1.5427e-01 8.4573e-01 0.0000e+00 8.4154e-01 1.5846e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.3000e+00 6.0400e+06 5.8315e+02 2.8394e+03 1.0830e-07 7.0351e-01 1.8378e-01 1.1271e-01 3.3945e+03 1.2857e+03 5.6273e+04 4.9921e+02 5.1327e+01 1.0135e+03 7.9786e-05 1.6561e-05 3.2929e-04 1.6523e-01 8.3477e-01 0.0000e+00 8.4786e-01 1.5214e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.3200e+00 6.4360e+06 5.8315e+02 2.9565e+03 9.6164e-08 7.1191e-01 1.7538e-01 1.1271e-01 3.4232e+03 1.3673e+03 5.6282e+04 4.9761e+02 5.3407e+01 1.0136e+03 7.9448e-05 1.6713e-05 3.2929e-04 1.7606e-01 8.2394e-01 0.0000e+00 8.5333e-01 1.4667e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.3400e+00 6.8320e+06 5.8315e+02 3.0649e+03 8.6168e-08 7.1948e-01 1.6781e-01 1.1271e-01 3.4520e+03 1.4486e+03 5.6292e+04 4.9600e+02 5.5498e+01 1.0138e+03 7.9102e-05 1.6858e-05 3.2929e-04 1.8676e-01 8.1324e-01 0.0000e+00 8.5811e-01 1.4189e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.3600e+00 7.2280e+06 5.8315e+02 3.1660e+03 7.7854e-08 7.2640e-01 1.6089e-01 1.1271e-01 3.4809e+03 1.5297e+03 5.6301e+04 4.9439e+02 5.7601e+01 1.0140e+03 7.8748e-05 1.6997e-05 3.2929e-04 1.9733e-01 8.0267e-01 0.0000e+00 8.6229e-01 1.3771e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.3800e+00 7.6240e+06 5.8315e+02 3.2605e+03 7.0879e-08 7.3276e-01 1.5453e-01 1.1271e-01 3.5101e+03 1.6106e+03 5.6310e+04 4.9277e+02 5.9717e+01 1.0141e+03 7.8386e-05 1.7132e-05 3.2929e-04 2.0778e-01 7.9222e-01 0.0000e+00 8.6597e-01 1.3403e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.4000e+00 8.0200e+06 5.8315e+02 3.3492e+03 6.4979e-08 7.3868e-01 1.4861e-01 1.1271e-01 3.5394e+03 1.6913e+03 5.6319e+04 4.9114e+02 6.1844e+01 1.0143e+03 7.8016e-05 1.7263e-05 3.2929e-04 2.1811e-01 7.8189e-01 0.0000e+00 8.6923e-01 1.3077e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.4200e+00 8.4160e+06 5.8315e+02 3.4330e+03 5.9949e-08 7.4422e-01 1.4307e-01 1.1271e-01 3.5688e+03 1.7717e+03 5.6329e+04 4.8951e+02 6.3983e+01 1.0145e+03 7.7640e-05 1.7391e-05 3.2929e-04 2.2831e-01 7.7169e-01 0.0000e+00 8.7211e-01 1.2789e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.4400e+00 8.8120e+06 5.8315e+02 3.5124e+03 5.5632e-08 7.4946e-01 1.3783e-01 1.1271e-01 3.5984e+03 1.8519e+03 5.6338e+04 4.8787e+02 6.6135e+01 1.0146e+03 7.7258e-05 1.7517e-05 3.2929e-04 2.3840e-01 7.6160e-01 0.0000e+00 8.7467e-01 1.2533e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.4600e+00 9.2080e+06 5.8315e+02 3.5880e+03 5.1902e-08 7.5444e-01 1.3285e-01 1.1271e-01 3.6282e+03 1.9319e+03 5.6347e+04 4.8623e+02 6.8299e+01 1.0148e+03 7.6869e-05 1.7641e-05 3.2929e-04 2.4838e-01 7.5162e-01 0.0000e+00 8.7695e-01 1.2305e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.4800e+00 9.6040e+06 5.8315e+02 3.6601e+03 4.8659e-08 7.5920e-01 1.2809e-01 1.1271e-01 3.6581e+03 2.0115e+03 5.6356e+04 4.8457e+02 7.0476e+01 1.0150e+03 7.6475e-05 1.7765e-05 3.2929e-04 2.5824e-01 7.4176e-01 0.0000e+00 8.7898e-01 1.2102e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.5000e+00 1.0000e+07 5.8315e+02 3.7291e+03 4.5824e-08 7.6378e-01 1.2351e-01 1.1271e-01 3.6882e+03 2.0910e+03 5.6366e+04 4.8291e+02 7.2665e+01 1.0151e+03 7.6075e-05 1.7888e-05 3.2929e-04 2.6799e-01 7.3201e-01 0.0000e+00 8.8078e-01 1.1922e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.5200e+00 1.1000e+07 5.8315e+02 3.8922e+03 4.0073e-08 7.7474e-01 1.1254e-01 1.1271e-01 3.7648e+03 2.2903e+03 5.6389e+04 4.7869e+02 7.8250e+01 1.0156e+03 7.5043e-05 1.8197e-05 3.2929e-04 2.9214e-01 7.0786e-01 0.0000e+00 8.8451e-01 1.1549e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.5400e+00 1.2000e+07 5.8315e+02 4.0423e+03 3.5793e-08 7.8515e-01 1.0214e-01 1.1271e-01 3.8426e+03 2.4877e+03 5.6412e+04 4.7441e+02 8.3920e+01 1.0160e+03 7.3984e-05 1.8510e-05 3.2929e-04 3.1562e-01 6.8438e-01 0.0000e+00 8.8727e-01 1.1273e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.5600e+00 1.3000e+07 5.8315e+02 4.1824e+03 3.2518e-08 7.9527e-01 9.2016e-02 1.1271e-01 3.9214e+03 2.6831e+03 5.6436e+04 4.7007e+02 8.9678e+01 1.0164e+03 7.2901e-05 1.8830e-05 3.2929e-04 3.3847e-01 6.6153e-01 0.0000e+00 8.8925e-01 1.1075e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.5800e+00 1.4000e+07 5.8315e+02 4.3149e+03 2.9952e-08 8.0535e-01 8.1944e-02 1.1271e-01 4.0014e+03 2.8763e+03 5.6459e+04 4.6568e+02 9.5527e+01 1.0168e+03 7.1797e-05 1.9161e-05 3.2929e-04 3.6073e-01 6.3927e-01 0.0000e+00 8.9060e-01 1.0940e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.6000e+00 1.5000e+07 5.8315e+02 4.4414e+03 2.7899e-08 8.1555e-01 7.1735e-02 1.1271e-01 4.0824e+03 3.0673e+03 5.6483e+04 4.6121e+02 1.0147e+02 1.0173e+03 7.0674e-05 1.9505e-05 3.2929e-04 3.8242e-01 6.1758e-01 0.0000e+00 8.9143e-01 1.0857e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.6200e+00 1.6000e+07 5.8315e+02 4.5631e+03 2.6223e-08 8.2607e-01 6.1222e-02 1.1271e-01 4.1647e+03 3.2559e+03 5.6506e+04 4.5668e+02 1.0752e+02 1.0177e+03 6.9535e-05 1.9866e-05 3.2929e-04 4.0358e-01 5.9642e-01 0.0000e+00 8.9180e-01 1.0820e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.6400e+00 1.7000e+07 5.8315e+02 4.6810e+03 2.4832e-08 8.3705e-01 5.0240e-02 1.1271e-01 4.2481e+03 3.4420e+03 5.6530e+04 4.5206e+02 1.1367e+02 1.0181e+03 6.8382e-05 2.0245e-05 3.2929e-04 4.2423e-01 5.7577e-01 0.0000e+00 8.9179e-01 1.0821e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.6600e+00 1.8000e+07 5.8315e+02 4.7958e+03 2.3660e-08 8.4867e-01 3.8624e-02 1.1271e-01 4.3328e+03 3.6254e+03 5.6553e+04 4.4735e+02 1.1994e+02 1.0185e+03 6.7214e-05 2.0645e-05 3.2929e-04 4.4441e-01 5.5559e-01 0.0000e+00 8.9142e-01 1.0858e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.6800e+00 1.9000e+07 5.8315e+02 4.9081e+03 2.2657e-08 8.6110e-01 2.6192e-02 1.1271e-01 4.4188e+03 3.8061e+03 5.6576e+04 4.4254e+02 1.2633e+02 1.0189e+03 6.6034e-05 2.1068e-05 3.2929e-04 4.6414e-01 5.3586e-01 0.0000e+00 8.9072e-01 1.0928e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.7000e+00 2.0000e+07 5.8315e+02 5.0183e+03 2.1788e-08 8.7455e-01 1.2742e-02 1.1271e-01 4.5061e+03 3.9839e+03 5.6600e+04 4.3761e+02 1.3286e+02 1.0194e+03 6.4840e-05 2.1517e-05 3.2929e-04 4.8347e-01 5.1653e-01 0.0000e+00 8.8972e-01 1.1028e-01 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.7200e+00 2.1000e+07 5.8315e+02 5.1233e+03 1.5507e-08 8.8729e-01 0.0000e+00 1.1271e-01 4.5927e+03 4.5927e+03 5.6623e+04 4.3410e+02 4.3410e+02 1.0198e+03 6.4038e-05 6.4038e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.7400e+00 2.2000e+07 5.8315e+02 5.2003e+03 1.4379e-08 8.8729e-01 0.0000e+00 1.1271e-01 4.6625e+03 4.6625e+03 5.6647e+04 4.4069e+02 4.4069e+02 1.0202e+03 6.5972e-05 6.5972e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.7600e+00 2.3000e+07 5.8315e+02 5.2730e+03 1.3388e-08 8.8729e-01 0.0000e+00 1.1271e-01 4.7283e+03 4.7283e+03 5.6670e+04 4.4691e+02 4.4691e+02 1.0206e+03 6.7891e-05 6.7891e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.7800e+00 2.4000e+07 5.8315e+02 5.3417e+03 1.2511e-08 8.8729e-01 0.0000e+00 1.1271e-01 4.7905e+03 4.7905e+03 5.6694e+04 4.5280e+02 4.5280e+02 1.0211e+03 6.9797e-05 6.9797e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.8000e+00 2.5000e+07 5.8315e+02 5.4068e+03 1.1730e-08 8.8729e-01 0.0000e+00 1.1271e-01 4.8495e+03 4.8495e+03 5.6717e+04 4.5837e+02 4.5837e+02 1.0215e+03 7.1695e-05 7.1695e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.8200e+00 2.6000e+07 5.8315e+02 5.4686e+03 1.1031e-08 8.8729e-01 0.0000e+00 1.1271e-01 4.9055e+03 4.9055e+03 5.6741e+04 4.6367e+02 4.6367e+02 1.0219e+03 7.3587e-05 7.3587e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.8400e+00 2.7000e+07 5.8315e+02 5.5275e+03 1.0402e-08 8.8729e-01 0.0000e+00 1.1271e-01 4.9589e+03 4.9589e+03 5.6765e+04 4.6872e+02 4.6872e+02 1.0223e+03 7.5475e-05 7.5475e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.8600e+00 2.8000e+07 5.8315e+02 5.5837e+03 9.8334e-09 8.8729e-01 0.0000e+00 1.1271e-01 5.0099e+03 5.0099e+03 5.6788e+04 4.7353e+02 4.7353e+02 1.0228e+03 7.7360e-05 7.7360e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.8800e+00 2.9000e+07 5.8315e+02 5.6374e+03 9.3169e-09 8.8729e-01 0.0000e+00 1.1271e-01 5.0586e+03 5.0586e+03 5.6812e+04 4.7814e+02 4.7814e+02 1.0232e+03 7.9245e-05 7.9245e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.9000e+00 3.0000e+07 5.8315e+02 5.6888e+03 8.8460e-09 8.8729e-01 0.0000e+00 1.1271e-01 5.1052e+03 5.1052e+03 5.6835e+04 4.8254e+02 4.8254e+02 1.0236e+03 8.1131e-05 8.1131e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.9200e+00 3.1000e+07 5.8315e+02 5.7381e+03 8.4151e-09 8.8729e-01 0.0000e+00 1.1271e-01 5.1499e+03 5.1499e+03 5.6859e+04 4.8677e+02 4.8677e+02 1.0240e+03 8.3018e-05 8.3018e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.9400e+00 3.2000e+07 5.8315e+02 5.7854e+03 8.0196e-09 8.8729e-01 0.0000e+00 1.1271e-01 5.1929e+03 5.1929e+03 5.6882e+04 4.9083e+02 4.9083e+02 1.0245e+03 8.4907e-05 8.4907e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.9600e+00 3.3000e+07 5.8315e+02 5.8309e+03 7.6552e-09 8.8729e-01 0.0000e+00 1.1271e-01 5.2342e+03 5.2342e+03 5.6906e+04 4.9473e+02 4.9473e+02 1.0249e+03 8.6800e-05 8.6800e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +1.9800e+00 3.4000e+07 5.8315e+02 5.8747e+03 7.3187e-09 8.8729e-01 0.0000e+00 1.1271e-01 5.2739e+03 5.2739e+03 5.6930e+04 4.9849e+02 4.9849e+02 1.0253e+03 8.8696e-05 8.8696e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 +2.0000e+00 3.5000e+07 5.8315e+02 5.9169e+03 7.0071e-09 8.8729e-01 0.0000e+00 1.1271e-01 5.3122e+03 5.3122e+03 5.6953e+04 5.0211e+02 5.0211e+02 1.0257e+03 9.0597e-05 9.0597e-05 3.2929e-04 5.0000e-01 5.0000e-01 0.0000e+00 9.1515e-01 8.4850e-02 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 diff --git a/src/coreComponents/unitTests/fieldSpecificationTests/testAquiferBoundaryCondition.cpp b/src/coreComponents/unitTests/fieldSpecificationTests/testAquiferBoundaryCondition.cpp index 05de91b1a60..e894ca9b92a 100644 --- a/src/coreComponents/unitTests/fieldSpecificationTests/testAquiferBoundaryCondition.cpp +++ b/src/coreComponents/unitTests/fieldSpecificationTests/testAquiferBoundaryCondition.cpp @@ -37,7 +37,7 @@ TEST( FieldSpecification, Aquifer ) AquiferBoundaryCondition & aquiferBC = dynamicCast< AquiferBoundaryCondition & >( *fieldSpecificationManager.createChild( "Aquifer", "aquiferBoundaryCondition" ) ); - // set up the aquifer as in the simulation matched against IX + // set up the aquifer auto & aquiferPorosity = aquiferBC.getReference< real64 >( AquiferBoundaryCondition::viewKeyStruct::aquiferPorosityString() ); aquiferPorosity = 2e-1; @@ -89,7 +89,7 @@ TEST( FieldSpecification, Aquifer ) areaFraction, dAquiferVolFlux_dPres ); - // observed flux value in the simulation matched against IX + // observed flux value real64 const refAquiferVolFlux = -0.2043541482797776; ASSERT_NEAR( refAquiferVolFlux, aquiferVolFlux, 1e-10 );