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 );